diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml
index 5adc552b0..2a630760f 100644
--- a/.github/workflows/build.yml
+++ b/.github/workflows/build.yml
@@ -5,6 +5,10 @@ on:
push:
tags:
- "*"
+ # The font bundle ships as its own release, in a separate tag namespace so
+ # it does not appear among the browser downloads. Those tags must not
+ # trigger a browser build (see scripts/fetch-fonts.py).
+ - "!font-bundle-*"
jobs:
build:
@@ -86,7 +90,25 @@ jobs:
sudo apt-get update
# ccache: the mozconfig enables --with-ccache, but the runner image no
# longer ships it, so configure fails with "Cannot find ccache".
- sudo apt-get install -y msitools p7zip-full aria2 ccache
+ # fontconfig: scripts/verify-fonts.py resolves every reportable family
+ # through fc-list/fc-match, so the bundle is checked with the same tool
+ # the browser uses rather than assumed correct.
+ sudo apt-get install -y msitools p7zip-full aria2 ccache fontconfig
+
+ - name: Fetch the font bundle
+ # The bundle is a release asset, not repo content (~2.16 GB extracted,
+ # 843 MB as .tar.xz -- see scripts/fetch-fonts.py). Without this the
+ # package would ship with NO fonts while pythonlib/camoufox/fonts.json
+ # still reports hundreds of families, which is a reverse leak in the
+ # shipped browser. After the dependency install, so the download uses
+ # aria2c's parallel connections rather than the curl fallback.
+ run: make fonts-extract
+
+ - name: Verify the font bundle matches the manifest
+ # Full run, not --quick: this is the release path, and the one invariant
+ # that cannot be recovered after publishing is a family fonts.json
+ # reports that the packaged fontconfig cannot resolve.
+ run: python3 scripts/verify-fonts.py
- name: Fetch source
env:
diff --git a/.github/workflows/tests.yml b/.github/workflows/tests.yml
index 7f64af2a4..c42f14eb2 100644
--- a/.github/workflows/tests.yml
+++ b/.github/workflows/tests.yml
@@ -226,7 +226,13 @@ jobs:
python-version: ${{ env.PYTHON_VERSION }}
# -e pythonlib because the settled-decisions tests import camoufox.* to
# assert against it. It is a pure-Python install; no browser involved.
- - run: pip install -r ci/requirements.txt pytest -e pythonlib
+ - run: |
+ pip install -r ci/requirements.txt pytest -e pythonlib
+ # fpgen downloads its model on first import with TLS verification
+ # OFF and no checksum, and its release picker can only ever reach the
+ # April-2025 model. Install the pinned one first: see
+ # scripts/pin-fpgen-model.py.
+ python3 scripts/pin-fpgen-model.py
- name: Synthesized input goes through one chokepoint
run: python3 scripts/check-input-dispatch.py
@@ -278,7 +284,13 @@ jobs:
- uses: actions/setup-python@v5
with:
python-version: ${{ env.PYTHON_VERSION }}
- - run: pip install -r ci/requirements.txt pytest -e pythonlib
+ - run: |
+ pip install -r ci/requirements.txt pytest -e pythonlib
+ # fpgen downloads its model on first import with TLS verification
+ # OFF and no checksum, and its release picker can only ever reach the
+ # April-2025 model. Install the pinned one first: see
+ # scripts/pin-fpgen-model.py.
+ python3 scripts/pin-fpgen-model.py
- name: Run
# pythonlib resolves the published release through the GitHub API
# (pkgman.py honours GITHUB_TOKEN). Unauthenticated, a runner shares the
@@ -470,7 +482,11 @@ jobs:
# Fail here, once, rather than in five browser jobs with five
# different confusing errors.
- for required in camoufox-bin properties.json camoufox.cfg fonts/linux fontconfig/linux; do
+ # fonts/ holds the bundle's group directories (L, M, W, LM, ... --
+ # bundle/fonts/groups.json), not a copy per OS; groups.json is what
+ # utils._generate_fontconfig reads to decide which of them an identity
+ # may see, so its absence is the failure that matters.
+ for required in camoufox-bin properties.json camoufox.cfg fonts/groups.json fonts/LMW fontconfig/linux; do
[ -e "$src/$required" ] || { echo "::error::artifact is missing $required"; exit 1; }
done
@@ -569,7 +585,13 @@ jobs:
- uses: actions/setup-python@v5
with:
python-version: ${{ env.PYTHON_VERSION }}
- - run: pip install -r ci/requirements.txt -e pythonlib
+ - run: |
+ pip install -r ci/requirements.txt -e pythonlib
+ # fpgen downloads its model on first import with TLS verification
+ # OFF and no checksum, and its release picker can only ever reach the
+ # April-2025 model. Install the pinned one first: see
+ # scripts/pin-fpgen-model.py.
+ python3 scripts/pin-fpgen-model.py
- name: Download
# Same GitHub API path as the pythonlib job above, and the same anonymous
@@ -686,7 +708,13 @@ jobs:
- uses: ./.github/actions/prepare-browser
with:
python-version: ${{ env.PYTHON_VERSION }}
- - run: pip install -e pythonlib
+ - run: |
+ pip install -e pythonlib
+ # fpgen downloads its model on first import with TLS verification
+ # OFF and no checksum, and its release picker can only ever reach the
+ # April-2025 model. Install the pinned one first: see
+ # scripts/pin-fpgen-model.py.
+ python3 scripts/pin-fpgen-model.py
# Fonts and properties.json are staged into the artifact by the build job;
# `make stage-fonts` here would find no source tree and do nothing.
- run: xvfb-run -a python3 -m ci.run_patch_guards --binary "$CAMOUFOX_BINARY"
@@ -730,6 +758,13 @@ jobs:
python-version: ${{ env.PYTHON_VERSION }}
- run: |
cd build-tester && npm install && pip install -r requirements.txt
+ # build-tester pulls pythonlib -- and so fpgen -- through its own
+ # requirements.txt (`-e ../pythonlib`) rather than `pip install -e
+ # pythonlib`, so the pin the other jobs get by matching that line has
+ # to be spelled out here. Without it this job was still downloading
+ # fpgen's model itself: TLS verification off, no checksum, and only
+ # ever the April-2025 release (observed in run 36050915401).
+ python3 "$GITHUB_WORKSPACE/scripts/pin-fpgen-model.py"
- run: xvfb-run -a python3 -m ci.run_build_tester --binary "$CAMOUFOX_BINARY"
- uses: actions/upload-artifact@v4
if: always()
@@ -767,7 +802,13 @@ jobs:
- uses: ./.github/actions/prepare-browser
with:
python-version: ${{ env.PYTHON_VERSION }}
- - run: pip install -e pythonlib
+ - run: |
+ pip install -e pythonlib
+ # fpgen downloads its model on first import with TLS verification
+ # OFF and no checksum, and its release picker can only ever reach the
+ # April-2025 model. Install the pinned one first: see
+ # scripts/pin-fpgen-model.py.
+ python3 scripts/pin-fpgen-model.py
- name: Run
# Launches browsers, kills them, and proves nothing survived -- the
# failure a long-running scraper hits after six hours and no Playwright
@@ -824,7 +865,13 @@ jobs:
- uses: ./.github/actions/prepare-browser
with:
python-version: ${{ env.PYTHON_VERSION }}
- - run: pip install -e pythonlib
+ - run: |
+ pip install -e pythonlib
+ # fpgen downloads its model on first import with TLS verification
+ # OFF and no checksum, and its release picker can only ever reach the
+ # April-2025 model. Install the pinned one first: see
+ # scripts/pin-fpgen-model.py.
+ python3 scripts/pin-fpgen-model.py
- run: xvfb-run -a python3 -m ci.run_native --subset growth --binary "$CAMOUFOX_BINARY"
- uses: actions/upload-artifact@v4
if: always()
@@ -850,7 +897,13 @@ jobs:
- uses: ./.github/actions/prepare-browser
with:
python-version: ${{ env.PYTHON_VERSION }}
- - run: pip install -e pythonlib
+ - run: |
+ pip install -e pythonlib
+ # fpgen downloads its model on first import with TLS verification
+ # OFF and no checksum, and its release picker can only ever reach the
+ # April-2025 model. Install the pinned one first: see
+ # scripts/pin-fpgen-model.py.
+ python3 scripts/pin-fpgen-model.py
- name: Run
# Exits 0 with a SKIP result if sundial itself is unreachable -- the
# browser was never measured, so neither a pass nor a failure would be
diff --git a/.gitignore b/.gitignore
index abe736224..c0ac6560d 100644
--- a/.gitignore
+++ b/.gitignore
@@ -15,6 +15,17 @@ pythonlib/test*
jsonvv/test*
/.vscode
/bundle/fonts/extra
+
+# The font bundle is a release asset, not repo content: ~2.1 GB extracted,
+# ~770 MB as .tar.xz, and an xz archive cannot be delta-compressed, so tracking
+# it would append the whole thing to history on every font change. It is pinned
+# by scripts/data/font-bundle.json (asset name + size + sha256) and fetched with
+# `make fetch-fonts`. Only the compressed archive is kept; bundle/fonts/ is
+# extracted on demand.
+/bundle/fonts/
+/bundle/fonts-bundle-*.tar.xz
+/bundle/*.tar.xz.part
+/bundle/langpacks/
pythonlib/*.png
scripts/*.png
scripts/test*
diff --git a/CLAUDE.md b/CLAUDE.md
index 21ef08523..936eb513e 100644
--- a/CLAUDE.md
+++ b/CLAUDE.md
@@ -49,11 +49,11 @@ Low-level equivalents: `make patch ./patches/x.patch`, `make unpatch ./patches/x
- **`patches/`** — the diffs applied to Firefox source. This is where browser behavior is changed.
- **`additions/`** — whole files copied *into* the source tree (not diffs) by `scripts/copy-additions.sh`:
- - `additions/camoucfg/` — the C++ config layer. `MaskConfig.hpp` reads the spoofing config (from `CAMOU_CONFIG` env var / `camoufox.cfg`) that the patches consult at the C++ level; `MouseTrajectories.hpp` is the human-cursor algorithm.
+ - `additions/camoucfg/` — the C++ config layer. `MaskConfig.hpp` reads the spoofing config (from `CAMOU_CONFIG` env var / `camoufox.cfg`) that the patches consult at the C++ level. (The human-cursor algorithm used to live here too; it is now `additions/juggler/input/CursorTrajectory.js` and the vendored Cursory beside it.)
- `additions/juggler/` — Camoufox's patched **Juggler** (Firefox's Playwright automation protocol, the Firefox analog of CDP). This is where Playwright is made undetectable — the page agent runs in an isolated scope so injected automation JS is not visible to the page.
- **`settings/`** — `camoufox.cfg`, `chrome.css`, `properties.json`, `camoucfg.jvv`, prefs/policies. Copied into the source's `lw/` dir by `copy-additions.sh`. Edit the built config with `make edit-cfg`.
- **`scripts/`** — `patch.py` (the patcher, LibreWolf-derived), `developer.py` (the `make edits` UI), `package.py`, `copy-additions.sh`, `install-deps.sh`.
-- **`pythonlib/`** — the `camoufox` PyPI package: the Playwright-compatible Python interface that generates + injects fingerprints via BrowserForge and launches the binary. `fingerprint-presets-v150.json` holds real scraped fingerprints. This is the user-facing API; the browser binary is the backend.
+- **`pythonlib/`** — the `camoufox` PyPI package: the Playwright-compatible Python interface that generates + injects fingerprints via [fpgen](https://github.com/scrapfly/fingerprint-generator) and launches the binary. `fingerprint-presets-v150.json` holds real scraped fingerprints; `coherence.py` checks the assembled identity (the pools are sampled independently, so an impossible machine can be built from individually plausible parts), and `scripts/clean-fingerprint-data.py` applies the same rules to the shipped data files. This is the user-facing API; the browser binary is the backend.
- **`jsonvv/`** — JSON-with-validation format library used for `camoucfg.jvv` (config schema).
- **`legacy/launcher/`** — Go launcher binary.
- **`assets/`** — `base.mozconfig` and other build inputs.
diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md
index f619a2d0d..48cd46b7c 100644
--- a/CONTRIBUTING.md
+++ b/CONTRIBUTING.md
@@ -71,7 +71,7 @@ See [`build-tester/README.md`](build-tester/README.md) for full details.
### service-tester
-Tests the **full stack** — the binary and the Python package together — using only the public `AsyncNewContext` API. Fingerprints are generated entirely by camoufox/browserforge with no manual injection. Real proxies are required; the WebRTC IP and timezone are auto-derived from each proxy's exit IP. This is a black-box trust test: if it fails, the fix belongs in the Python package, not in the test.
+Tests the **full stack** — the binary and the Python package together — using only the public `AsyncNewContext` API. Fingerprints are generated entirely by camoufox/fpgen with no manual injection. Real proxies are required; the WebRTC IP and timezone are auto-derived from each proxy's exit IP. This is a black-box trust test: if it fails, the fix belongs in the Python package, not in the test.
**Run this when you change:** `pythonlib/` (fingerprint generation, `AsyncNewContext`, `NewContext`), proxy handling, or any behaviour that affects how the Python package interacts with the binary.
diff --git a/Makefile b/Makefile
index 9b9b161f3..e0590465e 100644
--- a/Makefile
+++ b/Makefile
@@ -8,7 +8,7 @@ debs := python3 python3-dev python3-pip p7zip-full golang-go msitools wget aria2
rpms := python3 python3-devel p7zip golang msitools wget aria2 sqlite-devel
pacman := python python-pip p7zip go msitools wget aria2 sqlite
-.PHONY: help fetch setup setup-minimal clean set-target distclean build package \
+.PHONY: help fetch fetch-fonts fonts-extract fonts-check fonts-clean setup setup-minimal clean set-target distclean build package \
build-launcher check-arch revert edits run bootstrap mozbootstrap dir \
package-linux package-macos package-windows vcredist_arch patch unpatch \
workspace check-arg edit-cfg ff-dbg tests update-ubo-assets generate-assets-car \
@@ -81,6 +81,23 @@ ff-dbg: setup
revert:
cd $(cf_source_dir) && git reset --hard unpatched
+# The font bundle is a release asset, not repo content (see
+# scripts/fetch-fonts.py for why). fetch-fonts downloads and verifies the
+# archive; fonts-extract unpacks it to bundle/fonts/, which every font tool and
+# `make package-*` needs. Both are no-ops once satisfied, so they are cheap to
+# depend on.
+fetch-fonts:
+ python3 scripts/fetch-fonts.py
+
+fonts-extract:
+ python3 scripts/fetch-fonts.py --extract
+
+fonts-check:
+ python3 scripts/fetch-fonts.py --check
+
+fonts-clean:
+ python3 scripts/fetch-fonts.py --clean
+
dir:
@if [ ! -d $(cf_source_dir) ]; then \
make setup; \
@@ -154,7 +171,7 @@ check-arch:
build-launcher: check-arch
cd legacy/launcher && bash build.sh $(arch) $(os)
-package-linux:
+package-linux: fonts-extract
python3 scripts/package.py linux \
--includes \
settings/chrome.css \
@@ -166,7 +183,7 @@ package-linux:
--arch $(arch) \
--fonts windows macos linux
-package-macos:
+package-macos: fonts-extract
python3 scripts/package.py macos \
--includes \
settings/chrome.css \
@@ -175,9 +192,9 @@ package-macos:
--version $(version) \
--release $(release) \
--arch $(arch) \
- --fonts windows linux
+ --fonts windows macos linux
-package-windows:
+package-windows: fonts-extract
python3 scripts/package.py windows \
--includes \
settings/chrome.css \
@@ -187,7 +204,7 @@ package-windows:
--version $(version) \
--release $(release) \
--arch $(arch) \
- --fonts macos linux
+ --fonts windows macos linux
run-launcher:
rm -rf $(cf_source_dir)/obj-x86_64-pc-linux-gnu/dist/bin/launch;
@@ -254,7 +271,12 @@ tests:
# Lets tests/patches/*.py run against an unpackaged build. Not needed by `run`
# or `tests`, which launch without the Python wrapper and so fall back to the
# system fontconfig.
-stage-fonts:
+#
+# Depends on fonts-extract because the bundle is a release asset: a fresh
+# checkout has no bundle/fonts/ to stage from. That is a no-op once the tree is
+# unpacked (fetch-fonts.py stamps it with the archive's sha256), so this stays
+# cheap enough to run before every launch.
+stage-fonts: fonts-extract
bash scripts/stage-fonts.sh $(version) $(release)
unbusy:
diff --git a/README.md b/README.md
index 8fbaea1d4..380cfba16 100644
--- a/README.md
+++ b/README.md
@@ -510,7 +510,11 @@ Anti-bot systems also run client-side scripts to monitor your behavior. For exam
-Camoufox tries its best with its human-like mouse movement algorithm. The natural motion algorithm was originally from [riflosnake's HumanCursor](https://github.com/riflosnake/HumanCursor) and has been rewritten in C++ and modified for more distance-aware trajectories.
+Camoufox does not draw its cursor paths. With `humanize=True` it uses [**Cursory**](https://github.com/Vinyzu/cursory) by [Vinyzu](https://github.com/Vinyzu), which holds 2357 mouse movements recorded from real people: it picks a recording whose direction, distance and wander suit the move being made, morphs it onto the requested start and end points, and replays it with that recording's own timing — pauses, overshoots and all.
+
+That last part matters as much as the shape. Camoufox previously walked a Bézier curve through two random knots and emitted a point every 10ms. Both halves of that are tells: an analytic curve sampled at a fixed rate has velocity and jerk profiles that separate cleanly from a hand's, and the acceleration came entirely from one easing function, so every movement Camoufox ever made sped up and slowed down the same way. A replayed recording has neither property.
+
+Camoufox ships [cursory-js](https://github.com/JWriter20/cursory-js), a TypeScript port of Cursory, vendored into Juggler at `additions/juggler/input/cursory/`. It reproduces the Python original bit for bit, so a path can be reproduced against `pip install cursory`. **Cursory is LGPLv3-or-later, not MPL-2.0 like the rest of Camoufox**; its licence and full provenance are in `additions/juggler/input/cursory/NOTICE`.
However, this isn't perfect. It may still be detected with sophisticated enough analysis. (WIP for the future)
@@ -801,7 +805,8 @@ Debloating & references:
Web scraping & testing:
-- [riflosnake/HumanCursor](https://github.com/riflosnake/HumanCursor): Original human-like cursor movement algorithm, ported to C++
+- [Vinyzu/cursory](https://github.com/Vinyzu/cursory): The recorded human mouse trajectories behind `humanize=True`, vendored via [cursory-js](https://github.com/JWriter20/cursory-js) (LGPLv3-or-later — see `additions/juggler/input/cursory/NOTICE`)
+- [riflosnake/HumanCursor](https://github.com/riflosnake/HumanCursor): The Bézier cursor algorithm Camoufox used before Cursory
- [CreepJS](https://github.com/abrahamjuliot/creepjs), [Browserleaks](https://browserleaks.com), [BrowserScan](https://www.browserscan.net/) - Valuable leak testing sites
UI theming:
diff --git a/additions/browser/base/content/aboutDialog.js b/additions/browser/base/content/aboutDialog.js
index 003dfd943..b6bfa8634 100644
--- a/additions/browser/base/content/aboutDialog.js
+++ b/additions/browser/base/content/aboutDialog.js
@@ -4,10 +4,13 @@
"use strict";
- // Services = object with smart getters for common XPCOM services
- var { Services } = ChromeUtils.import("resource://gre/modules/Services.jsm");
- var { AppConstants } = ChromeUtils.import(
- "resource://gre/modules/AppConstants.jsm"
+ // Services is a chrome global; importing it declared an extra page-visible
+ // name, and resource://gre/modules/Services.jsm no longer exists in Firefox
+ // 152, so that line threw. chrome://browser/content/ is contentaccessible, so
+ // the declarations here must match stock's (guard:
+ // tests/patches/contentaccessible-parity.py).
+ var { AppConstants } = ChromeUtils.importESModule(
+ "resource://gre/modules/AppConstants.sys.mjs"
);
async function init(aEvent) {
diff --git a/additions/browser/branding/camoufox/content/about-logo.svg b/additions/browser/branding/camoufox/content/about-logo.svg
index 327b8627b..c382310ec 100644
--- a/additions/browser/branding/camoufox/content/about-logo.svg
+++ b/additions/browser/branding/camoufox/content/about-logo.svg
@@ -1 +1 @@
-
+
\ No newline at end of file
diff --git a/additions/browser/branding/camoufox/content/about-wordmark.svg b/additions/browser/branding/camoufox/content/about-wordmark.svg
index 19da8374d..f54834ca1 100644
--- a/additions/browser/branding/camoufox/content/about-wordmark.svg
+++ b/additions/browser/branding/camoufox/content/about-wordmark.svg
@@ -1 +1,8 @@
-
+
+
diff --git a/additions/browser/branding/camoufox/content/aboutDialog.css b/additions/browser/branding/camoufox/content/aboutDialog.css
index e69de29bb..4413027a5 100644
--- a/additions/browser/branding/camoufox/content/aboutDialog.css
+++ b/additions/browser/branding/camoufox/content/aboutDialog.css
@@ -0,0 +1,35 @@
+/* This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
+
+@media not ((prefers-contrast) and (prefers-color-scheme: light)) {
+ #aboutDialogContainer {
+ background-color: #20123a;
+ color: #fff;
+ color-scheme: dark;
+ }
+
+ #bottomBox {
+ background-color: hsla(235, 43%, 10%, 0.5);
+ }
+
+ #trademark {
+ color: #999999;
+ }
+}
+
+#rightBox {
+ background-size: auto 44px;
+ margin-inline: 30px;
+ padding-top: 76px;
+}
+
+#bottomBox {
+ padding: 15px 10px;
+}
+
+#trademark {
+ font-size: xx-small;
+ text-align: center;
+ margin-block: 10px;
+}
diff --git a/additions/browser/branding/camoufox/content/document_pdf.svg b/additions/browser/branding/camoufox/content/document_pdf.svg
new file mode 100644
index 000000000..ada2b7aa9
--- /dev/null
+++ b/additions/browser/branding/camoufox/content/document_pdf.svg
@@ -0,0 +1,12 @@
+
+
\ No newline at end of file
diff --git a/additions/browser/branding/camoufox/content/firefox-wordmark.svg b/additions/browser/branding/camoufox/content/firefox-wordmark.svg
index 5b1dce52b..9dbbba89f 100644
--- a/additions/browser/branding/camoufox/content/firefox-wordmark.svg
+++ b/additions/browser/branding/camoufox/content/firefox-wordmark.svg
@@ -1 +1,7 @@
-
+
+
\ No newline at end of file
diff --git a/additions/browser/branding/camoufox/content/jar.mn b/additions/browser/branding/camoufox/content/jar.mn
index 69e19cf53..e4894296d 100644
--- a/additions/browser/branding/camoufox/content/jar.mn
+++ b/additions/browser/branding/camoufox/content/jar.mn
@@ -8,7 +8,11 @@ browser.jar:
content/branding/about-logo.png
content/branding/about-logo.svg
content/branding/about-logo@2x.png
+ content/branding/about-logo-private.png
+ content/branding/about-logo-private@2x.png
content/branding/about-wordmark.svg
+ content/branding/document.ico (../document.ico)
+ content/branding/document_pdf.svg
content/branding/firefox-wordmark.svg
content/branding/icon16.png (../default16.png)
content/branding/icon32.png (../default32.png)
diff --git a/additions/browser/branding/camoufox/document.ico b/additions/browser/branding/camoufox/document.ico
index 2f4cdd6a0..fcec7dc15 100644
Binary files a/additions/browser/branding/camoufox/document.ico and b/additions/browser/branding/camoufox/document.ico differ
diff --git a/additions/camoucfg/MouseTrajectories.hpp b/additions/camoucfg/MouseTrajectories.hpp
deleted file mode 100644
index 10b6a105b..000000000
--- a/additions/camoucfg/MouseTrajectories.hpp
+++ /dev/null
@@ -1,236 +0,0 @@
-#include
-#include
-#include
-#include
-#include
-#include
-#include "MaskConfig.hpp"
-
-/**
- * Human-like mouse movement generator. Ported from:
- * https://github.com/riflosnake/HumanCursor/blob/main/humancursor/utilities/human_curve_generator.py
- * Modified to use a more human-like easing function.
- */
-
-class BezierCalculator {
- public:
- static long long factorial(int n) {
- if (n < 0) return -1; // Indicate error
- long long result = 1;
- for (int i = 2; i <= n; i++) result *= i;
- return result;
- }
-
- static double binomial(int n, int k) {
- return static_cast(factorial(n)) /
- (factorial(k) * factorial(n - k));
- }
-
- static double bernsteinPolynomialPoint(double x, int i, int n) {
- return binomial(n, i) * std::pow(x, i) * std::pow(1 - x, n - i);
- }
-
- static std::vector bernsteinPolynomial(
- const std::vector>& points, double t) {
- int n = static_cast(points.size()) - 1;
- double x = 0.0;
- double y = 0.0;
- for (int i = 0; i <= n; i++) {
- double bern = bernsteinPolynomialPoint(t, i, n);
- x += points[i].first * bern;
- y += points[i].second * bern;
- }
- return {x, y};
- }
-
- static std::vector> calculatePointsInCurve(
- int nPoints, const std::vector>& points) {
- std::vector> curvePoints;
- for (int i = 0; i < nPoints; i++) {
- double t = static_cast(i) / (nPoints - 1);
- curvePoints.push_back(bernsteinPolynomial(points, t));
- }
- return curvePoints;
- }
-};
-
-class HumanizeMouseTrajectory {
- public:
- HumanizeMouseTrajectory(const std::pair& fromPoint,
- const std::pair& toPoint)
- : fromPoint(fromPoint), toPoint(toPoint) {
- generateCurve();
- }
-
- std::vector getPoints() const {
- std::vector flatPoints;
- flatPoints.reserve(points.size() * 2);
-
- for (const auto& point : points) {
- flatPoints.push_back(static_cast(std::round(point[0])));
- flatPoints.push_back(static_cast(std::round(point[1])));
- }
-
- return flatPoints;
- }
-
- private:
- std::pair fromPoint;
- std::pair toPoint;
- std::vector> points;
-
- void generateCurve() {
- double leftBoundary = std::min(fromPoint.first, toPoint.first) - 80.0;
- double rightBoundary = std::max(fromPoint.first, toPoint.first) + 80.0;
- double downBoundary = std::min(fromPoint.second, toPoint.second) - 80.0;
- double upBoundary = std::max(fromPoint.second, toPoint.second) + 80.0;
-
- std::vector> internalKnots =
- generateInternalKnots(leftBoundary, rightBoundary, downBoundary,
- upBoundary, 2);
-
- std::vector> curvePoints =
- generatePoints(internalKnots);
- curvePoints = distortPoints(curvePoints, 1.0, 1.0, 0.5);
- points = tweenPoints(curvePoints);
- }
-
- double easeOutQuad(double n) const {
- assert(n >= 0.0 && n <= 1.0 && "Argument must be between 0.0 and 1.0.");
- return -n * (n - 2);
- }
-
- std::vector> generateInternalKnots(
- double lBoundary, double rBoundary, double dBoundary, double uBoundary,
- int knotsCount) const {
- assert(isNumeric(lBoundary) && isNumeric(rBoundary) &&
- isNumeric(dBoundary) && isNumeric(uBoundary) &&
- "Boundaries must be numeric values");
- assert(knotsCount >= 0 && "knotsCount must be non-negative");
- assert(lBoundary <= rBoundary &&
- "Left boundary must be less than or equal to right boundary");
- assert(dBoundary <= uBoundary &&
- "Down boundary must be less than or equal to upper boundary");
-
- std::vector knotsX =
- randomChoiceDoubles(lBoundary, rBoundary, knotsCount);
- std::vector knotsY =
- randomChoiceDoubles(dBoundary, uBoundary, knotsCount);
-
- std::vector> knots;
- for (int i = 0; i < knotsCount; i++) {
- knots.emplace_back(knotsX[i], knotsY[i]);
- }
- return knots;
- }
-
- std::vector randomChoiceDoubles(double min, double max,
- int size) const {
- std::vector choices;
- std::uniform_real_distribution dist(min, max);
- for (int i = 0; i < size; i++) {
- choices.push_back(dist(randomEngine));
- }
- return choices;
- }
-
- std::vector> generatePoints(
- const std::vector>& knots) const {
- assert(isListOfPoints(knots) && "Knots must be a valid list of points");
- int midPtsCnt = static_cast(
- std::max({std::abs(fromPoint.first - toPoint.first),
- std::abs(fromPoint.second - toPoint.second), 2.0}));
- std::vector> controlPoints = knots;
- controlPoints.insert(controlPoints.begin(), fromPoint);
- controlPoints.push_back(toPoint);
- return BezierCalculator::calculatePointsInCurve(midPtsCnt, controlPoints);
- }
-
- std::vector> distortPoints(
- const std::vector>& points, double distortionMean,
- double distortionStDev, double distortionFrequency) const {
- assert(isNumeric(distortionMean) && isNumeric(distortionStDev) &&
- isNumeric(distortionFrequency) && "Distortions must be numeric");
- assert(isListOfPoints(points) && "Points must be a valid list of points");
- assert(0.0 <= distortionFrequency && distortionFrequency <= 1.0 &&
- "distortion_frequency must be in range [0,1]");
-
- std::vector> distorted;
- distorted.push_back(points.front());
-
- std::normal_distribution normalDist(distortionMean,
- distortionStDev);
- std::uniform_real_distribution uniformDist(0.0, 1.0);
-
- for (size_t i = 1; i < points.size() - 1; i++) {
- double x = points[i][0];
- double y = points[i][1];
- double delta = 0.0;
- if (uniformDist(randomEngine) < distortionFrequency) {
- delta = std::round(normalDist(randomEngine));
- }
- distorted.push_back({x, y + delta});
- }
- distorted.push_back(points.back());
- return distorted;
- }
-
- int32_t getMaxTime() const {
- if (auto maxTime = MaskConfig::GetDouble("humanize:maxTime")) {
- return static_cast(maxTime.value() * 100);
- }
- return 150;
- }
-
- int32_t getMinTime() const {
- if (auto minTime = MaskConfig::GetDouble("humanize:minTime")) {
- return static_cast(minTime.value() * 100);
- }
- return 0;
- }
-
- std::vector> tweenPoints(
- const std::vector>& points) const {
- assert(isListOfPoints(points) && "List of points not valid");
-
- double totalLength = 0.0;
- for (size_t i = 1; i < points.size(); ++i) {
- double dx = points[i][0] - points[i - 1][0];
- double dy = points[i][1] - points[i - 1][1];
- totalLength += std::sqrt(dx * dx + dy * dy);
- }
-
- // Uses a power scale to keep the speed consistent
- int targetPoints = std::min(
- getMaxTime(),
- std::max(getMinTime() + 2, static_cast(std::pow(totalLength, 0.25) * 20)));
-
- std::vector> res;
- for (int i = 0; i < targetPoints; i++) {
- double t = static_cast(i) / (targetPoints - 1);
- double easedT = easeOutQuad(t);
- int index = static_cast(easedT * (points.size() - 1));
- res.push_back(points[index]);
- }
- return res;
- }
-
- bool isNumeric(double val) const { return !std::isnan(val); }
-
- bool isListOfPoints(
- const std::vector>& points) const {
- for (const auto& p : points) {
- if (!isNumeric(p.first) || !isNumeric(p.second)) return false;
- }
- return true;
- }
-
- bool isListOfPoints(const std::vector>& points) const {
- for (const auto& p : points) {
- if (p.size() != 2 || !isNumeric(p[0]) || !isNumeric(p[1])) return false;
- }
- return true;
- }
-
- mutable std::default_random_engine randomEngine{std::random_device{}()};
-};
\ No newline at end of file
diff --git a/additions/camoucfg/moz.build b/additions/camoucfg/moz.build
index 3fe87d2f2..69eb51374 100644
--- a/additions/camoucfg/moz.build
+++ b/additions/camoucfg/moz.build
@@ -9,7 +9,6 @@ with Files("**"):
EXPORTS += [
"MaskConfig.hpp",
- "MouseTrajectories.hpp",
]
LOCAL_INCLUDES += [
diff --git a/additions/juggler/TargetRegistry.js b/additions/juggler/TargetRegistry.js
index 8e7ab1a2c..e2bb65adc 100644
--- a/additions/juggler/TargetRegistry.js
+++ b/additions/juggler/TargetRegistry.js
@@ -33,6 +33,19 @@ const Cr = Components.results;
const helper = new Helper();
const IDENTITY_NAME = 'JUGGLER ';
+
+// Camoufox: every juggler browser context is a Firefox container. A PUBLIC
+// container renders its name ("JUGGLER ") and colour in the URL bar and the
+// tab strip -- a visible automation cue a real Firefox never shows. The
+// userContextId (not the public flag) is what isolates cookies and storage, so
+// keep the identity but mark it non-public: tabbrowser's indicator and the
+// container menus only render public identities. ContextualIdentityService.remove()
+// only deletes public identities, so flip the flag back before removing.
+function setIdentityPublic(userContextId, isPublic) {
+ const record = (ContextualIdentityService._identities || []).find(i => i.userContextId == userContextId);
+ if (record)
+ record.public = isPublic;
+}
const HUNDRED_YEARS = 60 * 60 * 24 * 365 * 100;
// Capture rate for the compositor-backed screencast. Playwright muxes at 25fps
@@ -154,11 +167,14 @@ export class TargetRegistry {
this._browserProxy = null;
// Cleanup containers from previous runs (if any)
- for (const identity of ContextualIdentityService.getPublicIdentities()) {
- if (identity.name && identity.name.startsWith(IDENTITY_NAME)) {
- ContextualIdentityService.remove(identity.userContextId);
- ContextualIdentityService.closeContainerTabs(identity.userContextId);
- }
+ ContextualIdentityService.ensureDataReady();
+ const staleIds = (ContextualIdentityService._identities || [])
+ .filter(identity => identity.name && identity.name.startsWith(IDENTITY_NAME))
+ .map(identity => identity.userContextId);
+ for (const userContextId of staleIds) {
+ setIdentityPublic(userContextId, true);
+ ContextualIdentityService.remove(userContextId);
+ ContextualIdentityService.closeContainerTabs(userContextId);
}
this._defaultContext = new BrowserContext(this, undefined, undefined);
@@ -1166,6 +1182,7 @@ class BrowserContext {
if (browserContextId !== undefined) {
const identity = ContextualIdentityService.create(IDENTITY_NAME + browserContextId);
this.userContextId = identity.userContextId;
+ setIdentityPublic(this.userContextId, false);
}
this._principals = [];
// Maps origins to the permission lists.
@@ -1230,6 +1247,7 @@ class BrowserContext {
async destroy() {
if (this.userContextId !== 0) {
+ setIdentityPublic(this.userContextId, true);
ContextualIdentityService.remove(this.userContextId);
for (const page of this.pages)
page.close();
diff --git a/additions/juggler/components/Juggler.js b/additions/juggler/components/Juggler.js
index 8ce5f9360..62338b08c 100644
--- a/additions/juggler/components/Juggler.js
+++ b/additions/juggler/components/Juggler.js
@@ -96,12 +96,13 @@ export class Juggler {
new NetworkObserver(targetRegistry);
const loadStyleSheet = () => {
- if (Cc["@mozilla.org/gfx/info;1"].getService(Ci.nsIGfxInfo).isHeadless) {
- const styleSheetService = Cc["@mozilla.org/content/style-sheet-service;1"].getService(Components.interfaces.nsIStyleSheetService);
- const ioService = Cc["@mozilla.org/network/io-service;1"].getService(Components.interfaces.nsIIOService);
- const uri = ioService.newURI('chrome://juggler/content/content/hidden-scrollbars.css', null, null);
- styleSheetService.loadAndRegisterSheet(uri, styleSheetService.AGENT_SHEET);
- }
+ // Camoufox: upstream Playwright hides content scrollbars in headless
+ // with an agent sheet (scrollbar-width: none !important). A page can
+ // read that back -- getComputedStyle(document.body).scrollbarWidth is
+ // "none" and overflow:scroll boxes lose their gutter -- and no stock
+ // Firefox does it. Scrollbar appearance is left to the platform
+ // look-and-feel instead (the launcher sets ui.useOverlayScrollbars to
+ // what the claimed OS shows), so headless matches headed.
};
// Force create hidden window here, otherwise its creation later closes the web socket!
diff --git a/additions/juggler/content/PageAgent.js b/additions/juggler/content/PageAgent.js
index b1c0d1538..36d8466ca 100644
--- a/additions/juggler/content/PageAgent.js
+++ b/additions/juggler/content/PageAgent.js
@@ -472,28 +472,64 @@ export class PageAgent {
return {x: x1, y: y1, width: x2 - x1, height: y2 - y1};
}
+ // Camoufox: characters that need Shift on a US layout. A person typing "H"
+ // or "!" presses Shift first, so a real keydown carries shiftKey=true and is
+ // bracketed by Shift keydown/keyup (code ShiftLeft, location 1). Playwright's
+ // keyboard.type() never presses Shift, which was a one-line tell (measured
+ // 2026-09-14: keydown.which never 16, location never 1).
+ _needsShift(text) {
+ return typeof text === 'string' && text.length === 1 && /[A-Z~!@#$%^&*()_+{}|:"<>?]/.test(text);
+ }
+
async _dispatchKeyEvent({type, keyCode, code, key, repeat, location, text}) {
const frame = this._frameTree.mainFrame();
const tip = frame.textInputProcessor();
- let keyEvent = new (frame.domWindow().KeyboardEvent)("", {
+ const KeyboardEvent = frame.domWindow().KeyboardEvent;
+ if (key === 'Shift')
+ this._realShiftDown = type === 'keydown';
+ const autoShift = type === 'keydown' && !this._realShiftDown && !this._autoShiftKey && this._needsShift(text);
+ if (autoShift) {
+ tip.keydown(new KeyboardEvent("", { key: 'Shift', code: 'ShiftLeft', location: 1, keyCode: 16, shiftKey: true }), 0);
+ this._autoShiftKey = key;
+ // A person presses Shift tens of ms before the key it modifies; 0 ms
+ // between the two keydowns is a scripted-typing tell.
+ await new Promise(resolve => setTimeout(resolve, 35 + Math.random() * 55));
+ }
+ const shiftKey = this._realShiftDown || !!this._autoShiftKey;
+ let keyEvent = new KeyboardEvent("", {
key,
code,
location,
repeat,
- keyCode
+ keyCode,
+ shiftKey,
});
if (type === 'keydown') {
- if (text && text !== key) {
- tip.commitCompositionWith(text, keyEvent);
- } else {
- const flags = 0;
- tip.keydown(keyEvent, flags);
+ try {
+ if (text && text !== key) {
+ tip.commitCompositionWith(text, keyEvent);
+ } else {
+ const flags = 0;
+ tip.keydown(keyEvent, flags);
+ }
+ } catch (e) {
+ // Do not leave Shift latched in the input processor.
+ if (autoShift) {
+ tip.keyup(new KeyboardEvent("", { key: 'Shift', code: 'ShiftLeft', location: 1, keyCode: 16 }), 0);
+ this._autoShiftKey = null;
+ }
+ throw e;
}
} else if (type === 'keyup') {
if (text)
throw new Error(`keyup does not support text option`);
const flags = 0;
tip.keyup(keyEvent, flags);
+ if (this._autoShiftKey === key) {
+ this._autoShiftKey = null;
+ await new Promise(resolve => setTimeout(resolve, 20 + Math.random() * 45));
+ tip.keyup(new KeyboardEvent("", { key: 'Shift', code: 'ShiftLeft', location: 1, keyCode: 16 }), 0);
+ }
} else {
throw new Error(`Unknown type ${type}`);
}
@@ -565,7 +601,7 @@ export class PageAgent {
modifiers,
false /*aIgnoreRootScrollFrame*/,
0.0 /*pressure*/,
- 0 /*inputSource*/,
+ win.MouseEvent.MOZ_SOURCE_MOUSE /*inputSource*/,
true /*isDOMEventSynthesized*/,
false /*isWidgetEventSynthesized*/,
0 /*buttons*/,
diff --git a/additions/juggler/content/Runtime.js b/additions/juggler/content/Runtime.js
index 39d97c0a0..2eb21d7d9 100644
--- a/additions/juggler/content/Runtime.js
+++ b/additions/juggler/content/Runtime.js
@@ -622,6 +622,10 @@ class Runtime {
}
}
+// How many driver evaluates are on the stack for a docShell; see
+// ExecutionContext.withDriverPopups.
+const driverPopupDepth = new WeakMap();
+
class ExecutionContext {
constructor(runtime, domWindow, contextGlobal, auxData) {
this._runtime = runtime;
@@ -709,13 +713,49 @@ class ExecutionContext {
return this._mainWorldContext;
}
- async evaluateScript(script, exceptionDetails = {}) {
- const userInputHelper = this._domWindow ? this._domWindow.windowUtils.setHandlingUserInput(true) : null;
- if (this._domWindow && this._domWindow.document)
- this._domWindow.document.notifyUserGestureActivation();
+ // Camoufox: `page.evaluate(() => window.open(...))` has to keep working while
+ // the popup blocker stays at Firefox's default, because a gesture-less
+ // window.open() returning a window instead of null is a one-bit automation
+ // tell any page can read (dom.disable_open_during_load; sundial
+ // ls-popup-blocker). nsIDocShell.driverPopupsAllowed lifts the blocker for
+ // this docShell -- unlike upstream's setHandlingUserInput() it grants NO
+ // user-gesture activation, so navigator.userActivation and the autoplay
+ // policy are untouched.
+ //
+ // SYNCHRONOUS scope only, deliberately. Holding it across the promise an
+ // async evaluate returns would leave the blocker open for as long as that
+ // evaluate runs, and a page polling window.open() on a timer would eventually
+ // land inside the window -- silent on stock, one popup on camoufox. So a
+ // popup opened after an `await` inside the evaluated function is blocked,
+ // exactly as it is on stock without an activation.
+ withDriverPopups(fn) {
+ const docShell = this._domWindow?.docShell;
+ if (!docShell || !('driverPopupsAllowed' in docShell))
+ return fn();
+ // Counted, not a plain boolean: one docShell carries both the isolated and
+ // the main world, and two evaluates can interleave, so the inner one must
+ // not clear the flag out from under the outer one.
+ driverPopupDepth.set(docShell, (driverPopupDepth.get(docShell) || 0) + 1);
+ docShell.driverPopupsAllowed = true;
+ try {
+ return fn();
+ } finally {
+ const left = (driverPopupDepth.get(docShell) || 1) - 1;
+ driverPopupDepth.set(docShell, left);
+ if (!left)
+ docShell.driverPopupsAllowed = false;
+ }
+ }
- let {success, obj} = this._getResult(this._debuggee.executeInGlobal(script), exceptionDetails);
- userInputHelper && userInputHelper.destruct();
+ async evaluateScript(script, exceptionDetails = {}) {
+ // Camoufox: upstream Playwright runs every evaluate() as user input and
+ // grants the document a user-gesture activation. Init scripts run through
+ // this path at load, so every page saw navigator.userActivation.hasBeenActive
+ // === true, autoplay "allowed" and popups permitted before any input -- a
+ // stock Firefox grants activation only from real input, which juggler's
+ // synthesized-trusted clicks already provide (measured 2026-09-14).
+ let {success, obj} = this._getResult(
+ this.withDriverPopups(() => this._debuggee.executeInGlobal(script)), exceptionDetails);
if (!success)
return null;
if (obj && obj.isPromise) {
@@ -755,11 +795,9 @@ class ExecutionContext {
default: return this._toDebugger(arg.value);
}
});
- const userInputHelper = this._domWindow ? this._domWindow.windowUtils.setHandlingUserInput(true) : null;
- if (this._domWindow && this._domWindow.document)
- this._domWindow.document.notifyUserGestureActivation();
- let {success, obj} = this._getResult(funEvaluation.obj.apply(null, args), exceptionDetails);
- userInputHelper && userInputHelper.destruct();
+ // Camoufox: no synthetic user activation here either (see evaluateScript).
+ let {success, obj} = this._getResult(
+ this.withDriverPopups(() => funEvaluation.obj.apply(null, args)), exceptionDetails);
if (!success)
return null;
if (obj && obj.isPromise) {
diff --git a/additions/juggler/content/main.js b/additions/juggler/content/main.js
index bca34226b..45e9e65b2 100644
--- a/additions/juggler/content/main.js
+++ b/additions/juggler/content/main.js
@@ -71,6 +71,18 @@ export function initialize(browsingContext, docShell) {
// Enforce focused state for all top level documents.
docShell.overrideHasFocus = true;
docShell.forceActiveState = true;
+ // A page reads this back: after a scripted same-origin `location.href = ...`
+ // and `history.back()` -- no gesture, no permission -- stock Firefox 152.0.4
+ // fires pageshow with persisted=true and does not re-run the document's
+ // scripts, while camoufox fires persisted=false and rebuilds the document.
+ // It stays set anyway, because juggler cannot yet report a bfcache restore:
+ // with it removed (measured 2026-09-18) the document IS cached
+ // (SHIPBFCache logs `OnPageHide persisted=1`), but the restore emits no
+ // navigation, no lifecycle event and no execution context, so `page.go_back()`
+ // times out waiting for "load" and the next `page.evaluate` throws "The
+ // operation is insecure" against the stale context. Closing this needs
+ // FrameTree/PageAgent to treat a persisted pageshow as a navigation.
+ // See leak-sweep/LEAKS.md row 106 and leak-sweep/tools/bfcache-probe.py.
docShell.disallowBFCache = true;
data.frameTree = new FrameTree(browsingContext);
for (const [name, value] of Object.entries(contextCrossProcessCookie.settings)) {
diff --git a/additions/juggler/input/CursorTrajectory.js b/additions/juggler/input/CursorTrajectory.js
new file mode 100644
index 000000000..eeaf3e5a8
--- /dev/null
+++ b/additions/juggler/input/CursorTrajectory.js
@@ -0,0 +1,168 @@
+/* This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
+
+"use strict";
+
+/**
+ * The cursor path `humanize=True` moves along.
+ *
+ * Camoufox used to generate this in C++ (additions/camoucfg/MouseTrajectories.hpp):
+ * a cubic Bezier through two random knots, distorted, then walked with an
+ * ease-out and emitted at a flat 10ms cadence. It was replaced by Cursory
+ * (cursory/, vendored) because the two differ in what they are imitating. A
+ * Bezier is an equation, and an equation sampled at a fixed rate has velocity
+ * and jerk profiles that separate cleanly from a hand's; the old path's speed
+ * also came entirely from an easing function, so every movement Camoufox ever
+ * made accelerated and decelerated the same way. Cursory replays one of 2357
+ * movements recorded from real people, morphed onto the requested endpoints,
+ * and keeps that recording's own timing -- pauses, overshoots and all.
+ *
+ * This module is the whole boundary between Camoufox and Cursory: it owns the
+ * config, the cadence and the pixel grid, and hands MouseDispatch a plain list
+ * of steps.
+ */
+
+const kCursoryUrl = 'chrome://juggler/content/input/cursory/cursory.js';
+
+/**
+ * Samples per second.
+ *
+ * A USB mouse reports at 125Hz, but Gecko coalesces moves to the refresh rate
+ * before a page sees them, so 60 is what a page observes from a real cursor on
+ * a 60Hz display -- and it is the rate the recordings themselves carry (median
+ * gap across all 110664 of their samples: 16ms). Asking for more would not add
+ * information, only more synthesized events per move, each of which costs a
+ * round trip to the renderer and an ack.
+ */
+const kFrequencyHz = 60;
+
+/**
+ * Default ceiling on how long one movement may take, in seconds.
+ *
+ * Matches what Camoufox has always documented ("the cursor typically takes up
+ * to 1.5 seconds to move across the window") and what the old generator's
+ * default worked out to: 150 points at 10ms each. Cursory's own durations come
+ * from the recordings and normally land well inside this, so the cap is a
+ * backstop against a slow recording, not the thing setting the pace.
+ */
+const kDefaultMaxTimeSeconds = 1.5;
+
+// Loaded on first use, not at import: the recording database is ~2MB of JSON,
+// and a profile that never sets humanize=True should never pay for it.
+//
+// Measured: ~33ms to read, parse and index, once per process. Generating one
+// path afterwards is ~0.5ms (p95 under 1ms, and flat in distance), against a
+// movement that then takes several hundred milliseconds to play out -- so the
+// generator is nowhere near the cost of the move it describes.
+let cursory = null;
+
+function loadCursory() {
+ if (!cursory)
+ cursory = ChromeUtils.importESModule(kCursoryUrl);
+ return cursory;
+}
+
+/** The configured [min, max] duration of one movement, in milliseconds. */
+function durationBoundsMs() {
+ const maxSeconds = ChromeUtils.camouGetDouble('humanize:maxTime', kDefaultMaxTimeSeconds);
+ const minSeconds = ChromeUtils.camouGetDouble('humanize:minTime', 0);
+ const maxMs = Math.max(0, maxSeconds * 1000);
+ // A min above the max would make the clamp below non-monotonic; the max wins,
+ // as it did in C++ (std::min of the two point counts).
+ return {minMs: Math.min(Math.max(0, minSeconds * 1000), maxMs), maxMs};
+}
+
+/**
+ * The intermediate points of a humanized move from (fromX, fromY) to (toX, toY).
+ *
+ * All coordinates are browser-relative, exactly as MouseDispatch wants them.
+ *
+ * Returns `{steps, trailingDelayMs}`, where each step is `[x, y, delayMs]` --
+ * the pause to take *before* dispatching that point -- and `trailingDelayMs` is
+ * the pause before the caller's own dispatch of the real destination. The
+ * destination is deliberately not a step: the caller has to finish exactly on
+ * the requested coordinate whatever happens to the curve, and it is the one
+ * point that must not be dropped for being off-screen or off-grid.
+ */
+export function humanizedSteps(fromX, fromY, toX, toY) {
+ // parkOffContent() forgets the cursor position (it sets NaN) because the
+ // pointer really did move somewhere untracked. With no start point there is
+ // no path to draw, so this move goes straight to its destination.
+ if (!Number.isFinite(fromX) || !Number.isFinite(fromY))
+ return {steps: [], trailingDelayMs: 0};
+
+ const {minMs, maxMs} = durationBoundsMs();
+ const cursory = loadCursory();
+
+ // Seeded explicitly so the same path can be asked for twice -- see below.
+ const seed = Number(crypto.getRandomValues(new BigUint64Array(1))[0] >> 16n);
+ let {points, timings} = cursory.generateTrajectory(
+ [fromX, fromY], [toX, toY], {frequency: kFrequencyHz, seed});
+
+ // Scale the whole path's timing into the configured bounds rather than
+ // truncating it. Truncating would drop the end of every long movement, which
+ // is the part that decelerates onto the target -- the most recognizably human
+ // part of it.
+ const recordedMs = timings[timings.length - 1];
+ const scale = recordedMs > 0 ? Math.min(Math.max(recordedMs, minMs), maxMs) / recordedMs : 0;
+
+ // Rescaling the clock without rescaling the sample count would change the
+ // rate the events come out at, and the rate is itself a fingerprint. Measured
+ // over 1500 moves: 1.8% run past the 1.5s default cap, and the worst was a 5s
+ // recording -- 301 points, which compressed into 1.5s is a 200Hz burst, above
+ // what any mouse reports and far above what any display coalesces to. A
+ // minTime floor has the same problem pointing the other way, stretching a
+ // move until it ticks at 14Hz.
+ //
+ // So ask for the sample count that lands at kFrequencyHz once scaled. The
+ // seed is reused deliberately: the recording is chosen before `frequency` is
+ // consulted, so the same seed re-picks the same recording with the same
+ // natural duration, and `scale` stays exact. Only the resampling differs.
+ if (scale > 0 && scale !== 1) {
+ ({points, timings} = cursory.generateTrajectory(
+ [fromX, fromY], [toX, toY],
+ {frequency: Math.max(1, kFrequencyHz * scale), seed}));
+ }
+
+ // A real mouse reports whole pixels, and the widget rounds to a device pixel
+ // before hit-testing anyway, so round here and drop points that land on the
+ // pixel the cursor is already on. Those are not merely redundant: a
+ // zero-displacement move generates no eMouseMove, so it is never acked, and
+ // waiting for that ack is one of the deadlocks docs/input-dispatch.md exists
+ // to prevent. Their elapsed time is kept -- a hand that hovers a pixel for
+ // 30ms took 30ms -- and folded into the next point that does move.
+ //
+ // This is also why the event rate is only ever *at most* kFrequencyHz: a
+ // short move has fewer whole pixels along it than samples, so it reports
+ // fewer events, exactly as a real mouse crossing the same distance would.
+ // Measured with a 3s floor: 41Hz over 72px, 56Hz over 400px, 60Hz over
+ // 2100px.
+ const steps = [];
+ let previousX = Math.round(fromX);
+ let previousY = Math.round(fromY);
+ const destinationX = Math.round(toX);
+ const destinationY = Math.round(toY);
+ let dispatchedMs = 0;
+
+ // The first point is where the cursor already is, and the last is the
+ // destination the caller dispatches itself; both ends are excluded.
+ for (let i = 1; i < points.length - 1; i++) {
+ const x = Math.round(points[i][0]);
+ const y = Math.round(points[i][1]);
+ if (x === previousX && y === previousY)
+ continue;
+ // Landing on the destination early would leave the caller's own dispatch
+ // with nothing to move, and the same unacked wait.
+ if (x === destinationX && y === destinationY)
+ continue;
+ const elapsedMs = Math.round(timings[i] * scale);
+ steps.push([x, y, Math.max(0, elapsedMs - dispatchedMs)]);
+ dispatchedMs = elapsedMs;
+ previousX = x;
+ previousY = y;
+ }
+
+ const totalMs = Math.round(recordedMs * scale);
+ return {steps, trailingDelayMs: Math.max(0, totalMs - dispatchedMs)};
+}
diff --git a/additions/juggler/input/MouseDispatch.js b/additions/juggler/input/MouseDispatch.js
index 613ca354d..e4c8c6e51 100644
--- a/additions/juggler/input/MouseDispatch.js
+++ b/additions/juggler/input/MouseDispatch.js
@@ -49,9 +49,6 @@ const {setTimeout} = ChromeUtils.importESModule('resource://gre/modules/Timer.sy
*/
export const kAckDeadlineMs = 5000;
-/** Delay between humanized trajectory points, preserving the original cadence. */
-export const kTrajectoryStepMs = 10;
-
function warnUndelivered(eventType, x, y, box, deadlineMs) {
dump(
`[juggler] WARN ${eventType} at (${x}, ${y}) was not delivered to the ` +
@@ -144,7 +141,10 @@ export class MouseDispatch {
this._args.modifiers,
false /* aIgnoreRootScrollFrame */,
0.0 /* pressure */,
- 0 /* inputSource */,
+ // MOZ_SOURCE_MOUSE: a real mouse reports PointerEvent.pointerType "mouse";
+ // MOZ_SOURCE_UNKNOWN (0) surfaces as an empty pointerType, which no OS
+ // input path ever produces (daijro/camoufox#776, microsoft/playwright#38376).
+ this._win.MouseEvent.MOZ_SOURCE_MOUSE /* inputSource */,
true /* isDOMEventSynthesized */,
false /* isWidgetEventSynthesized */,
this._args.buttons,
@@ -176,10 +176,23 @@ export class MouseDispatch {
/**
* Dispatch the intermediate points of a humanized trajectory.
*
- * Points outside the viewport are skipped. Bounding each ack individually is
- * not enough to bound the work: a curve is ~110 points dispatched inside a
- * SINGLE activation-chain slot, so a curve riding a coordinate that cannot be
- * delivered would spend 110 x the deadline there. Rather than a wall-clock
+ * Each step carries its own pause because the trajectory generator
+ * (input/CursorTrajectory.js) replays timing recorded from a real hand: the
+ * gaps are uneven, and evening them out would throw away the half of the
+ * realism that is not the shape of the path. The pause is taken BEFORE the
+ * point it belongs to, and it is taken even for a point that is then skipped,
+ * so dropping a point shifts nothing that follows it in time.
+ *
+ * Points outside the viewport are skipped, and a curve leaves the viewport
+ * more often than it sounds: measured over 400 random moves, 69% of Cursory
+ * paths stray outside the box spanned by their own endpoints, by up to 184px.
+ *
+ * Bounding each ack individually is not enough to bound the work: a curve is
+ * dispatched inside a SINGLE activation-chain slot, and holds up to ~90
+ * points at the 1.5s default ceiling (the generator holds the sample rate at
+ * 60Hz however the duration is scaled; measured worst case over 800 moves was
+ * 83). A curve riding a coordinate that cannot be delivered would spend 90 x
+ * the deadline there. Rather than a wall-clock
* budget -- which would false-fire on exactly the slow pages the deadline
* exists to tolerate -- the first undelivered point abandons the rest of the
* curve. Intermediate points are humanization garnish: if one did not reach
@@ -187,16 +200,35 @@ export class MouseDispatch {
* dropping them costs realism, not correctness. The caller still dispatches
* the real destination afterwards.
*
+ * @param {Array<[number, number, number]>} steps [x, y, msToPauseBeforeIt].
+ * @param {number} trailingDelayMs pause before the caller's own dispatch of
+ * the destination, so the movement ends on the generator's clock and not
+ * the moment its last intermediate point landed.
* @returns {boolean} true if the whole curve was delivered.
*/
- async sendTrajectoryAcked(watcher, eventType, points, stepDelayMs = kTrajectoryStepMs) {
- for (const [x, y] of points) {
+ async sendTrajectoryAcked(watcher, eventType, steps, trailingDelayMs = 0) {
+ // A point on the pixel the cursor is already on generates no eMouseMove, so
+ // it is never acked and the wait below would burn the whole deadline. The
+ // generator already drops those, but it cannot see which points this method
+ // skipped for being off-screen, and skipping one can leave the next landing
+ // back where the last dispatch left the cursor. Tracking what was actually
+ // dispatched is the only place that check is reliable.
+ let lastX = NaN;
+ let lastY = NaN;
+ for (const [x, y, delayMs] of steps) {
+ if (delayMs > 0)
+ await new Promise(resolve => setTimeout(resolve, delayMs));
if (!this.isInViewport(x, y))
continue;
+ if (Math.round(x) === lastX && Math.round(y) === lastY)
+ continue;
if (!await this.sendAcked(watcher, eventType, x, y))
return false;
- await new Promise(resolve => setTimeout(resolve, stepDelayMs));
+ lastX = Math.round(x);
+ lastY = Math.round(y);
}
+ if (trailingDelayMs > 0)
+ await new Promise(resolve => setTimeout(resolve, trailingDelayMs));
return true;
}
@@ -212,9 +244,10 @@ export class MouseDispatch {
}
/** Wheel events take the same conversion; they are not acked. */
- sendWheel(x, y, {deltaX, deltaY, deltaZ, deltaMode, lineOrPageDeltaX, lineOrPageDeltaY}) {
+ sendWheel(x, y, {deltaX, deltaY, deltaZ, deltaMode, lineOrPageDeltaX, lineOrPageDeltaY, nativeNotches = false}) {
const {x: absX, y: absY} = this.toAbsolute(x, y);
- this._win.windowUtils.sendWheelEvent(
+ const utils = this._win.windowUtils;
+ utils.sendWheelEvent(
absX,
absY,
deltaX,
@@ -224,6 +257,6 @@ export class MouseDispatch {
this._args.modifiers,
lineOrPageDeltaX,
lineOrPageDeltaY,
- 0 /* options */);
+ nativeNotches ? utils.WHEEL_EVENT_NATIVE_NOTCHES : 0);
}
}
diff --git a/additions/juggler/input/cursory/LICENSE b/additions/juggler/input/cursory/LICENSE
new file mode 100644
index 000000000..0a041280b
--- /dev/null
+++ b/additions/juggler/input/cursory/LICENSE
@@ -0,0 +1,165 @@
+ GNU LESSER GENERAL PUBLIC LICENSE
+ Version 3, 29 June 2007
+
+ Copyright (C) 2007 Free Software Foundation, Inc.
+ Everyone is permitted to copy and distribute verbatim copies
+ of this license document, but changing it is not allowed.
+
+
+ This version of the GNU Lesser General Public License incorporates
+the terms and conditions of version 3 of the GNU General Public
+License, supplemented by the additional permissions listed below.
+
+ 0. Additional Definitions.
+
+ As used herein, "this License" refers to version 3 of the GNU Lesser
+General Public License, and the "GNU GPL" refers to version 3 of the GNU
+General Public License.
+
+ "The Library" refers to a covered work governed by this License,
+other than an Application or a Combined Work as defined below.
+
+ An "Application" is any work that makes use of an interface provided
+by the Library, but which is not otherwise based on the Library.
+Defining a subclass of a class defined by the Library is deemed a mode
+of using an interface provided by the Library.
+
+ A "Combined Work" is a work produced by combining or linking an
+Application with the Library. The particular version of the Library
+with which the Combined Work was made is also called the "Linked
+Version".
+
+ The "Minimal Corresponding Source" for a Combined Work means the
+Corresponding Source for the Combined Work, excluding any source code
+for portions of the Combined Work that, considered in isolation, are
+based on the Application, and not on the Linked Version.
+
+ The "Corresponding Application Code" for a Combined Work means the
+object code and/or source code for the Application, including any data
+and utility programs needed for reproducing the Combined Work from the
+Application, but excluding the System Libraries of the Combined Work.
+
+ 1. Exception to Section 3 of the GNU GPL.
+
+ You may convey a covered work under sections 3 and 4 of this License
+without being bound by section 3 of the GNU GPL.
+
+ 2. Conveying Modified Versions.
+
+ If you modify a copy of the Library, and, in your modifications, a
+facility refers to a function or data to be supplied by an Application
+that uses the facility (other than as an argument passed when the
+facility is invoked), then you may convey a copy of the modified
+version:
+
+ a) under this License, provided that you make a good faith effort to
+ ensure that, in the event an Application does not supply the
+ function or data, the facility still operates, and performs
+ whatever part of its purpose remains meaningful, or
+
+ b) under the GNU GPL, with none of the additional permissions of
+ this License applicable to that copy.
+
+ 3. Object Code Incorporating Material from Library Header Files.
+
+ The object code form of an Application may incorporate material from
+a header file that is part of the Library. You may convey such object
+code under terms of your choice, provided that, if the incorporated
+material is not limited to numerical parameters, data structure
+layouts and accessors, or small macros, inline functions and templates
+(ten or fewer lines in length), you do both of the following:
+
+ a) Give prominent notice with each copy of the object code that the
+ Library is used in it and that the Library and its use are
+ covered by this License.
+
+ b) Accompany the object code with a copy of the GNU GPL and this license
+ document.
+
+ 4. Combined Works.
+
+ You may convey a Combined Work under terms of your choice that,
+taken together, effectively do not restrict modification of the
+portions of the Library contained in the Combined Work and reverse
+engineering for debugging such modifications, if you also do each of
+the following:
+
+ a) Give prominent notice with each copy of the Combined Work that
+ the Library is used in it and that the Library and its use are
+ covered by this License.
+
+ b) Accompany the Combined Work with a copy of the GNU GPL and this license
+ document.
+
+ c) For a Combined Work that displays copyright notices during
+ execution, include the copyright notice for the Library among
+ these notices, as well as a reference directing the user to the
+ copies of the GNU GPL and this license document.
+
+ d) Do one of the following:
+
+ 0) Convey the Minimal Corresponding Source under the terms of this
+ License, and the Corresponding Application Code in a form
+ suitable for, and under terms that permit, the user to
+ recombine or relink the Application with a modified version of
+ the Linked Version to produce a modified Combined Work, in the
+ manner specified by section 6 of the GNU GPL for conveying
+ Corresponding Source.
+
+ 1) Use a suitable shared library mechanism for linking with the
+ Library. A suitable mechanism is one that (a) uses at run time
+ a copy of the Library already present on the user's computer
+ system, and (b) will operate properly with a modified version
+ of the Library that is interface-compatible with the Linked
+ Version.
+
+ e) Provide Installation Information, but only if you would otherwise
+ be required to provide such information under section 6 of the
+ GNU GPL, and only to the extent that such information is
+ necessary to install and execute a modified version of the
+ Combined Work produced by recombining or relinking the
+ Application with a modified version of the Linked Version. (If
+ you use option 4d0, the Installation Information must accompany
+ the Minimal Corresponding Source and Corresponding Application
+ Code. If you use option 4d1, you must provide the Installation
+ Information in the manner specified by section 6 of the GNU GPL
+ for conveying Corresponding Source.)
+
+ 5. Combined Libraries.
+
+ You may place library facilities that are a work based on the
+Library side by side in a single library together with other library
+facilities that are not Applications and are not covered by this
+License, and convey such a combined library under terms of your
+choice, if you do both of the following:
+
+ a) Accompany the combined library with a copy of the same work based
+ on the Library, uncombined with any other library facilities,
+ conveyed under the terms of this License.
+
+ b) Give prominent notice with the combined library that part of it
+ is a work based on the Library, and explaining where to find the
+ accompanying uncombined form of the same work.
+
+ 6. Revised Versions of the GNU Lesser General Public License.
+
+ The Free Software Foundation may publish revised and/or new versions
+of the GNU Lesser General Public License from time to time. Such new
+versions will be similar in spirit to the present version, but may
+differ in detail to address new problems or concerns.
+
+ Each version is given a distinguishing version number. If the
+Library as you received it specifies that a certain numbered version
+of the GNU Lesser General Public License "or any later version"
+applies to it, you have the option of following the terms and
+conditions either of that published version or of any later version
+published by the Free Software Foundation. If the Library as you
+received it does not specify a version number of the GNU Lesser
+General Public License, you may choose any version of the GNU Lesser
+General Public License ever published by the Free Software Foundation.
+
+ If the Library as you received it specifies that a proxy can decide
+whether future versions of the GNU Lesser General Public License shall
+apply, that proxy's public statement of acceptance of any version is
+permanent authorization for you to choose that version for the
+Library.
diff --git a/additions/juggler/input/cursory/NOTICE b/additions/juggler/input/cursory/NOTICE
new file mode 100644
index 000000000..6add3923b
--- /dev/null
+++ b/additions/juggler/input/cursory/NOTICE
@@ -0,0 +1,46 @@
+cursory-js, vendored into Camoufox
+==================================
+
+This directory is Camoufox's copy of cursory-js
+(https://github.com/JWriter20/cursory-js), a TypeScript port of Cursory
+(https://github.com/Vinyzu/cursory).
+
+Original work © Vinyzu, licensed under the GNU Lesser General Public License
+v3.0 or later. Cursory is retroactively dual-licensed under LGPLv3-or-later and
+GPLv3-or-later; cursory-js is distributed under LGPLv3-or-later, and so is this
+copy. The full licence text is in LICENSE next to this file.
+
+The port © Jake Writer, likewise under LGPLv3-or-later.
+
+Camoufox as a whole is MPL-2.0. These files are not: they remain LGPLv3-or-later
+and are identified as such here, which is what section 4 of that licence asks of
+a work that combines them.
+
+Bundled data
+------------
+
+trajectories.json is the recorded-trajectory database from the original project,
+redistributed under the same licence. Upstream ships it gzipped; it is stored
+uncompressed here because omni.ja deflates it anyway. The parsed contents are
+unchanged.
+
+The recordings behind it are credited by the original author to:
+
+ - Margit Antal, Norbert Fejer and Krisztian Buza, for SapiMouse
+ (https://ieeexplore.ieee.org/document/9465583)
+ - MIMIC-LOGICS, for Mouse-Synthesizer
+ (https://github.com/MIMIC-LOGICS/Mouse-Synthesizer)
+
+Derived from numpy
+------------------
+
+To reproduce the original's output for a given seed, this port reimplements the
+parts of numpy that Cursory's results depend on: the PCG64 bit generator and
+SeedSequence, the ziggurat normal sampler and its constant tables, Lemire's
+bounded-integer method, and pairwise summation. Those algorithms and the
+ziggurat tables come from numpy (https://github.com/numpy/numpy), © 2005-2025
+NumPy Developers, BSD-3-Clause. numpy's PCG64 is itself © 2014 Melissa O'Neill
+and © 2015 Robert Kern, MIT licensed.
+
+math.hypot follows CPython's vector_norm (https://github.com/python/cpython),
+© 2001-2025 Python Software Foundation, PSF License v2.
diff --git a/additions/juggler/input/cursory/README.md b/additions/juggler/input/cursory/README.md
new file mode 100644
index 000000000..7bc6bf629
--- /dev/null
+++ b/additions/juggler/input/cursory/README.md
@@ -0,0 +1,62 @@
+# cursory-js (vendored)
+
+Camoufox's copy of [cursory-js](https://github.com/JWriter20/cursory-js) v2.0.1,
+a TypeScript port of [Vinyzu's Cursory](https://github.com/Vinyzu/cursory)
+v2.0.0. It generates the cursor paths `humanize=True` moves along.
+
+Licensing and provenance are in `NOTICE`; the licence text is in `LICENSE`.
+**These files are LGPLv3-or-later, not MPL-2.0 like the rest of Camoufox.**
+
+## What it does
+
+Cursory does not draw a curve. It holds 2357 mouse movements recorded from real
+people, picks one whose direction, distance and wander suit the requested move,
+then morphs, knots, jitters and resamples it onto the requested endpoints. What
+comes back is a real hand's path and a real hand's timing — including its
+hesitations — rather than a shape from an equation.
+
+That is the reason for the swap. A Bézier curve is smooth in a way hands are
+not: constant-cadence samples along an analytic curve give velocity and jerk
+profiles that a classifier can separate from human movement without much
+trouble. Replayed recordings do not have that tell.
+
+## How Camoufox calls it
+
+`../CursorTrajectory.js` is the only caller. Nothing else should import from
+this directory.
+
+## Local modifications
+
+Kept to the minimum, so refreshing from upstream stays a copy-and-strip:
+
+- **TypeScript stripped.** These are the upstream `src/*.ts` with type
+ annotations, interfaces and `as` casts removed and nothing else changed.
+ Import specifiers gained `.js` so Firefox's module loader resolves them.
+- **`data.js`** reads the database over a `chrome://` channel instead of with
+ `node:fs`/`node:zlib`, and `trajectories.json` is stored uncompressed.
+- **`random/pcg64.js`** seeds itself from the Web Crypto API rather than
+ `node:crypto`.
+- **`index.ts` is not vendored.** `CursorTrajectory.js` imports `cursory.js`
+ directly.
+
+Both API substitutions are marked `CAMOUFOX:` in the files themselves.
+
+## Updating
+
+1. `npm pack cursory-js@`, or clone the repo for the `src/` tree.
+2. Replace each `.js` here with the matching `src/*.ts`, stripping the types.
+3. Re-apply the two `CAMOUFOX:` substitutions and the `.js` import suffixes.
+4. `gunzip -c src/trajectories.json.gz > trajectories.json`.
+5. Re-run the parity check below, then
+ `python3 tests/patches/humanize-mouse-trajectory.py` against a build.
+
+## Parity
+
+The port reproduces the Python original bit for bit, which is worth keeping
+true: it is what lets a bug here be reproduced against `pip install cursory`.
+Upstream's `test/fixtures/parity.json` is recorded Python output — run this
+port against it after any change to these files. Last checked against cursory
+2.0.0 / numpy 2.3.5: RNG streams identical for all 12 seeds, all 149 recorded
+trajectories' timings identical, worst coordinate gap 1.36e-12 px (V8 and
+glibc round `exp`, `atan2` and friends differently; nothing a cursor can
+express).
diff --git a/additions/juggler/input/cursory/cursory.js b/additions/juggler/input/cursory/cursory.js
new file mode 100644
index 000000000..675ceeea0
--- /dev/null
+++ b/additions/juggler/input/cursory/cursory.js
@@ -0,0 +1,147 @@
+/** Port of `cursory/cursory.py`. */
+
+import { EPSILON, hypot, rint, sum } from './numeric.js';
+import { defaultGenerator } from './random/generator.js';
+import {
+ findTrajectory,
+ jitterTrajectory,
+ knotTrajectory,
+ morphTrajectory,
+} from './trajectorySelection.js';
+
+/**
+ * Resample a recording's timing pattern to the requested rate.
+ *
+ * The gaps between samples come from the recording rather than from a constant
+ * interval, so the result keeps a real hand's hesitations instead of looking
+ * like a metronome.
+ */
+function sampleTimings(timings, frequency, frequencyRandomizer, rng) {
+ const totalTime = Math.max(1, rint(timings[timings.length - 1] - timings[0]));
+ const intervalCount = Math.max(1, rint((totalTime * frequency) / 1000));
+
+ let recordedIntervals = [];
+ for (let i = 1; i < timings.length; i += 1) {
+ const interval = timings[i] - timings[i - 1];
+ if (interval > 0) {
+ recordedIntervals.push(interval);
+ }
+ }
+ if (recordedIntervals.length === 0) {
+ recordedIntervals = [1];
+ }
+
+ // Time-warp the recording's interval sequence onto the requested sample count,
+ // starting from a random offset so the same recording does not always hesitate
+ // in the same place.
+ const rollBy = rng.integers(recordedIntervals.length);
+ const sampledIntervals = new Float64Array(intervalCount);
+ for (let i = 0; i < intervalCount; i += 1) {
+ const sourceIndex = Math.floor(((i + 0.5) * recordedIntervals.length) / intervalCount);
+ sampledIntervals[i] = recordedIntervals[(sourceIndex + rollBy) % recordedIntervals.length];
+ }
+ rescaleToTotal(sampledIntervals, totalTime);
+
+ if (frequencyRandomizer) {
+ const noise = rng.uniformArray(-frequencyRandomizer, frequencyRandomizer, intervalCount);
+ for (let i = 0; i < intervalCount; i += 1) {
+ sampledIntervals[i] = Math.max(sampledIntervals[i] + noise[i], EPSILON);
+ }
+ rescaleToTotal(sampledIntervals, totalTime);
+ }
+
+ const sampledTimings = [0];
+ let elapsed = 0;
+ for (let i = 0; i < intervalCount; i += 1) {
+ elapsed += sampledIntervals[i];
+ sampledTimings.push(rint(elapsed));
+ }
+ sampledTimings[sampledTimings.length - 1] = totalTime;
+ return sampledTimings;
+}
+
+function rescaleToTotal(intervals, totalTime) {
+ const factor = totalTime / sum(intervals);
+ for (let i = 0; i < intervals.length; i += 1) {
+ intervals[i] *= factor;
+ }
+}
+
+/**
+ * Generate a human-realistic mouse trajectory from one point to another.
+ *
+ * @param targetStart Where the cursor starts.
+ * @param targetEnd Where the cursor ends up.
+ * @param options frequency (samples per second, default 60), frequencyRandomizer
+ * (largest jitter in ms applied to each sample time, default 1), seed (for a
+ * reproducible trajectory, default OS entropy) and directness (preference for
+ * shorter, straighter paths, 0 to 1, default 0.65).
+ * @returns The positions to move through, and the millisecond offset of each.
+ */
+export function generateTrajectory(targetStart, targetEnd, options = {}) {
+ const { frequency = 60, frequencyRandomizer = 1, seed, directness = 0.65 } = options;
+
+ if (frequency <= 0) {
+ throw new RangeError('frequency must be greater than zero');
+ }
+ if (frequencyRandomizer < 0) {
+ throw new RangeError('frequencyRandomizer must not be negative');
+ }
+ if (!(directness >= 0 && directness <= 1)) {
+ throw new RangeError('directness must be between zero and one');
+ }
+ if (targetStart[0] === targetEnd[0] && targetStart[1] === targetEnd[1]) {
+ return { points: [[targetStart[0], targetStart[1]]], timings: [0] };
+ }
+
+ const rng = defaultGenerator(seed);
+
+ const found = findTrajectory(targetStart, targetEnd, rng, directness);
+ const trajectoryPoints = found.points;
+ const startTime = found.timings[0];
+ const timings = found.timings.map((timing) => timing - startTime);
+
+ const sampledTimings = sampleTimings(timings, frequency, frequencyRandomizer, rng);
+
+ // Read the path's position at each sample time, interpolating between the
+ // recording's own keyframes.
+ const sampledPoints = sampledTimings.map((sampleTime) => {
+ let previousIndex = 0;
+ for (let i = 0; i < timings.length; i += 1) {
+ if (timings[i] <= sampleTime) {
+ previousIndex = i;
+ }
+ }
+ const nextIndex = Math.min(previousIndex + 1, timings.length - 1);
+
+ const previousPoint = trajectoryPoints[previousIndex];
+ const previousTime = timings[previousIndex];
+ const nextPoint = trajectoryPoints[nextIndex];
+ const nextTime = timings[nextIndex];
+
+ const alpha = nextTime !== previousTime ? (sampleTime - previousTime) / (nextTime - previousTime) : 0.0;
+ return [
+ previousPoint[0] + alpha * (nextPoint[0] - previousPoint[0]),
+ previousPoint[1] + alpha * (nextPoint[1] - previousPoint[1]),
+ ];
+ });
+
+ const dxTarget = targetEnd[0] - targetStart[0];
+ const dyTarget = targetEnd[1] - targetStart[1];
+ const trajectoryLength = Math.sqrt(dxTarget * dxTarget + dyTarget * dyTarget);
+
+ // Re-roughen the resampled path, which interpolation has smoothed, then put it
+ // back on the requested endpoints.
+ const knotted = knotTrajectory(sampledPoints, targetStart, targetEnd, rng);
+ const jittered = jitterTrajectory(knotted, trajectoryLength, rng);
+ const points = morphTrajectory(
+ jittered,
+ targetStart,
+ targetEnd,
+ dxTarget,
+ dyTarget,
+ hypot(dxTarget, dyTarget),
+ );
+
+ return { points, timings: sampledTimings };
+}
diff --git a/additions/juggler/input/cursory/data.js b/additions/juggler/input/cursory/data.js
new file mode 100644
index 000000000..3966913e6
--- /dev/null
+++ b/additions/juggler/input/cursory/data.js
@@ -0,0 +1,49 @@
+/**
+ * The recorded-trajectory database.
+ *
+ * CAMOUFOX: upstream reads `trajectories.json.gz` off disk with node:fs and
+ * node:zlib. Here the same data ships inside omni.ja as plain JSON -- the jar is
+ * already deflated, so storing it uncompressed costs nothing in the package and
+ * saves decompressing it again at runtime -- and is read back over a chrome://
+ * channel. The parsed value is identical either way.
+ *
+ * The read is synchronous so that this module stays a plain import, exactly as
+ * upstream is, and so `trajectorySelection.js` can keep building its lookup
+ * tables at module scope. It costs one ~2MB read and parse, once per process,
+ * and only when something actually imports Cursory -- which, on the Camoufox
+ * side, only happens when humanize is turned on and the cursor first moves.
+ */
+
+const {NetUtil} = ChromeUtils.importESModule('resource://gre/modules/NetUtil.sys.mjs');
+
+const TRAJECTORIES_URL = 'chrome://juggler/content/input/cursory/trajectories.json';
+
+/**
+ * Read a packaged chrome:// resource as text.
+ *
+ * Read in a loop rather than in one `available()`-sized go: the URL resolves
+ * into omni.ja, and a jar stream is under no obligation to make the whole
+ * decompressed entry available at once. The database is pure ASCII (JSON of
+ * numbers), so reading it as bytes is already the right text and no charset
+ * conversion is involved.
+ */
+function readPackagedText(url) {
+ const channel = NetUtil.newChannel({uri: url, loadUsingSystemPrincipal: true});
+ const stream = Components.classes['@mozilla.org/scriptableinputstream;1']
+ .createInstance(Components.interfaces.nsIScriptableInputStream);
+ stream.init(channel.open());
+ try {
+ const chunks = [];
+ for (let available = stream.available(); available > 0; available = stream.available())
+ chunks.push(stream.readBytes(available));
+ return chunks.join('');
+ } finally {
+ stream.close();
+ }
+}
+
+/**
+ * Every recorded trajectory Cursory picks from. The data is the one shipped with
+ * the Python original, entry for entry.
+ */
+export const LOADED_TRAJECTORIES = JSON.parse(readPackagedText(TRAJECTORIES_URL));
diff --git a/additions/juggler/input/cursory/numeric.js b/additions/juggler/input/cursory/numeric.js
new file mode 100644
index 000000000..d036d95cb
--- /dev/null
+++ b/additions/juggler/input/cursory/numeric.js
@@ -0,0 +1,226 @@
+/**
+ * The numeric primitives Cursory's Python original gets from numpy and `math`.
+ *
+ * These are not general-purpose reimplementations: each one reproduces the exact
+ * evaluation order of the routine it replaces, because the trajectory a seed
+ * produces depends on it.
+ */
+
+/** `np.finfo(float).eps`. */
+export const EPSILON = 2.220446049250313e-16;
+
+const DBL_MIN = 2.2250738585072014e-308;
+
+// Veltkamp splitter, 2**27 + 1.
+const SPLITTER = 134217729;
+
+const SCRATCH = new DataView(new ArrayBuffer(8));
+
+/**
+ * `math.hypot(x, y)`, following CPython's `vector_norm`.
+ *
+ * `Math.hypot` is not a substitute: it disagrees with CPython on about a third
+ * of inputs, by up to 2 ulp. numpy's `np.hypot` is a third implementation again,
+ * within 1 ulp of this one. Cursory uses both, and the distance between the
+ * endpoints feeds every later step, so this stands in for each.
+ */
+export function hypot(x, y) {
+ const first = Math.abs(x);
+ const second = Math.abs(y);
+ const foundNan = Number.isNaN(first) || Number.isNaN(second);
+
+ // Built up with `>` rather than Math.max so that a NaN coordinate does not
+ // hide an infinite one: hypot(inf, nan) is inf, not NaN.
+ let max = 0.0;
+ if (first > max) {
+ max = first;
+ }
+ if (second > max) {
+ max = second;
+ }
+
+ if (max === Infinity) {
+ return Infinity;
+ }
+ if (foundNan) {
+ return NaN;
+ }
+ if (max === 0) {
+ return max;
+ }
+
+ const maxExponent = frexpExponent(max);
+ if (maxExponent < -1023) {
+ // ldexp(1.0, -maxExponent) would overflow; renormalise the subnormals first.
+ return DBL_MIN * hypot(first / DBL_MIN, second / DBL_MIN);
+ }
+ const scale = 2 ** -maxExponent;
+
+ let compensatedSum = 1.0;
+ let productResidue = 0.0;
+ let sumResidue = 0.0;
+
+ for (const coordinate of [first, second]) {
+ const scaled = coordinate * scale;
+ // Lossless square, then lossless accumulation.
+ const square = scaled * scaled;
+ const squareLow = twoProductResidue(scaled, scaled, square);
+ const sum = compensatedSum + square;
+ sumResidue += compensatedSum - sum + square;
+ compensatedSum = sum;
+ productResidue += squareLow;
+ }
+
+ let root = Math.sqrt(compensatedSum - 1.0 + (productResidue + sumResidue));
+ const square = -root * root;
+ const squareLow = twoProductResidue(-root, root, square);
+ const sum = compensatedSum + square;
+ sumResidue += compensatedSum - sum + square;
+ compensatedSum = sum;
+ productResidue += squareLow;
+
+ // Differential correction.
+ root += (compensatedSum - 1.0 + (productResidue + sumResidue)) / (2.0 * root);
+ return root / scale;
+}
+
+/** The exact residual of `x * y`, i.e. what `fma(x, y, -product)` returns. */
+function twoProductResidue(x, y, product) {
+ const xSplit = SPLITTER * x;
+ const xHigh = xSplit - (xSplit - x);
+ const xLow = x - xHigh;
+ const ySplit = SPLITTER * y;
+ const yHigh = ySplit - (ySplit - y);
+ const yLow = y - yHigh;
+ return xHigh * yHigh - product + xHigh * yLow + xLow * yHigh + xLow * yLow;
+}
+
+/** The exponent `frexp` reports: `value === mantissa * 2 ** exponent`, 0.5 <= |mantissa| < 1. */
+function frexpExponent(value) {
+ SCRATCH.setFloat64(0, value);
+ const biased = (SCRATCH.getUint32(0) >>> 20) & 0x7ff;
+ if (biased === 0) {
+ // Subnormal: scale into the normal range and correct.
+ SCRATCH.setFloat64(0, value * 2 ** 64);
+ return (((SCRATCH.getUint32(0) >>> 20) & 0x7ff) - 1022) - 64;
+ }
+ return biased - 1022;
+}
+
+/**
+ * `np.sum` over a float64 array: numpy's pairwise summation, whose rounding
+ * differs from a running total.
+ */
+export function sum(values, start = 0, count = values.length - start) {
+ if (count === 0) {
+ // numpy reduces an empty array to its identity, +0.0, not to the -0.0 the
+ // short loop below would start from.
+ return 0;
+ }
+ if (count < 8) {
+ // numpy starts from -0.0 so that summing only -0.0 preserves the sign.
+ let total = -0.0;
+ for (let i = 0; i < count; i += 1) {
+ total += values[start + i];
+ }
+ return total;
+ }
+
+ if (count <= 128) {
+ const accumulators = [
+ values[start],
+ values[start + 1],
+ values[start + 2],
+ values[start + 3],
+ values[start + 4],
+ values[start + 5],
+ values[start + 6],
+ values[start + 7],
+ ];
+ let i = 8;
+ for (; i < count - (count % 8); i += 8) {
+ for (let lane = 0; lane < 8; lane += 1) {
+ accumulators[lane] += values[start + i + lane];
+ }
+ }
+ let total =
+ accumulators[0] + accumulators[1] + (accumulators[2] + accumulators[3]) +
+ (accumulators[4] + accumulators[5] + (accumulators[6] + accumulators[7]));
+ for (; i < count; i += 1) {
+ total += values[start + i];
+ }
+ return total;
+ }
+
+ // Halve, but keep the split on a multiple of the unroll factor.
+ let half = Math.floor(count / 2);
+ half -= half % 8;
+ return sum(values, start, half) + sum(values, start + half, count - half);
+}
+
+/**
+ * `np.searchsorted(sorted, value, side='right')`: the index after any entries
+ * equal to `value`.
+ */
+export function searchSortedRight(sorted, value) {
+ let low = 0;
+ let high = sorted.length;
+ while (low < high) {
+ const middle = (low + high) >>> 1;
+ if (value < sorted[middle]) {
+ high = middle;
+ } else {
+ low = middle + 1;
+ }
+ }
+ return low;
+}
+
+/**
+ * The first `count` indices of `np.argsort(values)`, ascending.
+ *
+ * Only the few best candidates are ever wanted, and this runs over a few
+ * thousand scores twenty-odd times per trajectory, so it selects rather than
+ * sorts.
+ *
+ * numpy's default sort is an unstable introsort whose order among equal scores
+ * comes from whichever SIMD kernel the CPU dispatches to. This breaks ties by
+ * index instead, so the same scores always produce the same ranking: scanning
+ * in index order and only displacing on a strictly smaller value leaves the
+ * earliest index in front.
+ */
+export function argSortTopN(values, count) {
+ const best = [];
+ for (let index = 0; index < values.length; index += 1) {
+ if (best.length === count && !(values[index] < values[best[count - 1]])) {
+ continue;
+ }
+ let position = best.length;
+ while (position > 0 && values[index] < values[best[position - 1]]) {
+ position -= 1;
+ }
+ best.splice(position, 0, index);
+ if (best.length > count) {
+ best.pop();
+ }
+ }
+ return best;
+}
+
+/**
+ * The integer Python's `round()` and numpy's `np.rint(...).astype(int)` produce:
+ * halves go to even, unlike `Math.round`'s half-up, and there is no negative zero.
+ */
+export function rint(value) {
+ const lower = Math.floor(value);
+ const fraction = value - lower;
+ let rounded;
+ if (fraction > 0.5) {
+ rounded = lower + 1;
+ } else if (fraction < 0.5) {
+ rounded = lower;
+ } else {
+ rounded = lower % 2 === 0 ? lower : lower + 1;
+ }
+ return rounded === 0 ? 0 : rounded;
+}
diff --git a/additions/juggler/input/cursory/random/generator.js b/additions/juggler/input/cursory/random/generator.js
new file mode 100644
index 000000000..904e2b51b
--- /dev/null
+++ b/additions/juggler/input/cursory/random/generator.js
@@ -0,0 +1,170 @@
+/**
+ * The slice of `numpy.random.Generator` that Cursory draws from, ported from
+ * numpy/random/src/distributions/distributions.c and numpy/random/_generator.pyx.
+ *
+ * Every method consumes the bit generator in exactly the order numpy does, so a
+ * seeded run here draws the same numbers as a seeded run of the Python original.
+ */
+
+import { searchSortedRight } from '../numeric.js';
+import { createPcg64 } from './pcg64.js';
+import {
+ FI_DOUBLE,
+ KI_DOUBLE,
+ WI_DOUBLE,
+ ZIGGURAT_NOR_INV_R,
+ ZIGGURAT_NOR_R,
+} from './ziggurat.js';
+
+const UINT32_MAX = 0xffffffff;
+
+export class Generator {
+ constructor(bitGenerator) {
+ this.bitGenerator = bitGenerator;
+ }
+
+ /** `Generator.random()`. */
+ random() {
+ return this.bitGenerator.nextDouble();
+ }
+
+ /** `Generator.uniform(low, high)`. */
+ uniform(low, high) {
+ const range = high - low;
+ if (!Number.isFinite(range)) {
+ throw new RangeError('Range exceeds valid bounds');
+ }
+ return low + range * this.bitGenerator.nextDouble();
+ }
+
+ /** `Generator.uniform(low, high, size)`. */
+ uniformArray(low, high, size) {
+ const range = high - low;
+ if (!Number.isFinite(range)) {
+ throw new RangeError('Range exceeds valid bounds');
+ }
+ const out = new Float64Array(size);
+ for (let i = 0; i < size; i += 1) {
+ out[i] = low + range * this.bitGenerator.nextDouble();
+ }
+ return out;
+ }
+
+ /** `Generator.normal(loc, scale)`. */
+ normal(loc, scale) {
+ if (scale < 0) {
+ throw new RangeError('scale < 0');
+ }
+ return loc + scale * this.standardNormal();
+ }
+
+ /** `Generator.normal(size=size)`, i.e. `loc` 0 and `scale` 1. */
+ standardNormalArray(size) {
+ const out = new Float64Array(size);
+ for (let i = 0; i < size; i += 1) {
+ out[i] = this.standardNormal();
+ }
+ return out;
+ }
+
+ /**
+ * `random_standard_normal`: the 256-layer ziggurat, including its two rejection
+ * paths. The paths draw extra doubles, so they have to be reproduced to keep
+ * the stream aligned, not just the returned value.
+ */
+ standardNormal() {
+ for (;;) {
+ let draw = this.bitGenerator.nextUint64();
+ const index = Number(draw & 0xffn);
+ draw >>= 8n;
+ const sign = draw & 0x1n;
+ const magnitude = (draw >> 1n) & 0x000fffffffffffffn;
+
+ let x = Number(magnitude) * WI_DOUBLE[index];
+ if (sign === 1n) {
+ x = -x;
+ }
+ if (magnitude < KI_DOUBLE[index]) {
+ return x;
+ }
+
+ if (index === 0) {
+ // Sample the tail beyond ZIGGURAT_NOR_R.
+ for (;;) {
+ const xx = -ZIGGURAT_NOR_INV_R * Math.log1p(-this.bitGenerator.nextDouble());
+ const yy = -Math.log1p(-this.bitGenerator.nextDouble());
+ if (yy + yy > xx * xx) {
+ return (magnitude >> 8n) & 0x1n ? -(ZIGGURAT_NOR_R + xx) : ZIGGURAT_NOR_R + xx;
+ }
+ }
+ }
+
+ const wedge =
+ (FI_DOUBLE[index - 1] - FI_DOUBLE[index]) * this.bitGenerator.nextDouble() +
+ FI_DOUBLE[index];
+ if (wedge < Math.exp(-0.5 * x * x)) {
+ return x;
+ }
+ }
+ }
+
+ /**
+ * `Generator.integers(high)`: a uniform integer in [0, high).
+ *
+ * numpy picks a strategy per range width; Cursory only ever asks for ranges that
+ * fit in 32 bits, so only that branch (Lemire's method) is implemented. Wider
+ * ranges would silently take a different number of draws, so they raise instead.
+ */
+ integers(high) {
+ if (!Number.isInteger(high) || high <= 0) {
+ throw new RangeError('high must be a positive integer');
+ }
+ const range = high - 1;
+ if (range === 0) {
+ return 0;
+ }
+ if (range > UINT32_MAX) {
+ throw new RangeError('ranges wider than 2**32 are not supported');
+ }
+ if (range === UINT32_MAX) {
+ return this.bitGenerator.nextUint32();
+ }
+ return this.boundedLemire32(range);
+ }
+
+ /** `buffered_bounded_lemire_uint32`. */
+ boundedLemire32(range) {
+ const rangeExclusive = BigInt(range + 1);
+ let scaled = BigInt(this.bitGenerator.nextUint32()) * rangeExclusive;
+ let leftover = scaled & 0xffffffffn;
+
+ if (leftover < rangeExclusive) {
+ const threshold = BigInt((UINT32_MAX - range) % (range + 1));
+ while (leftover < threshold) {
+ scaled = BigInt(this.bitGenerator.nextUint32()) * rangeExclusive;
+ leftover = scaled & 0xffffffffn;
+ }
+ }
+ return Number(scaled >> 32n);
+ }
+
+ /** `Generator.choice(len(weights), p=weights)`. */
+ choice(weights) {
+ const cumulative = new Float64Array(weights.length);
+ let running = 0;
+ for (let i = 0; i < weights.length; i += 1) {
+ running += weights[i];
+ cumulative[i] = running;
+ }
+ const total = cumulative[cumulative.length - 1];
+ for (let i = 0; i < cumulative.length; i += 1) {
+ cumulative[i] /= total;
+ }
+ return searchSortedRight(cumulative, this.bitGenerator.nextDouble());
+ }
+}
+
+/** The equivalent of `np.random.default_rng(seed)`. */
+export function defaultGenerator(seed) {
+ return new Generator(createPcg64(seed));
+}
diff --git a/additions/juggler/input/cursory/random/pcg64.js b/additions/juggler/input/cursory/random/pcg64.js
new file mode 100644
index 000000000..6a584997b
--- /dev/null
+++ b/additions/juggler/input/cursory/random/pcg64.js
@@ -0,0 +1,90 @@
+/**
+ * PCG64 (XSL-RR 128/64), ported from numpy/random/src/pcg64/pcg64.h.
+ *
+ * © 2014 Melissa O'Neill, © 2015 Robert Kern. MIT licensed, as vendored by numpy.
+ */
+
+import { generateState64, intToUint32Array, mixEntropy } from './seedSequence.js';
+
+const MASK64 = 0xffffffffffffffffn;
+const MASK128 = (1n << 128n) - 1n;
+const MULTIPLIER = (2549297995355413924n << 64n) + 4865540595714422341n;
+
+/** 2**-53, numpy's uint64 -> double conversion factor. */
+const DOUBLE_SCALE = 1.0 / 9007199254740992.0;
+
+export class Pcg64 {
+ constructor(initialState, initialSequence) {
+ this.state = 0n;
+
+ // next_uint32 hands out a 64-bit draw in two halves; the unused half is held here.
+ this.hasSpareUint32 = false;
+ this.spareUint32 = 0;
+
+ this.increment = ((initialSequence << 1n) | 1n) & MASK128;
+ this.step();
+ this.state = (this.state + initialState) & MASK128;
+ this.step();
+ }
+
+ step() {
+ this.state = (this.state * MULTIPLIER + this.increment) & MASK128;
+ }
+
+ nextUint64() {
+ this.step();
+ const state = this.state;
+ const value = ((state >> 64n) ^ state) & MASK64;
+ const rotation = (state >> 122n) & 63n;
+ return ((value >> rotation) | (value << ((64n - rotation) & 63n))) & MASK64;
+ }
+
+ nextUint32() {
+ if (this.hasSpareUint32) {
+ this.hasSpareUint32 = false;
+ return this.spareUint32;
+ }
+ const next = this.nextUint64();
+ this.hasSpareUint32 = true;
+ this.spareUint32 = Number(next >> 32n);
+ return Number(next & 0xffffffffn);
+ }
+
+ nextDouble() {
+ return Number(this.nextUint64() >> 11n) * DOUBLE_SCALE;
+ }
+}
+
+/**
+ * Build the bit generator `np.random.default_rng(seed)` would build.
+ *
+ * Passing no seed draws 128 bits of OS entropy, matching numpy's `randbits(128)`.
+ */
+export function createPcg64(seed) {
+ const entropy = intToUint32Array(seed === undefined ? randomEntropy() : toSeedInteger(seed));
+ const state = generateState64(mixEntropy(entropy), 4);
+ return new Pcg64((state[0] << 64n) | state[1], (state[2] << 64n) | state[3]);
+}
+
+function toSeedInteger(seed) {
+ if (typeof seed === 'bigint') {
+ return seed;
+ }
+ if (!Number.isSafeInteger(seed)) {
+ throw new RangeError(
+ 'seed must be a safe integer or a bigint; larger seeds lose precision as a number',
+ );
+ }
+ return BigInt(seed);
+}
+
+// CAMOUFOX: upstream draws its entropy from node:crypto's randomBytes. This runs
+// in the browser's parent process, where the Web Crypto API is the equivalent
+// source -- both are the OS CSPRNG, and the bytes are consumed identically.
+function randomEntropy() {
+ let value = 0n;
+ for (const byte of crypto.getRandomValues(new Uint8Array(16))) {
+ value = (value << 8n) | BigInt(byte);
+ }
+ return value;
+}
diff --git a/additions/juggler/input/cursory/random/seedSequence.js b/additions/juggler/input/cursory/random/seedSequence.js
new file mode 100644
index 000000000..af26b612c
--- /dev/null
+++ b/additions/juggler/input/cursory/random/seedSequence.js
@@ -0,0 +1,101 @@
+/**
+ * numpy's SeedSequence, ported from numpy/random/bit_generator.pyx (BSD-3-Clause).
+ *
+ * Cursory's Python original seeds itself with `np.random.default_rng(seed)`, so a
+ * seed only reproduces the same trajectory here if it expands into the same
+ * bit-generator state. That expansion is this file.
+ */
+
+const INIT_A = 0x43b0d7e5;
+const MULT_A = 0x931e8875;
+const INIT_B = 0x8b51f9dd;
+const MULT_B = 0x58f38ded;
+const MIX_MULT_L = 0xca01f9dd;
+const MIX_MULT_R = 0x4973f715;
+const XSHIFT = 16;
+
+/** numpy's DEFAULT_POOL_SIZE. */
+export const POOL_SIZE = 4;
+
+/** Split a non-negative integer into uint32 words, lowest bits first. */
+export function intToUint32Array(value) {
+ if (value < 0n) {
+ throw new RangeError('seed must be a non-negative integer');
+ }
+ if (value === 0n) {
+ return [0];
+ }
+ const words = [];
+ let remaining = value;
+ while (remaining > 0n) {
+ words.push(Number(remaining & 0xffffffffn));
+ remaining >>= 32n;
+ }
+ return words;
+}
+
+/**
+ * numpy's `hashmix`. The multiplier advances on every call, so the whole mix
+ * depends on how many times this has been invoked.
+ */
+class Hasher {
+ constructor(initial) {
+ this.constant = initial >>> 0;
+ }
+
+ mix(value) {
+ let mixed = (value ^ this.constant) >>> 0;
+ this.constant = Math.imul(this.constant, MULT_A) >>> 0;
+ mixed = Math.imul(mixed, this.constant) >>> 0;
+ return (mixed ^ (mixed >>> XSHIFT)) >>> 0;
+ }
+}
+
+function mix(x, y) {
+ const result = (Math.imul(MIX_MULT_L, x) - Math.imul(MIX_MULT_R, y)) >>> 0;
+ return (result ^ (result >>> XSHIFT)) >>> 0;
+}
+
+/** numpy's `SeedSequence.mix_entropy`. */
+export function mixEntropy(entropy) {
+ const pool = new Uint32Array(POOL_SIZE);
+ const hasher = new Hasher(INIT_A);
+
+ for (let i = 0; i < POOL_SIZE; i += 1) {
+ pool[i] = hasher.mix(i < entropy.length ? entropy[i] : 0);
+ }
+ for (let source = 0; source < POOL_SIZE; source += 1) {
+ for (let destination = 0; destination < POOL_SIZE; destination += 1) {
+ if (source !== destination) {
+ pool[destination] = mix(pool[destination], hasher.mix(pool[source]));
+ }
+ }
+ }
+ for (let source = POOL_SIZE; source < entropy.length; source += 1) {
+ for (let destination = 0; destination < POOL_SIZE; destination += 1) {
+ pool[destination] = mix(pool[destination], hasher.mix(entropy[source]));
+ }
+ }
+ return pool;
+}
+
+/** numpy's `SeedSequence.generate_state(wordCount, uint64)`. */
+export function generateState64(pool, wordCount) {
+ const words = new Uint32Array(wordCount * 2);
+ let constant = INIT_B;
+
+ for (let i = 0; i < words.length; i += 1) {
+ let value = pool[i % pool.length];
+ value = (value ^ constant) >>> 0;
+ constant = Math.imul(constant, MULT_B) >>> 0;
+ value = Math.imul(value, constant) >>> 0;
+ words[i] = (value ^ (value >>> XSHIFT)) >>> 0;
+ }
+
+ // numpy views the uint32 words as little-endian uint64s.
+ const state = new BigUint64Array(wordCount);
+ for (let i = 0; i < wordCount; i += 1) {
+ state[i] = BigInt(words[2 * i]) | (BigInt(words[2 * i + 1]) << 32n);
+ }
+ return state;
+}
diff --git a/additions/juggler/input/cursory/random/ziggurat.js b/additions/juggler/input/cursory/random/ziggurat.js
new file mode 100644
index 000000000..e8049b913
--- /dev/null
+++ b/additions/juggler/input/cursory/random/ziggurat.js
@@ -0,0 +1,213 @@
+// Ziggurat tables for the standard-normal generator, transcribed verbatim from
+// numpy/random/src/distributions/ziggurat_constants.h (numpy 2.3.5, BSD-3-Clause).
+// Reproducing numpy's exact stream requires these exact values.
+
+/** Rejection thresholds, compared against the 52-bit magnitude of each draw. */
+export const KI_DOUBLE = [
+ 0x000EF33D8025EF6An, 0x0000000000000000n, 0x000C08BE98FBC6A8n, 0x000DA354FABD8142n,
+ 0x000E51F67EC1EEEAn, 0x000EB255E9D3F77En, 0x000EEF4B817ECAB9n, 0x000F19470AFA44AAn,
+ 0x000F37ED61FFCB18n, 0x000F4F469561255Cn, 0x000F61A5E41BA396n, 0x000F707A755396A4n,
+ 0x000F7CB2EC28449An, 0x000F86F10C6357D3n, 0x000F8FA6578325DEn, 0x000F9724C74DD0DAn,
+ 0x000F9DA907DBF509n, 0x000FA360F581FA74n, 0x000FA86FDE5B4BF8n, 0x000FACF160D354DCn,
+ 0x000FB0FB6718B90Fn, 0x000FB49F8D5374C6n, 0x000FB7EC2366FE77n, 0x000FBAECE9A1E50En,
+ 0x000FBDAB9D040BEDn, 0x000FC03060FF6C57n, 0x000FC2821037A248n, 0x000FC4A67AE25BD1n,
+ 0x000FC6A2977AEE31n, 0x000FC87AA92896A4n, 0x000FCA325E4BDE85n, 0x000FCBCCE902231An,
+ 0x000FCD4D12F839C4n, 0x000FCEB54D8FEC99n, 0x000FD007BF1DC930n, 0x000FD1464DD6C4E6n,
+ 0x000FD272A8E2F450n, 0x000FD38E4FF0C91En, 0x000FD49A9990B478n, 0x000FD598B8920F53n,
+ 0x000FD689C08E99ECn, 0x000FD76EA9C8E832n, 0x000FD848547B08E8n, 0x000FD9178BAD2C8Cn,
+ 0x000FD9DD07A7ADD2n, 0x000FDA9970105E8Cn, 0x000FDB4D5DC02E20n, 0x000FDBF95C5BFCD0n,
+ 0x000FDC9DEBB99A7Dn, 0x000FDD3B8118729Dn, 0x000FDDD288342F90n, 0x000FDE6364369F64n,
+ 0x000FDEEE708D514En, 0x000FDF7401A6B42En, 0x000FDFF46599ED40n, 0x000FE06FE4BC24F2n,
+ 0x000FE0E6C225A258n, 0x000FE1593C28B84Cn, 0x000FE1C78CBC3F99n, 0x000FE231E9DB1CAAn,
+ 0x000FE29885DA1B91n, 0x000FE2FB8FB54186n, 0x000FE35B33558D4An, 0x000FE3B799D0002An,
+ 0x000FE410E99EAD7Fn, 0x000FE46746D47734n, 0x000FE4BAD34C095Cn, 0x000FE50BAED29524n,
+ 0x000FE559F74EBC78n, 0x000FE5A5C8E41212n, 0x000FE5EF3E138689n, 0x000FE6366FD91078n,
+ 0x000FE67B75C6D578n, 0x000FE6BE661E11AAn, 0x000FE6FF55E5F4F2n, 0x000FE73E5900A702n,
+ 0x000FE77B823E9E39n, 0x000FE7B6E37070A2n, 0x000FE7F08D774243n, 0x000FE8289053F08Cn,
+ 0x000FE85EFB35173An, 0x000FE893DC840864n, 0x000FE8C741F0CEBCn, 0x000FE8F9387D4EF6n,
+ 0x000FE929CC879B1Dn, 0x000FE95909D388EAn, 0x000FE986FB939AA2n, 0x000FE9B3AC714866n,
+ 0x000FE9DF2694B6D5n, 0x000FEA0973ABE67Cn, 0x000FEA329CF166A4n, 0x000FEA5AAB32952Cn,
+ 0x000FEA81A6D5741An, 0x000FEAA797DE1CF0n, 0x000FEACC85F3D920n, 0x000FEAF07865E63Cn,
+ 0x000FEB13762FEC13n, 0x000FEB3585FE2A4An, 0x000FEB56AE3162B4n, 0x000FEB76F4E284FAn,
+ 0x000FEB965FE62014n, 0x000FEBB4F4CF9D7Cn, 0x000FEBD2B8F449D0n, 0x000FEBEFB16E2E3En,
+ 0x000FEC0BE31EBDE8n, 0x000FEC2752B15A15n, 0x000FEC42049DAFD3n, 0x000FEC5BFD29F196n,
+ 0x000FEC75406CEEF4n, 0x000FEC8DD2500CB4n, 0x000FECA5B6911F12n, 0x000FECBCF0C427FEn,
+ 0x000FECD38454FB15n, 0x000FECE97488C8B3n, 0x000FECFEC47F91B7n, 0x000FED1377358528n,
+ 0x000FED278F844903n, 0x000FED3B10242F4Cn, 0x000FED4DFBAD586En, 0x000FED605498C3DDn,
+ 0x000FED721D414FE8n, 0x000FED8357E4A982n, 0x000FED9406A42CC8n, 0x000FEDA42B85B704n,
+ 0x000FEDB3C8746AB4n, 0x000FEDC2DF416652n, 0x000FEDD171A46E52n, 0x000FEDDF813C8AD3n,
+ 0x000FEDED0F909980n, 0x000FEDFA1E0FD414n, 0x000FEE06AE124BC4n, 0x000FEE12C0D95A06n,
+ 0x000FEE1E579006E0n, 0x000FEE29734B6524n, 0x000FEE34150AE4BCn, 0x000FEE3E3DB89B3Cn,
+ 0x000FEE47EE2982F4n, 0x000FEE51271DB086n, 0x000FEE59E9407F41n, 0x000FEE623528B42En,
+ 0x000FEE6A0B5897F1n, 0x000FEE716C3E077An, 0x000FEE7858327B82n, 0x000FEE7ECF7B06BAn,
+ 0x000FEE84D2484AB2n, 0x000FEE8A60B66343n, 0x000FEE8F7ACCC851n, 0x000FEE94207E25DAn,
+ 0x000FEE9851A829EAn, 0x000FEE9C0E13485Cn, 0x000FEE9F557273F4n, 0x000FEEA22762CCAEn,
+ 0x000FEEA4836B42ACn, 0x000FEEA668FC2D71n, 0x000FEEA7D76ED6FAn, 0x000FEEA8CE04FA0An,
+ 0x000FEEA94BE8333Bn, 0x000FEEA950296410n, 0x000FEEA8D9C0075En, 0x000FEEA7E7897654n,
+ 0x000FEEA678481D24n, 0x000FEEA48AA29E83n, 0x000FEEA21D22E4DAn, 0x000FEE9F2E352024n,
+ 0x000FEE9BBC26AF2En, 0x000FEE97C524F2E4n, 0x000FEE93473C0A3An, 0x000FEE8E40557516n,
+ 0x000FEE88AE369C7An, 0x000FEE828E7F3DFDn, 0x000FEE7BDEA7B888n, 0x000FEE749BFF37FFn,
+ 0x000FEE6CC3A9BD5En, 0x000FEE64529E007En, 0x000FEE5B45A32888n, 0x000FEE51994E57B6n,
+ 0x000FEE474A0006CFn, 0x000FEE3C53E12C50n, 0x000FEE30B2E02AD8n, 0x000FEE2462AD8205n,
+ 0x000FEE175EB83C5An, 0x000FEE09A22A1447n, 0x000FEDFB27E349CCn, 0x000FEDEBEA76216Cn,
+ 0x000FEDDBE422047En, 0x000FEDCB0ECE39D3n, 0x000FEDB964042CF4n, 0x000FEDA6DCE938C9n,
+ 0x000FED937237E98Dn, 0x000FED7F1C38A836n, 0x000FED69D2B9C02Bn, 0x000FED538D06AE00n,
+ 0x000FED3C41DEA422n, 0x000FED23E76A2FD8n, 0x000FED0A732FE644n, 0x000FECEFDA07FE34n,
+ 0x000FECD4100EB7B8n, 0x000FECB708956EB4n, 0x000FEC98B61230C1n, 0x000FEC790A0DA978n,
+ 0x000FEC57F50F31FEn, 0x000FEC356686C962n, 0x000FEC114CB4B335n, 0x000FEBEB948E6FD0n,
+ 0x000FEBC429A0B692n, 0x000FEB9AF5EE0CDCn, 0x000FEB6FE1C98542n, 0x000FEB42D3AD1F9En,
+ 0x000FEB13B00B2D4Bn, 0x000FEAE2591A02E9n, 0x000FEAAEAE992257n, 0x000FEA788D8EE326n,
+ 0x000FEA3FCFFD73E5n, 0x000FEA044C8DD9F6n, 0x000FE9C5D62F563Bn, 0x000FE9843BA947A4n,
+ 0x000FE93F471D4728n, 0x000FE8F6BD76C5D6n, 0x000FE8AA5DC4E8E6n, 0x000FE859E07AB1EAn,
+ 0x000FE804F690A940n, 0x000FE7AB488233C0n, 0x000FE74C751F6AA5n, 0x000FE6E8102AA202n,
+ 0x000FE67DA0B6ABD8n, 0x000FE60C9F38307En, 0x000FE5947338F742n, 0x000FE51470977280n,
+ 0x000FE48BD436F458n, 0x000FE3F9BFFD1E37n, 0x000FE35D35EEB19Cn, 0x000FE2B5122FE4FEn,
+ 0x000FE20003995557n, 0x000FE13C82788314n, 0x000FE068C4EE67B0n, 0x000FDF82B02B71AAn,
+ 0x000FDE87C57EFEAAn, 0x000FDD7509C63BFDn, 0x000FDC46E529BF13n, 0x000FDAF8F82E0282n,
+ 0x000FD985E1B2BA75n, 0x000FD7E6EF48CF04n, 0x000FD613ADBD650Bn, 0x000FD40149E2F012n,
+ 0x000FD1A1A7B4C7ACn, 0x000FCEE204761F9En, 0x000FCBA8D85E11B2n, 0x000FC7D26ECD2D22n,
+ 0x000FC32B2F1E22EDn, 0x000FBD6581C0B83An, 0x000FB606C4005434n, 0x000FAC40582A2874n,
+ 0x000F9E971E014598n, 0x000F89FA48A41DFCn, 0x000F66C5F7F0302Cn, 0x000F1A5A4B331C4An,
+];
+
+/** Per-layer width used to scale a draw into a coordinate. */
+export const WI_DOUBLE = [
+ 8.68362706080130616677e-16, 4.77933017572773682428e-17, 6.35435241740526230246e-17, 7.45487048124769627714e-17,
+ 8.32936681579309972857e-17, 9.06806040505948228243e-17, 9.71486007656776183958e-17, 1.02947503142410192108e-16,
+ 1.08234302884476839838e-16, 1.13114701961090307945e-16, 1.17663594570229211411e-16, 1.21936172787143633280e-16,
+ 1.25974399146370927864e-16, 1.29810998862640315416e-16, 1.33472037368241227547e-16, 1.36978648425712032797e-16,
+ 1.40348230012423820659e-16, 1.43595294520569430270e-16, 1.46732087423644219083e-16, 1.49769046683910367425e-16,
+ 1.52715150035961979750e-16, 1.55578181694607639484e-16, 1.58364940092908853989e-16, 1.61081401752749279325e-16,
+ 1.63732852039698532012e-16, 1.66323990584208352778e-16, 1.68859017086765964015e-16, 1.71341701765596607184e-16,
+ 1.73775443658648593310e-16, 1.76163319230009959832e-16, 1.78508123169767272927e-16, 1.80812402857991522674e-16,
+ 1.83078487648267501776e-16, 1.85308513886180189386e-16, 1.87504446393738816849e-16, 1.89668097007747596212e-16,
+ 1.91801140648386198029e-16, 1.93905129306251037069e-16, 1.95981504266288244037e-16, 1.98031606831281739736e-16,
+ 2.00056687762733300198e-16, 2.02057915620716538808e-16, 2.04036384154802118313e-16, 2.05993118874037063144e-16,
+ 2.07929082904140197311e-16, 2.09845182223703516690e-16, 2.11742270357603418769e-16, 2.13621152594498681022e-16,
+ 2.15482589785814580926e-16, 2.17327301775643674990e-16, 2.19155970504272708519e-16, 2.20969242822353175995e-16,
+ 2.22767733047895534948e-16, 2.24552025294143552381e-16, 2.26322675592856786566e-16, 2.28080213834501706782e-16,
+ 2.29825145544246839061e-16, 2.31557953510408037008e-16, 2.33279099280043561128e-16, 2.34989024534709550938e-16,
+ 2.36688152357916037468e-16, 2.38376888404542434981e-16, 2.40055621981350627349e-16, 2.41724727046750252175e-16,
+ 2.43384563137110286400e-16, 2.45035476226149539878e-16, 2.46677799523270498158e-16, 2.48311854216108767769e-16,
+ 2.49937950162045242375e-16, 2.51556386532965786439e-16, 2.53167452417135826983e-16, 2.54771427381694417303e-16,
+ 2.56368581998939683749e-16, 2.57959178339286723500e-16, 2.59543470433517070146e-16, 2.61121704706701939097e-16,
+ 2.62694120385972564623e-16, 2.64260949884118951286e-16, 2.65822419160830680292e-16, 2.67378748063236329361e-16,
+ 2.68930150647261591777e-16, 2.70476835481199518794e-16, 2.72019005932773206655e-16, 2.73556860440867908686e-16,
+ 2.75090592773016664571e-16, 2.76620392269639032183e-16, 2.78146444075954410103e-16, 2.79668929362423005309e-16,
+ 2.81188025534502074329e-16, 2.82703906432447923059e-16, 2.84216742521840606520e-16, 2.85726701075460149289e-16,
+ 2.87233946347097994381e-16, 2.88738639737848191815e-16, 2.90240939955384233230e-16, 2.91741003166694553259e-16,
+ 2.93238983144718163965e-16, 2.94735031409293489611e-16, 2.96229297362806647792e-16, 2.97721928420902891115e-16,
+ 2.99213070138601307081e-16, 3.00702866332133102993e-16, 3.02191459196806151971e-16, 3.03678989421180184427e-16,
+ 3.05165596297821922381e-16, 3.06651417830895451744e-16, 3.08136590840829717032e-16, 3.09621251066292253306e-16,
+ 3.11105533263689296831e-16, 3.12589571304399892784e-16, 3.14073498269944617203e-16, 3.15557446545280064031e-16,
+ 3.17041547910402852545e-16, 3.18525933630440648871e-16, 3.20010734544401137886e-16, 3.21496081152744704901e-16,
+ 3.22982103703941557538e-16, 3.24468932280169778077e-16, 3.25956696882307838340e-16, 3.27445527514370671802e-16,
+ 3.28935554267536967851e-16, 3.30426907403912838589e-16, 3.31919717440175233652e-16, 3.33414115231237245918e-16,
+ 3.34910232054077845412e-16, 3.36408199691876507948e-16, 3.37908150518594979994e-16, 3.39410217584148914282e-16,
+ 3.40914534700312603713e-16, 3.42421236527501816058e-16, 3.43930458662583133920e-16, 3.45442337727858401604e-16,
+ 3.46957011461378353333e-16, 3.48474618808741370700e-16, 3.49995300016538099813e-16, 3.51519196727607440975e-16,
+ 3.53046452078274009054e-16, 3.54577210797743572160e-16, 3.56111619309838843415e-16, 3.57649825837265051035e-16,
+ 3.59191980508602994994e-16, 3.60738235468235137839e-16, 3.62288744989419151904e-16, 3.63843665590734438546e-16,
+ 3.65403156156136995766e-16, 3.66967378058870090021e-16, 3.68536495289491401456e-16, 3.70110674588289834952e-16,
+ 3.71690085582382297792e-16, 3.73274900927794352614e-16, 3.74865296456848868882e-16, 3.76461451331202869131e-16,
+ 3.78063548200896037651e-16, 3.79671773369794425924e-16, 3.81286316967837738238e-16, 3.82907373130524317507e-16,
+ 3.84535140186095955858e-16, 3.86169820850914927119e-16, 3.87811622433558721164e-16, 3.89460757048192620674e-16,
+ 3.91117441837820542060e-16, 3.92781899208054153270e-16, 3.94454357072087711446e-16, 3.96135049107613542983e-16,
+ 3.97824215026468259474e-16, 3.99522100857856502444e-16, 4.01228959246062907451e-16, 4.02945049763632792393e-16,
+ 4.04670639241074995115e-16, 4.06406002114225038723e-16, 4.08151420790493873480e-16, 4.09907186035326643447e-16,
+ 4.11673597380302570170e-16, 4.13450963554423599878e-16, 4.15239602940268833891e-16, 4.17039844056831587498e-16,
+ 4.18852026071011229572e-16, 4.20676499339901510978e-16, 4.22513625986204937320e-16, 4.24363780509307796137e-16,
+ 4.26227350434779809917e-16, 4.28104737005311666397e-16, 4.29996355916383230161e-16, 4.31902638100262944617e-16,
+ 4.33824030562279080411e-16, 4.35760997273684900553e-16, 4.37714020125858747008e-16, 4.39683599951052137423e-16,
+ 4.41670257615420348435e-16, 4.43674535190656726604e-16, 4.45696997211204306674e-16, 4.47738232024753387312e-16,
+ 4.49798853244554968009e-16, 4.51879501313005876278e-16, 4.53980845187003400947e-16, 4.56103584156742206384e-16,
+ 4.58248449810956667052e-16, 4.60416208163115281428e-16, 4.62607661954784567754e-16, 4.64823653154320737780e-16,
+ 4.67065065671263059081e-16, 4.69332828309332890697e-16, 4.71627917983835129766e-16, 4.73951363232586715165e-16,
+ 4.76304248053313737663e-16, 4.78687716104872284247e-16, 4.81102975314741720538e-16, 4.83551302941152515162e-16,
+ 4.86034051145081195402e-16, 4.88552653135360343280e-16, 4.91108629959526955862e-16, 4.93703598024033454728e-16,
+ 4.96339277440398725619e-16, 4.99017501309182245754e-16, 5.01740226071808946011e-16, 5.04509543081872748637e-16,
+ 5.07327691573354207058e-16, 5.10197073234156184149e-16, 5.13120268630678373200e-16, 5.16100055774322824569e-16,
+ 5.19139431175769859873e-16, 5.22241633800023428760e-16, 5.25410172417759732697e-16, 5.28648856950494511482e-16,
+ 5.31961834533840037535e-16, 5.35353631181649688145e-16, 5.38829200133405320160e-16, 5.42393978220171234073e-16,
+ 5.46053951907478041166e-16, 5.49815735089281410703e-16, 5.53686661246787600374e-16, 5.57674893292657647836e-16,
+ 5.61789555355541665830e-16, 5.66040892008242216739e-16, 5.70440462129138908417e-16, 5.75001376891989523684e-16,
+ 5.79738594572459365014e-16, 5.84669289345547900201e-16, 5.89813317647789942685e-16, 5.95193814964144415532e-16,
+ 6.00837969627190832234e-16, 6.06778040933344851394e-16, 6.13052720872528159123e-16, 6.19708989458162555387e-16,
+ 6.26804696330128439415e-16, 6.34412240712750598627e-16, 6.42623965954805540945e-16, 6.51560331734499356881e-16,
+ 6.61382788509766415145e-16, 6.72315046250558662913e-16, 6.84680341756425875856e-16, 6.98971833638761995415e-16,
+ 7.15999493483066421560e-16, 7.37242430179879890722e-16, 7.65893637080557275482e-16, 8.11384933765648418565e-16,
+];
+
+/** Per-layer density used by the wedge rejection test. */
+export const FI_DOUBLE = [
+ 1.00000000000000000000e+00, 9.77101701267671596263e-01, 9.59879091800106665211e-01, 9.45198953442299649730e-01,
+ 9.32060075959230460718e-01, 9.19991505039347012840e-01, 9.08726440052130879366e-01, 8.98095921898343418910e-01,
+ 8.87984660755833377088e-01, 8.78309655808917399966e-01, 8.69008688036857046555e-01, 8.60033621196331532488e-01,
+ 8.51346258458677951353e-01, 8.42915653112204177333e-01, 8.34716292986883434679e-01, 8.26726833946221373317e-01,
+ 8.18929191603702366642e-01, 8.11307874312656274185e-01, 8.03849483170964274059e-01, 7.96542330422958966274e-01,
+ 7.89376143566024590648e-01, 7.82341832654802504798e-01, 7.75431304981187174974e-01, 7.68637315798486264740e-01,
+ 7.61953346836795386565e-01, 7.55373506507096115214e-01, 7.48892447219156820459e-01, 7.42505296340151055290e-01,
+ 7.36207598126862650112e-01, 7.29995264561476231435e-01, 7.23864533468630222401e-01, 7.17811932630721960535e-01,
+ 7.11834248878248421200e-01, 7.05928501332754310127e-01, 7.00091918136511615067e-01, 6.94321916126116711609e-01,
+ 6.88616083004671808432e-01, 6.82972161644994857355e-01, 6.77388036218773526009e-01, 6.71861719897082099173e-01,
+ 6.66391343908750100056e-01, 6.60975147776663107813e-01, 6.55611470579697264149e-01, 6.50298743110816701574e-01,
+ 6.45035480820822293424e-01, 6.39820277453056585060e-01, 6.34651799287623608059e-01, 6.29528779924836690007e-01,
+ 6.24450015547026504592e-01, 6.19414360605834324325e-01, 6.14420723888913888899e-01, 6.09468064925773433949e-01,
+ 6.04555390697467776029e-01, 5.99681752619125263415e-01, 5.94846243767987448159e-01, 5.90047996332826008015e-01,
+ 5.85286179263371453274e-01, 5.80559996100790898232e-01, 5.75868682972353718164e-01, 5.71211506735253227163e-01,
+ 5.66587763256164445025e-01, 5.61996775814524340831e-01, 5.57437893618765945014e-01, 5.52910490425832290562e-01,
+ 5.48413963255265812791e-01, 5.43947731190026262382e-01, 5.39511234256952132426e-01, 5.35103932380457614215e-01,
+ 5.30725304403662057062e-01, 5.26374847171684479008e-01, 5.22052074672321841931e-01, 5.17756517229756352272e-01,
+ 5.13487720747326958914e-01, 5.09245245995747941592e-01, 5.05028667943468123624e-01, 5.00837575126148681903e-01,
+ 4.96671569052489714213e-01, 4.92530263643868537748e-01, 4.88413284705458028423e-01, 4.84320269426683325253e-01,
+ 4.80250865909046753544e-01, 4.76204732719505863248e-01, 4.72181538467730199660e-01, 4.68180961405693596422e-01,
+ 4.64202689048174355069e-01, 4.60246417812842867345e-01, 4.56311852678716434184e-01, 4.52398706861848520777e-01,
+ 4.48506701507203064949e-01, 4.44635565395739396077e-01, 4.40785034665803987508e-01, 4.36954852547985550526e-01,
+ 4.33144769112652261445e-01, 4.29354541029441427735e-01, 4.25583931338021970170e-01, 4.21832709229495894654e-01,
+ 4.18100649837848226120e-01, 4.14387534040891125642e-01, 4.10693148270188157500e-01, 4.07017284329473372217e-01,
+ 4.03359739221114510510e-01, 3.99720314980197222177e-01, 3.96098818515832451492e-01, 3.92495061459315619512e-01,
+ 3.88908860018788715696e-01, 3.85340034840077283462e-01, 3.81788410873393657674e-01, 3.78253817245619183840e-01,
+ 3.74736087137891138443e-01, 3.71235057668239498696e-01, 3.67750569779032587814e-01, 3.64282468129004055601e-01,
+ 3.60830600989648031529e-01, 3.57394820145780500731e-01, 3.53974980800076777232e-01, 3.50570941481406106455e-01,
+ 3.47182563956793643900e-01, 3.43809713146850715049e-01, 3.40452257044521866547e-01, 3.37110066637006045021e-01,
+ 3.33783015830718454708e-01, 3.30470981379163586400e-01, 3.27173842813601400970e-01, 3.23891482376391093290e-01,
+ 3.20623784956905355514e-01, 3.17370638029913609834e-01, 3.14131931596337177215e-01, 3.10907558126286509559e-01,
+ 3.07697412504292056035e-01, 3.04501391976649993243e-01, 3.01319396100803049698e-01, 2.98151326696685481377e-01,
+ 2.94997087799961810184e-01, 2.91856585617095209972e-01, 2.88729728482182923521e-01, 2.85616426815501756042e-01,
+ 2.82516593083707578948e-01, 2.79430141761637940157e-01, 2.76356989295668320494e-01, 2.73297054068577072172e-01,
+ 2.70250256365875463072e-01, 2.67216518343561471038e-01, 2.64195763997261190426e-01, 2.61187919132721213522e-01,
+ 2.58192911337619235290e-01, 2.55210669954661961700e-01, 2.52241126055942177508e-01, 2.49284212418528522415e-01,
+ 2.46339863501263828249e-01, 2.43408015422750312329e-01, 2.40488605940500588254e-01, 2.37581574431238090606e-01,
+ 2.34686861872330010392e-01, 2.31804410824338724684e-01, 2.28934165414680340644e-01, 2.26076071322380278694e-01,
+ 2.23230075763917484855e-01, 2.20396127480151998723e-01, 2.17574176724331130872e-01, 2.14764175251173583536e-01,
+ 2.11966076307030182324e-01, 2.09179834621125076977e-01, 2.06405406397880797353e-01, 2.03642749310334908452e-01,
+ 2.00891822494656591136e-01, 1.98152586545775138971e-01, 1.95425003514134304483e-01, 1.92709036903589175926e-01,
+ 1.90004651670464985713e-01, 1.87311814223800304768e-01, 1.84630492426799269756e-01, 1.81960655599522513892e-01,
+ 1.79302274522847582272e-01, 1.76655321443734858455e-01, 1.74019770081838553999e-01, 1.71395595637505754327e-01,
+ 1.68782774801211288285e-01, 1.66181285764481906364e-01, 1.63591108232365584074e-01, 1.61012223437511009516e-01,
+ 1.58444614155924284882e-01, 1.55888264724479197465e-01, 1.53343161060262855866e-01, 1.50809290681845675763e-01,
+ 1.48286642732574552861e-01, 1.45775208005994028060e-01, 1.43274978973513461566e-01, 1.40785949814444699690e-01,
+ 1.38308116448550733057e-01, 1.35841476571253755301e-01, 1.33386029691669155683e-01, 1.30941777173644358090e-01,
+ 1.28508722279999570981e-01, 1.26086870220185887081e-01, 1.23676228201596571932e-01, 1.21276805484790306533e-01,
+ 1.18888613442910059947e-01, 1.16511665625610869035e-01, 1.14145977827838487895e-01, 1.11791568163838089811e-01,
+ 1.09448457146811797824e-01, 1.07116667774683801961e-01, 1.04796225622487068629e-01, 1.02487158941935246892e-01,
+ 1.00189498768810017482e-01, 9.79032790388624646338e-02, 9.56285367130089991594e-02, 9.33653119126910124859e-02,
+ 9.11136480663737591268e-02, 8.88735920682758862021e-02, 8.66451944505580717859e-02, 8.44285095703534715916e-02,
+ 8.22235958132029043366e-02, 8.00305158146630696292e-02, 7.78493367020961224423e-02, 7.56801303589271778804e-02,
+ 7.35229737139813238622e-02, 7.13779490588904025339e-02, 6.92451443970067553879e-02, 6.71246538277884968737e-02,
+ 6.50165779712428976156e-02, 6.29210244377581412456e-02, 6.08381083495398780614e-02, 5.87679529209337372930e-02,
+ 5.67106901062029017391e-02, 5.46664613248889208474e-02, 5.26354182767921896513e-02, 5.06177238609477817000e-02,
+ 4.86135532158685421122e-02, 4.66230949019303814174e-02, 4.46465522512944634759e-02, 4.26841449164744590750e-02,
+ 4.07361106559409394401e-02, 3.88027074045261474722e-02, 3.68842156885673053135e-02, 3.49809414617161251737e-02,
+ 3.30932194585785779961e-02, 3.12214171919203004046e-02, 2.93659397581333588001e-02, 2.75272356696031131329e-02,
+ 2.57058040085489103443e-02, 2.39022033057958785407e-02, 2.21170627073088502113e-02, 2.03510962300445102935e-02,
+ 1.86051212757246224594e-02, 1.68800831525431419000e-02, 1.51770883079353092332e-02, 1.34974506017398673818e-02,
+ 1.18427578579078790488e-02, 1.02149714397014590439e-02, 8.61658276939872638800e-03, 7.05087547137322242369e-03,
+ 5.52240329925099155545e-03, 4.03797259336302356153e-03, 2.60907274610215926189e-03, 1.26028593049859797236e-03,
+];
+
+/** Start of the ziggurat's infinite tail. */
+export const ZIGGURAT_NOR_R = 3.6541528853610087963519472518;
+
+/** 1 / ZIGGURAT_NOR_R. */
+export const ZIGGURAT_NOR_INV_R = 0.27366123732975827203338247596;
diff --git a/additions/juggler/input/cursory/trajectories.json b/additions/juggler/input/cursory/trajectories.json
new file mode 100644
index 000000000..76291a558
--- /dev/null
+++ b/additions/juggler/input/cursory/trajectories.json
@@ -0,0 +1 @@
+[{"start":[1004,150],"end":[1160,354],"points":[[1006,150],[1006,149],[1005,149],[1003,149],[1001,149],[998,149],[996,149],[992,149],[989,149],[984,149],[979,150],[972,152],[961,154],[953,157],[945,158],[934,162],[920,164],[906,167],[890,170],[875,173],[858,175],[841,178],[830,181],[815,185],[804,188],[792,193],[782,198],[776,202],[770,207],[767,212],[766,214],[766,216],[766,217],[766,218],[770,222],[779,227],[793,234],[808,243],[828,255],[848,267],[868,279],[890,292],[908,303],[926,314],[942,324],[956,332],[972,339],[986,344],[1000,350],[1017,355],[1035,360],[1050,363],[1064,368],[1073,370],[1083,370],[1088,370],[1092,370],[1096,370],[1099,370],[1103,370],[1105,370],[1108,370],[1112,372],[1114,372],[1117,372],[1120,372],[1121,372],[1123,372],[1124,372],[1128,372],[1130,372],[1133,372],[1136,372],[1137,372],[1139,372],[1140,372],[1143,370],[1144,369],[1148,367],[1149,365],[1152,362],[1155,361],[1156,358],[1158,356],[1159,355],[1160,354]],"dx":156,"dy":204,"length":699.4584860101899,"timing":[0,7,49,56,63,70,77,84,91,97,104,111,118,125,132,139,146,153,160,167,174,182,188,195,202,209,216,223,229,237,243,253,258,264,271,278,285,292,299,306,313,320,327,334,341,347,354,361,368,375,382,389,396,403,410,417,424,431,438,445,452,459,466,473,480,487,494,501,507,514,521,528,535,542,549,556,563,570,577,584,591,597,604,611,618,625]},{"start":[768,338],"end":[529,684],"points":[[769,338],[770,338],[771,339],[771,341],[772,341],[772,342],[772,343],[772,344],[772,345],[772,346],[772,347],[772,348],[772,350],[772,351],[769,355],[766,359],[764,364],[759,372],[754,382],[748,393],[740,404],[732,417],[721,435],[711,451],[699,469],[686,490],[672,507],[660,524],[641,548],[632,562],[621,574],[610,586],[604,592],[598,598],[596,602],[594,603],[594,604],[594,605],[596,605],[596,606],[599,607],[603,607],[605,607],[608,609],[610,610],[612,610],[612,611],[613,611],[614,611],[616,611],[616,613],[616,614],[616,616],[616,618],[613,622],[609,626],[604,631],[594,638],[583,646],[572,654],[564,661],[554,666],[548,670],[543,673],[540,675],[537,677],[535,678],[532,682],[530,682],[529,684]],"dx":-239,"dy":346,"length":470.1025850356533,"timing":[0,6,13,20,27,34,43,49,56,63,82,145,152,159,166,173,179,186,193,200,207,214,221,228,235,242,249,256,263,269,276,283,290,297,304,311,318,325,355,360,367,374,381,388,395,402,408,419,439,457,487,507,514,520,527,534,540,547,554,561,568,575,582,589,596,603,610,617,624,631]},{"start":[900,642],"end":[329,482],"points":[[900,642],[899,642],[897,641],[892,639],[886,635],[876,629],[860,621],[845,616],[829,611],[805,604],[786,600],[762,597],[734,590],[712,585],[683,579],[652,572],[620,563],[587,554],[553,546],[527,538],[504,532],[481,526],[466,523],[452,520],[440,517],[430,514],[421,512],[412,509],[405,506],[400,505],[392,503],[387,501],[383,501],[380,499],[376,498],[372,498],[369,497],[367,497],[365,497],[364,497],[362,497],[361,496],[358,495],[356,494],[352,493],[348,491],[345,490],[341,488],[338,486],[332,484],[331,482],[329,482]],"dx":-571,"dy":-160,"length":597.0720099955392,"timing":[0,175,180,187,194,201,208,215,222,229,236,243,250,257,264,271,278,284,292,298,305,312,319,326,333,340,347,354,361,368,375,382,389,396,403,409,416,423,430,437,535,542,549,556,564,569,576,583,590,597,604,612]},{"start":[755,527],"end":[1408,248],"points":[[756,527],[759,527],[764,527],[773,525],[784,519],[803,510],[824,500],[849,490],[876,475],[902,462],[929,448],[953,436],[984,422],[1012,407],[1041,393],[1071,378],[1099,366],[1122,355],[1142,346],[1159,338],[1172,331],[1182,327],[1188,325],[1194,324],[1196,322],[1199,322],[1200,322],[1201,322],[1201,320],[1204,319],[1205,318],[1208,318],[1211,316],[1215,314],[1220,313],[1228,310],[1235,308],[1245,305],[1256,302],[1268,298],[1278,294],[1289,290],[1303,286],[1314,281],[1328,276],[1340,271],[1349,267],[1360,264],[1369,261],[1375,258],[1382,256],[1388,254],[1392,252],[1396,251],[1399,250],[1401,250],[1404,249],[1406,249],[1408,248]],"dx":653,"dy":-279,"length":714.3920250714596,"timing":[0,6,13,20,27,34,41,48,55,62,69,76,83,90,97,104,111,117,124,131,138,145,152,159,166,173,180,216,222,229,236,244,250,256,263,271,277,284,291,299,305,312,319,326,333,340,347,354,361,367,375,381,388,395,402,409,416,424,444]},{"start":[521,610],"end":[1100,584],"points":[[523,610],[524,610],[526,610],[528,610],[530,609],[532,608],[535,607],[539,606],[543,603],[548,602],[555,598],[564,594],[578,587],[595,581],[616,573],[640,563],[668,552],[695,543],[727,535],[748,532],[771,528],[790,527],[807,527],[820,527],[837,530],[853,534],[868,539],[884,548],[902,558],[916,566],[934,578],[947,584],[960,590],[971,595],[980,597],[988,601],[995,601],[1000,602],[1004,603],[1008,603],[1010,603],[1013,603],[1015,603],[1016,603],[1017,603],[1019,603],[1022,604],[1024,604],[1027,604],[1031,604],[1034,604],[1038,604],[1044,603],[1048,602],[1053,602],[1058,600],[1064,600],[1069,598],[1073,596],[1079,595],[1084,592],[1088,590],[1091,590],[1094,588],[1096,586],[1098,586],[1100,585],[1100,584]],"dx":579,"dy":-26,"length":615.0776577607105,"timing":[0,7,13,20,27,34,41,48,55,62,69,76,83,90,97,104,111,117,125,131,138,145,152,159,166,173,180,187,194,201,208,215,222,229,236,242,249,256,264,272,277,284,297,352,354,361,368,375,382,389,395,402,409,416,423,430,437,444,451,458,465,472,479,486,493,499,507,520]},{"start":[1221,574],"end":[1281,249],"points":[[1221,574],[1221,572],[1221,570],[1224,558],[1225,546],[1228,527],[1230,509],[1233,484],[1237,468],[1241,452],[1248,442],[1254,431],[1260,424],[1264,418],[1270,410],[1275,399],[1280,390],[1284,381],[1287,369],[1291,361],[1293,354],[1295,348],[1295,345],[1296,342],[1296,340],[1296,339],[1296,338],[1295,337],[1293,335],[1293,334],[1291,332],[1289,330],[1287,326],[1284,322],[1280,319],[1278,314],[1275,308],[1272,302],[1270,294],[1268,287],[1268,281],[1268,274],[1268,270],[1268,266],[1268,262],[1268,261],[1268,260],[1269,258],[1270,257],[1271,255],[1272,253],[1275,251],[1276,250],[1278,250],[1278,249],[1280,249],[1281,249]],"dx":60,"dy":-325,"length":358.2382067426428,"timing":[0,241,243,250,257,264,271,278,285,292,299,305,312,319,326,333,340,347,354,361,368,375,382,389,396,403,470,477,481,486,493,500,507,514,521,528,535,541,548,555,562,569,576,583,591,601,641,646,653,660,667,674,681,687,694,701,709]},{"start":[1287,322],"end":[680,314],"points":[[1285,322],[1284,322],[1283,322],[1282,322],[1281,322],[1280,322],[1278,322],[1276,322],[1274,322],[1269,322],[1262,322],[1253,319],[1244,317],[1231,315],[1219,314],[1204,313],[1194,313],[1182,313],[1169,313],[1157,314],[1142,315],[1128,317],[1112,317],[1099,317],[1087,317],[1072,317],[1057,315],[1044,313],[1024,308],[1003,302],[981,294],[960,286],[941,280],[923,275],[906,274],[893,273],[878,271],[866,271],[851,271],[839,271],[828,271],[819,270],[811,270],[805,267],[800,267],[796,267],[796,266],[795,266],[794,266],[793,267],[792,267],[788,269],[785,271],[782,273],[776,275],[772,278],[765,281],[759,285],[751,289],[742,293],[733,297],[724,300],[716,304],[707,306],[699,308],[692,310],[687,312],[682,314],[680,314]],"dx":-607,"dy":-8,"length":625.1830938702599,"timing":[0,6,31,42,49,54,61,66,72,79,86,93,100,107,114,121,128,135,142,149,156,163,170,176,183,190,197,204,211,218,225,232,239,246,253,260,267,274,281,288,295,301,308,315,324,329,337,369,399,406,413,420,427,434,440,447,454,461,468,475,482,489,496,503,510,517,524,531,538]},{"start":[1280,291],"end":[980,207],"points":[[1280,293],[1280,294],[1279,296],[1276,302],[1273,307],[1271,314],[1268,318],[1265,326],[1263,330],[1260,335],[1260,339],[1257,343],[1257,349],[1257,351],[1257,354],[1257,357],[1257,358],[1257,359],[1257,361],[1255,361],[1252,361],[1246,361],[1239,361],[1229,361],[1221,361],[1210,357],[1202,353],[1193,347],[1183,340],[1174,331],[1163,323],[1152,313],[1139,302],[1125,290],[1112,281],[1100,270],[1088,259],[1077,249],[1066,241],[1053,232],[1044,228],[1035,224],[1027,222],[1021,220],[1016,219],[1012,218],[1009,218],[1005,216],[1001,216],[996,214],[993,214],[991,213],[988,212],[985,211],[984,209],[981,209],[980,207]],"dx":-300,"dy":-84,"length":402.26716752933777,"timing":[0,5,11,18,25,32,39,46,53,60,66,74,81,87,94,101,108,156,164,172,178,185,191,198,205,213,219,226,233,240,247,254,261,268,275,282,289,296,302,310,317,323,330,337,344,351,358,365,372,379,386,393,400,407,414,421,428]},{"start":[112,314],"end":[603,552],"points":[[113,314],[115,314],[116,314],[116,315],[118,315],[120,315],[124,318],[128,318],[135,319],[147,322],[163,325],[184,331],[207,334],[226,341],[248,346],[272,354],[297,363],[321,374],[351,388],[380,405],[412,424],[446,447],[476,466],[507,486],[532,505],[553,521],[572,534],[591,544],[605,551],[619,556],[627,558],[636,560],[640,562],[644,562],[643,562],[642,562],[641,562],[636,562],[632,562],[628,560],[622,558],[616,557],[612,554],[608,554],[606,553],[604,553],[604,552],[603,552]],"dx":491,"dy":238,"length":639.0874766322008,"timing":[0,17,25,30,52,59,65,72,79,86,93,100,107,114,121,128,135,142,149,155,162,169,176,183,190,197,204,211,218,225,232,239,246,253,349,353,357,364,371,378,385,392,399,405,412,419,433,434]},{"start":[669,426],"end":[920,434],"points":[[671,426],[672,426],[673,430],[675,435],[676,442],[679,447],[684,454],[689,458],[694,465],[698,470],[700,474],[704,478],[708,483],[711,485],[715,487],[719,489],[723,490],[728,490],[732,490],[736,490],[744,491],[751,493],[759,494],[768,495],[780,498],[793,499],[808,502],[823,502],[837,502],[850,502],[860,501],[869,498],[877,493],[882,488],[885,483],[888,480],[889,474],[892,470],[893,466],[895,460],[897,457],[900,452],[902,449],[904,446],[908,443],[912,441],[914,439],[917,438],[919,436],[920,434]],"dx":251,"dy":8,"length":319.611738320634,"timing":[0,7,14,21,28,35,42,49,56,63,69,76,84,90,97,104,111,118,125,132,139,146,153,160,167,174,181,188,195,201,208,215,222,229,236,243,250,257,264,271,278,285,292,299,306,313,319,326,333,340]},{"start":[376,522],"end":[645,540],"points":[[377,522],[381,521],[386,518],[394,517],[403,514],[416,513],[433,510],[452,510],[472,508],[498,507],[516,507],[535,507],[552,507],[566,507],[575,507],[580,510],[581,510],[581,511],[581,512],[581,514],[581,518],[582,522],[582,526],[583,528],[584,530],[585,533],[587,534],[589,536],[591,537],[594,538],[596,538],[598,538],[600,540],[602,540],[604,540],[605,540],[606,540],[607,540],[608,540],[610,540],[611,540],[614,540],[617,540],[621,540],[624,540],[629,540],[634,540],[638,540],[643,540],[644,540],[645,540]],"dx":269,"dy":18,"length":292.8029434663524,"timing":[0,7,13,20,27,34,41,48,55,62,69,76,83,90,97,103,110,133,138,145,152,159,166,173,180,187,194,201,208,215,222,228,235,243,249,262,270,277,284,292,298,305,312,319,326,333,340,347,354,360,367]},{"start":[645,540],"end":[1196,257],"points":[[645,539],[645,538],[644,537],[642,535],[639,534],[637,533],[636,533],[636,531],[636,530],[638,524],[647,515],[660,500],[675,488],[690,474],[708,458],[723,445],[740,431],[759,416],[778,403],[800,390],[820,380],[844,369],[866,359],[888,350],[909,342],[929,335],[949,326],[966,322],[980,317],[993,313],[1003,309],[1011,307],[1022,305],[1032,302],[1044,301],[1057,298],[1064,298],[1072,297],[1077,296],[1084,294],[1090,294],[1097,292],[1105,290],[1112,289],[1119,287],[1124,286],[1128,284],[1131,283],[1132,282],[1133,281],[1135,280],[1136,280],[1139,278],[1142,277],[1146,275],[1151,273],[1159,270],[1164,267],[1175,265],[1183,262],[1190,259],[1194,258],[1196,257]],"dx":551,"dy":-283,"length":653.0681421020107,"timing":[0,8,11,18,27,32,39,46,67,73,80,88,94,101,109,115,122,129,136,143,150,157,164,171,178,185,192,198,205,212,220,226,233,240,247,254,261,268,275,282,289,296,303,310,317,323,330,337,344,351,359,365,372,379,386,393,400,407,414,421,428,435,441]},{"start":[885,400],"end":[1036,202],"points":[[886,400],[887,400],[892,400],[897,396],[906,386],[915,374],[924,358],[932,343],[938,329],[946,315],[953,303],[960,294],[968,286],[976,278],[984,271],[993,262],[1000,256],[1006,250],[1012,245],[1015,239],[1017,235],[1020,232],[1021,230],[1021,227],[1023,226],[1023,225],[1023,224],[1023,222],[1023,221],[1024,220],[1024,219],[1025,217],[1026,215],[1027,214],[1028,213],[1028,211],[1030,211],[1031,209],[1032,208],[1032,207],[1032,206],[1033,206],[1034,204],[1036,204],[1036,202]],"dx":151,"dy":-198,"length":258.8613710525681,"timing":[0,3,10,17,24,31,38,45,51,58,66,72,79,86,93,100,107,114,121,128,135,142,149,156,163,173,181,187,196,200,204,211,218,225,232,239,246,253,262,281,288,295,302,309,315]},{"start":[1036,202],"end":[454,152],"points":[[1036,203],[1032,207],[1030,211],[1027,217],[1024,222],[1020,228],[1018,236],[1016,243],[1015,250],[1014,257],[1014,263],[1014,268],[1014,272],[1013,277],[1012,281],[1009,286],[1004,292],[999,298],[988,302],[973,306],[956,309],[936,309],[908,309],[880,301],[849,288],[822,272],[792,254],[771,239],[744,220],[729,208],[713,196],[700,186],[692,179],[687,174],[682,169],[679,166],[676,163],[673,161],[672,161],[669,158],[666,158],[661,157],[656,156],[649,155],[641,155],[628,155],[617,155],[605,155],[592,158],[576,159],[561,162],[546,162],[529,165],[513,167],[496,169],[480,170],[463,171],[444,174],[430,174],[417,174],[408,174],[400,174],[395,174],[392,174],[389,172],[388,172],[388,170],[390,170],[393,168],[396,166],[399,165],[402,164],[405,162],[409,161],[412,161],[418,159],[422,158],[427,158],[432,157],[438,155],[442,154],[447,153],[449,152],[451,152],[452,152],[453,152],[454,152]],"dx":-582,"dy":-50,"length":838.2964055071623,"timing":[0,8,15,22,29,36,43,50,57,63,70,77,84,91,98,105,112,119,126,133,140,147,154,161,168,175,182,188,195,202,209,216,223,230,237,245,252,258,265,272,279,286,293,300,307,314,320,327,334,341,348,355,362,369,376,383,390,397,404,411,418,425,432,438,445,452,518,522,529,536,543,550,557,564,570,577,584,591,598,605,612,619,626,633,640,650,668]},{"start":[454,152],"end":[711,316],"points":[[455,152],[458,154],[460,158],[464,162],[466,166],[469,170],[473,171],[476,174],[480,177],[488,179],[496,181],[506,185],[521,190],[539,195],[560,202],[582,210],[602,219],[632,230],[653,239],[672,246],[688,253],[701,258],[711,259],[716,262],[721,265],[724,267],[727,269],[728,270],[729,270],[731,273],[731,274],[732,276],[732,279],[732,281],[732,283],[733,285],[735,286],[735,287],[735,288],[735,289],[735,290],[735,292],[735,294],[735,295],[735,296],[733,299],[730,302],[726,306],[720,311],[715,314],[712,316],[711,316]],"dx":257,"dy":164,"length":363.6493154299966,"timing":[0,7,14,20,27,34,41,48,55,62,69,76,83,90,97,104,111,118,125,132,139,146,152,159,166,173,180,187,194,201,208,215,222,229,236,243,250,258,264,271,279,290,297,303,306,312,319,326,333,340,347,354]},{"start":[206,297],"end":[868,261],"points":[[206,297],[207,297],[208,297],[209,297],[211,297],[212,297],[216,298],[222,300],[230,304],[239,308],[245,310],[253,314],[259,315],[265,318],[272,318],[280,319],[286,322],[297,322],[310,324],[325,326],[343,326],[362,326],[380,326],[404,326],[430,326],[460,326],[491,325],[526,318],[565,310],[605,303],[642,295],[680,290],[715,283],[746,279],[771,275],[799,272],[820,268],[838,265],[852,262],[868,258],[876,255],[884,254],[889,250],[895,249],[898,247],[900,246],[903,246],[904,246],[905,246],[905,244],[904,244],[900,244],[896,246],[891,248],[885,251],[879,254],[874,257],[871,258],[868,261]],"dx":662,"dy":-36,"length":756.9762667529885,"timing":[0,6,13,21,27,34,40,48,55,62,68,75,82,89,96,103,110,117,124,131,138,145,151,158,165,172,179,186,193,200,207,214,221,228,235,242,249,256,263,269,276,283,291,298,304,311,319,327,332,339,415,422,430,436,443,450,457,464,471]},{"start":[868,261],"end":[864,461],"points":[[867,262],[867,264],[866,268],[865,270],[863,274],[859,282],[852,291],[848,299],[845,305],[843,309],[839,313],[836,318],[833,322],[831,325],[828,328],[827,329],[825,330],[824,331],[822,331],[820,331],[816,334],[812,337],[809,341],[807,348],[806,357],[806,369],[806,384],[806,399],[813,414],[820,426],[830,438],[839,444],[844,449],[850,451],[855,454],[858,455],[860,457],[862,459],[863,459],[864,460],[864,461]],"dx":-4,"dy":200,"length":248.38039877717387,"timing":[0,7,14,21,28,35,42,49,56,62,69,76,83,90,98,104,112,118,181,188,195,202,209,215,222,229,236,243,250,257,264,271,278,285,292,299,306,313,320,327,334]},{"start":[863,461],"end":[1064,362],"points":[[862,461],[861,462],[860,462],[858,464],[860,461],[861,457],[862,453],[862,448],[862,443],[862,438],[862,432],[862,426],[862,421],[870,413],[882,404],[898,398],[912,393],[928,389],[941,385],[952,383],[961,382],[969,380],[976,379],[985,378],[993,376],[1000,375],[1004,374],[1008,373],[1011,371],[1013,371],[1016,370],[1019,369],[1024,368],[1030,367],[1036,366],[1044,365],[1050,363],[1056,362],[1061,362],[1064,362]],"dx":201,"dy":-99,"length":263.2921872720972,"timing":[0,7,14,34,125,131,138,145,152,159,166,173,180,187,194,201,208,215,222,229,236,242,249,256,263,270,277,284,291,299,306,312,319,326,333,340,347,354,361,365]},{"start":[940,319],"end":[1110,563],"points":[[940,319],[940,321],[940,324],[940,326],[940,328],[940,330],[940,331],[940,332],[940,333],[941,335],[949,338],[957,342],[963,347],[970,354],[980,362],[989,370],[999,379],[1008,387],[1016,397],[1024,406],[1032,418],[1040,429],[1046,438],[1052,449],[1058,459],[1062,466],[1065,471],[1067,474],[1068,478],[1069,479],[1070,482],[1071,483],[1071,485],[1072,486],[1073,489],[1073,490],[1073,492],[1073,493],[1075,494],[1075,496],[1076,498],[1076,499],[1077,499],[1079,502],[1080,502],[1082,505],[1084,507],[1086,511],[1088,514],[1090,518],[1092,524],[1094,529],[1096,534],[1097,538],[1099,542],[1100,546],[1101,549],[1103,551],[1104,554],[1107,558],[1108,560],[1110,562],[1110,563]],"dx":170,"dy":244,"length":309.9384513473206,"timing":[0,43,49,56,63,69,77,84,157,174,181,188,194,201,208,215,222,229,236,243,250,257,264,271,278,285,292,298,306,312,319,326,333,340,347,354,361,368,375,382,389,416,424,432,438,445,452,458,465,472,479,486,493,500,507,514,521,528,535,542,549,556,567]},{"start":[1227,393],"end":[461,182],"points":[[1228,393],[1225,393],[1218,395],[1214,396],[1210,398],[1207,400],[1205,402],[1204,402],[1203,402],[1199,404],[1191,406],[1181,408],[1165,410],[1147,411],[1120,412],[1088,412],[1060,412],[1016,409],[972,403],[920,393],[864,381],[815,366],[771,351],[730,337],[695,322],[667,311],[648,302],[634,295],[624,290],[620,286],[616,282],[613,277],[609,271],[606,265],[600,258],[593,249],[584,242],[575,236],[564,230],[553,226],[542,222],[529,218],[520,216],[514,214],[512,214],[510,214],[509,212],[507,211],[504,210],[500,208],[496,206],[492,204],[488,202],[483,200],[479,197],[475,195],[472,194],[469,191],[468,190],[466,187],[464,186],[461,182]],"dx":-766,"dy":-211,"length":830.2336939205542,"timing":[0,97,111,118,125,132,138,168,173,180,187,194,201,208,215,222,229,236,242,249,256,263,270,277,284,291,298,305,312,319,326,333,340,347,354,360,367,374,381,388,395,402,409,416,423,465,472,479,486,493,499,506,513,521,529,534,541,548,555,562,569,575]},{"start":[424,142],"end":[826,525],"points":[[424,142],[426,142],[433,146],[439,150],[446,153],[454,158],[462,163],[470,169],[477,173],[485,177],[492,181],[499,185],[504,187],[511,189],[516,190],[520,193],[526,194],[531,194],[535,195],[536,196],[538,196],[542,198],[546,198],[553,202],[564,207],[577,215],[591,222],[610,233],[628,244],[653,261],[676,278],[701,297],[732,326],[765,358],[800,396],[827,428],[858,470],[886,511],[906,542],[923,568],[937,590],[945,602],[952,610],[955,613],[957,614],[957,615],[957,613],[956,609],[952,604],[946,600],[940,595],[932,587],[922,581],[911,573],[896,562],[883,554],[866,545],[848,537],[838,531],[830,527],[826,525]],"dx":402,"dy":383,"length":893.4544586698897,"timing":[0,7,14,21,28,35,42,49,55,62,69,76,83,90,97,104,111,118,125,132,139,146,153,160,167,174,181,187,194,201,208,215,222,229,236,243,250,257,264,271,278,285,292,299,306,312,368,375,383,389,396,403,410,417,424,430,437,444,451,458,465]},{"start":[1320,413],"end":[971,587],"points":[[1318,413],[1316,413],[1315,413],[1311,413],[1306,413],[1299,413],[1290,414],[1280,418],[1266,421],[1249,426],[1232,430],[1216,434],[1199,438],[1184,442],[1172,445],[1162,447],[1152,449],[1144,450],[1137,451],[1128,453],[1119,454],[1108,455],[1095,458],[1081,462],[1066,467],[1052,473],[1036,480],[1022,488],[1009,495],[1000,503],[991,508],[983,514],[978,518],[975,519],[972,523],[970,526],[968,529],[968,532],[968,536],[968,540],[968,545],[968,550],[968,555],[968,561],[968,565],[968,568],[969,571],[969,573],[971,575],[971,577],[972,577],[972,578],[972,579],[972,580],[972,581],[972,582],[972,584],[972,586],[971,586],[971,587]],"dx":-349,"dy":174,"length":437.4305277201182,"timing":[0,4,8,15,22,29,36,43,50,56,63,70,77,84,91,98,105,112,119,126,133,140,147,154,161,168,175,182,188,195,202,209,216,223,230,237,244,252,259,265,272,279,286,293,300,307,314,321,327,336,341,348,369,376,383,391,411,418,427,432]},{"start":[120,290],"end":[972,297],"points":[[120,291],[122,292],[124,292],[127,293],[128,293],[131,293],[134,293],[136,293],[139,293],[141,293],[144,293],[145,293],[148,293],[152,293],[159,293],[167,293],[178,293],[191,293],[203,293],[213,293],[221,294],[231,294],[239,294],[248,294],[257,294],[271,295],[286,298],[308,301],[336,306],[365,312],[400,322],[436,330],[472,336],[517,344],[567,351],[613,357],[663,362],[705,367],[744,371],[772,373],[791,374],[808,374],[819,374],[826,374],[830,372],[833,370],[835,367],[835,366],[836,366],[836,364],[837,364],[837,362],[839,361],[840,359],[841,357],[842,355],[844,353],[844,350],[846,347],[846,344],[848,341],[848,337],[852,333],[856,330],[859,326],[864,323],[871,320],[876,318],[884,315],[891,314],[899,312],[909,309],[917,308],[928,306],[939,303],[950,301],[957,299],[965,298],[968,297],[971,297],[972,297]],"dx":852,"dy":7,"length":894.0470908945358,"timing":[0,7,14,21,28,34,41,48,56,63,70,76,83,90,97,104,111,118,125,131,138,145,152,159,166,173,180,187,194,201,208,215,222,229,236,243,250,256,264,270,277,284,291,298,305,312,319,326,333,340,361,368,375,382,389,395,402,409,416,423,430,437,444,451,458,465,472,479,486,493,500,507,513,520,527,534,541,548,555,562,564]},{"start":[675,349],"end":[320,555],"points":[[675,350],[675,354],[675,358],[675,362],[671,371],[663,381],[655,392],[644,407],[632,423],[618,438],[602,454],[584,469],[566,482],[546,494],[525,506],[504,516],[477,529],[449,542],[422,554],[394,568],[369,578],[350,586],[332,593],[319,598],[308,602],[303,605],[299,606],[298,606],[299,606],[300,605],[301,603],[303,601],[303,600],[304,598],[305,595],[306,594],[308,590],[308,589],[310,588],[312,586],[314,583],[316,581],[318,575],[320,573],[321,569],[322,566],[322,562],[322,559],[322,558],[322,557],[322,555],[320,555]],"dx":-355,"dy":206,"length":533.2385135519212,"timing":[0,9,16,22,29,36,43,50,56,64,70,77,84,91,98,105,112,119,126,133,140,147,154,161,168,175,182,188,231,237,244,251,258,265,273,279,286,293,300,307,314,320,327,334,341,348,355,362,369,376,383,404]},{"start":[320,555],"end":[545,429],"points":[[322,555],[324,555],[325,555],[329,557],[332,559],[335,561],[337,562],[340,564],[342,565],[345,565],[349,565],[356,566],[363,566],[370,566],[376,566],[384,566],[392,564],[404,561],[419,558],[435,554],[455,549],[476,542],[497,535],[515,529],[532,522],[544,516],[549,511],[556,508],[559,504],[560,500],[561,497],[561,493],[561,490],[558,486],[554,480],[548,474],[544,466],[540,458],[539,451],[539,446],[539,442],[539,438],[540,436],[541,434],[541,433],[542,433],[544,430],[545,429]],"dx":225,"dy":-126,"length":337.0193887802812,"timing":[0,6,11,17,23,30,37,43,51,58,65,71,79,85,92,99,106,113,120,127,134,141,148,155,162,170,175,182,189,196,203,210,217,224,231,238,245,252,259,266,273,280,287,293,306,342,350,355]},{"start":[551,422],"end":[1283,282],"points":[[552,422],[552,424],[552,426],[552,433],[552,440],[549,445],[548,449],[544,454],[541,459],[538,465],[535,470],[534,473],[532,474],[532,477],[532,478],[531,478],[531,479],[531,480],[531,482],[531,483],[531,486],[531,490],[530,495],[527,502],[524,510],[520,517],[516,523],[509,528],[504,532],[500,534],[496,535],[495,536],[496,534],[505,528],[520,518],[536,506],[557,496],[580,484],[603,472],[632,458],[663,448],[694,438],[732,429],[763,422],[803,410],[847,395],[895,380],[940,364],[988,348],[1034,331],[1073,318],[1113,306],[1145,296],[1169,290],[1186,286],[1197,283],[1200,282],[1201,282],[1207,282],[1214,282],[1220,282],[1230,282],[1240,282],[1249,282],[1259,282],[1266,282],[1271,282],[1273,282],[1275,282],[1277,282],[1279,282],[1280,282],[1282,282],[1283,282]],"dx":732,"dy":-140,"length":973.1751526449228,"timing":[0,20,27,35,42,48,55,62,69,76,83,90,97,104,111,118,127,133,139,146,153,161,166,173,180,187,194,201,208,215,222,229,256,264,270,277,284,291,298,305,312,319,326,333,340,347,354,361,367,374,381,388,395,402,410,417,423,471,479,487,492,500,507,513,520,527,534,541,548,632,639,645,652,660]},{"start":[1397,599],"end":[475,479],"points":[[1396,599],[1395,599],[1387,598],[1376,596],[1358,591],[1334,585],[1312,576],[1270,563],[1229,549],[1197,538],[1160,523],[1116,505],[1065,486],[1010,465],[955,443],[903,420],[860,398],[832,380],[816,367],[812,361],[812,357],[812,354],[816,350],[823,345],[828,340],[834,335],[836,333],[836,331],[835,333],[828,335],[817,342],[803,351],[787,360],[771,368],[752,378],[734,387],[712,399],[689,410],[667,424],[640,438],[612,453],[592,464],[568,476],[548,486],[530,493],[512,499],[500,504],[487,508],[477,510],[467,513],[460,514],[454,516],[450,516],[447,516],[444,516],[443,516],[443,514],[444,512],[447,509],[450,506],[452,503],[456,499],[460,496],[464,492],[468,489],[469,486],[471,485],[472,483],[472,482],[474,481],[475,480],[475,479]],"dx":-922,"dy":-120,"length":1164.518081991494,"timing":[0,2,9,16,23,30,37,44,50,57,64,71,78,85,92,99,106,113,120,127,134,141,148,155,162,168,176,183,220,224,231,238,245,252,259,266,273,280,287,294,300,308,314,321,328,335,342,349,356,363,370,377,384,391,398,419,459,468,474,481,488,496,502,509,517,523,530,537,544,551,589,597]},{"start":[1155,368],"end":[831,143],"points":[[1155,366],[1153,366],[1152,364],[1147,358],[1140,350],[1132,340],[1121,331],[1110,320],[1100,311],[1087,302],[1070,291],[1052,277],[1028,261],[1002,243],[980,230],[957,218],[939,209],[926,202],[918,198],[912,196],[906,194],[903,192],[897,191],[891,189],[884,187],[876,186],[869,183],[861,182],[854,179],[846,178],[838,174],[832,173],[829,171],[828,171],[828,170],[828,166],[828,164],[828,162],[828,159],[828,157],[829,153],[829,151],[829,148],[829,146],[830,145],[831,144],[831,143]],"dx":-324,"dy":-225,"length":417.31023848431266,"timing":[0,4,9,15,22,29,36,43,50,57,64,71,78,85,92,99,106,112,119,126,133,140,147,154,161,168,175,182,189,196,203,210,217,224,314,321,328,335,342,349,356,363,369,377,384,391,401]},{"start":[1142,383],"end":[1337,574],"points":[[1141,383],[1140,385],[1136,385],[1132,385],[1126,386],[1119,388],[1111,390],[1103,393],[1090,397],[1075,402],[1055,406],[1031,408],[1004,408],[973,408],[943,408],[902,401],[860,387],[821,371],[780,351],[754,337],[729,322],[710,310],[694,298],[680,291],[672,286],[667,279],[664,276],[664,274],[665,274],[668,274],[674,274],[685,278],[702,283],[727,292],[760,304],[790,317],[836,335],[880,354],[932,375],[986,402],[1040,427],[1089,453],[1131,477],[1170,499],[1198,518],[1220,534],[1238,550],[1251,562],[1261,572],[1268,582],[1275,590],[1280,596],[1282,602],[1285,606],[1287,610],[1289,611],[1289,612],[1291,613],[1291,614],[1292,614],[1293,614],[1294,613],[1296,611],[1299,610],[1300,608],[1304,605],[1306,602],[1309,599],[1312,597],[1315,594],[1319,591],[1324,587],[1326,584],[1330,582],[1333,580],[1336,578],[1337,578],[1337,577],[1337,576],[1337,575],[1337,574]],"dx":195,"dy":191,"length":1306.6202884406473,"timing":[0,2,9,16,23,30,36,43,50,57,64,71,78,85,92,99,106,113,120,127,134,140,147,154,161,168,175,182,220,224,231,238,245,252,259,266,272,279,286,293,300,307,314,321,328,335,342,349,356,363,370,377,384,391,398,405,412,419,429,432,487,495,502,509,516,523,529,536,544,550,557,564,571,578,585,592,599,606,613,641,648]},{"start":[604,229],"end":[336,454],"points":[[604,229],[604,230],[605,233],[609,237],[616,242],[623,250],[632,257],[641,262],[651,268],[660,274],[672,278],[681,282],[692,286],[703,292],[713,297],[724,299],[735,303],[746,308],[756,312],[765,314],[771,315],[772,317],[774,317],[774,318],[774,319],[773,324],[769,328],[762,332],[752,340],[740,348],[727,357],[712,368],[699,378],[679,393],[660,406],[639,419],[611,436],[587,450],[559,466],[532,482],[504,497],[477,510],[453,521],[434,530],[419,534],[411,537],[402,538],[396,538],[391,538],[388,538],[386,538],[384,538],[381,538],[378,536],[374,533],[370,530],[365,526],[361,522],[357,516],[354,510],[352,506],[349,502],[348,496],[346,491],[346,486],[346,480],[344,476],[344,472],[344,468],[344,466],[344,462],[343,460],[340,457],[339,456],[338,455],[336,454]],"dx":-268,"dy":225,"length":756.9925549617326,"timing":[0,55,69,76,83,90,97,104,111,118,125,132,139,146,152,159,166,173,180,187,194,202,208,215,222,230,236,243,250,257,263,270,277,284,291,298,305,312,319,326,333,340,347,354,361,368,375,381,388,395,403,410,417,424,430,437,444,451,458,465,472,479,486,493,500,507,513,520,527,534,542,548,555,562,569,576]},{"start":[336,500],"end":[1381,428],"points":[[336,500],[336,502],[336,503],[336,504],[338,507],[340,511],[344,514],[347,517],[351,520],[355,523],[360,526],[364,527],[370,530],[375,531],[380,533],[386,535],[392,537],[398,539],[405,539],[414,542],[424,543],[436,546],[452,548],[468,550],[485,553],[506,554],[529,556],[553,559],[577,560],[604,562],[633,562],[663,562],[694,562],[720,562],[750,562],[780,558],[812,554],[843,550],[870,543],[896,537],[917,532],[942,524],[961,518],[982,511],[1001,505],[1017,497],[1034,490],[1048,482],[1062,475],[1072,469],[1082,461],[1091,456],[1099,451],[1106,448],[1113,445],[1119,443],[1122,442],[1124,442],[1126,442],[1128,442],[1128,441],[1130,441],[1133,439],[1138,439],[1144,438],[1149,438],[1155,437],[1164,436],[1172,436],[1183,435],[1196,435],[1210,435],[1223,435],[1236,435],[1247,435],[1257,435],[1267,435],[1274,435],[1281,435],[1289,435],[1297,435],[1306,435],[1315,435],[1324,435],[1333,435],[1340,435],[1348,435],[1354,435],[1358,435],[1362,435],[1364,435],[1367,435],[1367,434],[1368,434],[1369,434],[1370,433],[1372,433],[1374,432],[1376,431],[1378,431],[1379,430],[1380,430],[1381,430],[1381,428]],"dx":1045,"dy":-72,"length":1091.5581770382264,"timing":[0,25,31,35,42,49,55,62,69,76,83,90,97,104,111,118,125,132,139,146,153,159,166,173,180,187,194,201,208,215,222,229,236,243,250,257,264,271,278,285,291,298,305,312,319,326,333,340,347,354,361,368,375,382,389,396,403,409,417,424,431,438,445,451,458,465,472,479,486,493,500,507,514,521,528,535,542,548,555,562,569,576,583,590,597,604,611,618,625,632,639,646,653,706,711,717,722,729,736,743,750,758,831,833]},{"start":[1381,426],"end":[502,572],"points":[[1378,426],[1376,428],[1366,430],[1356,434],[1340,438],[1322,443],[1299,446],[1272,450],[1246,453],[1220,454],[1189,454],[1157,454],[1123,454],[1084,454],[1036,451],[992,450],[946,449],[888,449],[845,449],[807,449],[781,454],[758,462],[741,471],[726,480],[712,490],[700,502],[688,513],[676,524],[667,532],[661,538],[655,544],[649,547],[646,550],[644,550],[642,551],[640,551],[639,552],[639,554],[638,554],[636,554],[635,554],[632,555],[629,556],[626,558],[621,559],[614,562],[608,563],[603,566],[596,567],[588,569],[580,570],[570,573],[562,573],[552,574],[545,575],[537,575],[532,575],[527,575],[521,575],[516,574],[512,574],[508,573],[507,573],[504,572],[503,572],[502,572]],"dx":-879,"dy":146,"length":919.5540693080692,"timing":[0,4,11,18,25,32,39,46,53,60,67,74,81,87,94,101,108,115,122,129,136,143,150,157,164,171,178,185,192,199,206,212,219,227,234,241,248,276,282,289,296,303,310,317,324,331,338,345,352,359,366,372,379,386,393,400,407,414,421,428,435,442,449,456,469,484]},{"start":[502,571],"end":[1034,237],"points":[[503,571],[504,571],[506,571],[510,571],[515,571],[521,568],[531,564],[541,559],[557,550],[578,538],[599,526],[625,506],[651,486],[678,464],[700,446],[724,426],[751,407],[772,391],[798,374],[821,361],[847,348],[872,335],[893,326],[916,314],[934,306],[952,298],[969,289],[984,282],[997,276],[1012,269],[1023,263],[1035,258],[1045,253],[1053,249],[1057,245],[1060,243],[1062,242],[1060,242],[1060,241],[1058,241],[1056,241],[1054,241],[1052,239],[1048,239],[1046,239],[1044,239],[1043,239],[1040,238],[1038,238],[1036,237],[1034,237]],"dx":532,"dy":-334,"length":683.8601923216099,"timing":[0,4,10,16,23,30,37,44,51,58,65,72,79,86,93,100,107,114,120,127,134,141,148,155,162,169,176,183,190,197,204,211,218,225,232,239,246,378,385,391,399,405,413,419,426,433,440,447,454,461,469]},{"start":[1034,237],"end":[1095,181],"points":[[1034,238],[1034,239],[1032,245],[1031,250],[1029,254],[1027,258],[1027,262],[1025,266],[1023,271],[1021,275],[1019,281],[1016,286],[1013,292],[1011,298],[1008,304],[1005,311],[1003,318],[1000,326],[996,333],[993,339],[989,344],[986,348],[984,351],[982,353],[984,353],[986,353],[997,353],[1011,346],[1026,339],[1040,330],[1048,322],[1056,313],[1063,302],[1068,289],[1072,274],[1073,262],[1073,250],[1073,241],[1073,230],[1072,223],[1068,216],[1065,210],[1064,206],[1062,203],[1062,202],[1062,201],[1062,200],[1062,199],[1062,198],[1064,196],[1065,194],[1068,192],[1071,190],[1073,187],[1076,186],[1083,184],[1088,183],[1092,181],[1095,181]],"dx":61,"dy":-56,"length":374.84268687816456,"timing":[0,3,10,16,23,30,37,45,51,58,65,72,79,86,93,100,107,114,121,128,134,141,148,155,181,183,190,197,204,211,218,225,232,239,246,253,259,266,273,280,288,295,301,308,315,322,329,336,344,364,371,378,385,392,398,405,412,419,426]},{"start":[694,577],"end":[1124,454],"points":[[694,574],[694,572],[694,571],[694,570],[694,568],[694,564],[694,561],[694,555],[694,550],[694,542],[694,535],[694,528],[694,520],[694,512],[694,502],[694,493],[692,484],[687,471],[683,460],[676,446],[668,433],[662,421],[655,407],[647,394],[638,378],[629,366],[618,353],[607,338],[595,326],[582,315],[572,306],[562,302],[558,298],[555,296],[553,296],[553,297],[554,298],[564,301],[585,306],[615,315],[648,324],[694,338],[744,354],[802,374],[844,393],[893,410],[938,429],[980,446],[1012,463],[1034,475],[1056,490],[1070,499],[1078,507],[1083,514],[1085,518],[1085,522],[1087,523],[1087,524],[1088,524],[1090,526],[1094,527],[1098,529],[1104,530],[1110,531],[1115,533],[1120,533],[1124,533],[1125,533],[1126,533],[1127,533],[1127,531],[1128,530],[1128,526],[1129,522],[1129,517],[1129,511],[1129,506],[1129,499],[1129,494],[1129,489],[1130,485],[1130,482],[1130,478],[1130,473],[1129,470],[1128,466],[1126,462],[1125,460],[1124,458],[1124,456],[1124,454]],"dx":430,"dy":-123,"length":1042.651050522036,"timing":[0,7,14,22,28,34,41,48,56,64,69,76,83,90,97,104,111,118,125,132,138,145,152,159,166,173,180,187,194,201,208,215,222,229,236,335,402,410,416,423,430,437,445,452,458,465,472,479,486,493,500,507,513,520,527,534,542,564,569,576,584,590,597,604,611,618,625,632,639,646,654,660,667,673,680,687,694,701,708,715,722,729,736,743,750,757,763,770,777,785,791]},{"start":[483,266],"end":[181,386],"points":[[483,266],[483,268],[484,270],[488,272],[492,276],[498,280],[508,286],[520,294],[536,301],[552,311],[568,318],[584,326],[596,333],[608,338],[621,342],[629,346],[640,350],[650,354],[658,358],[668,362],[676,364],[686,370],[696,374],[704,376],[710,379],[713,380],[713,381],[708,381],[700,381],[685,380],[670,378],[644,373],[614,370],[591,370],[558,365],[527,364],[496,362],[468,358],[443,356],[423,354],[410,353],[403,352],[397,352],[395,350],[392,350],[390,350],[385,350],[380,350],[376,350],[370,350],[363,350],[356,350],[347,350],[340,353],[329,356],[320,359],[311,362],[301,366],[292,369],[284,373],[276,375],[270,378],[264,378],[259,378],[253,379],[247,379],[240,381],[234,381],[226,382],[219,382],[211,382],[201,382],[196,383],[188,385],[185,385],[183,386],[181,386]],"dx":-302,"dy":120,"length":801.572781910553,"timing":[0,6,13,20,27,34,41,48,55,62,69,76,83,90,97,104,111,117,124,131,138,145,152,159,166,173,181,208,215,222,229,236,242,249,256,263,270,277,284,291,298,305,312,319,326,333,340,347,354,361,368,374,381,388,395,402,409,416,423,430,437,444,451,458,465,472,479,485,492,499,506,513,520,527,534,541,548]},{"start":[672,375],"end":[214,406],"points":[[671,375],[671,374],[668,371],[666,370],[665,368],[662,366],[661,365],[660,364],[656,362],[654,361],[651,360],[648,358],[640,357],[636,357],[630,357],[624,355],[616,355],[606,354],[592,353],[576,350],[560,348],[540,346],[527,345],[509,345],[492,345],[474,345],[457,346],[440,353],[423,360],[408,369],[392,378],[375,388],[362,395],[348,404],[335,411],[324,417],[312,422],[304,424],[293,427],[285,430],[278,431],[272,432],[265,434],[260,434],[258,434],[257,436],[256,436],[253,434],[252,433],[250,431],[246,427],[242,424],[236,420],[229,415],[224,412],[219,410],[216,408],[214,408],[214,406]],"dx":-458,"dy":31,"length":497.7161215870238,"timing":[0,5,12,18,26,33,40,47,53,60,67,74,81,88,95,102,109,116,123,130,137,143,150,157,164,171,178,185,192,199,206,213,220,227,234,241,248,255,261,268,275,282,289,296,303,311,341,359,366,373,380,387,394,400,407,414,421,429,435]},{"start":[504,328],"end":[418,657],"points":[[504,327],[504,326],[504,325],[510,322],[516,321],[525,318],[538,315],[553,312],[569,308],[589,303],[609,298],[630,294],[648,290],[669,284],[687,278],[700,273],[715,268],[726,264],[736,260],[743,256],[749,254],[754,253],[760,252],[764,250],[767,250],[768,250],[768,252],[768,260],[763,274],[760,281],[749,298],[739,315],[726,333],[714,349],[700,366],[686,382],[672,398],[655,414],[635,432],[619,449],[604,464],[588,478],[572,493],[560,505],[548,516],[540,525],[532,533],[526,541],[520,546],[515,553],[511,558],[508,562],[505,565],[504,567],[501,569],[501,570],[500,570],[500,571],[500,572],[500,574],[499,576],[497,578],[492,584],[486,590],[480,596],[473,602],[464,612],[455,620],[447,629],[438,637],[430,646],[424,650],[420,654],[418,655],[418,657]],"dx":-86,"dy":329,"length":823.0229146040327,"timing":[0,3,11,18,24,31,38,45,52,59,66,73,80,86,93,100,107,114,121,128,135,142,149,156,163,170,225,233,240,246,253,260,267,274,281,288,295,302,309,316,323,330,337,344,350,357,364,371,378,385,392,399,407,413,420,427,434,513,519,524,531,538,545,552,559,566,573,580,587,594,600,607,614,621,628]},{"start":[418,657],"end":[1320,629],"points":[[418,656],[418,655],[418,654],[418,650],[418,646],[418,645],[419,641],[420,637],[422,634],[424,630],[428,626],[432,619],[436,610],[444,598],[452,586],[460,570],[467,556],[471,539],[475,524],[478,510],[484,498],[492,488],[498,482],[511,475],[529,469],[553,463],[588,458],[617,454],[661,448],[709,444],[758,442],[805,442],[853,442],[896,443],[943,452],[985,462],[1018,472],[1054,484],[1089,498],[1117,509],[1137,516],[1157,524],[1173,532],[1185,537],[1196,542],[1204,547],[1211,550],[1216,555],[1220,557],[1224,559],[1225,562],[1229,564],[1232,566],[1239,570],[1244,574],[1249,578],[1256,583],[1264,588],[1269,593],[1276,597],[1280,601],[1283,601],[1284,602],[1284,603],[1286,606],[1289,610],[1292,612],[1296,616],[1299,619],[1303,621],[1307,623],[1310,626],[1314,626],[1316,628],[1317,629],[1320,629]],"dx":902,"dy":-28,"length":1070.9173938712622,"timing":[0,4,10,17,24,31,38,44,51,58,65,72,79,86,93,100,107,114,121,128,134,141,148,155,162,169,176,183,190,197,204,211,218,225,232,239,246,253,260,266,273,280,287,294,301,308,315,322,329,336,343,350,357,364,371,378,384,392,398,405,412,420,428,454,461,468,475,482,489,496,503,510,516,523,530,538]},{"start":[1320,629],"end":[1076,317],"points":[[1319,629],[1312,625],[1308,622],[1304,619],[1297,614],[1288,611],[1279,606],[1266,600],[1250,592],[1232,584],[1213,574],[1191,565],[1164,552],[1136,541],[1112,530],[1083,519],[1057,510],[1030,502],[1004,496],[984,490],[967,488],[956,486],[947,484],[941,482],[937,478],[936,476],[936,471],[936,466],[936,458],[939,450],[944,442],[950,433],[955,425],[963,415],[968,407],[975,399],[981,391],[988,383],[995,377],[1002,370],[1011,363],[1017,359],[1024,354],[1032,350],[1040,346],[1046,343],[1052,342],[1057,340],[1060,338],[1065,337],[1068,335],[1070,334],[1071,332],[1073,330],[1073,329],[1073,328],[1073,327],[1075,325],[1075,324],[1076,322],[1076,320],[1076,318],[1076,317]],"dx":-244,"dy":-312,"length":641.8341666086442,"timing":[0,14,21,28,35,42,49,56,63,70,76,83,90,97,104,111,118,125,132,139,146,153,160,167,174,181,188,194,201,208,215,222,229,236,243,250,257,264,271,278,285,292,299,306,313,320,327,333,340,347,354,361,368,375,388,396,410,417,424,431,439,445,452]},{"start":[1076,317],"end":[930,597],"points":[[1075,317],[1073,317],[1070,317],[1068,319],[1064,324],[1060,328],[1056,334],[1052,340],[1047,348],[1043,356],[1039,366],[1036,377],[1032,390],[1030,405],[1028,418],[1028,429],[1028,438],[1028,446],[1028,450],[1028,454],[1027,454],[1025,456],[1024,457],[1019,459],[1013,462],[1008,469],[1000,477],[992,487],[980,501],[970,517],[959,534],[948,551],[939,566],[933,579],[927,588],[924,594],[924,598],[924,601],[924,602],[924,604],[924,606],[924,607],[925,607],[927,605],[928,602],[928,599],[930,598],[930,597]],"dx":-146,"dy":280,"length":356.1726740960629,"timing":[0,7,14,21,28,34,41,48,55,62,69,76,83,90,97,104,111,118,125,132,139,146,153,159,166,173,180,187,194,201,208,215,222,229,236,243,250,257,264,271,279,299,423,444,451,458,465,472]},{"start":[671,542],"end":[927,425],"points":[[671,542],[669,542],[668,542],[667,541],[665,541],[664,541],[664,540],[664,539],[664,538],[664,534],[662,529],[661,524],[658,518],[656,511],[655,506],[652,504],[652,501],[653,501],[662,497],[677,492],[699,486],[728,478],[756,471],[794,463],[824,456],[850,450],[870,446],[886,443],[900,439],[912,438],[920,435],[926,433],[928,431],[930,430],[930,428],[930,426],[929,426],[928,425],[927,425]],"dx":256,"dy":-117,"length":345.94612253660824,"timing":[0,36,42,53,70,77,108,111,118,125,132,139,146,153,160,166,173,201,208,215,222,229,236,243,250,257,264,271,277,285,291,298,305,313,375,388,403,410,417]},{"start":[927,425],"end":[1354,345],"points":[[925,425],[925,422],[930,419],[936,418],[944,415],[954,414],[968,413],[984,411],[1008,410],[1036,408],[1072,405],[1103,402],[1136,401],[1164,398],[1185,398],[1208,395],[1229,393],[1247,392],[1261,392],[1272,390],[1279,390],[1283,389],[1285,389],[1287,388],[1288,386],[1291,386],[1292,386],[1296,385],[1300,383],[1304,381],[1307,379],[1312,377],[1316,374],[1320,371],[1324,370],[1325,369],[1326,369],[1327,368],[1328,367],[1329,366],[1332,363],[1336,359],[1340,356],[1344,354],[1348,351],[1352,348],[1354,346],[1354,345]],"dx":427,"dy":-80,"length":450.3362500645642,"timing":[0,49,56,63,69,76,83,90,97,104,111,118,125,132,139,146,153,160,167,174,180,187,194,201,208,215,222,229,236,243,250,257,264,271,278,285,292,299,361,368,375,382,389,396,403,410,417,418]},{"start":[1358,342],"end":[865,510],"points":[[1358,342],[1357,342],[1356,342],[1352,342],[1349,342],[1345,342],[1340,342],[1336,343],[1332,345],[1329,345],[1326,346],[1324,348],[1324,349],[1322,349],[1320,350],[1318,352],[1316,352],[1315,354],[1312,354],[1308,358],[1301,360],[1294,364],[1283,370],[1272,376],[1260,382],[1244,390],[1229,400],[1210,412],[1186,426],[1160,441],[1134,457],[1101,477],[1068,496],[1036,516],[1003,535],[972,551],[948,562],[927,574],[910,580],[895,587],[884,592],[879,594],[876,595],[877,595],[884,594],[896,589],[905,585],[915,581],[921,575],[926,573],[931,569],[934,567],[938,564],[940,562],[944,559],[945,558],[946,556],[947,554],[947,552],[947,550],[947,547],[945,543],[941,539],[934,534],[928,529],[919,524],[908,520],[900,516],[890,514],[880,512],[872,510],[869,510],[867,510],[865,510]],"dx":-493,"dy":168,"length":734.658874084009,"timing":[0,39,43,48,55,62,69,76,83,90,98,104,111,118,125,137,144,149,153,160,167,173,180,187,194,201,208,215,222,229,236,243,250,257,264,271,278,285,292,298,305,312,319,348,354,361,368,375,382,389,396,403,410,417,424,431,438,444,451,459,465,472,479,486,493,500,507,514,521,528,535,542,549,556]},{"start":[865,510],"end":[1331,169],"points":[[866,510],[875,506],[886,502],[900,494],[914,484],[936,470],[962,454],[992,433],[1025,412],[1054,390],[1084,370],[1108,352],[1132,332],[1160,314],[1178,299],[1195,285],[1207,274],[1214,266],[1218,257],[1220,253],[1220,250],[1222,247],[1222,245],[1222,244],[1224,242],[1224,239],[1228,237],[1231,231],[1237,226],[1246,221],[1256,215],[1267,210],[1278,206],[1288,202],[1295,199],[1299,196],[1300,196],[1303,194],[1304,194],[1304,193],[1305,192],[1308,190],[1312,186],[1313,184],[1317,181],[1320,178],[1323,176],[1325,174],[1328,172],[1329,170],[1331,169]],"dx":466,"dy":-341,"length":587.7187044419511,"timing":[0,6,13,20,27,34,41,48,55,62,68,75,82,89,96,103,110,117,124,131,138,146,152,159,166,173,180,187,194,201,207,214,221,228,235,242,249,258,277,284,291,298,305,312,319,326,333,340,346,354,361]},{"start":[179,429],"end":[442,587],"points":[[179,429],[179,430],[183,431],[190,431],[200,434],[212,435],[229,438],[248,442],[273,444],[293,446],[323,449],[349,452],[381,454],[412,457],[443,460],[473,462],[500,465],[524,466],[543,467],[563,468],[580,472],[595,474],[612,481],[626,486],[637,492],[647,498],[651,504],[654,509],[654,512],[654,516],[653,519],[644,526],[636,532],[623,540],[607,550],[592,558],[572,566],[552,574],[532,578],[514,583],[497,587],[484,588],[474,588],[464,588],[457,588],[451,588],[445,588],[442,588],[440,588],[440,587],[442,587]],"dx":263,"dy":158,"length":732.8825522076693,"timing":[0,10,28,35,41,49,55,62,70,76,83,90,97,104,111,118,125,132,139,146,153,160,167,173,180,187,194,201,208,215,223,230,236,243,250,257,264,271,278,285,292,298,305,312,319,326,333,340,347,435,437]},{"start":[483,559],"end":[777,438],"points":[[485,558],[487,557],[489,555],[492,553],[494,551],[498,550],[503,546],[508,544],[513,542],[520,538],[526,534],[534,530],[541,528],[548,525],[552,522],[559,521],[564,518],[569,518],[573,516],[578,514],[584,513],[588,511],[595,509],[604,505],[616,500],[631,494],[647,489],[665,484],[686,479],[704,476],[725,474],[740,471],[752,469],[763,467],[768,466],[772,465],[774,463],[776,461],[776,459],[776,458],[776,454],[777,450],[777,447],[777,443],[777,441],[777,439],[777,438]],"dx":294,"dy":-121,"length":334.5271779060191,"timing":[0,7,14,21,27,34,41,48,55,62,69,76,83,90,97,104,111,118,125,132,139,145,152,159,166,173,180,187,194,201,208,215,222,229,236,243,250,257,299,306,312,319,326,333,340,347,354]},{"start":[409,227],"end":[1220,167],"points":[[409,228],[409,229],[409,232],[411,239],[413,245],[417,252],[421,258],[427,264],[432,271],[439,277],[451,285],[465,293],[484,300],[504,306],[524,310],[556,317],[582,318],[612,318],[643,318],[680,314],[721,304],[764,292],[806,280],[847,266],[884,254],[918,244],[948,234],[973,228],[998,223],[1022,218],[1043,216],[1062,214],[1079,212],[1092,212],[1100,212],[1107,212],[1113,211],[1118,211],[1123,211],[1128,211],[1135,211],[1144,210],[1153,210],[1160,210],[1169,208],[1175,207],[1181,206],[1185,205],[1189,204],[1192,203],[1194,202],[1195,202],[1195,200],[1197,200],[1197,199],[1198,197],[1200,194],[1202,193],[1204,191],[1206,189],[1207,186],[1209,183],[1210,181],[1212,178],[1214,175],[1216,172],[1219,170],[1219,168],[1220,167]],"dx":811,"dy":-60,"length":883.8388340903485,"timing":[0,4,11,17,24,31,38,45,52,59,66,73,80,87,94,101,108,115,122,129,135,142,149,156,163,170,177,184,191,198,205,212,219,226,233,240,247,254,261,268,274,281,288,295,302,309,316,323,330,337,344,351,374,380,386,393,400,406,414,422,427,434,441,448,455,463,469,476,483]},{"start":[1220,167],"end":[1232,422],"points":[[1218,167],[1212,168],[1204,172],[1195,176],[1186,181],[1170,187],[1152,197],[1135,205],[1116,214],[1100,222],[1084,229],[1068,237],[1056,243],[1044,250],[1036,254],[1028,261],[1020,268],[1012,275],[1006,282],[1000,289],[994,296],[987,309],[980,322],[972,339],[968,358],[963,379],[961,397],[960,411],[960,424],[963,434],[968,440],[980,444],[992,446],[1008,448],[1028,448],[1047,450],[1067,450],[1089,450],[1111,452],[1132,454],[1149,457],[1168,459],[1184,462],[1198,464],[1209,464],[1217,466],[1225,466],[1232,466],[1237,466],[1242,468],[1246,468],[1249,468],[1252,468],[1255,468],[1258,466],[1260,466],[1260,465],[1263,462],[1264,460],[1266,457],[1268,455],[1268,451],[1268,448],[1268,445],[1268,442],[1268,441],[1264,438],[1261,436],[1257,434],[1253,432],[1250,430],[1246,428],[1240,426],[1237,424],[1235,422],[1232,422]],"dx":12,"dy":255,"length":778.9790024252334,"timing":[0,7,14,21,28,35,42,49,56,63,69,76,83,90,97,104,111,118,125,132,139,146,153,160,167,174,181,187,194,201,208,215,222,229,236,243,250,257,264,271,278,285,292,299,306,312,319,326,333,340,347,354,361,368,375,382,389,396,403,410,417,424,431,438,445,452,460,465,472,479,486,493,500,507,514,522]},{"start":[1231,421],"end":[495,194],"points":[[1231,421],[1229,421],[1228,421],[1222,421],[1214,422],[1204,422],[1194,422],[1184,422],[1176,422],[1167,422],[1156,422],[1145,422],[1135,422],[1127,421],[1117,420],[1110,419],[1105,418],[1103,417],[1100,417],[1099,417],[1098,417],[1096,417],[1092,417],[1084,414],[1075,414],[1063,413],[1044,409],[1021,406],[993,398],[964,393],[936,384],[900,374],[866,366],[835,357],[806,346],[784,338],[761,328],[744,317],[729,306],[718,294],[709,282],[703,272],[696,261],[692,250],[687,240],[683,233],[676,229],[672,223],[668,219],[664,218],[659,216],[655,215],[649,214],[644,214],[640,214],[635,214],[629,214],[623,214],[615,214],[605,214],[592,214],[583,214],[570,216],[557,218],[546,222],[536,222],[528,225],[520,226],[515,226],[512,226],[508,226],[506,226],[504,225],[503,223],[500,222],[500,221],[499,221],[499,219],[497,217],[496,215],[496,210],[496,208],[495,203],[495,198],[495,194]],"dx":-736,"dy":-227,"length":832.648757418373,"timing":[0,14,15,21,28,35,42,49,56,63,70,77,83,90,97,104,111,118,126,133,139,146,153,160,167,174,181,188,195,201,208,215,222,229,236,243,250,257,264,271,278,285,292,299,306,313,320,327,333,340,347,354,361,368,375,382,389,396,403,410,417,424,431,438,445,452,458,465,472,480,487,493,500,508,516,524,528,535,544,549,557,563,570,576,584]},{"start":[560,587],"end":[1075,393],"points":[[562,586],[564,586],[564,585],[566,583],[568,582],[570,579],[572,578],[573,575],[575,572],[576,568],[577,565],[580,559],[583,553],[585,546],[589,538],[592,531],[595,525],[597,517],[600,508],[603,499],[607,490],[611,479],[616,469],[624,456],[632,446],[644,435],[660,426],[680,417],[708,412],[738,409],[779,409],[822,409],[860,409],[897,410],[924,414],[945,417],[961,419],[976,422],[988,424],[999,426],[1008,427],[1016,428],[1021,428],[1027,428],[1032,428],[1037,428],[1044,428],[1049,427],[1054,426],[1059,422],[1062,420],[1065,417],[1068,414],[1069,410],[1070,407],[1071,406],[1072,402],[1072,400],[1073,398],[1073,397],[1073,395],[1073,394],[1073,393],[1075,393]],"dx":515,"dy":-194,"length":635.2663496527916,"timing":[0,7,14,21,28,35,42,48,55,62,69,76,83,90,97,104,111,118,125,132,139,146,153,160,166,173,180,187,194,201,208,215,222,229,236,243,250,257,264,271,278,285,291,298,305,312,319,326,333,340,347,354,361,368,375,382,389,396,403,410,417,424,434,437]},{"start":[1075,393],"end":[364,430],"points":[[1073,393],[1071,394],[1068,397],[1062,399],[1056,401],[1050,405],[1042,409],[1034,410],[1028,413],[1023,414],[1017,416],[1014,417],[1012,418],[1010,418],[1008,418],[1002,418],[992,417],[977,413],[956,408],[938,405],[916,402],[889,400],[858,398],[828,394],[791,394],[751,393],[711,393],[668,393],[625,393],[581,393],[536,396],[492,402],[452,406],[421,412],[396,416],[377,418],[364,420],[356,421],[350,423],[346,423],[343,423],[342,423],[342,424],[342,425],[343,425],[344,426],[346,426],[350,426],[355,429],[359,429],[362,430],[364,430]],"dx":-711,"dy":37,"length":766.5570207572166,"timing":[0,5,12,19,26,33,40,47,54,61,68,75,82,136,137,144,151,158,165,172,179,186,193,200,207,214,221,227,234,241,248,255,262,269,276,283,290,297,304,311,318,395,419,422,432,436,443,450,457,464,471,478]},{"start":[282,418],"end":[451,255],"points":[[284,418],[285,418],[289,422],[292,425],[296,428],[298,430],[300,431],[302,434],[304,434],[305,435],[308,436],[312,438],[316,439],[320,442],[328,442],[335,443],[344,443],[356,443],[367,442],[376,437],[385,430],[392,422],[399,414],[404,404],[408,396],[412,387],[413,380],[415,372],[417,365],[417,356],[418,350],[419,345],[420,338],[420,331],[420,326],[422,322],[424,317],[426,313],[428,309],[430,306],[430,302],[432,301],[432,300],[432,298],[433,298],[433,297],[434,296],[435,294],[437,291],[438,289],[440,286],[442,282],[443,280],[444,277],[445,275],[447,273],[447,271],[447,270],[448,269],[448,267],[448,264],[449,262],[451,260],[451,258],[451,256],[451,255]],"dx":169,"dy":-163,"length":307.7934167243432,"timing":[0,3,9,16,23,30,37,44,51,58,65,72,79,86,93,100,107,114,120,127,134,141,148,155,162,169,176,183,190,197,204,211,218,225,232,239,245,252,259,266,273,280,287,294,445,450,454,461,468,475,482,489,496,503,510,517,524,530,537,544,551,558,565,572,579,586]},{"start":[451,255],"end":[328,478],"points":[[449,255],[447,258],[442,263],[437,272],[429,282],[423,294],[413,307],[403,325],[392,342],[381,363],[369,386],[359,404],[348,423],[344,438],[336,450],[331,459],[328,464],[327,468],[325,470],[325,472],[324,472],[323,472],[323,474],[322,474],[322,475],[323,475],[323,476],[324,476],[324,477],[325,477],[326,477],[327,477],[327,478],[328,478]],"dx":-123,"dy":223,"length":266.6548780391196,"timing":[0,6,13,19,26,33,40,47,54,61,68,75,82,89,96,103,110,117,125,137,192,212,214,239,431,437,444,452,471,492,500,520,530,548]},{"start":[328,478],"end":[618,330],"points":[[328,476],[330,475],[331,472],[334,466],[336,462],[338,457],[341,450],[344,444],[348,438],[352,430],[354,423],[357,416],[360,408],[363,402],[365,397],[368,391],[372,387],[377,382],[384,378],[393,374],[405,371],[423,367],[441,366],[464,365],[488,365],[509,365],[528,365],[545,369],[558,371],[570,374],[580,375],[588,377],[594,378],[597,378],[600,378],[601,378],[603,378],[604,377],[604,376],[604,375],[607,374],[608,370],[612,366],[615,362],[619,358],[623,354],[626,349],[628,346],[632,342],[632,339],[634,338],[634,337],[634,336],[634,335],[632,335],[632,334],[631,334],[629,334],[627,334],[625,332],[622,331],[620,330],[618,330]],"dx":290,"dy":-148,"length":411.77330956123944,"timing":[0,2,9,16,23,30,37,44,51,57,64,71,78,85,92,99,106,113,120,127,134,141,148,155,161,168,176,182,189,196,203,210,217,224,231,238,246,254,262,266,273,280,287,294,300,308,315,321,328,335,342,349,356,393,456,461,467,474,481,488,495,502,509]},{"start":[923,351],"end":[584,206],"points":[[923,352],[922,352],[921,352],[920,352],[918,354],[916,357],[916,358],[914,360],[911,363],[909,366],[907,368],[903,372],[900,374],[895,378],[888,382],[883,385],[876,387],[868,389],[860,390],[853,390],[847,390],[839,385],[832,379],[828,374],[824,366],[819,360],[816,353],[812,345],[808,338],[800,328],[793,316],[782,305],[770,292],[753,280],[740,271],[723,262],[710,258],[700,258],[696,258],[693,258],[691,258],[690,258],[688,258],[686,258],[684,258],[683,258],[679,258],[674,258],[668,258],[660,259],[655,259],[648,260],[640,261],[634,262],[627,263],[620,263],[615,263],[611,263],[605,263],[602,263],[599,263],[596,263],[593,262],[592,260],[589,258],[588,257],[586,254],[586,250],[584,248],[584,243],[582,240],[582,236],[582,231],[582,227],[582,222],[582,218],[582,214],[582,210],[582,208],[584,206]],"dx":-339,"dy":-145,"length":464.5590405913422,"timing":[0,85,91,98,105,112,118,125,132,139,146,153,160,167,174,181,188,195,202,209,216,223,230,236,243,250,257,264,271,278,285,292,299,306,313,320,327,334,341,348,355,362,369,376,383,390,398,403,410,417,424,431,438,445,452,459,466,473,480,486,493,500,507,514,521,528,535,542,549,557,563,570,577,584,591,598,605,611,618,625]},{"start":[636,208],"end":[592,394],"points":[[636,210],[636,213],[636,221],[636,233],[636,247],[636,262],[634,278],[631,291],[624,309],[620,322],[612,337],[601,353],[591,367],[582,378],[572,390],[566,395],[560,399],[557,402],[556,402],[557,402],[558,402],[559,401],[560,400],[562,399],[564,398],[566,398],[568,398],[569,396],[572,395],[575,394],[579,394],[581,394],[585,394],[588,394],[589,394],[591,394],[592,394]],"dx":-44,"dy":186,"length":256.96034540522123,"timing":[0,3,10,17,24,31,38,45,52,59,66,73,80,87,94,100,107,114,122,192,198,205,212,219,226,233,240,247,254,260,267,274,281,288,295,302,309]},{"start":[335,134],"end":[784,546],"points":[[336,134],[340,134],[345,136],[354,145],[367,157],[381,174],[396,194],[416,218],[435,245],[453,271],[467,296],[478,316],[484,334],[488,347],[492,365],[494,381],[494,397],[496,412],[496,426],[496,435],[496,442],[495,448],[494,450],[492,450],[492,449],[488,441],[483,430],[476,419],[463,403],[448,385],[433,370],[417,353],[402,339],[391,329],[386,323],[385,322],[386,322],[387,321],[396,319],[414,318],[436,318],[460,318],[489,318],[519,324],[546,331],[577,342],[606,352],[635,362],[654,372],[680,386],[700,398],[718,410],[732,422],[743,434],[751,444],[757,451],[760,455],[761,458],[760,458],[751,455],[743,452],[736,450],[729,447],[720,446],[712,444],[704,443],[698,443],[695,443],[692,443],[692,447],[695,454],[706,467],[716,479],[729,493],[741,503],[751,511],[759,515],[764,518],[768,521],[772,524],[776,526],[779,530],[780,531],[781,534],[783,537],[784,539],[784,542],[784,544],[784,545],[784,546]],"dx":449,"dy":412,"length":1174.0651997303025,"timing":[0,7,14,21,28,34,41,48,55,62,69,76,83,90,97,104,111,118,125,132,139,146,153,179,194,201,208,215,222,229,236,243,250,257,264,271,283,284,292,298,305,312,319,326,333,340,347,354,361,368,375,382,389,396,403,409,416,423,464,473,480,486,493,500,507,514,521,528,535,555,562,569,576,583,590,597,604,611,618,625,632,639,646,652,659,666,674,681,688,694]},{"start":[136,185],"end":[958,227],"points":[[136,185],[137,185],[140,186],[144,190],[152,197],[162,206],[176,219],[200,234],[226,253],[253,269],[285,285],[315,298],[345,311],[375,322],[405,333],[438,346],[468,358],[500,370],[533,384],[566,394],[593,405],[620,414],[638,418],[656,422],[674,425],[687,425],[701,425],[712,422],[725,415],[740,406],[756,397],[772,386],[788,374],[801,362],[815,349],[826,338],[839,325],[850,311],[861,299],[872,287],[880,277],[890,268],[899,259],[907,251],[914,246],[918,242],[922,238],[925,237],[926,237],[926,236],[927,236],[928,236],[931,236],[933,236],[936,234],[940,234],[944,232],[948,230],[951,230],[955,229],[956,228],[958,227]],"dx":822,"dy":42,"length":954.233756596173,"timing":[0,38,42,48,55,62,69,76,83,90,96,103,110,117,124,131,138,145,152,159,166,173,180,187,194,201,208,214,221,228,235,242,250,256,263,270,277,284,291,298,305,312,319,326,333,339,346,354,429,439,446,451,458,465,472,479,485,492,500,507,513,520]},{"start":[711,638],"end":[273,538],"points":[[708,636],[708,634],[705,628],[701,622],[696,613],[687,598],[674,578],[656,551],[634,522],[612,494],[583,462],[552,437],[522,415],[488,396],[460,386],[437,380],[419,378],[401,378],[388,378],[374,382],[360,388],[346,396],[336,404],[324,413],[313,422],[304,432],[294,442],[282,454],[268,466],[255,479],[244,490],[232,503],[224,512],[219,518],[216,523],[213,528],[213,530],[213,532],[213,533],[216,534],[220,534],[224,536],[227,538],[229,538],[231,538],[232,538],[234,539],[236,539],[238,540],[243,540],[245,540],[249,540],[252,540],[256,540],[260,540],[264,540],[268,540],[272,539],[273,538]],"dx":-438,"dy":-100,"length":735.1314553844599,"timing":[0,5,12,19,26,33,39,46,53,60,67,74,81,88,95,102,109,116,123,130,137,143,150,157,164,171,178,185,192,199,206,213,220,227,234,241,248,255,262,283,290,297,304,310,318,325,331,338,345,352,359,366,373,380,387,394,400,407,414]},{"start":[339,376],"end":[1439,228],"points":[[339,376],[340,376],[342,376],[344,377],[350,379],[357,382],[368,385],[382,388],[400,392],[420,395],[440,397],[468,398],[495,398],[528,398],[554,398],[588,398],[628,398],[670,398],[712,399],[756,399],[796,399],[838,399],[884,394],[930,388],[980,382],[1023,376],[1064,370],[1104,365],[1133,361],[1160,356],[1181,353],[1200,348],[1214,343],[1223,340],[1233,338],[1240,335],[1248,334],[1252,332],[1256,330],[1259,328],[1263,328],[1268,326],[1276,324],[1285,320],[1295,318],[1306,314],[1316,310],[1326,308],[1335,304],[1342,302],[1346,299],[1350,296],[1353,294],[1357,293],[1360,290],[1363,289],[1364,288],[1366,287],[1368,286],[1370,285],[1373,285],[1376,283],[1379,282],[1384,281],[1386,279],[1389,278],[1392,276],[1395,273],[1397,271],[1399,269],[1401,266],[1403,263],[1404,262],[1408,258],[1413,254],[1417,250],[1421,246],[1424,242],[1430,238],[1432,235],[1435,233],[1438,230],[1439,229],[1439,228]],"dx":1100,"dy":-148,"length":1143.421664911682,"timing":[0,125,132,139,146,153,159,166,173,180,187,194,201,208,215,222,229,236,243,250,257,263,270,277,284,291,298,305,312,319,326,333,340,347,354,361,368,375,382,389,396,403,409,416,423,430,437,444,451,458,465,472,479,486,493,501,507,514,520,528,534,542,548,555,562,569,577,584,590,597,604,611,618,625,632,639,645,652,659,666,673,680,688,695]},{"start":[1439,228],"end":[990,442],"points":[[1436,228],[1431,229],[1423,232],[1415,235],[1407,240],[1397,245],[1387,251],[1377,256],[1367,262],[1356,266],[1348,270],[1336,274],[1330,277],[1324,278],[1319,281],[1312,282],[1305,286],[1296,290],[1285,293],[1272,298],[1254,304],[1236,310],[1213,318],[1185,329],[1153,342],[1124,354],[1086,372],[1042,393],[996,414],[954,438],[922,456],[894,476],[875,490],[862,502],[856,509],[852,512],[851,514],[851,515],[852,515],[854,515],[860,516],[867,517],[876,518],[884,518],[892,518],[899,518],[904,518],[910,517],[914,515],[918,513],[923,510],[928,507],[935,503],[940,499],[945,495],[953,490],[959,484],[965,478],[971,472],[976,466],[980,460],[984,453],[986,447],[988,446],[988,444],[989,442],[990,442]],"dx":-449,"dy":214,"length":829.996391053423,"timing":[0,6,13,20,27,34,41,48,55,62,69,76,83,90,97,104,111,118,125,131,138,145,152,159,166,173,180,187,194,201,208,215,222,229,236,242,250,257,264,270,277,284,291,298,305,312,319,326,333,340,347,354,361,368,375,382,388,395,402,409,416,423,431,437,444,451,507]},{"start":[1098,557],"end":[292,194],"points":[[1097,557],[1095,557],[1092,557],[1087,554],[1079,548],[1069,539],[1055,529],[1036,516],[1013,499],[979,480],[950,462],[907,434],[857,406],[808,381],[763,359],[720,339],[687,327],[653,314],[626,305],[602,295],[586,289],[573,282],[560,277],[550,273],[542,269],[534,266],[529,263],[524,260],[517,258],[512,255],[506,254],[499,250],[492,248],[484,246],[476,242],[468,242],[460,238],[452,238],[447,237],[441,235],[435,234],[428,233],[421,231],[412,230],[405,229],[396,227],[388,225],[380,223],[369,221],[359,217],[350,215],[339,210],[332,208],[324,205],[317,202],[312,201],[308,199],[304,198],[301,198],[300,197],[297,195],[296,195],[294,194],[293,194],[292,194]],"dx":-806,"dy":-363,"length":893.0210274222353,"timing":[0,8,16,22,29,35,42,49,56,63,70,77,84,91,98,105,112,119,126,133,140,147,153,160,167,174,181,188,195,202,209,216,223,230,237,244,251,258,265,272,278,286,293,299,306,313,320,327,334,341,348,355,362,369,376,383,390,397,403,410,418,443,459,467,473]},{"start":[287,194],"end":[1142,429],"points":[[288,194],[288,195],[293,198],[303,203],[313,210],[333,218],[363,234],[398,250],[443,267],[496,283],[552,298],[609,310],[669,319],[724,326],[769,330],[823,334],[860,335],[902,337],[935,339],[960,342],[981,346],[998,350],[1017,355],[1030,360],[1045,366],[1058,370],[1066,374],[1072,376],[1076,378],[1077,379],[1077,380],[1077,381],[1077,385],[1077,389],[1077,394],[1077,399],[1077,406],[1077,411],[1077,418],[1077,421],[1079,425],[1081,428],[1083,428],[1086,430],[1088,430],[1092,430],[1095,431],[1097,432],[1100,432],[1104,434],[1106,434],[1109,434],[1112,434],[1115,434],[1118,434],[1120,434],[1124,434],[1127,432],[1129,432],[1133,430],[1135,430],[1139,430],[1140,429],[1142,429]],"dx":855,"dy":235,"length":934.0484963051135,"timing":[0,1,8,15,22,29,36,43,50,57,64,70,77,84,91,98,105,112,119,126,133,140,147,154,161,168,175,182,189,195,260,265,272,279,286,293,300,307,314,320,327,334,341,348,355,362,369,376,383,390,397,404,411,418,425,432,439,446,453,461,467,473,480,487]},{"start":[407,459],"end":[39,304],"points":[[407,459],[408,459],[409,458],[412,458],[416,458],[420,457],[427,455],[435,455],[445,454],[457,453],[477,450],[498,449],[522,446],[550,446],[580,446],[616,446],[653,446],[682,445],[703,442],[713,440],[716,438],[716,437],[716,436],[713,435],[701,433],[687,432],[664,428],[639,426],[608,423],[573,419],[540,416],[504,411],[460,405],[420,396],[377,387],[340,379],[304,370],[282,363],[265,357],[249,353],[240,349],[234,347],[232,346],[231,346],[230,345],[229,342],[227,339],[225,336],[221,332],[218,330],[212,324],[204,319],[196,315],[190,312],[183,308],[177,306],[173,305],[169,305],[164,304],[160,302],[157,302],[155,302],[152,302],[148,302],[146,302],[144,302],[143,302],[142,302],[140,302],[139,302],[136,302],[132,303],[127,304],[119,306],[113,306],[100,306],[86,306],[73,306],[64,306],[59,306],[53,306],[50,306],[48,306],[46,305],[42,305],[40,304],[39,304]],"dx":-368,"dy":-155,"length":1016.9817715497059,"timing":[0,91,97,104,111,118,125,132,138,145,152,159,166,173,180,187,194,201,208,215,222,234,237,243,250,257,264,270,277,284,291,298,305,312,319,326,334,340,347,354,362,368,375,467,472,479,486,493,500,507,514,520,527,534,541,548,555,562,569,576,583,590,597,604,611,618,625,632,639,646,653,660,666,673,680,687,694,701,708,715,722,729,736,743,750,757,764]},{"start":[76,306],"end":[649,434],"points":[[78,306],[80,307],[82,310],[85,311],[91,314],[99,317],[110,320],[124,323],[142,326],[163,330],[186,333],[211,334],[241,336],[272,338],[318,345],[372,351],[424,358],[476,366],[519,370],[572,378],[613,386],[648,394],[672,399],[695,405],[708,406],[717,409],[721,410],[720,411],[717,412],[714,414],[709,416],[704,417],[700,420],[692,422],[684,425],[675,428],[667,431],[661,433],[658,433],[655,434],[653,434],[652,434],[651,434],[649,434]],"dx":573,"dy":128,"length":731.2594294130473,"timing":[0,7,14,21,28,35,42,49,56,63,70,77,83,90,97,104,111,118,125,132,139,146,153,160,167,174,181,293,299,306,313,320,327,334,341,348,355,361,368,375,383,390,396,403]},{"start":[341,450],"end":[772,423],"points":[[343,450],[347,452],[356,454],[367,460],[380,467],[396,474],[413,482],[432,490],[451,497],[472,503],[496,511],[520,516],[543,520],[570,525],[596,528],[621,531],[644,531],[662,531],[676,531],[685,526],[692,518],[697,510],[701,502],[703,494],[704,485],[704,475],[704,466],[703,458],[700,448],[696,438],[693,432],[692,424],[691,420],[689,417],[689,415],[691,415],[691,414],[691,413],[692,413],[696,413],[700,413],[707,413],[716,414],[727,417],[737,418],[746,419],[753,421],[759,422],[764,422],[768,422],[770,423],[772,423]],"dx":431,"dy":-27,"length":562.4519832961086,"timing":[0,6,13,20,27,34,41,48,54,62,68,75,82,89,96,103,110,117,124,131,138,145,152,159,166,173,179,186,193,200,207,214,221,228,245,255,256,297,306,313,318,325,332,339,346,353,360,367,374,381,388,395]},{"start":[772,423],"end":[1234,640],"points":[[772,425],[772,427],[772,432],[772,435],[772,438],[772,444],[772,448],[772,452],[772,457],[770,461],[770,465],[770,468],[770,472],[770,475],[770,478],[770,480],[770,481],[770,482],[770,484],[772,486],[774,487],[779,491],[787,496],[800,502],[815,508],[836,516],[856,521],[880,527],[901,534],[928,539],[956,547],[984,554],[1013,562],[1038,568],[1064,577],[1086,582],[1101,588],[1112,593],[1120,597],[1126,598],[1130,602],[1132,603],[1132,604],[1132,606],[1135,610],[1137,615],[1143,621],[1149,629],[1156,637],[1163,642],[1171,646],[1176,650],[1181,652],[1185,654],[1188,654],[1189,654],[1190,654],[1191,654],[1192,654],[1196,654],[1200,654],[1204,653],[1211,651],[1214,650],[1220,649],[1225,647],[1230,645],[1232,643],[1234,642],[1234,641],[1234,640]],"dx":462,"dy":217,"length":573.067593002553,"timing":[0,5,12,20,26,33,40,47,54,61,68,75,82,89,97,102,110,117,125,131,137,144,151,158,165,172,179,186,193,200,207,214,220,227,234,241,248,255,262,269,276,283,311,318,325,332,339,345,352,359,366,373,380,387,394,418,427,429,436,443,450,457,464,470,477,484,491,498,505,512,533]},{"start":[645,232],"end":[939,158],"points":[[645,232],[644,232],[644,233],[644,234],[644,235],[644,238],[644,240],[646,244],[648,248],[651,253],[652,258],[656,262],[659,266],[660,270],[663,275],[666,279],[670,286],[676,292],[681,301],[688,310],[696,322],[703,333],[708,342],[715,355],[719,363],[720,369],[721,373],[721,374],[720,376],[719,376],[715,377],[708,378],[700,380],[693,382],[684,384],[677,384],[672,384],[668,384],[665,381],[664,373],[664,362],[668,348],[678,334],[694,318],[710,307],[729,298],[748,287],[764,279],[777,273],[789,266],[800,262],[810,256],[816,252],[824,247],[829,243],[834,239],[840,234],[844,230],[849,224],[856,219],[860,214],[866,209],[872,204],[878,199],[886,194],[894,190],[905,186],[915,182],[922,178],[928,174],[931,173],[935,170],[936,168],[939,166],[940,163],[941,162],[941,161],[943,159],[943,158],[941,158],[940,158],[939,158]],"dx":294,"dy":-74,"length":602.8351118129833,"timing":[0,13,20,47,53,69,76,82,90,96,103,110,117,124,131,138,145,152,159,166,173,180,186,193,200,207,214,221,254,256,263,270,277,284,291,298,305,311,318,325,332,339,346,353,360,367,374,381,388,395,402,409,416,423,429,436,443,450,457,464,471,478,485,492,499,506,513,520,527,534,541,548,555,561,569,577,583,589,597,633,641,645]},{"start":[600,422],"end":[277,239],"points":[[600,422],[600,421],[600,418],[604,414],[608,410],[615,405],[624,400],[633,394],[645,388],[657,382],[671,374],[686,367],[701,359],[715,353],[729,346],[743,338],[755,332],[768,326],[779,320],[788,315],[796,312],[806,307],[812,303],[817,300],[823,296],[825,294],[827,292],[828,290],[828,289],[828,288],[828,286],[824,282],[815,277],[801,270],[786,264],[764,257],[742,250],[717,243],[695,238],[669,235],[640,230],[613,227],[584,222],[555,220],[531,219],[507,217],[488,215],[472,214],[462,211],[454,210],[448,207],[444,206],[440,206],[436,204],[432,203],[429,202],[425,202],[420,200],[416,199],[412,198],[405,198],[400,198],[393,198],[389,198],[387,198],[386,198],[384,198],[380,198],[376,199],[372,201],[368,203],[363,206],[357,209],[351,213],[344,215],[338,218],[331,222],[324,223],[317,226],[312,226],[308,229],[304,229],[303,229],[301,230],[299,231],[296,231],[294,232],[291,234],[288,234],[285,236],[283,237],[280,238],[277,239]],"dx":-323,"dy":-183,"length":845.6952095008215,"timing":[0,35,42,49,56,63,70,77,83,91,97,104,111,118,125,132,139,146,153,160,167,174,181,188,195,202,209,216,223,230,236,243,250,257,264,271,278,285,292,299,306,313,320,326,334,340,347,354,361,368,375,382,389,396,403,410,417,424,431,438,445,451,458,465,472,480,503,521,528,535,542,549,556,563,570,577,584,592,598,604,612,618,625,633,639,647,653,660,667,674,681,688,695]},{"start":[1124,387],"end":[381,150],"points":[[1122,387],[1121,387],[1120,387],[1118,389],[1116,390],[1114,390],[1111,391],[1107,393],[1104,394],[1100,394],[1096,394],[1091,394],[1084,395],[1080,395],[1072,395],[1063,395],[1052,395],[1037,395],[1019,393],[993,390],[961,383],[928,377],[889,369],[840,358],[787,350],[732,338],[669,326],[608,312],[552,297],[497,282],[455,270],[417,258],[388,247],[363,238],[344,231],[328,225],[316,219],[303,215],[295,211],[288,207],[284,203],[279,200],[276,198],[272,194],[268,190],[265,186],[264,184],[263,183],[264,183],[264,182],[266,182],[272,180],[280,179],[290,178],[300,178],[311,175],[318,174],[326,172],[333,170],[341,167],[348,165],[354,162],[358,162],[360,160],[363,158],[364,158],[366,156],[368,156],[370,156],[371,154],[374,154],[376,154],[376,153],[378,153],[379,152],[381,152],[381,150]],"dx":-743,"dy":-237,"length":1025.5567869225802,"timing":[0,5,11,18,25,32,39,46,53,60,67,75,81,88,94,101,108,115,122,129,136,143,150,157,164,171,178,185,191,198,205,212,219,226,233,240,247,254,261,268,275,282,289,296,303,310,316,324,371,376,379,386,393,400,407,414,421,428,435,442,448,455,462,469,476,483,490,497,505,511,518,525,532,539,546,553,560]},{"start":[381,150],"end":[79,174],"points":[[381,152],[384,155],[385,162],[387,166],[391,172],[395,178],[400,187],[409,199],[421,212],[435,228],[451,245],[468,263],[487,279],[504,294],[525,306],[545,314],[562,325],[576,331],[588,338],[600,345],[611,350],[623,355],[634,361],[642,365],[645,366],[643,366],[633,365],[616,358],[589,346],[566,335],[533,322],[504,311],[470,296],[436,282],[402,270],[371,260],[348,253],[319,244],[295,235],[272,228],[252,222],[236,217],[220,213],[207,210],[198,206],[191,206],[188,205],[187,205],[185,204],[184,204],[182,202],[180,202],[176,201],[174,200],[172,200],[171,198],[168,198],[165,198],[162,197],[158,195],[154,194],[149,193],[144,193],[139,190],[134,190],[127,187],[120,186],[109,183],[100,181],[92,178],[85,175],[80,174],[79,174]],"dx":-302,"dy":24,"length":950.7861753865111,"timing":[0,6,13,19,26,34,40,47,54,61,68,75,82,89,96,103,110,117,124,130,138,144,151,158,165,195,200,207,214,221,228,235,242,249,256,263,269,276,283,290,297,304,311,318,325,332,339,346,367,374,381,388,395,402,409,417,422,429,436,443,450,457,464,471,478,485,492,499,506,513,519,526,533]},{"start":[340,360],"end":[506,399],"points":[[341,360],[340,360],[339,360],[338,360],[336,360],[335,361],[332,362],[332,363],[331,364],[331,365],[331,366],[329,366],[329,368],[329,370],[332,374],[339,380],[354,389],[373,402],[403,417],[443,437],[474,454],[516,473],[559,488],[598,498],[630,506],[651,510],[668,510],[679,510],[682,510],[682,508],[682,507],[682,505],[679,500],[669,494],[657,488],[642,477],[626,468],[605,458],[588,449],[570,440],[559,434],[551,430],[546,426],[542,425],[540,424],[540,422],[539,422],[537,422],[535,421],[532,420],[529,419],[526,418],[524,418],[520,417],[516,414],[513,412],[512,410],[511,408],[510,406],[509,406],[508,404],[508,403],[508,401],[506,401],[506,399]],"dx":166,"dy":39,"length":623.7251768103126,"timing":[0,47,54,56,63,70,77,84,91,98,105,112,119,125,132,139,146,153,160,167,174,181,188,195,202,209,216,223,230,237,244,250,258,265,271,278,285,292,299,306,313,320,327,334,341,348,355,362,369,376,383,390,396,404,410,417,424,431,438,445,452,459,466,473,480]},{"start":[230,364],"end":[840,195],"points":[[230,364],[232,364],[235,366],[237,367],[239,367],[240,369],[243,371],[247,374],[250,377],[255,380],[260,382],[266,386],[272,388],[277,391],[283,394],[290,395],[297,398],[304,400],[312,403],[324,406],[337,410],[352,414],[372,421],[395,426],[420,431],[448,438],[472,443],[498,446],[518,448],[532,449],[547,449],[559,448],[568,444],[578,438],[586,430],[596,422],[605,414],[613,403],[624,394],[632,383],[645,371],[657,358],[671,344],[684,332],[698,319],[711,308],[724,296],[734,288],[744,281],[754,273],[760,270],[764,266],[766,266],[768,265],[768,263],[770,263],[773,261],[775,258],[777,256],[780,254],[783,250],[787,247],[787,246],[788,244],[792,242],[793,238],[798,236],[801,233],[805,229],[811,224],[815,219],[820,214],[824,210],[829,206],[833,203],[836,201],[839,199],[840,197],[840,195]],"dx":610,"dy":-169,"length":729.9325262860933,"timing":[0,7,14,20,27,34,41,48,55,62,69,76,83,90,97,104,111,118,125,132,138,145,152,159,166,173,180,187,194,201,208,215,222,229,236,243,250,257,263,270,277,284,291,298,305,312,319,326,333,340,347,354,361,368,433,437,444,451,458,465,472,479,486,493,500,506,513,520,527,534,541,548,555,562,569,576,583,590,597]},{"start":[506,453],"end":[1115,305],"points":[[507,453],[508,453],[514,453],[523,453],[538,453],[557,449],[581,444],[609,438],[642,434],[671,430],[704,426],[732,426],[770,423],[808,423],[845,423],[884,421],[920,417],[951,414],[972,409],[993,401],[1013,391],[1031,380],[1049,366],[1065,354],[1076,346],[1085,338],[1092,332],[1097,327],[1101,324],[1103,322],[1104,321],[1106,318],[1108,317],[1108,316],[1109,314],[1110,314],[1112,311],[1112,310],[1114,308],[1114,306],[1114,305],[1115,305]],"dx":609,"dy":-148,"length":649.867356503076,"timing":[0,7,13,20,27,34,41,48,55,62,69,76,83,90,96,103,110,117,124,131,138,145,152,159,166,173,180,187,194,201,208,215,236,243,250,256,263,270,277,284,400,403]},{"start":[1159,634],"end":[864,416],"points":[[1159,633],[1157,631],[1152,627],[1141,621],[1128,612],[1110,602],[1092,591],[1073,582],[1054,573],[1038,566],[1023,558],[1008,549],[993,540],[984,533],[974,524],[964,516],[958,508],[953,500],[946,490],[941,483],[935,477],[928,470],[923,463],[917,459],[916,458],[915,456],[914,456],[914,455],[914,454],[913,454],[912,454],[910,454],[909,454],[908,454],[907,454],[906,454],[906,453],[904,453],[903,453],[902,452],[901,452],[900,452],[899,450],[897,450],[896,450],[894,449],[892,448],[890,447],[887,446],[885,445],[883,442],[880,441],[879,439],[877,438],[876,437],[875,435],[874,434],[873,432],[872,431],[872,429],[870,426],[868,424],[868,422],[868,421],[866,419],[866,417],[864,416]],"dx":-295,"dy":-218,"length":380.71976039147245,"timing":[0,5,12,19,26,33,40,47,54,61,68,74,81,88,95,102,109,117,124,130,137,144,151,158,165,172,179,211,220,221,227,253,262,266,274,279,284,290,297,304,311,318,326,331,339,345,352,359,366,374,380,387,394,401,408,415,422,429,436,443,450,456,463,470,477,485,491]},{"start":[864,416],"end":[753,182],"points":[[864,417],[864,418],[864,421],[866,424],[866,426],[868,430],[869,431],[872,432],[872,433],[872,434],[872,435],[872,437],[872,438],[870,438],[868,438],[866,438],[861,438],[857,435],[852,428],[847,421],[840,409],[831,394],[820,378],[811,363],[800,346],[792,330],[783,315],[775,302],[768,290],[762,279],[756,270],[752,261],[748,255],[746,251],[745,250],[745,248],[745,247],[746,246],[748,245],[750,242],[753,239],[755,237],[757,234],[760,231],[761,229],[761,226],[763,223],[763,221],[763,218],[763,214],[763,211],[763,206],[762,200],[759,194],[756,187],[754,184],[753,182]],"dx":-111,"dy":-234,"length":334.4981083793389,"timing":[0,4,11,17,24,31,39,46,52,59,80,88,95,103,108,115,122,128,135,142,149,156,163,170,177,184,191,198,205,212,219,226,233,240,246,254,325,330,337,344,351,358,365,372,379,386,393,399,406,414,421,429,434,441,448,455,462]},{"start":[822,138],"end":[1388,374],"points":[[822,139],[822,142],[824,150],[832,159],[843,170],[854,183],[868,194],[887,206],[910,219],[943,233],[978,247],[1011,256],[1055,268],[1099,281],[1141,292],[1180,302],[1212,310],[1242,316],[1264,322],[1279,326],[1289,330],[1297,333],[1301,334],[1304,335],[1306,336],[1308,338],[1310,338],[1311,341],[1314,342],[1316,344],[1317,346],[1321,347],[1324,350],[1329,351],[1335,354],[1341,357],[1348,359],[1352,361],[1356,362],[1358,364],[1358,365],[1360,365],[1362,366],[1365,368],[1368,368],[1371,370],[1372,370],[1376,371],[1378,372],[1380,372],[1384,374],[1385,374],[1388,374]],"dx":566,"dy":236,"length":631.3071097289209,"timing":[0,5,11,18,25,32,39,46,53,60,67,74,81,88,95,102,109,116,123,130,136,143,150,157,164,172,178,186,193,199,206,213,220,227,234,241,248,254,261,269,275,283,303,310,317,324,331,338,345,352,359,366,373]},{"start":[1034,216],"end":[740,233],"points":[[1034,218],[1034,219],[1034,222],[1034,225],[1033,228],[1032,230],[1029,236],[1028,239],[1021,246],[1014,252],[1004,258],[992,265],[979,271],[963,277],[946,283],[928,288],[912,292],[900,294],[890,296],[883,296],[879,296],[876,296],[873,296],[870,296],[868,294],[864,291],[860,289],[856,286],[850,283],[842,280],[835,278],[828,274],[821,272],[816,270],[810,270],[804,268],[800,266],[796,266],[792,266],[788,265],[782,264],[776,262],[766,262],[757,262],[745,262],[731,262],[718,262],[705,262],[694,262],[686,264],[683,265],[680,265],[680,266],[680,265],[682,262],[685,261],[688,259],[692,256],[695,254],[697,252],[701,249],[705,247],[710,244],[716,242],[722,239],[728,238],[732,235],[736,234],[739,234],[740,233]],"dx":-294,"dy":17,"length":463.9726318039603,"timing":[0,7,14,21,28,35,42,49,56,62,69,76,83,90,97,104,111,118,125,132,139,146,152,159,167,174,181,187,194,201,208,215,222,229,236,243,250,257,264,271,278,284,291,298,305,312,319,326,333,340,347,354,361,415,431,438,445,451,458,465,472,479,486,493,500,507,514,521,528,535]},{"start":[392,364],"end":[679,490],"points":[[394,364],[395,364],[400,364],[404,364],[411,366],[421,367],[441,372],[462,378],[487,387],[511,393],[530,400],[549,410],[566,418],[580,428],[593,436],[607,445],[617,453],[626,460],[635,466],[640,470],[646,473],[652,474],[655,477],[659,478],[661,481],[664,482],[668,484],[670,486],[673,486],[675,487],[676,488],[678,490],[679,490]],"dx":287,"dy":126,"length":317.84669836303243,"timing":[0,7,15,21,28,35,41,48,55,62,69,76,83,90,97,104,111,118,125,132,139,146,153,160,167,173,180,187,194,201,208,215,224]},{"start":[685,201],"end":[1321,309],"points":[[685,202],[684,204],[684,205],[684,206],[684,210],[684,214],[684,219],[684,225],[684,230],[684,235],[684,239],[686,244],[687,247],[688,253],[692,258],[696,262],[698,266],[703,271],[707,275],[709,278],[712,282],[716,284],[720,289],[727,294],[736,303],[750,313],[768,323],[792,336],[823,348],[852,357],[886,364],[916,369],[956,372],[999,373],[1044,373],[1082,373],[1125,373],[1164,373],[1200,373],[1231,372],[1257,371],[1282,371],[1304,370],[1324,369],[1339,367],[1348,367],[1355,367],[1358,366],[1358,365],[1358,363],[1358,359],[1356,356],[1354,350],[1350,344],[1344,338],[1339,331],[1333,326],[1328,321],[1324,316],[1322,314],[1321,312],[1321,310],[1321,309]],"dx":636,"dy":108,"length":828.8406762067601,"timing":[0,7,14,21,28,35,43,49,56,63,70,77,84,91,97,104,111,118,125,132,139,146,153,160,167,174,181,188,195,202,209,215,222,229,236,243,250,257,264,271,278,285,292,299,306,313,320,327,421,424,431,438,445,452,459,466,472,479,486,493,501,507,515]},{"start":[1321,309],"end":[399,417],"points":[[1321,310],[1321,312],[1321,315],[1321,318],[1321,319],[1321,321],[1321,322],[1321,324],[1321,326],[1321,327],[1321,328],[1323,328],[1323,330],[1324,330],[1325,330],[1324,330],[1319,330],[1307,330],[1290,328],[1266,325],[1239,324],[1208,322],[1186,322],[1149,322],[1106,325],[1057,332],[1012,338],[974,346],[936,352],[898,359],[866,366],[836,375],[804,384],[774,393],[745,402],[713,411],[684,419],[659,427],[635,432],[614,436],[593,440],[576,443],[554,448],[536,450],[519,453],[506,454],[490,457],[474,459],[465,459],[456,459],[446,459],[436,459],[426,459],[416,459],[404,459],[392,459],[380,457],[372,455],[369,454],[369,452],[369,450],[369,446],[372,441],[375,436],[378,432],[380,428],[384,426],[385,423],[388,422],[390,420],[391,420],[392,420],[392,418],[393,418],[395,418],[396,418],[399,417]],"dx":-922,"dy":108,"length":1050.3131548819392,"timing":[0,5,12,19,26,33,40,47,54,75,84,95,102,107,113,152,158,165,172,179,186,193,200,207,214,220,227,234,241,248,255,262,269,276,283,290,297,304,311,318,325,331,338,345,352,359,366,373,380,387,394,401,408,415,422,429,436,443,450,480,485,491,498,505,512,519,526,533,540,547,554,561,572,575,615,624,629]},{"start":[1258,247],"end":[966,462],"points":[[1258,249],[1257,250],[1255,251],[1253,253],[1250,254],[1244,258],[1236,261],[1228,262],[1220,266],[1210,269],[1200,272],[1185,276],[1170,278],[1154,280],[1136,281],[1116,283],[1096,285],[1072,286],[1045,289],[1015,294],[984,296],[958,298],[930,302],[898,303],[868,308],[840,311],[817,316],[798,322],[784,327],[773,334],[768,339],[762,346],[760,350],[759,354],[758,358],[758,364],[763,372],[771,382],[784,396],[800,410],[815,422],[832,436],[845,447],[856,455],[865,460],[873,464],[881,466],[889,469],[896,471],[902,472],[908,474],[914,474],[920,474],[924,474],[928,474],[932,474],[936,474],[940,474],[945,474],[949,471],[954,470],[956,468],[960,467],[962,466],[964,464],[965,463],[966,462]],"dx":-292,"dy":215,"length":784.4128974766809,"timing":[0,7,14,21,28,35,41,48,55,62,69,76,83,90,97,104,111,118,125,131,138,145,152,159,166,173,180,187,194,201,208,215,222,229,236,243,250,256,263,270,277,284,291,298,305,312,319,326,333,340,347,354,361,368,375,382,389,395,402,409,416,423,431,437,444,457,472]},{"start":[768,365],"end":[1220,505],"points":[[768,366],[768,367],[768,375],[769,388],[770,398],[772,410],[772,422],[772,431],[772,439],[772,444],[772,448],[770,450],[768,452],[767,454],[764,454],[763,455],[761,456],[758,458],[756,458],[752,459],[750,460],[750,462],[748,462],[748,463],[756,467],[772,472],[794,479],[824,485],[852,490],[884,495],[922,501],[950,504],[983,507],[1019,510],[1049,514],[1071,516],[1089,518],[1108,520],[1117,521],[1123,522],[1124,522],[1126,522],[1127,522],[1128,522],[1130,522],[1133,522],[1139,522],[1143,522],[1149,521],[1156,518],[1164,517],[1172,516],[1181,514],[1189,513],[1198,512],[1204,510],[1208,509],[1212,509],[1212,508],[1213,508],[1214,506],[1215,506],[1216,506],[1217,506],[1219,505],[1220,505]],"dx":452,"dy":140,"length":595.6631963165064,"timing":[0,3,10,17,24,31,38,45,52,59,66,73,80,87,94,101,108,115,122,129,136,143,150,178,184,191,198,205,212,219,226,233,239,246,253,260,267,274,281,288,295,439,444,448,455,462,470,476,482,489,496,503,510,517,524,531,538,545,552,559,566,573,580,587,594,601]},{"start":[202,551],"end":[1032,601],"points":[[204,551],[208,551],[217,551],[231,550],[248,550],[272,550],[297,550],[329,550],[364,550],[412,550],[462,551],[512,551],[564,551],[615,551],[662,550],[706,545],[746,539],[781,535],[810,531],[828,529],[844,526],[853,523],[858,522],[860,522],[861,522],[865,522],[873,522],[888,527],[908,531],[930,536],[958,542],[982,546],[1004,550],[1022,552],[1037,554],[1048,554],[1060,556],[1068,558],[1075,560],[1080,562],[1084,563],[1086,565],[1087,565],[1088,566],[1090,566],[1090,567],[1092,567],[1093,569],[1095,570],[1096,570],[1097,571],[1097,572],[1097,574],[1094,576],[1092,578],[1088,580],[1081,583],[1077,586],[1070,587],[1064,590],[1056,593],[1052,595],[1048,597],[1042,598],[1039,599],[1037,599],[1035,601],[1033,601],[1032,601]],"dx":830,"dy":50,"length":978.7962090003061,"timing":[0,7,14,21,27,35,41,48,55,62,69,76,83,90,97,104,111,118,125,132,139,146,153,160,194,201,208,215,222,229,236,243,250,257,264,271,277,284,291,298,306,314,319,326,347,354,361,368,375,382,389,451,458,466,472,479,487,493,500,507,514,521,528,535,542,549,556,565,571]},{"start":[1294,438],"end":[388,626],"points":[[1292,438],[1291,438],[1289,438],[1284,438],[1277,438],[1265,442],[1248,446],[1226,450],[1195,454],[1163,458],[1132,463],[1089,470],[1044,480],[999,490],[961,502],[917,514],[877,528],[832,546],[788,565],[749,582],[716,594],[690,604],[671,610],[656,614],[644,618],[633,620],[624,622],[618,622],[612,622],[609,624],[605,624],[602,624],[597,624],[593,624],[589,622],[584,622],[579,621],[572,620],[564,618],[557,618],[550,618],[541,617],[534,617],[528,616],[521,616],[517,616],[513,614],[508,614],[504,614],[497,614],[492,614],[482,614],[472,614],[462,614],[449,614],[436,616],[422,618],[409,621],[397,622],[392,625],[388,626],[387,626],[388,626]],"dx":-906,"dy":188,"length":938.1213464184417,"timing":[0,8,12,19,26,33,40,47,54,61,68,75,82,88,95,102,109,116,123,130,137,144,151,158,165,172,179,186,193,200,207,214,221,228,235,241,248,255,262,269,276,283,290,297,304,311,318,325,332,338,345,352,359,366,373,380,387,394,401,408,415,422,450]},{"start":[393,626],"end":[680,153],"points":[[396,625],[397,625],[398,625],[400,625],[402,625],[404,625],[406,625],[407,625],[409,625],[412,625],[416,625],[420,625],[425,626],[432,626],[436,627],[442,629],[446,630],[447,630],[448,630],[449,630],[451,630],[454,630],[458,630],[464,630],[471,629],[476,623],[483,615],[488,606],[500,590],[512,572],[525,550],[537,528],[545,507],[554,484],[563,461],[570,439],[577,418],[585,395],[592,374],[597,356],[601,341],[604,326],[608,313],[610,305],[612,297],[614,292],[616,286],[617,285],[617,282],[618,281],[620,277],[621,274],[623,270],[625,266],[628,261],[631,255],[635,250],[637,242],[640,236],[644,230],[645,223],[648,218],[649,213],[651,210],[651,207],[652,206],[652,205],[654,202],[656,199],[658,195],[660,190],[663,186],[664,182],[666,178],[669,174],[672,169],[674,166],[675,162],[677,158],[679,156],[679,155],[680,154],[680,153]],"dx":287,"dy":-473,"length":602.0829454598094,"timing":[0,7,14,21,31,41,56,63,70,77,83,90,97,104,111,118,125,132,139,169,188,195,201,208,215,222,229,236,243,250,257,264,271,278,285,292,299,305,313,319,326,333,340,347,354,361,369,375,382,389,396,403,410,417,424,431,438,445,451,458,465,472,479,486,494,500,507,514,521,528,535,542,549,556,563,569,576,583,590,597,605,612,632]},{"start":[1160,274],"end":[486,278],"points":[[1160,274],[1160,275],[1160,277],[1159,277],[1157,277],[1157,278],[1155,279],[1153,280],[1152,282],[1149,282],[1148,285],[1144,286],[1141,290],[1136,292],[1129,296],[1120,302],[1112,309],[1100,316],[1086,325],[1072,334],[1057,341],[1037,348],[1018,355],[996,360],[972,364],[950,366],[929,367],[912,367],[899,367],[888,365],[877,359],[869,354],[860,346],[847,339],[828,328],[804,313],[772,294],[745,280],[712,262],[678,250],[647,240],[622,234],[601,232],[587,230],[577,230],[571,230],[567,230],[565,231],[564,231],[561,233],[560,233],[559,234],[558,234],[558,235],[556,235],[554,238],[550,239],[544,243],[536,249],[528,254],[519,259],[508,265],[500,270],[494,273],[488,276],[487,278],[486,278]],"dx":-674,"dy":4,"length":750.6081549741372,"timing":[0,50,69,97,104,111,118,125,132,139,145,152,159,167,173,180,187,194,201,208,215,222,229,236,243,249,256,263,270,277,284,291,298,305,312,319,326,333,340,347,354,361,368,374,381,388,395,402,409,416,423,431,437,444,451,458,465,472,479,486,493,500,506,513,521,528,535]},{"start":[281,164],"end":[113,274],"points":[[283,164],[284,164],[285,163],[287,162],[288,162],[290,162],[292,162],[293,163],[297,164],[303,166],[311,170],[320,174],[332,178],[344,184],[357,190],[372,194],[385,199],[401,206],[413,209],[426,213],[439,216],[448,219],[455,222],[460,224],[462,225],[464,225],[464,226],[462,228],[454,232],[440,237],[423,241],[401,246],[375,249],[350,250],[327,253],[301,256],[275,257],[249,259],[222,262],[197,264],[174,266],[152,271],[134,274],[121,276],[112,278],[106,280],[102,282],[100,282],[100,283],[102,283],[102,282],[106,280],[108,278],[109,278],[112,277],[112,276],[113,274]],"dx":-168,"dy":110,"length":583.971862163961,"timing":[0,7,13,20,41,50,57,62,69,76,83,90,96,103,110,117,124,131,138,145,152,159,166,173,180,187,208,215,222,229,236,242,249,256,263,270,277,284,291,298,305,312,319,326,333,340,347,354,360,473,479,486,492,499,506,513,521]},{"start":[277,530],"end":[1143,316],"points":[[277,530],[276,530],[275,530],[275,528],[276,528],[278,528],[280,526],[284,526],[289,522],[299,519],[309,515],[320,511],[338,506],[364,499],[396,491],[430,484],[477,474],[527,464],[580,452],[634,438],[684,426],[732,414],[774,404],[808,394],[840,386],[864,379],[883,374],[893,369],[902,366],[905,363],[908,362],[911,359],[912,358],[915,357],[916,355],[920,355],[922,353],[928,350],[933,347],[940,346],[947,343],[954,340],[964,338],[971,337],[978,336],[984,334],[989,334],[995,333],[1000,333],[1006,332],[1013,330],[1028,328],[1045,327],[1064,326],[1082,323],[1101,322],[1117,321],[1134,321],[1149,318],[1162,316],[1172,314],[1178,313],[1181,312],[1184,311],[1185,311],[1187,311],[1190,311],[1192,311],[1196,311],[1197,311],[1199,311],[1200,311],[1199,311],[1198,311],[1196,311],[1192,311],[1188,312],[1185,313],[1182,314],[1178,314],[1175,316],[1171,316],[1168,316],[1164,316],[1160,316],[1156,316],[1152,316],[1149,316],[1146,316],[1144,316],[1143,316]],"dx":866,"dy":-214,"length":1020.2749277238548,"timing":[0,6,13,68,140,147,153,160,167,173,180,187,194,201,208,215,222,229,236,242,249,256,263,270,277,284,291,298,305,312,319,326,333,340,347,354,361,368,374,381,388,395,402,409,416,423,430,437,444,451,458,465,472,479,486,493,499,506,513,520,527,534,542,548,611,618,625,632,639,646,653,660,719,722,729,736,743,750,757,764,771,777,784,792,798,805,812,819,826,833,840]},{"start":[1143,316],"end":[835,310],"points":[[1142,316],[1142,318],[1140,318],[1139,319],[1137,321],[1135,322],[1132,324],[1129,326],[1124,327],[1119,330],[1110,333],[1097,334],[1080,338],[1062,340],[1039,342],[1020,345],[996,346],[973,347],[950,349],[928,349],[905,349],[884,349],[868,346],[857,343],[851,339],[846,337],[843,334],[839,331],[836,328],[833,326],[832,326],[829,325],[828,324],[829,324],[831,322],[833,321],[836,320],[836,319],[836,318],[836,317],[836,315],[836,313],[836,311],[836,310],[835,310]],"dx":-308,"dy":-6,"length":348.34250147705876,"timing":[0,10,15,31,38,45,52,59,66,73,80,87,94,100,108,114,121,128,135,142,149,156,163,170,177,184,191,198,205,212,219,226,233,309,316,323,330,337,344,351,358,365,372,378,387]},{"start":[984,438],"end":[566,488],"points":[[986,439],[990,439],[993,440],[995,440],[997,441],[998,441],[998,440],[998,439],[994,434],[988,430],[980,426],[968,420],[956,414],[940,407],[920,400],[897,391],[869,382],[841,374],[809,370],[771,365],[736,362],[704,362],[675,362],[651,364],[632,374],[614,386],[603,397],[591,412],[584,426],[578,442],[577,456],[577,464],[579,470],[584,474],[591,477],[596,480],[601,482],[605,484],[608,486],[612,488],[615,491],[618,494],[619,495],[620,496],[622,497],[624,497],[623,497],[619,497],[615,497],[609,496],[602,496],[596,494],[589,494],[584,492],[579,491],[574,490],[572,490],[568,488],[566,488]],"dx":-418,"dy":50,"length":628.229040368091,"timing":[0,7,13,21,28,35,122,125,132,138,145,152,159,166,173,180,187,194,201,208,215,222,229,236,243,249,256,263,270,277,284,291,298,305,312,319,326,333,340,347,354,361,368,375,382,403,494,500,507,513,520,527,535,541,548,555,562,569,575]},{"start":[476,310],"end":[1078,318],"points":[[474,310],[473,310],[472,310],[472,312],[472,313],[472,314],[472,318],[474,321],[477,323],[483,329],[491,336],[504,343],[518,350],[539,357],[567,364],[605,370],[634,372],[675,374],[717,374],[756,374],[792,373],[828,366],[859,362],[888,356],[912,351],[933,346],[950,344],[960,342],[968,340],[973,338],[976,338],[978,338],[980,338],[982,338],[984,337],[985,337],[986,337],[988,337],[991,337],[993,336],[996,336],[1000,334],[1005,334],[1008,334],[1012,334],[1016,333],[1018,333],[1020,332],[1021,332],[1022,332],[1024,332],[1028,332],[1032,330],[1036,330],[1041,330],[1047,329],[1051,328],[1056,327],[1060,326],[1064,324],[1067,323],[1069,322],[1071,322],[1072,321],[1072,319],[1074,319],[1075,319],[1076,318],[1078,318]],"dx":602,"dy":8,"length":638.8407036581638,"timing":[0,7,28,109,111,118,125,132,139,146,153,159,166,173,180,187,194,201,208,215,222,229,236,243,250,257,264,271,277,284,291,298,305,312,322,329,333,341,348,354,361,368,375,382,389,396,403,410,452,460,465,472,479,486,493,500,507,514,521,529,535,542,549,556,568,574,582,585,596]},{"start":[1085,471],"end":[1041,169],"points":[[1085,469],[1084,469],[1079,463],[1066,440],[1054,409],[1048,367],[1048,330],[1052,306],[1060,284],[1066,269],[1073,253],[1076,245],[1078,235],[1078,226],[1077,221],[1076,217],[1074,214],[1071,207],[1070,205],[1067,199],[1064,194],[1061,190],[1057,186],[1055,185],[1053,184],[1050,184],[1047,184],[1044,184],[1041,182],[1038,182],[1036,181],[1035,181],[1035,179],[1036,177],[1037,174],[1039,171],[1040,169],[1041,169]],"dx":-44,"dy":-302,"length":340.4293704581168,"timing":[0,223,238,256,272,289,305,322,339,355,373,388,406,422,439,456,472,489,506,523,538,556,572,589,607,623,640,657,673,690,706,1291,1307,1324,1340,1357,1373,1390]},{"start":[791,599],"end":[1464,670],"points":[[791,598],[795,597],[801,595],[820,595],[874,593],[964,593],[1078,593],[1178,595],[1270,601],[1350,615],[1402,627],[1432,637],[1445,644],[1447,645],[1447,646],[1447,648],[1447,650],[1448,655],[1449,659],[1449,661],[1449,662],[1449,663],[1449,664],[1450,665],[1451,666],[1454,667],[1456,668],[1459,669],[1460,670],[1461,670],[1463,670],[1464,670]],"dx":673,"dy":71,"length":698.9316029007848,"timing":[0,15,33,48,65,81,98,116,132,149,165,182,199,216,245,260,278,293,311,326,344,361,388,404,422,437,455,471,489,503,521,531]},{"start":[1464,671],"end":[1732,297],"points":[[1464,671],[1464,671],[1463,670],[1459,669],[1453,668],[1447,665],[1446,654],[1462,605],[1496,533],[1534,471],[1572,419],[1608,377],[1642,343],[1659,326],[1674,311],[1686,305],[1692,301],[1696,298],[1698,298],[1702,297],[1706,296],[1707,296],[1709,296],[1711,295],[1712,295],[1714,295],[1717,296],[1720,297],[1724,297],[1728,297],[1730,297],[1732,297]],"dx":268,"dy":-374,"length":508.7571709215827,"timing":[0,200,216,233,249,266,282,299,316,333,349,366,382,399,416,433,449,466,483,499,515,533,549,566,599,617,632,650,666,683,699,716]},{"start":[1487,747],"end":[496,374],"points":[[1483,744],[1473,737],[1458,729],[1446,721],[1434,711],[1422,697],[1404,680],[1365,651],[1311,625],[1241,597],[1141,571],[1047,549],[943,529],[847,505],[751,481],[685,461],[637,443],[603,429],[583,415],[579,411],[578,411],[577,411],[575,409],[571,408],[568,406],[567,405],[566,404],[565,404],[563,401],[555,396],[541,391],[526,384],[514,380],[503,378],[498,375],[497,374],[496,374]],"dx":-991,"dy":-373,"length":1070.038739989544,"timing":[0,16,32,49,66,83,99,116,132,149,167,182,199,216,233,249,267,282,299,317,347,363,380,395,413,430,447,465,481,498,515,532,547,565,582,598,613]},{"start":[742,397],"end":[1220,438],"points":[[742,398],[742,398],[744,399],[794,399],[864,397],[934,393],[978,393],[1008,391],[1029,392],[1050,397],[1074,401],[1096,408],[1117,414],[1132,418],[1139,422],[1142,423],[1144,426],[1145,428],[1146,429],[1146,431],[1146,432],[1146,433],[1147,434],[1149,436],[1152,437],[1156,438],[1163,438],[1175,438],[1193,438],[1205,438],[1213,438],[1218,438],[1220,438]],"dx":478,"dy":41,"length":491.84698753591005,"timing":[0,48,64,81,97,114,130,147,164,180,197,213,231,247,264,281,297,315,331,348,364,382,397,414,430,447,465,481,498,514,531,547,564]},{"start":[1344,494],"end":[1616,744],"points":[[1344,495],[1346,499],[1347,502],[1348,505],[1348,509],[1349,514],[1349,518],[1349,521],[1349,525],[1348,527],[1345,528],[1336,530],[1332,532],[1331,533],[1340,538],[1382,548],[1450,564],[1526,580],[1580,602],[1612,620],[1625,635],[1625,644],[1623,651],[1618,658],[1615,666],[1611,671],[1608,675],[1604,680],[1601,685],[1598,691],[1596,693],[1594,698],[1591,703],[1590,706],[1590,711],[1590,715],[1590,717],[1591,720],[1593,721],[1595,723],[1599,726],[1602,729],[1606,733],[1610,737],[1613,742],[1616,744]],"dx":272,"dy":250,"length":497.46495647485506,"timing":[0,16,33,49,67,82,99,116,133,150,166,183,199,217,233,249,266,283,299,316,333,349,366,382,399,416,433,451,466,483,499,517,532,550,566,582,599,616,633,649,666,682,700,715,733,749]},{"start":[1312,481],"end":[1622,251],"points":[[1312,483],[1309,487],[1300,495],[1288,504],[1276,515],[1260,526],[1249,536],[1244,541],[1243,542],[1244,541],[1257,526],[1284,497],[1316,469],[1356,435],[1394,405],[1434,373],[1474,345],[1508,321],[1539,302],[1562,287],[1582,274],[1595,267],[1602,260],[1605,258],[1606,258],[1606,257],[1610,254],[1612,253],[1615,251],[1616,250],[1617,250],[1618,250],[1620,250],[1622,251]],"dx":310,"dy":-230,"length":573.5105912091269,"timing":[0,15,32,49,65,83,99,116,132,170,186,203,219,236,252,269,286,302,320,336,353,369,386,404,420,460,475,492,508,526,549,594,610,626]},{"start":[858,714],"end":[92,305],"points":[[859,714],[860,714],[861,714],[862,714],[864,714],[867,711],[870,710],[871,709],[871,707],[862,693],[835,667],[769,605],[695,553],[619,507],[537,461],[465,421],[395,383],[313,345],[251,317],[197,293],[163,277],[132,262],[114,250],[98,243],[88,239],[79,235],[78,235],[78,236],[78,238],[76,247],[75,258],[75,273],[75,284],[79,293],[84,300],[88,303],[91,305],[92,305]],"dx":-766,"dy":-409,"length":1023.3683216090013,"timing":[0,15,48,82,99,114,132,147,181,198,214,232,248,264,281,297,315,332,348,365,381,399,415,431,449,465,482,557,572,590,606,623,639,657,674,690,707,733]},{"start":[92,305],"end":[350,505],"points":[[98,307],[113,311],[134,317],[166,329],[198,344],[234,367],[265,388],[301,413],[336,434],[372,454],[412,470],[437,477],[454,483],[462,486],[463,486],[463,487],[461,487],[459,488],[447,491],[435,493],[423,494],[416,495],[405,496],[398,497],[388,498],[377,499],[371,500],[366,500],[363,501],[360,501],[358,502],[354,503],[352,503],[351,504],[350,504],[350,505]],"dx":258,"dy":200,"length":526.6016741294222,"timing":[0,17,33,49,66,83,99,117,133,150,166,182,200,216,233,302,318,336,351,369,385,405,418,435,452,468,486,502,518,536,552,570,585,603,619,636]},{"start":[151,588],"end":[261,292],"points":[[151,589],[158,589],[187,577],[237,551],[283,517],[315,489],[327,469],[328,456],[326,446],[321,432],[317,419],[313,400],[310,385],[307,370],[304,359],[300,349],[297,342],[295,337],[292,332],[288,327],[284,321],[280,317],[277,313],[274,307],[272,303],[270,300],[268,298],[266,296],[265,295],[264,294],[263,294],[263,293],[262,292],[261,292]],"dx":110,"dy":-296,"length":412.46153910667334,"timing":[0,16,33,49,66,83,100,116,133,150,166,183,199,216,234,249,266,282,300,316,333,350,366,383,399,416,432,449,468,483,500,517,533,549]},{"start":[1189,745],"end":[597,562],"points":[[1189,743],[1191,739],[1191,736],[1193,729],[1193,723],[1193,716],[1191,709],[1188,699],[1179,686],[1151,662],[1086,640],[990,618],[906,604],[826,594],[746,586],[684,582],[624,580],[564,576],[524,576],[493,574],[480,573],[479,572],[479,571],[483,570],[489,568],[497,564],[510,561],[525,559],[538,557],[547,557],[556,557],[565,557],[577,558],[588,561],[595,562],[597,562]],"dx":-592,"dy":-183,"length":900.7993994414201,"timing":[0,17,34,51,67,84,101,116,134,150,167,183,200,217,234,250,267,284,300,317,333,350,470,486,502,518,536,552,568,586,602,619,636,652,669,685]},{"start":[962,627],"end":[1083,879],"points":[[963,627],[989,628],[1041,645],[1117,669],[1173,689],[1213,709],[1235,732],[1238,746],[1238,756],[1234,765],[1228,773],[1223,780],[1216,785],[1207,792],[1195,799],[1188,805],[1178,812],[1171,818],[1161,826],[1153,832],[1144,838],[1140,842],[1135,848],[1130,852],[1126,854],[1122,856],[1118,859],[1114,861],[1109,864],[1106,866],[1102,869],[1098,870],[1094,873],[1092,875],[1089,876],[1086,878],[1084,878],[1084,879],[1083,879]],"dx":121,"dy":252,"length":522.8168473298214,"timing":[0,15,39,49,66,83,99,116,142,149,166,184,199,217,233,249,267,282,300,316,333,350,366,383,400,416,432,449,467,483,500,515,533,549,567,583,600,617,644]},{"start":[216,582],"end":[456,555],"points":[[216,583],[217,584],[221,587],[236,589],[267,589],[332,589],[412,589],[486,591],[556,597],[594,605],[609,612],[611,614],[611,616],[608,619],[604,625],[601,629],[599,629],[597,629],[596,629],[593,628],[589,627],[582,624],[574,622],[557,617],[537,607],[512,595],[490,584],[473,573],[464,565],[459,560],[456,556],[456,555]],"dx":240,"dy":-27,"length":584.4155539717669,"timing":[0,17,33,50,67,83,99,117,134,150,167,183,200,216,233,249,267,284,299,318,333,351,366,383,400,416,433,450,466,483,500,534]},{"start":[759,780],"end":[976,528],"points":[[755,778],[749,774],[742,771],[739,769],[732,767],[727,764],[723,762],[720,761],[719,760],[718,760],[718,759],[718,760],[719,760],[719,761],[719,761],[720,761],[724,761],[732,761],[740,761],[752,759],[761,758],[771,755],[789,748],[810,736],[834,723],[858,708],[880,688],[898,670],[907,658],[915,643],[920,633],[924,623],[927,614],[932,604],[934,598],[936,593],[939,587],[941,582],[943,579],[946,574],[947,570],[950,566],[954,559],[960,549],[966,539],[976,528]],"dx":217,"dy":-252,"length":415.7706010115281,"timing":[0,17,33,50,65,83,99,117,133,150,167,246,262,285,301,318,334,351,367,385,401,418,435,451,468,484,501,518,534,551,568,584,601,618,635,651,668,684,702,718,734,751,768,786,801,818]},{"start":[161,673],"end":[1268,720],"points":[[172,670],[190,666],[219,660],[252,655],[281,647],[306,642],[319,638],[325,637],[326,636],[329,635],[330,634],[331,634],[332,634],[342,633],[368,630],[431,624],[545,620],[661,620],[773,620],[855,620],[917,620],[963,630],[988,643],[1004,651],[1016,660],[1026,668],[1038,676],[1061,688],[1084,698],[1105,708],[1128,716],[1154,722],[1176,724],[1194,727],[1197,727],[1198,727],[1199,727],[1203,729],[1208,729],[1218,730],[1228,731],[1241,732],[1260,735],[1279,736],[1310,737],[1330,739],[1338,739],[1337,739],[1335,739],[1334,739],[1329,739],[1322,738],[1312,735],[1300,731],[1288,729],[1279,726],[1274,723],[1271,722],[1269,721],[1268,720]],"dx":1107,"dy":47,"length":1269.7298377579698,"timing":[0,18,36,51,68,84,101,118,135,151,169,188,218,235,252,267,285,301,317,335,351,367,384,401,418,434,452,467,485,500,518,535,552,568,585,602,618,635,651,668,684,701,718,735,751,767,784,829,845,862,878,896,911,928,944,961,979,995,1011,1028]},{"start":[841,341],"end":[1414,322],"points":[[841,342],[841,345],[842,348],[843,356],[844,366],[846,376],[852,389],[873,406],[916,414],[960,416],[1016,416],[1072,410],[1132,404],[1182,402],[1228,400],[1282,400],[1334,396],[1380,390],[1416,386],[1439,383],[1448,380],[1453,378],[1457,373],[1459,370],[1460,367],[1460,363],[1460,359],[1460,355],[1460,352],[1460,349],[1458,346],[1454,341],[1446,336],[1435,329],[1425,325],[1418,323],[1415,322],[1414,322]],"dx":573,"dy":-19,"length":744.9916470767353,"timing":[0,18,33,50,66,83,99,116,134,149,167,183,200,216,233,251,266,284,299,317,332,349,367,383,400,416,433,449,467,483,500,517,534,550,566,584,600,617]},{"start":[689,586],"end":[1497,371],"points":[[694,584],[702,579],[710,575],[727,568],[769,547],[817,527],[875,505],[929,489],[987,479],[1045,473],[1109,465],[1163,459],[1213,453],[1273,443],[1327,435],[1375,425],[1417,419],[1451,413],[1479,408],[1501,403],[1506,400],[1507,399],[1508,399],[1509,396],[1511,392],[1513,390],[1512,387],[1509,384],[1504,380],[1503,378],[1499,375],[1497,372],[1497,371]],"dx":808,"dy":-215,"length":877.1885646173894,"timing":[0,16,33,49,65,82,99,115,134,149,166,182,199,216,232,249,266,282,299,315,333,349,376,392,409,425,442,458,476,493,508,526,541]},{"start":[1496,371],"end":[229,816],"points":[[1495,371],[1493,375],[1488,377],[1480,381],[1471,385],[1463,386],[1455,387],[1448,387],[1441,387],[1413,385],[1345,383],[1245,383],[1171,389],[1093,409],[1007,441],[931,481],[851,533],[769,585],[681,633],[615,667],[557,689],[497,705],[445,713],[387,717],[339,721],[297,727],[255,731],[221,733],[202,737],[196,739],[195,740],[194,742],[192,746],[191,748],[189,752],[187,755],[187,759],[187,760],[187,762],[187,765],[191,772],[199,784],[207,796],[215,807],[221,811],[223,813],[226,814],[227,816],[228,816],[229,816]],"dx":-1267,"dy":445,"length":1478.1246877439837,"timing":[0,16,34,50,67,83,100,117,133,150,166,184,199,217,234,250,267,283,300,317,333,350,366,383,399,417,432,450,468,483,501,517,534,550,567,583,600,616,633,650,667,683,700,718,733,751,768,784,800,818]},{"start":[229,816],"end":[224,659],"points":[[228,816],[229,816],[238,811],[249,806],[277,797],[317,785],[367,761],[415,725],[451,677],[467,639],[467,613],[459,602],[446,594],[427,592],[410,592],[392,593],[373,596],[356,600],[334,604],[315,609],[298,615],[286,620],[279,622],[275,624],[271,626],[267,630],[262,635],[257,642],[250,646],[247,648],[241,651],[238,652],[235,653],[233,654],[230,655],[227,656],[224,659]],"dx":-5,"dy":-157,"length":605.0354903288113,"timing":[0,84,99,116,132,150,166,183,199,216,232,249,265,283,299,316,332,349,365,382,399,416,434,449,467,482,500,515,532,550,566,583,599,617,633,650,665]},{"start":[1585,639],"end":[354,172],"points":[[1583,640],[1529,638],[1415,622],[1283,606],[1153,592],[1049,582],[961,566],[909,544],[871,512],[857,489],[856,475],[856,467],[858,461],[859,451],[853,431],[830,408],[797,384],[749,354],[719,340],[607,288],[539,250],[475,212],[439,186],[407,162],[391,152],[385,145],[382,143],[381,142],[380,142],[375,141],[369,140],[357,140],[348,141],[341,143],[336,148],[334,152],[334,154],[334,155],[334,156],[334,157],[334,158],[336,160],[340,164],[344,166],[346,168],[347,168],[348,169],[349,170],[351,171],[352,171],[353,171],[354,172]],"dx":-1231,"dy":-467,"length":1458.8444052845705,"timing":[0,16,33,49,66,82,100,117,133,149,166,183,199,216,233,249,267,283,299,315,333,350,366,383,400,417,433,450,516,533,550,567,583,599,616,634,650,666,687,703,720,736,753,769,786,804,819,837,852,870,887,920]},{"start":[809,569],"end":[1343,154],"points":[[810,569],[823,561],[836,553],[845,547],[847,545],[848,545],[848,543],[860,526],[885,500],[929,473],[1003,443],[1085,417],[1165,389],[1239,353],[1287,323],[1313,297],[1324,271],[1325,253],[1325,236],[1325,216],[1325,199],[1325,186],[1325,178],[1325,174],[1325,172],[1325,170],[1325,165],[1325,162],[1325,159],[1325,158],[1325,157],[1325,156],[1328,155],[1336,154],[1341,154],[1343,154]],"dx":534,"dy":-415,"length":743.4560978884548,"timing":[0,18,34,51,66,84,113,129,146,162,179,194,213,229,245,263,279,295,312,329,345,362,379,396,413,429,446,463,479,495,513,553,569,586,602,620]},{"start":[1644,622],"end":[257,217],"points":[[1637,621],[1627,618],[1618,616],[1611,613],[1599,608],[1563,596],[1508,581],[1434,561],[1334,543],[1238,533],[1140,517],[1028,489],[926,455],[826,415],[730,373],[628,329],[548,299],[480,271],[422,247],[384,231],[355,215],[332,203],[318,197],[314,194],[313,194],[312,193],[311,193],[310,193],[309,193],[302,193],[294,194],[286,199],[280,203],[274,207],[270,210],[265,214],[261,217],[259,217],[258,217],[257,217]],"dx":-1387,"dy":-405,"length":1462.8597680166374,"timing":[0,17,35,50,68,84,101,117,134,151,167,184,201,218,234,251,268,284,302,317,335,351,367,385,443,460,477,533,549,566,582,600,616,632,649,666,683,700,716,731]},{"start":[257,218],"end":[331,392],"points":[[257,219],[258,220],[261,223],[268,227],[282,233],[307,242],[338,254],[371,267],[407,284],[429,300],[440,314],[441,324],[436,332],[428,338],[418,342],[410,346],[398,348],[389,350],[381,352],[371,353],[362,353],[355,353],[350,353],[348,353],[347,353],[346,355],[345,358],[342,364],[339,372],[335,380],[332,386],[331,390],[331,392]],"dx":74,"dy":174,"length":364.3563974581343,"timing":[0,16,33,50,66,84,99,116,133,150,166,183,200,216,233,249,267,284,299,318,333,350,366,383,404,420,438,453,471,487,504,520,533]},{"start":[421,126],"end":[677,228],"points":[[423,126],[428,136],[436,155],[454,181],[473,205],[499,229],[530,255],[561,276],[588,293],[621,306],[667,317],[703,325],[745,333],[773,333],[784,331],[786,329],[786,326],[784,320],[779,311],[774,303],[765,293],[756,281],[742,267],[728,254],[714,243],[703,236],[695,232],[694,231],[693,231],[692,231],[691,230],[687,229],[682,228],[677,228]],"dx":256,"dy":102,"length":598.8787397873858,"timing":[0,17,35,50,69,83,100,116,133,150,168,183,200,216,233,251,266,283,299,317,333,350,366,383,400,416,434,450,468,483,500,517,533,550]},{"start":[1071,837],"end":[1773,351],"points":[[1072,831],[1077,813],[1080,795],[1080,776],[1079,764],[1075,754],[1071,746],[1061,730],[1051,714],[1038,698],[1029,687],[1023,678],[1013,673],[1000,672],[968,688],[939,711],[916,742],[897,773],[887,792],[883,793],[881,794],[880,794],[877,795],[874,796],[870,796],[869,796],[869,789],[877,758],[904,716],[956,666],[1014,620],[1092,576],[1184,530],[1260,498],[1350,464],[1424,446],[1484,434],[1524,426],[1545,424],[1554,424],[1556,424],[1560,422],[1565,418],[1570,415],[1573,415],[1582,416],[1595,416],[1619,412],[1643,404],[1660,394],[1674,389],[1687,383],[1701,377],[1717,370],[1733,363],[1746,358],[1755,355],[1765,353],[1771,352],[1772,351],[1773,351]],"dx":702,"dy":-486,"length":1432.187037327167,"timing":[0,16,32,49,65,83,99,116,132,149,165,183,199,216,233,249,266,282,299,316,333,350,366,383,399,416,432,450,465,482,500,516,534,549,566,582,599,616,632,649,666,683,699,716,733,749,766,782,800,816,833,849,866,882,900,916,933,949,966,983,1000]},{"start":[804,664],"end":[227,788],"points":[[804,665],[805,666],[806,667],[807,667],[809,668],[822,668],[835,664],[849,656],[863,648],[878,636],[889,620],[897,599],[891,554],[859,520],[809,502],[757,498],[699,514],[647,542],[569,590],[501,638],[441,682],[393,718],[351,744],[345,748],[338,752],[327,762],[325,764],[324,764],[323,764],[319,764],[314,764],[310,764],[303,764],[299,764],[293,765],[277,769],[260,775],[246,781],[234,785],[229,787],[228,787],[228,788],[227,788]],"dx":-577,"dy":124,"length":937.0803481658761,"timing":[0,16,33,50,66,83,99,116,132,150,165,183,199,216,233,249,266,282,299,316,333,350,366,384,410,425,442,505,520,538,554,571,587,605,621,637,655,670,688,704,720,737,754]},{"start":[227,788],"end":[1508,431],"points":[[228,788],[234,788],[237,788],[241,785],[244,782],[254,776],[278,762],[332,738],[420,702],[500,674],[618,636],[740,606],[880,572],[988,542],[1072,514],[1148,490],[1198,474],[1232,463],[1244,459],[1246,458],[1248,458],[1251,458],[1256,458],[1259,459],[1262,463],[1269,473],[1278,481],[1303,485],[1339,477],[1397,463],[1441,451],[1477,439],[1493,434],[1501,433],[1505,432],[1507,431],[1508,431]],"dx":1281,"dy":-357,"length":1353.7530782424026,"timing":[0,17,33,49,66,83,98,116,133,149,166,182,200,216,232,250,266,283,299,316,333,349,366,383,400,416,433,449,467,482,500,517,533,549,566,583,600]},{"start":[914,453],"end":[368,718],"points":[[913,454],[908,459],[905,464],[905,468],[905,472],[910,474],[919,476],[928,477],[933,479],[934,483],[933,491],[933,501],[938,519],[958,531],[1008,534],[1066,534],[1134,534],[1202,534],[1278,536],[1338,544],[1384,554],[1402,564],[1426,593],[1423,605],[1399,627],[1341,656],[1237,690],[1137,704],[1011,714],[885,718],[757,726],[649,742],[575,756],[535,766],[508,772],[491,777],[474,778],[453,779],[426,781],[403,781],[384,781],[375,781],[369,780],[363,779],[352,778],[340,778],[333,778],[325,778],[323,776],[323,775],[323,772],[325,765],[328,759],[335,751],[341,745],[351,735],[359,726],[366,720],[367,718],[368,718]],"dx":-546,"dy":265,"length":1816.9789002026266,"timing":[0,15,32,48,66,81,99,115,132,149,165,182,198,215,233,249,266,282,299,315,332,365,382,398,416,432,449,466,482,499,515,532,548,566,583,599,616,632,649,665,682,699,715,732,748,766,781,799,816,833,849,865,883,899,916,931,948,966,982,999]},{"start":[1150,747],"end":[1762,729],"points":[[1150,740],[1150,731],[1150,725],[1150,714],[1150,704],[1150,694],[1148,683],[1147,674],[1146,664],[1145,643],[1137,618],[1126,597],[1106,575],[1086,547],[1067,516],[1054,481],[1046,455],[1037,436],[1030,421],[1025,416],[1022,412],[1018,410],[1014,407],[1011,404],[1007,403],[1006,402],[1003,401],[1001,400],[999,400],[998,404],[1008,414],[1037,429],[1092,448],[1166,470],[1256,496],[1354,534],[1424,572],[1474,606],[1514,642],[1536,666],[1566,694],[1583,710],[1612,728],[1648,745],[1683,756],[1714,763],[1739,767],[1755,767],[1764,767],[1767,767],[1768,767],[1768,766],[1768,765],[1768,762],[1768,759],[1768,757],[1768,748],[1767,742],[1765,733],[1762,730],[1762,729]],"dx":612,"dy":-18,"length":1300.841544623435,"timing":[0,18,34,51,67,84,101,118,135,151,169,184,201,218,234,251,267,285,301,318,335,351,368,384,401,417,435,451,468,485,501,518,534,551,567,585,601,618,635,651,668,684,701,718,734,751,767,784,802,818,835,851,868,884,902,917,934,950,968,984,1001]},{"start":[1633,706],"end":[928,400],"points":[[1633,705],[1632,704],[1626,703],[1613,696],[1594,685],[1572,670],[1547,650],[1525,629],[1498,604],[1470,578],[1437,550],[1393,518],[1351,490],[1291,462],[1237,440],[1171,416],[1123,396],[1085,376],[1070,363],[1067,362],[1064,358],[1063,357],[1060,356],[1055,356],[1050,357],[1043,361],[1031,366],[1016,373],[1000,377],[983,381],[970,384],[960,387],[951,392],[943,395],[935,399],[929,400],[928,400]],"dx":-705,"dy":-306,"length":819.0402968370208,"timing":[0,16,33,49,65,82,99,115,132,149,166,182,199,216,232,249,266,282,299,326,342,359,375,392,409,425,442,458,476,492,509,525,543,559,575,593,609]},{"start":[384,456],"end":[333,203],"points":[[383,456],[382,459],[382,467],[388,475],[397,485],[410,493],[428,501],[443,501],[454,501],[456,493],[454,473],[448,447],[438,420],[426,393],[412,365],[400,350],[387,332],[377,322],[368,308],[360,297],[355,287],[353,278],[350,269],[348,262],[346,256],[344,253],[343,250],[343,248],[343,244],[341,241],[340,232],[338,219],[335,211],[334,206],[333,203]],"dx":-51,"dy":-253,"length":424.9294250174245,"timing":[0,16,32,48,66,82,99,115,132,149,165,182,198,216,232,248,265,282,299,316,331,349,365,383,398,415,433,449,466,482,499,515,532,550,566]},{"start":[617,142],"end":[1741,181],"points":[[617,143],[616,151],[616,167],[625,195],[660,236],[718,274],[822,302],[910,306],[1010,306],[1118,306],[1208,306],[1300,306],[1374,302],[1446,292],[1514,282],[1572,272],[1612,262],[1643,254],[1674,247],[1698,244],[1718,238],[1724,235],[1724,234],[1725,234],[1726,232],[1731,229],[1737,225],[1746,220],[1750,215],[1751,212],[1752,209],[1752,205],[1752,202],[1752,200],[1751,195],[1748,191],[1746,187],[1743,183],[1741,181]],"dx":1124,"dy":39,"length":1265.4044227363026,"timing":[0,16,34,49,67,83,100,117,133,150,166,183,199,216,232,249,266,283,300,316,333,350,367,383,400,416,433,450,466,483,499,516,534,549,567,583,600,616,631]},{"start":[791,515],"end":[557,300],"points":[[787,512],[769,495],[745,471],[717,447],[689,422],[675,405],[666,390],[659,380],[653,369],[649,361],[645,353],[642,347],[638,342],[634,337],[631,334],[626,330],[619,325],[611,320],[603,314],[596,308],[595,308],[594,308],[591,307],[589,306],[587,306],[585,304],[583,304],[580,303],[577,303],[573,302],[569,301],[563,300],[559,300],[557,300]],"dx":-234,"dy":-215,"length":323.3895160350331,"timing":[0,16,33,49,67,84,100,117,133,150,166,184,199,216,233,250,267,283,300,317,333,350,366,383,400,416,434,450,467,483,501,517,534,550]},{"start":[557,300],"end":[1389,831],"points":[[557,303],[557,305],[558,309],[559,311],[561,315],[570,325],[599,344],[660,369],[742,395],[836,419],[910,445],[974,483],[1034,533],[1096,589],[1148,631],[1190,669],[1226,699],[1246,720],[1255,735],[1261,744],[1271,754],[1283,763],[1291,766],[1295,768],[1296,768],[1296,769],[1296,770],[1302,773],[1316,777],[1339,784],[1370,794],[1402,807],[1424,818],[1436,828],[1439,834],[1442,841],[1443,842],[1443,844],[1443,845],[1442,846],[1441,846],[1439,847],[1435,847],[1429,847],[1420,846],[1414,843],[1410,842],[1405,839],[1401,838],[1397,836],[1393,833],[1389,831]],"dx":832,"dy":531,"length":1127.0576894908263,"timing":[0,16,34,50,67,82,99,117,134,150,166,183,199,216,234,250,266,283,299,316,333,350,366,384,400,447,518,535,552,567,586,601,619,634,651,669,684,702,718,735,752,768,785,801,818,835,851,868,884,902,918,935]},{"start":[1389,831],"end":[723,508],"points":[[1389,830],[1389,822],[1389,810],[1385,787],[1375,755],[1355,724],[1324,699],[1284,683],[1212,667],[1138,655],[1062,647],[992,647],[952,647],[930,647],[921,647],[919,647],[918,646],[917,643],[912,637],[904,631],[893,624],[873,609],[849,596],[829,585],[811,574],[798,565],[786,558],[774,546],[760,532],[748,523],[738,514],[736,512],[735,512],[733,512],[731,511],[729,510],[728,509],[725,508],[723,508]],"dx":-666,"dy":-323,"length":808.2562639816415,"timing":[0,16,33,49,67,83,100,116,132,150,166,183,200,216,232,250,284,302,317,335,352,368,385,401,418,435,452,468,485,502,519,535,585,685,702,718,735,751,768]},{"start":[957,890],"end":[133,509],"points":[[956,880],[956,870],[956,855],[956,836],[957,812],[957,786],[957,756],[952,729],[949,701],[949,677],[949,651],[966,615],[989,585],[1010,560],[1028,541],[1029,535],[1024,533],[1005,531],[972,531],[921,533],[845,539],[761,539],[663,539],[565,539],[467,539],[371,539],[307,537],[253,533],[221,527],[202,522],[189,520],[184,518],[182,517],[181,517],[179,516],[178,515],[175,513],[173,512],[171,511],[169,510],[166,510],[159,508],[155,508],[153,508],[152,508],[151,508],[149,508],[147,508],[145,508],[143,508],[141,508],[140,508],[138,508],[137,508],[135,508],[133,508],[133,509]],"dx":-824,"dy":-381,"length":1274.3270882801874,"timing":[0,16,33,49,66,82,99,115,133,149,166,183,199,216,233,249,266,282,299,316,332,350,365,383,398,416,432,449,466,482,499,515,533,549,566,582,599,616,632,650,666,683,699,717,732,759,775,792,808,826,841,859,875,892,908,926,942]},{"start":[1307,468],"end":[1377,845],"points":[[1306,467],[1305,468],[1303,470],[1302,473],[1299,476],[1297,478],[1294,481],[1285,485],[1276,488],[1265,489],[1253,491],[1245,493],[1240,496],[1239,510],[1239,534],[1248,567],[1265,610],[1289,646],[1317,680],[1345,716],[1362,745],[1376,768],[1386,785],[1390,793],[1393,801],[1393,805],[1393,810],[1393,816],[1392,821],[1391,823],[1390,824],[1389,826],[1388,828],[1387,831],[1386,834],[1384,837],[1382,839],[1380,841],[1378,843],[1377,845]],"dx":70,"dy":377,"length":473.36642213869465,"timing":[0,99,116,133,148,165,182,198,216,232,249,265,282,298,315,332,348,365,381,399,415,431,449,466,482,498,516,533,549,566,582,599,615,632,649,666,681,699,716,733]},{"start":[681,865],"end":[1587,372],"points":[[681,863],[681,857],[681,848],[681,839],[681,822],[685,794],[689,767],[694,724],[704,687],[721,655],[754,623],[798,599],[844,579],[922,553],[1022,525],[1128,499],[1232,475],[1338,449],[1396,437],[1452,419],[1476,405],[1496,388],[1501,375],[1504,371],[1505,370],[1506,369],[1507,368],[1508,368],[1508,368],[1511,375],[1516,382],[1522,386],[1529,389],[1533,389],[1541,389],[1550,388],[1561,384],[1577,376],[1583,373],[1585,373],[1585,372],[1587,372]],"dx":906,"dy":-493,"length":1161.4179990633766,"timing":[0,17,33,49,66,84,100,117,133,150,167,184,201,216,234,250,266,283,300,317,334,352,366,384,400,418,433,451,519,535,553,569,586,602,619,636,653,669,685,703,719,736]},{"start":[758,457],"end":[1446,800],"points":[[758,458],[758,462],[759,470],[764,477],[772,485],[783,490],[796,490],[806,490],[815,487],[824,480],[831,473],[835,468],[839,463],[848,460],[862,458],[882,464],[914,479],[968,511],[1046,559],[1120,605],[1180,641],[1240,677],[1300,707],[1348,731],[1398,757],[1438,775],[1466,791],[1480,800],[1487,804],[1488,806],[1489,806],[1489,805],[1488,805],[1487,805],[1485,804],[1482,803],[1477,801],[1475,801],[1468,800],[1462,800],[1457,800],[1450,800],[1446,800]],"dx":688,"dy":343,"length":897.9491757583814,"timing":[0,16,33,50,66,83,99,116,133,150,166,183,199,216,233,250,267,283,300,315,332,350,366,383,399,417,433,450,466,483,500,565,583,600,617,633,650,671,683,699,717,733,750]},{"start":[503,416],"end":[1387,554],"points":[[505,419],[518,426],[538,433],[564,438],[595,438],[633,438],[655,438],[666,438],[676,438],[697,438],[743,438],[809,438],[891,438],[967,442],[1049,452],[1103,464],[1153,478],[1189,492],[1216,503],[1238,515],[1256,529],[1271,539],[1285,549],[1299,555],[1317,561],[1343,562],[1364,562],[1376,562],[1385,562],[1386,562],[1386,561],[1386,557],[1387,555],[1387,554]],"dx":884,"dy":138,"length":917.7213532154663,"timing":[0,17,34,51,67,84,101,118,133,150,168,184,201,218,234,250,267,284,301,317,334,351,367,384,400,417,434,451,468,485,593,610,627,643]},{"start":[1387,554],"end":[364,289],"points":[[1386,554],[1376,552],[1345,548],[1299,536],[1225,508],[1145,476],[1039,430],[949,394],[857,368],[765,350],[691,338],[637,330],[579,326],[537,322],[491,320],[456,318],[432,317],[411,314],[393,311],[383,309],[376,308],[373,306],[370,305],[367,303],[362,300],[358,297],[354,294],[351,293],[350,292],[350,291],[350,290],[351,290],[356,289],[362,289],[364,289]],"dx":-1023,"dy":-265,"length":1094.7244639219891,"timing":[0,16,33,50,67,84,100,116,133,150,166,183,200,216,234,249,267,283,300,317,333,351,367,384,399,416,433,450,466,484,522,546,561,579,595]},{"start":[818,809],"end":[479,303],"points":[[828,797],[840,784],[855,769],[869,754],[883,735],[898,711],[901,689],[890,667],[861,642],[822,613],[776,577],[734,535],[692,481],[650,437],[610,401],[578,375],[559,360],[550,356],[549,354],[547,353],[545,352],[544,350],[542,347],[539,343],[537,340],[531,334],[523,327],[511,317],[496,311],[485,305],[479,303]],"dx":-339,"dy":-506,"length":712.0658366808578,"timing":[0,17,34,50,67,85,101,118,134,152,167,184,201,217,235,250,268,283,301,318,334,351,368,384,400,418,433,451,468,483,501]},{"start":[479,303],"end":[1692,670],"points":[[479,304],[480,304],[496,308],[523,326],[544,342],[554,356],[556,366],[559,378],[571,403],[598,424],[643,438],[717,440],[801,440],[893,440],[995,442],[1097,450],[1183,458],[1253,462],[1313,474],[1383,494],[1443,512],[1493,528],[1537,546],[1577,564],[1615,580],[1637,589],[1645,594],[1646,595],[1646,597],[1649,601],[1655,608],[1660,613],[1661,616],[1661,620],[1661,624],[1661,631],[1664,638],[1667,647],[1669,651],[1671,654],[1672,656],[1675,659],[1681,663],[1686,667],[1690,670],[1692,670]],"dx":1213,"dy":367,"length":1346.130874403015,"timing":[0,17,33,50,66,83,99,117,134,149,167,183,200,216,233,250,267,283,299,317,333,350,368,384,400,416,433,449,467,482,500,517,534,550,567,583,599,616,633,649,668,683,700,717,734,750]},{"start":[1767,306],"end":[1136,761],"points":[[1766,306],[1766,306],[1758,309],[1730,320],[1688,332],[1622,348],[1528,364],[1432,382],[1334,398],[1258,412],[1176,428],[1094,436],[1006,442],[926,456],[862,486],[838,516],[834,541],[834,559],[843,573],[865,587],[909,608],[971,632],[1031,650],[1089,668],[1137,686],[1167,698],[1193,715],[1208,724],[1219,732],[1225,736],[1226,739],[1227,742],[1228,747],[1228,753],[1228,758],[1227,762],[1226,765],[1220,771],[1210,774],[1203,777],[1194,778],[1188,779],[1181,779],[1174,779],[1168,779],[1162,779],[1157,779],[1152,777],[1149,774],[1142,769],[1139,765],[1137,763],[1136,763],[1136,762],[1136,761]],"dx":-631,"dy":455,"length":1573.3159890760178,"timing":[0,16,32,49,66,83,100,116,133,149,166,183,199,216,232,250,266,283,299,316,332,349,367,382,400,415,433,449,466,483,499,517,533,550,566,583,599,616,633,650,667,682,700,716,733,749,766,783,799,817,833,849,866,883,914]},{"start":[589,337],"end":[775,812],"points":[[589,338],[588,348],[586,358],[581,373],[575,398],[574,422],[577,446],[592,464],[605,480],[614,490],[616,500],[608,521],[587,553],[569,576],[552,598],[544,615],[543,624],[545,631],[555,637],[580,648],[616,660],[663,680],[697,700],[720,721],[739,746],[744,752],[752,765],[758,777],[764,791],[768,801],[772,807],[773,810],[774,811],[774,812],[775,812]],"dx":186,"dy":475,"length":636.8278128832511,"timing":[0,17,33,50,67,84,99,117,134,149,167,183,200,216,233,250,267,284,299,316,333,350,367,383,400,417,433,450,468,483,500,518,533,551,567]},{"start":[1754,438],"end":[1262,172],"points":[[1754,438],[1753,438],[1749,438],[1747,438],[1743,438],[1736,436],[1718,432],[1694,426],[1667,419],[1638,413],[1608,405],[1595,401],[1581,397],[1571,392],[1561,387],[1551,380],[1541,374],[1533,366],[1514,348],[1505,339],[1490,328],[1470,315],[1454,304],[1433,292],[1407,278],[1391,271],[1371,262],[1351,253],[1331,245],[1313,238],[1301,233],[1293,229],[1287,226],[1285,225],[1285,224],[1283,223],[1282,221],[1280,219],[1279,217],[1278,216],[1275,211],[1273,210],[1270,205],[1270,203],[1270,202],[1270,201],[1269,199],[1269,197],[1269,195],[1269,194],[1268,191],[1267,187],[1266,185],[1266,183],[1265,180],[1263,177],[1263,174],[1263,173],[1262,173],[1262,172]],"dx":-492,"dy":-266,"length":584.6499362355313,"timing":[0,190,198,208,217,225,233,242,250,258,267,275,283,292,300,308,317,325,333,342,350,358,367,375,383,392,400,408,417,425,433,442,450,458,467,475,483,492,500,508,517,525,533,542,550,558,567,575,583,592,600,608,617,625,633,642,650,658,667,694]},{"start":[1262,172],"end":[871,466],"points":[[1261,172],[1259,173],[1255,178],[1250,183],[1247,188],[1244,191],[1239,199],[1231,210],[1222,222],[1206,239],[1185,260],[1161,284],[1135,310],[1112,334],[1086,356],[1058,378],[1031,399],[1006,417],[986,431],[967,446],[950,458],[929,473],[918,480],[910,484],[904,487],[902,485],[900,483],[897,481],[895,480],[892,477],[890,476],[884,474],[882,473],[879,471],[877,471],[875,470],[874,469],[873,469],[872,467],[871,467],[871,466]],"dx":-391,"dy":294,"length":520.4508720946995,"timing":[0,8,17,25,33,42,50,58,67,75,83,92,100,108,117,125,133,142,150,158,167,175,183,192,200,267,275,283,292,300,308,317,325,333,342,350,358,367,375,383,399]},{"start":[733,826],"end":[1194,441],"points":[[734,824],[736,822],[739,818],[743,816],[746,813],[751,809],[761,801],[772,794],[788,782],[804,773],[825,759],[847,743],[872,727],[899,708],[932,686],[965,663],[995,641],[1030,617],[1060,598],[1079,585],[1093,574],[1105,565],[1112,557],[1117,553],[1121,548],[1124,544],[1124,543],[1124,542],[1125,539],[1127,536],[1128,533],[1130,527],[1132,525],[1133,520],[1136,514],[1139,509],[1141,507],[1142,503],[1144,500],[1146,496],[1155,485],[1160,479],[1167,472],[1176,463],[1182,455],[1187,450],[1192,446],[1194,443],[1194,442],[1194,441]],"dx":461,"dy":-385,"length":609.0666523021637,"timing":[0,7,15,23,31,39,47,55,63,71,79,87,95,104,111,119,127,136,144,152,161,169,177,185,194,202,210,219,227,236,244,252,261,269,277,286,294,302,311,319,327,336,344,352,361,369,377,386,394,419]},{"start":[771,527],"end":[1316,723],"points":[[772,527],[776,527],[781,527],[787,526],[791,526],[799,526],[811,527],[823,530],[842,534],[867,540],[896,548],[926,557],[956,565],[994,576],[1032,587],[1065,599],[1101,611],[1129,623],[1157,635],[1185,646],[1206,655],[1223,661],[1244,672],[1256,677],[1277,689],[1287,694],[1296,699],[1302,703],[1306,707],[1308,708],[1309,709],[1310,711],[1311,711],[1311,712],[1312,714],[1313,716],[1314,718],[1315,722],[1316,723]],"dx":545,"dy":196,"length":588.5077527038096,"timing":[0,8,16,24,33,41,49,58,66,74,83,91,99,108,116,124,133,141,149,158,166,174,183,191,199,208,216,224,233,241,249,258,271,328,335,358,367,391,399]},{"start":[1082,120],"end":[651,480],"points":[[1082,120],[1079,122],[1073,127],[1070,129],[1065,134],[1054,145],[1037,162],[1021,180],[1001,203],[982,226],[952,260],[927,288],[898,317],[870,344],[842,366],[814,387],[787,406],[762,422],[743,434],[732,440],[722,447],[712,452],[705,458],[699,461],[697,462],[696,463],[695,463],[695,464],[694,464],[693,464],[691,465],[689,465],[687,466],[684,467],[682,467],[679,468],[677,469],[676,469],[675,469],[672,470],[669,471],[665,473],[662,475],[659,477],[654,479],[653,479],[651,480]],"dx":-431,"dy":360,"length":569.8098972352772,"timing":[0,204,211,219,227,235,243,251,259,267,275,284,292,299,307,316,324,333,341,349,358,366,374,383,391,399,411,419,428,435,443,451,459,467,475,484,491,548,555,564,574,583,591,599,608,616,624]},{"start":[1258,309],"end":[664,274],"points":[[1258,309],[1258,310],[1260,310],[1261,310],[1262,311],[1262,313],[1262,314],[1260,316],[1256,319],[1253,321],[1248,324],[1241,327],[1229,331],[1209,336],[1182,343],[1146,348],[1107,350],[1063,351],[1012,351],[961,351],[914,349],[864,343],[824,338],[788,332],[754,327],[733,323],[709,319],[695,316],[684,313],[674,310],[671,307],[669,304],[669,303],[668,301],[668,299],[667,298],[667,297],[667,295],[666,295],[666,293],[666,291],[666,290],[666,288],[666,287],[666,284],[666,282],[666,280],[666,279],[665,278],[664,276],[664,275],[664,274]],"dx":-594,"dy":-35,"length":646.4524183183602,"timing":[0,31,55,75,87,167,175,183,191,200,208,216,225,233,241,251,258,267,275,283,291,300,308,316,325,333,341,350,358,366,375,383,391,400,408,416,425,433,442,450,458,466,475,483,492,500,508,516,525,533,543,551]},{"start":[140,651],"end":[1469,206],"points":[[140,650],[144,647],[155,642],[177,632],[216,619],[275,601],[346,581],[429,560],[518,535],[615,508],[704,484],[801,456],[887,432],[963,411],[1036,389],[1090,371],[1142,353],[1183,336],[1212,324],[1243,311],[1261,301],[1282,289],[1297,281],[1325,263],[1336,255],[1347,249],[1356,243],[1363,238],[1370,233],[1374,229],[1377,227],[1378,224],[1382,221],[1387,216],[1391,213],[1396,211],[1399,209],[1402,208],[1403,207],[1405,207],[1406,207],[1411,206],[1417,206],[1426,206],[1438,206],[1449,206],[1455,206],[1462,206],[1469,206]],"dx":1329,"dy":-445,"length":1413.783315542117,"timing":[0,7,16,24,32,41,49,57,66,74,82,91,99,107,116,124,132,141,149,157,166,173,182,190,199,207,215,223,232,240,248,257,265,273,282,290,299,307,315,359,367,375,383,392,399,407,416,424,432]},{"start":[1524,824],"end":[827,134],"points":[[1524,823],[1523,821],[1521,819],[1518,816],[1513,811],[1510,807],[1504,801],[1497,792],[1482,776],[1461,753],[1429,721],[1393,689],[1357,661],[1310,624],[1261,585],[1211,546],[1167,503],[1134,467],[1100,423],[1066,376],[1039,338],[1014,298],[992,263],[966,220],[961,210],[960,209],[958,206],[956,203],[954,201],[952,200],[950,197],[948,195],[945,194],[943,192],[942,192],[941,191],[941,190],[939,190],[938,189],[936,188],[934,187],[930,185],[927,184],[920,183],[912,181],[900,178],[886,173],[859,163],[847,159],[840,156],[838,153],[836,152],[834,149],[833,149],[830,145],[829,144],[828,143],[828,141],[827,141],[827,140],[827,138],[827,137],[827,136],[827,135],[827,134]],"dx":-697,"dy":-690,"length":1004.6869109885571,"timing":[0,8,16,25,33,41,50,58,66,75,83,91,100,108,116,125,133,141,150,158,166,175,183,191,200,208,216,225,233,241,251,258,266,275,283,291,300,308,316,325,333,341,350,358,366,375,383,391,400,408,416,425,433,441,450,463,471,491,500,508,519,541,550,559,600]},{"start":[985,281],"end":[1542,205],"points":[[986,282],[993,286],[1000,290],[1010,295],[1021,298],[1033,301],[1047,304],[1060,305],[1080,305],[1105,305],[1132,305],[1170,304],[1217,300],[1259,295],[1307,287],[1349,280],[1392,270],[1429,263],[1483,249],[1502,245],[1514,242],[1522,240],[1528,238],[1529,237],[1530,237],[1531,237],[1531,236],[1532,236],[1532,235],[1533,234],[1534,232],[1534,231],[1534,230],[1535,227],[1535,226],[1536,224],[1536,223],[1536,220],[1537,217],[1539,214],[1539,212],[1541,210],[1542,207],[1542,206],[1542,205]],"dx":557,"dy":-76,"length":592.3202929315609,"timing":[0,17,26,34,42,51,59,67,76,84,92,101,109,117,126,134,142,151,159,167,176,184,192,201,209,217,226,234,242,344,352,359,369,379,388,399,401,409,417,425,434,442,451,459,488]},{"start":[1427,559],"end":[811,374],"points":[[1426,559],[1423,559],[1417,559],[1398,555],[1374,550],[1332,541],[1287,534],[1225,523],[1165,515],[1107,507],[1051,501],[993,493],[951,488],[914,483],[880,476],[853,469],[833,462],[819,456],[809,451],[802,447],[797,443],[796,441],[796,438],[796,437],[796,435],[795,433],[795,430],[795,429],[795,427],[795,425],[795,421],[795,418],[795,416],[796,414],[797,412],[798,408],[801,402],[803,396],[805,392],[807,388],[808,384],[809,381],[810,378],[810,376],[811,376],[811,374]],"dx":-616,"dy":-185,"length":716.1420334726096,"timing":[0,7,15,23,31,39,47,55,63,71,80,88,95,104,112,120,129,137,145,154,162,170,179,187,195,204,212,220,228,237,245,254,262,270,278,287,295,304,312,320,328,337,345,353,362,370]},{"start":[554,759],"end":[1701,613],"points":[[555,759],[557,758],[562,754],[566,753],[573,751],[583,748],[601,744],[641,737],[688,729],[741,724],[796,718],[851,712],[903,708],[958,706],[1020,706],[1071,706],[1123,706],[1186,709],[1238,713],[1298,717],[1361,721],[1418,723],[1483,725],[1537,725],[1595,722],[1639,718],[1684,711],[1718,704],[1743,698],[1766,693],[1780,690],[1789,688],[1796,685],[1796,684],[1796,676],[1791,668],[1789,664],[1786,659],[1779,649],[1764,641],[1733,628],[1727,627],[1725,625],[1723,624],[1721,622],[1720,621],[1718,619],[1717,618],[1715,617],[1714,616],[1710,615],[1707,614],[1704,613],[1702,613],[1701,613]],"dx":1147,"dy":-146,"length":1379.0375898379632,"timing":[0,7,15,23,31,39,47,55,64,72,80,88,97,105,115,122,130,138,147,155,163,172,180,188,197,205,213,222,230,238,247,255,263,296,313,338,362,388,413,438,463,472,480,488,497,505,513,522,530,538,547,555,563,572,580]},{"start":[642,792],"end":[205,420],"points":[[642,792],[636,788],[635,787],[634,787],[634,786],[633,785],[631,784],[629,781],[626,777],[624,772],[621,764],[615,752],[608,735],[593,711],[549,653],[521,626],[490,601],[447,574],[412,552],[374,527],[350,511],[330,497],[319,489],[312,483],[304,477],[299,471],[297,468],[295,465],[294,463],[293,462],[292,462],[290,461],[288,460],[283,459],[280,458],[273,456],[266,454],[258,452],[251,448],[242,445],[234,442],[228,439],[221,436],[215,433],[213,431],[211,429],[210,428],[208,426],[207,423],[205,422],[205,421],[205,420]],"dx":-437,"dy":-372,"length":591.749934451193,"timing":[0,8,17,25,33,42,50,59,67,75,84,92,100,109,117,125,134,142,150,159,167,175,184,192,200,209,217,225,234,242,309,317,325,334,342,350,359,368,375,384,392,400,409,417,425,434,442,450,459,467,475,484]},{"start":[424,210],"end":[615,498],"points":[[424,210],[424,211],[425,211],[426,211],[427,211],[429,211],[433,212],[448,218],[489,230],[511,238],[537,249],[558,261],[575,274],[587,285],[602,302],[613,319],[624,337],[631,355],[635,367],[637,380],[640,390],[641,401],[641,409],[641,417],[641,423],[641,432],[640,440],[639,445],[638,452],[637,459],[635,465],[633,469],[631,472],[629,474],[627,476],[622,481],[621,483],[620,485],[618,488],[618,490],[617,492],[616,494],[616,495],[616,496],[616,497],[615,497],[615,498]],"dx":191,"dy":288,"length":418.10511656442605,"timing":[0,34,66,82,107,132,157,182,207,215,217,225,233,242,250,258,267,275,283,292,300,308,317,325,333,342,350,358,367,375,383,392,400,408,416,425,433,442,450,458,467,475,483,492,505,525,554]},{"start":[971,467],"end":[511,166],"points":[[971,467],[970,467],[969,467],[966,466],[960,465],[948,462],[934,458],[910,450],[882,440],[843,423],[804,407],[770,390],[738,375],[717,363],[700,350],[686,338],[677,328],[666,314],[657,301],[650,288],[642,273],[635,260],[628,247],[621,235],[615,228],[607,220],[598,213],[590,207],[580,202],[571,198],[561,192],[559,191],[554,189],[551,187],[549,186],[547,185],[544,183],[540,183],[538,182],[536,181],[533,181],[531,179],[527,177],[522,175],[519,173],[516,171],[515,170],[515,169],[514,168],[513,167],[512,167],[512,166],[511,166]],"dx":-460,"dy":-301,"length":571.0832610306755,"timing":[0,204,211,219,227,235,243,251,259,267,275,283,291,299,308,316,324,333,341,349,358,366,374,383,391,399,407,416,424,433,441,449,458,466,474,483,491,499,508,516,524,533,542,549,558,566,628,635,643,666,674,682,691]},{"start":[511,166],"end":[488,770],"points":[[513,166],[516,169],[526,174],[537,182],[553,194],[566,209],[576,223],[587,246],[594,266],[599,292],[601,322],[601,352],[598,394],[591,431],[581,464],[564,500],[551,524],[537,548],[516,578],[500,600],[487,620],[478,633],[470,647],[462,662],[455,675],[449,685],[444,695],[440,702],[436,709],[431,716],[429,723],[429,725],[429,727],[429,729],[429,732],[430,737],[433,741],[440,749],[445,753],[451,757],[457,761],[463,764],[465,765],[469,766],[470,766],[471,766],[471,767],[473,767],[474,767],[475,767],[476,767],[478,767],[483,768],[483,769],[486,769],[488,770]],"dx":-23,"dy":604,"length":719.6263206932398,"timing":[0,7,15,23,31,39,47,55,63,71,79,87,95,103,111,120,128,136,145,153,161,170,178,186,195,203,211,220,228,236,244,253,261,269,278,286,295,303,311,320,328,336,345,354,361,370,408,428,436,444,455,536,552,562,571,712]},{"start":[1066,143],"end":[171,379],"points":[[1064,145],[1059,150],[1055,152],[1048,158],[1039,164],[1022,175],[999,187],[971,199],[937,211],[902,222],[859,233],[808,245],[757,256],[699,267],[640,277],[584,287],[528,297],[486,304],[412,316],[384,319],[358,322],[340,325],[327,326],[316,327],[309,328],[304,328],[299,329],[295,329],[293,330],[290,330],[285,331],[279,332],[274,332],[272,332],[267,332],[260,333],[253,334],[247,335],[245,336],[243,337],[242,337],[240,337],[239,338],[238,339],[237,339],[235,340],[232,342],[227,345],[225,347],[221,349],[214,353],[208,357],[200,362],[193,366],[187,369],[182,372],[179,374],[177,376],[174,377],[173,378],[172,378],[172,379],[171,379]],"dx":-895,"dy":236,"length":936.1904147952143,"timing":[0,7,14,22,30,39,47,55,64,72,80,89,97,105,114,122,130,139,147,155,164,172,180,189,197,205,214,222,230,239,247,255,264,272,280,289,297,305,314,322,330,339,347,355,364,372,380,389,397,405,414,422,430,439,447,455,464,472,480,489,497,505,514]},{"start":[1504,689],"end":[414,370],"points":[[1503,689],[1501,689],[1498,689],[1491,689],[1476,689],[1456,687],[1411,682],[1366,674],[1303,666],[1225,653],[1140,640],[964,612],[868,596],[780,583],[698,568],[626,555],[562,543],[508,531],[468,520],[440,510],[414,499],[401,491],[390,485],[383,480],[378,475],[376,472],[374,469],[373,466],[372,465],[372,462],[372,460],[371,458],[370,457],[370,456],[370,452],[370,449],[370,448],[371,445],[372,442],[375,440],[379,434],[380,431],[382,428],[384,426],[387,421],[390,417],[394,411],[396,407],[399,404],[401,400],[401,398],[402,396],[403,394],[404,392],[404,391],[405,389],[408,385],[409,382],[411,378],[412,377],[412,375],[413,374],[413,373],[413,372],[414,371],[414,370]],"dx":-1090,"dy":-319,"length":1272.2440481084689,"timing":[0,8,16,24,33,41,49,58,66,74,83,91,99,108,116,124,133,141,149,158,166,174,183,191,199,208,216,224,233,241,249,258,266,274,283,291,299,308,316,324,333,341,349,358,366,374,383,391,399,408,416,424,432,441,449,458,466,474,482,491,499,507,516,524,533,547]},{"start":[858,257],"end":[693,615],"points":[[858,259],[858,260],[858,261],[858,263],[858,266],[858,271],[858,273],[858,277],[858,286],[858,299],[856,313],[851,334],[842,364],[837,386],[827,413],[820,431],[814,445],[806,461],[799,476],[794,485],[789,496],[783,504],[778,514],[774,523],[768,530],[763,539],[755,547],[749,555],[737,566],[732,570],[727,573],[726,573],[725,574],[724,575],[723,575],[722,575],[721,577],[720,578],[718,580],[715,583],[713,585],[710,589],[707,592],[704,596],[700,600],[698,604],[696,606],[696,608],[695,610],[694,611],[694,612],[694,613],[693,613],[693,614],[693,615]],"dx":-165,"dy":358,"length":407.36791683029963,"timing":[0,7,15,23,31,40,48,56,64,73,81,89,98,106,114,123,131,139,148,156,164,173,181,189,198,206,215,223,231,239,247,256,264,272,281,289,298,306,314,323,331,339,348,356,364,373,381,389,398,406,414,423,439,448,456]},{"start":[693,616],"end":[1733,261],"points":[[695,616],[698,614],[704,611],[715,607],[737,599],[775,586],[824,572],[880,558],[948,541],[1023,520],[1094,499],[1172,475],[1251,448],[1329,422],[1408,396],[1484,368],[1547,342],[1602,320],[1641,303],[1675,287],[1699,275],[1725,262],[1748,249],[1770,237],[1788,227],[1801,220],[1809,215],[1818,209],[1825,204],[1827,203],[1828,202],[1828,201],[1827,202],[1822,206],[1820,209],[1815,211],[1808,217],[1798,222],[1787,229],[1774,236],[1766,240],[1759,244],[1756,247],[1753,249],[1751,251],[1749,251],[1748,253],[1746,253],[1745,254],[1741,257],[1737,258],[1734,261],[1733,261]],"dx":1040,"dy":-355,"length":1326.2317458193443,"timing":[0,7,15,23,31,39,47,55,63,71,79,87,95,103,111,119,127,136,144,152,162,169,177,186,194,202,211,219,227,236,244,269,352,368,378,388,394,402,411,419,427,436,444,452,461,469,477,486,494,502,511,519,527]},{"start":[1515,562],"end":[584,693],"points":[[1514,560],[1513,560],[1507,556],[1504,555],[1500,553],[1495,552],[1493,552],[1484,551],[1469,549],[1456,547],[1441,545],[1429,544],[1421,543],[1419,542],[1418,543],[1414,548],[1410,552],[1408,553],[1402,557],[1387,564],[1362,572],[1330,580],[1285,588],[1232,596],[1164,602],[1090,610],[1016,619],[939,630],[872,640],[811,650],[761,660],[721,667],[687,672],[655,677],[638,678],[623,680],[613,681],[611,681],[608,681],[608,682],[608,685],[609,687],[609,689],[608,689],[604,690],[602,690],[599,691],[593,692],[589,693],[587,693],[585,693],[584,693]],"dx":-931,"dy":131,"length":959.6423472622148,"timing":[0,4,12,20,28,37,45,53,61,69,77,86,94,102,246,253,261,269,277,286,294,302,311,319,327,336,344,352,361,369,377,386,394,402,411,419,427,436,444,502,519,544,568,686,694,702,711,719,727,736,744,752]},{"start":[584,693],"end":[690,145],"points":[[584,694],[586,693],[590,691],[594,689],[600,687],[609,684],[623,678],[646,667],[673,652],[700,634],[722,616],[738,600],[753,578],[763,560],[768,549],[771,536],[772,524],[772,507],[772,490],[767,464],[763,443],[757,419],[751,389],[744,362],[738,341],[732,311],[726,292],[722,271],[719,258],[716,245],[713,233],[710,222],[708,214],[706,207],[704,200],[699,190],[697,187],[695,186],[695,185],[695,184],[695,183],[694,179],[694,178],[693,175],[693,172],[693,169],[693,168],[693,165],[692,163],[692,161],[691,159],[691,156],[691,155],[691,154],[691,153],[691,152],[691,151],[691,150],[691,149],[690,148],[690,147],[690,146],[690,145]],"dx":106,"dy":-548,"length":658.06335174904,"timing":[0,136,143,151,159,167,175,183,191,199,207,215,223,232,240,248,257,265,273,282,290,298,307,315,323,332,340,348,357,365,373,382,390,398,406,415,423,432,440,504,511,519,527,535,543,551,559,567,575,583,591,599,607,631,640,655,680,720,824,839,857,881,906]},{"start":[1398,689],"end":[1161,285],"points":[[1397,689],[1393,683],[1390,680],[1384,672],[1375,662],[1359,646],[1336,626],[1313,607],[1288,589],[1263,568],[1240,547],[1222,531],[1206,513],[1191,496],[1179,479],[1170,465],[1162,450],[1156,435],[1153,425],[1151,413],[1150,402],[1149,394],[1149,384],[1149,373],[1149,366],[1149,357],[1150,349],[1151,342],[1152,336],[1154,324],[1154,322],[1155,318],[1157,315],[1158,312],[1158,310],[1160,307],[1160,305],[1161,304],[1161,303],[1161,301],[1161,298],[1161,297],[1161,294],[1161,293],[1161,290],[1161,289],[1161,286],[1161,285]],"dx":-237,"dy":-404,"length":506.8986481556207,"timing":[0,7,15,23,31,39,48,56,64,73,81,89,97,106,114,123,131,139,148,156,164,173,181,189,197,206,214,222,231,239,248,256,264,274,284,294,297,306,314,322,331,339,347,356,364,373,381,389]},{"start":[1161,285],"end":[851,187],"points":[[1161,290],[1159,292],[1156,295],[1153,299],[1150,301],[1144,304],[1135,309],[1126,312],[1113,316],[1100,320],[1088,322],[1072,325],[1059,328],[1038,332],[1017,334],[996,339],[983,342],[973,344],[961,346],[951,348],[951,346],[951,344],[951,342],[950,338],[948,331],[945,323],[941,316],[936,305],[930,295],[925,285],[920,276],[916,267],[913,260],[911,254],[909,248],[907,244],[905,239],[904,237],[903,234],[902,232],[902,230],[900,227],[900,224],[899,222],[897,220],[895,217],[894,215],[892,213],[891,212],[890,210],[888,208],[887,206],[885,204],[883,201],[878,198],[875,197],[872,196],[869,195],[864,193],[862,192],[859,192],[858,191],[853,189],[851,188],[851,187]],"dx":-310,"dy":-98,"length":421.41828317045423,"timing":[0,8,16,24,33,41,49,57,66,74,82,91,99,107,116,124,132,141,149,158,316,324,339,347,355,363,367,375,383,391,399,407,416,424,433,441,449,457,466,474,483,491,499,507,516,524,533,541,549,558,566,574,582,591,599,607,616,624,633,641,649,657,666,674,682]},{"start":[851,187],"end":[1455,651],"points":[[851,188],[851,192],[852,197],[854,202],[856,209],[861,220],[865,230],[869,240],[875,251],[882,262],[893,279],[910,300],[932,323],[961,350],[987,374],[1020,402],[1056,430],[1094,457],[1132,481],[1166,501],[1198,519],[1227,534],[1251,547],[1267,556],[1285,566],[1295,573],[1305,578],[1311,582],[1317,586],[1323,589],[1330,593],[1342,601],[1348,604],[1354,607],[1359,610],[1363,612],[1366,613],[1368,615],[1370,616],[1371,618],[1374,620],[1376,622],[1381,626],[1383,628],[1387,630],[1395,634],[1402,638],[1410,640],[1417,642],[1425,644],[1432,645],[1434,645],[1438,645],[1443,647],[1447,648],[1448,649],[1450,649],[1453,650],[1454,651],[1455,651]],"dx":604,"dy":464,"length":784.2282044712421,"timing":[0,7,15,23,31,39,47,55,64,72,80,88,97,105,113,122,130,138,147,155,163,172,180,188,197,205,213,222,230,238,247,255,264,272,280,288,297,305,313,322,330,338,347,355,363,372,380,389,397,405,413,422,430,438,447,455,464,472,488,497]},{"start":[1455,651],"end":[1346,497],"points":[[1452,648],[1447,643],[1441,637],[1439,635],[1432,629],[1422,621],[1412,614],[1396,603],[1384,593],[1376,586],[1369,579],[1363,573],[1357,567],[1352,560],[1347,553],[1345,551],[1343,546],[1342,541],[1341,537],[1340,533],[1339,530],[1339,524],[1338,521],[1338,518],[1338,516],[1338,515],[1338,513],[1339,512],[1339,510],[1340,508],[1342,507],[1342,505],[1343,503],[1344,501],[1344,499],[1345,498],[1346,498],[1346,497]],"dx":-109,"dy":-154,"length":204.0150431332031,"timing":[0,7,15,23,31,39,47,55,63,71,79,87,95,103,111,119,128,136,144,153,161,169,178,186,194,203,211,219,228,236,244,253,261,269,278,286,294,303]},{"start":[976,284],"end":[739,633],"points":[[974,287],[972,290],[968,295],[963,302],[955,311],[944,325],[927,345],[907,370],[889,392],[874,412],[857,435],[836,460],[822,477],[803,498],[789,515],[774,532],[766,546],[760,556],[756,565],[754,574],[754,576],[753,580],[753,583],[752,587],[751,589],[751,591],[749,595],[747,598],[746,601],[745,603],[743,610],[743,612],[743,614],[743,615],[743,616],[743,618],[742,619],[742,620],[741,624],[741,626],[740,629],[740,631],[739,631],[739,632],[739,633]],"dx":-237,"dy":349,"length":426.2266594766528,"timing":[0,7,15,23,31,39,47,56,64,72,81,89,97,106,114,122,131,139,147,156,164,172,181,189,197,206,214,222,231,239,247,256,264,273,281,295,303,311,319,327,335,343,351,359,367]},{"start":[727,558],"end":[623,325],"points":[[725,558],[724,558],[719,558],[716,558],[710,556],[703,552],[694,547],[685,540],[679,535],[673,527],[666,517],[661,506],[655,491],[649,477],[645,464],[642,454],[638,438],[636,426],[634,414],[633,404],[632,392],[631,383],[630,376],[629,369],[629,362],[629,357],[629,353],[629,349],[628,347],[628,343],[627,340],[627,336],[625,332],[624,329],[623,327],[623,326],[623,325]],"dx":-104,"dy":-233,"length":273.994157192407,"timing":[0,7,15,23,31,39,47,55,63,71,79,87,95,103,111,119,127,135,143,151,160,168,176,185,193,201,210,218,226,235,243,251,260,268,276,285,312]},{"start":[956,230],"end":[1659,501],"points":[[956,230],[956,235],[958,241],[960,245],[963,250],[968,256],[977,265],[986,273],[1003,282],[1029,293],[1057,303],[1102,312],[1150,322],[1200,329],[1253,335],[1311,341],[1363,349],[1417,359],[1468,371],[1513,382],[1543,390],[1583,403],[1592,406],[1600,410],[1601,412],[1602,414],[1602,415],[1603,417],[1604,419],[1604,420],[1604,421],[1604,422],[1605,424],[1606,426],[1607,429],[1607,431],[1607,432],[1608,434],[1608,436],[1608,438],[1608,441],[1610,446],[1611,450],[1614,454],[1618,460],[1622,468],[1628,474],[1632,480],[1636,485],[1641,488],[1646,492],[1651,495],[1654,498],[1656,498],[1657,500],[1658,501],[1659,501]],"dx":703,"dy":271,"length":800.7859666725623,"timing":[0,192,201,209,217,226,234,242,251,259,267,276,284,292,301,309,317,326,334,342,351,359,367,376,384,392,401,409,417,426,434,447,455,463,471,479,487,495,503,511,519,527,535,543,551,559,567,576,585,592,601,609,617,626,634,642,655]},{"start":[1659,501],"end":[718,567],"points":[[1658,501],[1658,500],[1656,499],[1653,498],[1640,495],[1624,494],[1591,494],[1543,500],[1488,508],[1421,520],[1349,533],[1282,548],[1218,564],[1159,579],[1105,595],[1050,611],[1002,624],[945,638],[894,650],[855,657],[820,664],[786,671],[757,674],[737,677],[712,679],[695,679],[682,679],[674,679],[666,679],[665,677],[664,676],[664,675],[663,674],[663,673],[663,672],[663,670],[662,667],[661,662],[661,656],[660,651],[660,649],[660,645],[660,639],[660,634],[662,628],[665,621],[669,615],[675,608],[682,602],[688,596],[694,590],[700,584],[711,574],[716,570],[717,568],[718,568],[718,567]],"dx":-941,"dy":66,"length":1151.3400338669987,"timing":[0,7,30,39,47,55,64,72,80,89,97,105,114,122,130,139,147,155,164,172,180,189,197,205,214,222,230,239,247,255,264,272,280,289,297,305,314,322,330,339,347,355,364,372,380,389,397,405,414,422,431,439,447,456,464,472,480]},{"start":[718,567],"end":[1075,349],"points":[[718,572],[717,575],[717,577],[716,580],[715,581],[715,583],[715,585],[715,586],[716,586],[718,586],[723,586],[728,584],[742,579],[765,570],[795,558],[840,539],[881,522],[923,503],[962,484],[997,466],[1020,454],[1034,445],[1036,443],[1039,439],[1040,437],[1040,436],[1041,434],[1042,432],[1043,430],[1045,428],[1047,424],[1051,418],[1054,414],[1058,410],[1061,405],[1062,403],[1065,399],[1067,394],[1068,392],[1069,390],[1069,388],[1070,386],[1070,385],[1070,382],[1070,380],[1070,379],[1070,376],[1070,371],[1070,369],[1071,366],[1071,363],[1072,360],[1073,358],[1073,355],[1074,352],[1075,350],[1075,349]],"dx":357,"dy":-218,"length":472.7137708634255,"timing":[0,8,16,24,33,41,49,63,71,79,87,95,103,111,119,127,135,143,151,159,167,175,183,191,199,208,216,224,233,241,249,258,266,274,283,291,299,308,316,324,333,341,349,358,366,374,383,391,399,408,416,424,433,441,449,458,471]},{"start":[1075,349],"end":[1349,788],"points":[[1075,351],[1075,353],[1075,357],[1075,360],[1075,365],[1076,373],[1078,381],[1080,391],[1085,407],[1090,423],[1095,437],[1106,463],[1121,492],[1140,522],[1169,560],[1194,588],[1221,620],[1253,651],[1284,681],[1313,705],[1333,724],[1348,738],[1360,749],[1361,750],[1362,751],[1362,752],[1361,754],[1360,757],[1357,762],[1356,764],[1356,767],[1354,771],[1352,774],[1352,776],[1352,778],[1350,780],[1350,783],[1349,784],[1349,785],[1349,786],[1349,787],[1349,788]],"dx":274,"dy":439,"length":545.8304194882621,"timing":[0,7,15,23,31,39,47,55,64,73,80,89,97,105,114,122,130,139,147,155,164,172,180,189,197,328,335,343,351,359,367,375,383,391,399,407,415,423,431,439,455,471]},{"start":[1349,788],"end":[530,260],"points":[[1347,784],[1343,778],[1341,776],[1336,768],[1320,754],[1299,735],[1271,712],[1236,686],[1200,662],[1157,634],[1114,607],[1077,582],[1031,555],[985,527],[940,499],[899,472],[861,445],[823,416],[787,390],[754,364],[726,342],[709,327],[696,316],[686,307],[679,301],[673,296],[668,292],[666,290],[661,288],[655,285],[653,284],[650,283],[644,282],[637,281],[630,280],[625,280],[618,279],[616,279],[614,279],[611,279],[607,279],[604,279],[599,279],[596,279],[591,279],[586,279],[581,279],[576,278],[569,277],[563,276],[559,274],[554,273],[552,272],[550,272],[548,270],[546,269],[544,269],[543,268],[542,267],[541,266],[540,265],[539,265],[536,264],[535,263],[534,263],[532,262],[531,262],[531,261],[531,260],[530,260]],"dx":-819,"dy":-528,"length":988.421571040442,"timing":[0,7,15,23,31,39,47,55,63,71,79,87,95,104,112,120,128,137,145,153,162,170,178,187,195,203,212,220,228,237,245,253,262,270,278,287,295,303,312,321,328,337,345,353,362,370,378,387,395,403,412,420,428,437,445,453,462,470,478,487,495,503,512,520,528,537,545,570,616,640]},{"start":[530,260],"end":[1601,842],"points":[[530,261],[532,263],[532,264],[534,266],[535,270],[537,274],[540,280],[544,286],[552,296],[565,310],[591,336],[614,360],[645,387],[682,418],[710,440],[750,467],[788,490],[822,510],[846,524],[862,534],[864,535],[864,536],[860,536],[857,536],[853,536],[844,536],[835,536],[827,536],[821,537],[820,539],[820,541],[820,543],[821,548],[824,550],[831,556],[844,565],[866,579],[900,595],[934,611],[976,632],[1026,656],[1076,678],[1128,700],[1186,725],[1241,747],[1286,767],[1330,786],[1369,803],[1403,817],[1434,831],[1462,842],[1485,851],[1505,860],[1522,867],[1532,870],[1543,874],[1553,877],[1560,880],[1567,882],[1572,883],[1575,883],[1577,883],[1578,883],[1579,883],[1580,883],[1580,880],[1580,879],[1580,877],[1580,876],[1582,872],[1583,870],[1585,866],[1588,861],[1592,858],[1594,855],[1596,853],[1597,851],[1598,850],[1598,848],[1599,847],[1599,846],[1600,845],[1600,844],[1600,843],[1601,843],[1601,842]],"dx":1071,"dy":582,"length":1373.384564289256,"timing":[0,103,110,118,126,134,142,150,159,167,175,184,192,200,209,217,225,234,242,250,259,267,295,302,310,318,326,334,342,350,366,374,382,390,398,406,414,422,430,438,446,454,461,469,477,485,494,502,510,518,526,534,542,550,559,568,575,584,592,600,609,617,625,638,646,654,662,670,678,686,694,702,710,718,726,734,742,750,759,774,792,823,842,850,859,879]},{"start":[1163,160],"end":[942,199],"points":[[1161,160],[1159,162],[1156,163],[1149,165],[1141,167],[1129,169],[1115,171],[1105,172],[1090,173],[1079,174],[1069,175],[1059,176],[1047,178],[1038,178],[1028,179],[1019,180],[1009,181],[1001,182],[993,184],[985,186],[976,188],[969,190],[962,191],[955,193],[950,195],[945,196],[944,196],[943,196],[943,197],[942,198],[942,199]],"dx":-221,"dy":39,"length":225.67754249124522,"timing":[0,7,15,23,31,39,47,55,63,71,79,87,96,103,111,119,127,135,143,152,161,168,177,185,193,201,210,223,288,295,303]},{"start":[942,199],"end":[1799,683],"points":[[942,200],[940,204],[939,206],[939,207],[939,210],[939,215],[939,223],[939,231],[943,242],[949,253],[957,266],[966,280],[973,291],[983,303],[992,313],[1002,325],[1013,337],[1022,346],[1036,360],[1057,379],[1092,405],[1130,432],[1171,459],[1209,483],[1254,507],[1340,545],[1376,558],[1411,568],[1443,575],[1480,580],[1511,582],[1546,584],[1579,585],[1602,587],[1621,587],[1638,588],[1659,591],[1675,594],[1688,598],[1701,601],[1710,603],[1721,606],[1732,610],[1742,613],[1750,616],[1758,619],[1766,621],[1768,621],[1770,622],[1773,623],[1775,624],[1776,626],[1778,627],[1779,628],[1781,631],[1783,633],[1785,636],[1788,639],[1789,641],[1791,642],[1791,644],[1791,646],[1793,647],[1794,649],[1794,652],[1795,654],[1795,655],[1795,657],[1796,659],[1796,660],[1796,662],[1796,665],[1797,671],[1798,673],[1799,676],[1799,679],[1799,680],[1799,681],[1799,682],[1799,683]],"dx":857,"dy":484,"length":1065.2400895315952,"timing":[0,7,16,24,32,41,49,57,66,74,82,91,99,107,116,124,132,141,149,157,166,174,182,191,199,207,215,224,232,241,249,257,266,274,282,291,299,307,316,324,332,340,349,357,365,374,382,391,399,407,415,424,432,441,449,457,466,474,482,491,499,507,515,524,532,541,549,557,565,574,582,591,599,607,616,625,632,647,655,674]},{"start":[1149,640],"end":[1211,810],"points":[[1149,640],[1148,640],[1147,640],[1146,640],[1143,639],[1141,638],[1137,636],[1134,635],[1132,633],[1128,631],[1123,629],[1115,624],[1105,619],[1093,611],[1082,604],[1067,594],[1053,582],[1043,573],[1035,566],[1034,564],[1033,558],[1032,553],[1030,548],[1030,545],[1029,542],[1029,541],[1030,541],[1031,543],[1034,547],[1038,553],[1045,564],[1054,578],[1068,597],[1080,618],[1090,636],[1097,649],[1111,671],[1122,687],[1137,707],[1150,722],[1165,740],[1173,749],[1180,761],[1186,769],[1191,778],[1195,785],[1199,791],[1202,796],[1204,800],[1204,801],[1205,802],[1206,802],[1206,803],[1206,804],[1207,805],[1207,806],[1209,808],[1210,809],[1211,810]],"dx":62,"dy":170,"length":490.64680001867885,"timing":[0,60,67,75,83,91,100,108,117,125,133,141,150,158,166,175,183,191,200,208,216,225,233,242,250,259,301,308,317,325,333,342,350,358,367,375,383,392,400,408,416,425,433,441,450,458,467,475,483,492,500,508,523,541,550,558,566,575,583]},{"start":[1211,810],"end":[353,405],"points":[[1211,811],[1211,810],[1211,808],[1211,806],[1211,804],[1210,803],[1210,802],[1209,801],[1208,799],[1205,797],[1204,795],[1200,790],[1195,782],[1189,771],[1180,752],[1165,726],[1145,688],[1125,656],[1101,621],[1071,587],[1042,558],[1004,532],[966,509],[933,495],[900,485],[868,478],[829,474],[793,473],[772,473],[752,473],[750,474],[750,475],[753,476],[760,477],[781,480],[817,483],[862,487],[916,489],[984,491],[1057,493],[1133,495],[1211,495],[1290,497],[1369,499],[1450,501],[1528,504],[1594,508],[1651,510],[1698,513],[1731,515],[1751,516],[1765,516],[1768,516],[1770,516],[1771,516],[1772,516],[1774,516],[1774,518],[1774,521],[1774,524],[1774,527],[1772,531],[1771,537],[1767,543],[1763,547],[1760,551],[1756,555],[1750,559],[1746,560],[1742,563],[1735,566],[1726,569],[1718,573],[1711,575],[1701,576],[1689,577],[1675,577],[1653,577],[1619,574],[1577,569],[1521,561],[1458,553],[1395,545],[1312,534],[1225,525],[1132,516],[1039,505],[955,496],[779,470],[699,457],[635,447],[582,439],[540,432],[508,425],[492,421],[480,418],[470,416],[468,415],[466,414],[465,414],[463,412],[462,412],[460,411],[456,409],[453,408],[449,408],[445,407],[440,406],[436,405],[434,405],[433,405],[432,405],[429,405],[426,405],[421,405],[416,405],[412,405],[404,405],[397,405],[386,405],[377,405],[369,405],[364,405],[358,405],[356,405],[354,405],[353,405]],"dx":-858,"dy":-405,"length":3112.969439627208,"timing":[0,138,145,153,162,170,179,193,201,209,217,225,233,241,249,257,265,273,281,289,297,305,313,321,329,337,345,353,362,370,378,387,401,409,417,425,433,441,449,457,465,473,481,489,497,505,513,521,529,537,545,554,563,570,579,587,595,690,697,705,713,721,729,737,745,753,762,770,778,787,795,803,812,820,828,837,845,854,862,870,878,887,895,903,912,920,928,937,945,953,962,970,979,987,995,1004,1012,1020,1028,1037,1045,1053,1062,1070,1078,1087,1095,1103,1112,1120,1128,1154,1162,1170,1179,1187,1195,1203,1212,1220,1228,1237,1247,1256,1264,1273,1281]},{"start":[1688,589],"end":[1282,442],"points":[[1688,589],[1687,589],[1683,584],[1670,579],[1611,568],[1577,563],[1536,560],[1497,556],[1450,554],[1412,552],[1385,552],[1365,552],[1352,552],[1343,552],[1341,552],[1339,552],[1338,551],[1337,551],[1337,550],[1336,549],[1336,547],[1336,546],[1336,545],[1336,544],[1336,543],[1336,540],[1336,538],[1336,536],[1336,533],[1336,530],[1336,525],[1336,522],[1335,519],[1334,515],[1332,509],[1330,504],[1328,500],[1326,495],[1324,493],[1323,492],[1321,489],[1320,487],[1317,485],[1316,483],[1314,480],[1312,477],[1308,472],[1306,469],[1302,465],[1298,462],[1297,458],[1294,456],[1292,454],[1289,450],[1287,448],[1283,444],[1282,443],[1282,442]],"dx":-406,"dy":-147,"length":485.06310946718344,"timing":[0,133,150,175,199,207,212,220,228,236,244,252,260,268,276,284,292,300,325,334,342,356,364,372,380,388,395,403,411,419,427,435,443,451,460,468,476,484,492,500,510,517,525,534,542,550,559,567,575,584,592,600,609,617,625,634,642,650]},{"start":[267,423],"end":[680,437],"points":[[268,425],[271,428],[277,431],[287,434],[304,438],[331,443],[359,447],[401,451],[448,453],[488,453],[532,453],[567,453],[591,453],[613,453],[627,454],[636,455],[637,456],[639,456],[640,456],[641,456],[642,456],[643,456],[645,455],[649,452],[653,450],[656,449],[661,447],[666,445],[672,442],[674,441],[677,440],[679,439],[680,438],[680,437]],"dx":413,"dy":14,"length":421.7342220379762,"timing":[0,7,15,23,31,39,47,55,63,71,79,87,95,103,111,119,128,136,151,159,178,186,194,203,211,219,228,236,244,253,261,269,279,319]},{"start":[436,537],"end":[175,729],"points":[[433,541],[431,545],[429,547],[426,551],[419,559],[411,566],[402,575],[393,584],[386,592],[378,600],[369,610],[354,626],[341,641],[324,659],[306,679],[292,695],[279,707],[264,721],[254,730],[245,738],[244,739],[242,740],[241,740],[237,741],[234,741],[232,741],[226,741],[220,741],[213,741],[205,741],[198,741],[193,741],[191,741],[189,740],[189,738],[187,736],[186,735],[185,733],[183,731],[181,730],[179,730],[178,730],[177,730],[176,730],[175,730],[175,729]],"dx":-261,"dy":192,"length":350.37966723071975,"timing":[0,7,15,23,31,39,47,55,64,72,80,88,97,105,114,122,130,139,147,155,164,172,208,215,223,231,239,247,255,265,272,280,289,297,305,314,322,330,338,347,355,364,372,380,388,416]},{"start":[1087,152],"end":[935,246],"points":[[1087,154],[1086,157],[1086,161],[1085,164],[1085,167],[1084,171],[1081,181],[1077,191],[1071,205],[1064,218],[1057,229],[1049,239],[1041,248],[1032,255],[1024,261],[1017,265],[1007,269],[1000,271],[990,273],[981,274],[973,274],[965,274],[957,274],[948,274],[936,271],[934,270],[929,266],[928,265],[927,263],[926,261],[926,260],[926,259],[926,258],[926,256],[926,255],[926,254],[926,253],[926,252],[926,251],[926,250],[927,249],[928,249],[929,249],[930,249],[930,248],[931,247],[932,247],[933,247],[934,247],[935,246]],"dx":-152,"dy":94,"length":255.44628916959854,"timing":[0,7,15,24,32,40,49,57,65,74,82,90,99,107,116,124,132,141,149,157,166,174,182,191,199,207,215,224,232,240,249,257,265,274,282,290,299,311,319,340,351,359,367,390,399,407,415,431,439,447]},{"start":[1539,684],"end":[252,545],"points":[[1538,684],[1536,684],[1531,684],[1520,687],[1501,688],[1463,688],[1404,687],[1341,683],[1275,679],[1210,673],[1141,668],[1073,664],[1005,660],[940,658],[867,656],[804,656],[737,656],[672,656],[618,656],[571,654],[525,654],[487,652],[454,651],[431,649],[417,648],[406,648],[397,648],[386,647],[377,647],[370,646],[368,645],[366,645],[366,644],[363,644],[361,643],[355,642],[346,641],[330,638],[320,635],[313,632],[312,629],[311,627],[311,623],[311,618],[311,615],[311,611],[310,605],[309,599],[308,597],[304,593],[300,589],[298,587],[296,585],[292,582],[290,580],[286,576],[284,573],[281,570],[277,564],[275,562],[270,557],[267,554],[263,552],[260,549],[257,548],[254,547],[253,546],[252,546],[252,545]],"dx":-1287,"dy":-139,"length":1343.6400960413985,"timing":[0,7,15,23,31,39,47,55,63,71,79,87,95,103,111,119,128,136,144,152,161,169,177,186,194,202,211,219,227,236,244,252,277,286,294,302,311,319,327,336,344,352,361,369,377,386,394,402,411,419,427,436,444,452,461,469,477,486,494,502,511,519,527,536,544,552,561,569,583]},{"start":[252,544],"end":[914,498],"points":[[252,544],[253,544],[255,544],[260,544],[263,544],[270,545],[283,547],[304,551],[342,558],[392,566],[445,574],[500,578],[554,580],[595,580],[630,580],[660,580],[679,580],[702,579],[719,578],[739,577],[756,575],[774,573],[796,567],[814,563],[828,558],[839,554],[849,549],[859,543],[869,536],[878,531],[884,527],[886,525],[887,524],[887,523],[887,522],[887,519],[888,518],[888,517],[889,515],[889,513],[889,511],[890,509],[890,508],[891,508],[893,507],[896,505],[901,503],[906,501],[910,500],[912,499],[913,499],[914,498]],"dx":662,"dy":-46,"length":692.846883515408,"timing":[0,122,129,137,145,153,161,169,177,185,193,201,209,217,225,233,241,250,258,266,275,283,291,300,308,316,325,333,341,350,358,366,375,383,443,450,458,466,475,483,497,516,525,561,569,577,585,593,601,609,617,625]},{"start":[1375,442],"end":[107,578],"points":[[1373,442],[1371,442],[1366,444],[1350,449],[1323,457],[1293,463],[1248,475],[1202,486],[1161,497],[1113,511],[1064,524],[1024,535],[983,545],[949,552],[904,561],[867,566],[820,572],[780,577],[730,583],[678,589],[623,595],[567,601],[512,607],[460,612],[410,620],[368,626],[337,629],[319,631],[301,634],[287,635],[277,636],[267,637],[260,638],[253,639],[247,639],[240,640],[234,640],[226,640],[216,640],[205,640],[185,640],[173,638],[165,636],[158,634],[157,632],[156,631],[156,629],[156,626],[156,623],[155,621],[155,618],[154,616],[153,613],[151,611],[150,609],[148,608],[146,606],[144,603],[141,602],[139,600],[133,597],[130,594],[126,592],[124,590],[117,587],[114,584],[110,582],[108,580],[107,579],[107,578]],"dx":-1268,"dy":136,"length":1317.5952636206,"timing":[0,7,15,23,31,39,47,55,63,71,83,91,99,107,115,123,127,135,144,152,160,169,177,185,194,202,210,219,227,235,244,252,260,269,277,285,294,302,310,319,327,335,344,352,360,369,377,385,394,402,410,419,427,435,444,452,460,469,477,485,494,502,510,519,527,535,544,552,567,575]},{"start":[1588,825],"end":[578,356],"points":[[1587,825],[1581,822],[1578,821],[1575,821],[1571,819],[1566,818],[1561,817],[1555,815],[1547,813],[1536,811],[1522,806],[1508,802],[1483,794],[1445,783],[1399,768],[1344,749],[1282,729],[1222,710],[1163,692],[1108,673],[1051,655],[997,637],[950,619],[901,602],[860,587],[823,572],[789,556],[758,540],[729,523],[702,506],[674,488],[647,469],[631,458],[614,445],[604,436],[595,429],[594,426],[590,423],[587,418],[584,411],[582,406],[582,403],[581,401],[580,399],[580,397],[579,397],[579,395],[579,394],[579,392],[578,390],[578,388],[578,385],[578,382],[578,381],[578,378],[578,373],[578,370],[578,367],[578,364],[578,362],[578,360],[578,358],[578,356]],"dx":-1010,"dy":-469,"length":1154.1897100840954,"timing":[0,7,15,23,31,39,47,55,63,71,79,87,95,103,111,119,127,139,147,152,161,169,177,186,194,202,211,219,227,236,244,252,261,269,277,285,294,302,311,319,327,336,344,352,361,369,377,386,394,402,411,419,427,436,444,452,461,469,477,486,494,502,511]},{"start":[999,836],"end":[590,499],"points":[[998,835],[997,831],[995,828],[991,819],[983,803],[976,788],[962,766],[936,740],[900,712],[857,684],[811,658],[769,635],[721,614],[685,595],[656,580],[634,568],[623,561],[613,553],[607,546],[603,540],[600,535],[598,531],[597,528],[597,527],[596,526],[596,525],[594,524],[594,523],[592,522],[591,520],[590,519],[590,518],[589,516],[589,513],[589,511],[589,509],[589,507],[589,505],[589,503],[589,501],[589,500],[589,499],[590,499]],"dx":-409,"dy":-337,"length":552.8317693079899,"timing":[0,7,15,23,31,39,47,55,63,71,79,87,95,103,111,119,127,135,144,152,160,168,177,185,193,202,210,218,227,239,247,255,263,271,293,301,310,318,327,335,343,352,360]},{"start":[1475,756],"end":[1408,200],"points":[[1476,752],[1478,746],[1479,738],[1479,726],[1479,713],[1479,690],[1479,668],[1472,511],[1472,443],[1472,407],[1472,375],[1472,342],[1471,317],[1468,291],[1465,268],[1461,247],[1456,220],[1454,210],[1453,203],[1452,201],[1452,199],[1452,198],[1452,197],[1451,196],[1450,195],[1450,194],[1450,193],[1447,193],[1442,194],[1437,195],[1434,196],[1429,198],[1423,199],[1416,200],[1411,200],[1409,200],[1408,200]],"dx":-67,"dy":-556,"length":604.9996427595729,"timing":[0,7,15,23,31,39,47,94,103,111,119,127,135,143,151,159,179,187,196,204,212,221,229,239,247,255,263,315,323,331,338,346,354,363,371,379,387]},{"start":[1408,200],"end":[1687,556],"points":[[1408,201],[1408,211],[1408,215],[1408,219],[1409,227],[1412,238],[1414,248],[1417,257],[1421,269],[1428,281],[1437,295],[1449,312],[1463,331],[1492,368],[1511,388],[1533,412],[1562,438],[1596,470],[1622,497],[1646,523],[1665,543],[1679,560],[1687,572],[1692,579],[1698,588],[1702,595],[1703,597],[1705,600],[1706,602],[1706,603],[1706,604],[1706,605],[1705,605],[1704,607],[1703,607],[1701,609],[1701,610],[1700,611],[1699,613],[1698,615],[1698,616],[1697,618],[1696,617],[1694,614],[1693,609],[1692,606],[1691,602],[1690,597],[1689,594],[1689,592],[1689,589],[1688,585],[1688,581],[1687,576],[1687,571],[1687,565],[1687,561],[1687,559],[1687,557],[1687,556]],"dx":279,"dy":356,"length":594.0684335150116,"timing":[0,7,15,24,32,40,49,57,65,74,82,90,98,107,115,123,132,143,151,159,167,175,183,190,198,207,215,223,232,240,248,291,299,307,315,323,332,340,348,357,365,373,436,443,451,459,467,475,483,491,499,507,516,523,532,543,548,557,565,573]},{"start":[1706,416],"end":[833,596],"points":[[1704,416],[1700,416],[1691,417],[1676,418],[1656,419],[1615,421],[1557,425],[1500,429],[1439,437],[1375,447],[1314,460],[1265,471],[1217,485],[1178,498],[1120,519],[1098,527],[1078,534],[1066,538],[1055,541],[1041,547],[1025,555],[1016,559],[1004,566],[994,573],[992,575],[990,576],[988,579],[984,581],[981,583],[977,585],[975,585],[971,587],[964,589],[956,591],[944,595],[933,597],[921,599],[892,601],[879,601],[868,601],[860,601],[855,601],[850,601],[849,601],[847,600],[845,599],[843,598],[841,598],[839,597],[837,597],[835,596],[834,596],[833,596]],"dx":-873,"dy":180,"length":902.3032883281385,"timing":[0,7,15,23,32,40,48,57,65,73,82,90,98,107,115,123,132,143,151,159,165,173,182,190,198,207,215,223,232,240,248,257,265,273,282,290,298,307,315,323,332,340,348,357,365,373,382,390,398,407,415,423,432]},{"start":[833,596],"end":[1252,325],"points":[[834,596],[839,593],[854,586],[930,547],[973,523],[1015,500],[1055,479],[1097,456],[1137,435],[1174,415],[1206,397],[1236,380],[1278,354],[1297,342],[1308,336],[1317,330],[1323,325],[1324,324],[1325,322],[1326,322],[1326,321],[1326,320],[1326,319],[1327,318],[1328,316],[1329,313],[1331,311],[1332,308],[1333,307],[1333,306],[1329,306],[1324,308],[1320,310],[1315,311],[1309,312],[1303,313],[1298,314],[1293,316],[1289,317],[1286,318],[1283,319],[1278,319],[1273,321],[1270,322],[1264,323],[1261,323],[1258,324],[1256,324],[1254,325],[1253,325],[1252,325]],"dx":419,"dy":-271,"length":666.4079904724023,"timing":[0,17,41,67,76,85,92,100,109,117,125,134,142,150,159,167,175,184,192,200,209,217,225,234,242,250,259,267,275,291,367,375,384,392,400,409,417,425,434,442,450,459,467,475,484,492,500,509,517,525,534]},{"start":[1252,325],"end":[742,624],"points":[[1252,326],[1252,327],[1251,329],[1248,334],[1244,341],[1239,350],[1231,361],[1218,375],[1200,393],[1187,406],[1162,428],[1134,447],[1102,464],[1066,483],[1024,498],[983,513],[945,526],[912,538],[881,550],[860,560],[842,568],[819,579],[804,585],[793,590],[785,594],[775,598],[768,602],[762,605],[756,608],[754,610],[752,611],[751,611],[750,613],[747,616],[746,618],[744,619],[743,622],[742,623],[742,624]],"dx":-510,"dy":299,"length":605.302714619616,"timing":[0,105,112,120,128,136,144,152,160,168,176,184,193,200,209,217,225,234,242,250,259,267,275,284,292,300,309,317,325,334,343,409,417,425,434,442,450,459,472]},{"start":[742,624],"end":[107,799],"points":[[742,625],[742,624],[744,621],[745,619],[748,616],[753,612],[755,610],[760,608],[771,603],[780,600],[794,598],[806,596],[814,595],[820,594],[822,594],[823,595],[824,598],[826,601],[829,605],[831,606],[837,609],[844,611],[851,614],[858,616],[860,617],[860,618],[860,621],[857,626],[850,634],[832,648],[808,665],[774,683],[732,700],[683,716],[632,729],[507,748],[444,754],[386,760],[334,762],[298,765],[276,767],[264,768],[261,768],[257,770],[253,772],[246,774],[235,776],[225,778],[212,780],[201,781],[190,782],[181,782],[173,782],[167,782],[163,783],[159,784],[154,785],[149,786],[142,788],[135,790],[128,793],[121,796],[116,798],[115,798],[113,798],[110,799],[108,799],[107,799]],"dx":-635,"dy":175,"length":928.8508746603208,"timing":[0,129,136,144,152,160,168,176,184,192,200,208,216,224,232,257,268,274,282,291,299,307,316,324,332,341,349,357,366,374,382,391,399,407,416,424,432,441,449,457,466,474,482,537,544,552,560,568,576,584,592,600,608,616,625,632,641,649,657,666,674,682,691,699,797,800,807,816]},{"start":[571,616],"end":[1597,271],"points":[[571,616],[574,616],[579,615],[585,613],[594,609],[616,601],[652,589],[699,573],[761,552],[826,531],[888,513],[954,492],[1016,473],[1081,452],[1146,433],[1208,417],[1264,403],[1321,386],[1378,370],[1424,357],[1465,344],[1497,333],[1522,326],[1544,318],[1564,311],[1576,307],[1587,302],[1596,299],[1603,296],[1609,293],[1615,290],[1619,288],[1621,287],[1622,286],[1623,286],[1623,284],[1625,282],[1625,280],[1626,278],[1626,277],[1626,276],[1626,275],[1623,274],[1620,273],[1617,273],[1613,273],[1611,273],[1608,273],[1606,273],[1603,273],[1600,273],[1599,273],[1598,272],[1597,272],[1597,271]],"dx":1026,"dy":-345,"length":1146.5678855425017,"timing":[0,211,218,226,234,242,250,258,266,275,282,291,299,307,316,324,332,341,349,357,366,374,382,391,399,407,416,424,432,440,449,457,466,474,482,539,546,554,562,570,578,599,683,690,699,707,716,724,732,741,749,757,766,774,786]},{"start":[970,513],"end":[527,787],"points":[[969,513],[969,514],[967,515],[957,522],[950,527],[944,533],[932,543],[920,554],[908,565],[896,575],[877,588],[850,603],[821,618],[792,632],[763,647],[737,662],[716,674],[697,686],[681,695],[668,704],[656,710],[648,715],[639,719],[633,722],[628,725],[624,728],[618,731],[615,732],[611,735],[604,738],[597,742],[587,746],[577,751],[570,755],[563,758],[561,759],[556,762],[556,763],[554,764],[552,766],[550,768],[549,770],[546,771],[543,774],[541,776],[537,780],[534,781],[532,783],[528,786],[527,787]],"dx":-443,"dy":274,"length":524.4906166300945,"timing":[0,86,190,209,217,226,234,242,251,259,267,276,284,292,301,310,318,326,334,342,351,359,367,376,384,392,401,409,417,426,434,442,451,459,467,476,484,492,501,509,517,529,537,545,553,561,567,576,584,592]},{"start":[1380,757],"end":[900,395],"points":[[1380,757],[1379,757],[1374,755],[1372,755],[1368,753],[1353,746],[1330,735],[1299,721],[1257,702],[1207,678],[1159,654],[1122,634],[1095,617],[1073,599],[1058,585],[1045,573],[1036,561],[1027,547],[1020,536],[1014,527],[1007,518],[1001,509],[996,502],[996,499],[995,496],[994,494],[994,492],[994,490],[993,488],[992,485],[991,481],[990,478],[985,469],[982,466],[977,461],[975,459],[973,458],[969,455],[964,452],[955,449],[944,445],[932,439],[924,435],[915,430],[914,428],[912,425],[911,422],[909,416],[909,414],[908,411],[907,408],[906,405],[905,403],[904,402],[903,401],[902,400],[902,399],[901,398],[900,396],[900,395]],"dx":-480,"dy":-362,"length":626.444211320275,"timing":[0,202,209,217,225,233,241,250,258,266,275,283,291,300,308,316,325,333,342,350,358,366,375,383,391,400,408,417,425,433,441,450,458,466,475,483,491,500,508,516,524,533,541,549,558,566,575,583,592,600,608,616,625,634,641,650,658,666,675,700]},{"start":[253,809],"end":[1100,453],"points":[[253,809],[253,808],[258,806],[290,795],[315,787],[351,776],[402,763],[464,746],[526,727],[594,708],[653,692],[702,676],[745,663],[778,653],[803,645],[820,638],[831,635],[839,632],[845,630],[850,628],[851,627],[855,623],[858,622],[863,618],[868,615],[875,611],[884,607],[900,598],[913,592],[929,585],[942,578],[952,572],[959,568],[961,566],[961,565],[961,564],[961,563],[962,561],[962,560],[962,557],[963,555],[963,550],[966,542],[968,537],[970,531],[973,525],[976,518],[979,512],[981,507],[981,506],[981,505],[982,505],[982,504],[984,502],[985,501],[987,498],[989,497],[991,495],[994,494],[998,491],[1004,487],[1009,485],[1013,483],[1015,482],[1020,480],[1027,477],[1035,475],[1046,472],[1056,469],[1061,467],[1068,465],[1075,463],[1082,461],[1089,459],[1094,457],[1098,455],[1100,454],[1100,453]],"dx":847,"dy":-356,"length":950.9011936702597,"timing":[0,132,149,173,181,186,194,202,210,222,230,238,246,254,262,270,279,283,291,299,308,316,325,333,343,349,359,367,375,383,391,399,408,416,424,433,441,449,458,466,474,483,491,499,508,516,525,533,541,549,558,566,595,607,615,623,631,639,647,655,663,667,675,683,692,699,711,719,727,733,741,749,758,766,774,783,791,820]},{"start":[1018,382],"end":[145,835],"points":[[1018,383],[1015,386],[1002,395],[980,409],[951,424],[909,445],[861,467],[820,484],[771,502],[719,517],[657,538],[597,557],[537,577],[480,598],[419,621],[367,643],[322,664],[285,687],[255,708],[227,727],[200,745],[178,763],[161,776],[149,785],[142,793],[134,799],[129,805],[127,808],[124,811],[122,814],[121,816],[121,817],[120,818],[120,819],[119,821],[116,824],[116,826],[114,828],[113,829],[113,830],[113,831],[113,832],[114,833],[117,834],[120,834],[121,834],[122,835],[124,835],[127,836],[129,836],[131,836],[133,836],[137,836],[139,836],[141,836],[142,836],[144,836],[145,835]],"dx":-873,"dy":453,"length":1059.0791952512475,"timing":[0,8,16,24,32,40,48,56,64,72,84,92,100,108,116,124,132,140,148,156,164,173,181,190,198,206,215,223,231,240,248,256,265,273,289,298,306,315,323,333,356,393,415,423,431,440,448,456,465,473,481,490,498,506,515,529,548,573]},{"start":[145,835],"end":[308,564],"points":[[149,833],[152,831],[162,826],[173,820],[194,809],[220,796],[247,781],[268,767],[280,759],[288,753],[293,747],[296,742],[297,736],[296,733],[294,731],[290,725],[289,722],[285,717],[281,712],[275,706],[266,698],[254,689],[241,680],[222,670],[210,663],[201,659],[200,658],[200,657],[200,654],[200,651],[201,647],[204,642],[207,638],[212,632],[217,627],[220,623],[226,618],[234,612],[245,604],[256,596],[271,586],[281,579],[290,574],[299,569],[301,568],[304,566],[306,565],[307,565],[308,565],[308,564]],"dx":163,"dy":-271,"length":456.25004553203246,"timing":[0,8,16,25,33,41,50,58,66,75,83,91,100,108,116,125,133,141,150,159,167,175,183,191,200,208,216,227,235,243,251,259,267,279,287,291,300,308,316,325,333,341,350,358,366,375,383,391,403,415]},{"start":[1446,754],"end":[189,277],"points":[[1446,754],[1442,751],[1439,749],[1435,746],[1428,742],[1416,736],[1388,726],[1339,710],[1282,694],[1206,673],[1128,651],[1042,627],[961,605],[878,581],[796,554],[726,531],[652,505],[587,482],[519,458],[467,438],[410,418],[326,384],[292,368],[264,354],[246,344],[230,335],[220,328],[217,326],[215,325],[213,323],[210,322],[207,322],[202,322],[199,323],[196,323],[193,323],[192,323],[190,323],[189,323],[187,322],[187,320],[186,319],[185,317],[185,315],[185,313],[185,309],[185,306],[185,303],[185,299],[185,294],[186,291],[186,288],[187,283],[188,281],[188,279],[189,278],[189,277]],"dx":-1257,"dy":-477,"length":1383.154944856555,"timing":[0,174,182,191,199,207,216,223,232,240,248,257,265,273,282,290,298,307,315,323,332,340,348,357,365,374,382,390,399,407,416,424,432,441,449,457,466,474,483,491,499,508,516,524,532,541,549,557,566,574,582,591,599,607,616,624,654]},{"start":[543,834],"end":[994,520],"points":[[541,835],[541,836],[544,833],[547,830],[557,822],[571,811],[596,793],[623,774],[663,749],[703,726],[740,706],[783,685],[830,661],[862,645],[893,630],[922,614],[940,606],[963,594],[979,584],[989,579],[996,575],[1002,571],[1007,567],[1012,563],[1016,557],[1018,555],[1018,553],[1019,551],[1020,549],[1021,547],[1021,546],[1022,543],[1023,541],[1025,539],[1026,537],[1027,535],[1027,534],[1027,533],[1027,532],[1026,531],[1025,531],[1023,529],[1021,528],[1017,528],[1014,527],[1009,525],[1006,524],[1001,523],[999,522],[997,522],[995,521],[994,520]],"dx":451,"dy":-314,"length":618.6392731966954,"timing":[0,16,218,226,234,242,251,259,267,276,284,292,301,309,317,326,334,342,351,359,367,376,384,392,402,409,417,429,437,445,453,462,469,477,484,492,501,509,525,541,545,553,561,569,577,585,593,601,609,617,626,634]},{"start":[994,520],"end":[389,414],"points":[[993,520],[990,520],[984,521],[974,521],[955,521],[931,521],[904,521],[871,521],[827,520],[783,518],[740,516],[693,512],[646,510],[602,507],[557,501],[521,496],[494,491],[473,486],[460,481],[449,476],[442,469],[437,464],[433,459],[431,456],[429,453],[427,450],[425,448],[422,446],[417,444],[411,440],[405,437],[402,435],[398,432],[396,429],[395,428],[395,427],[394,425],[393,424],[392,421],[392,418],[391,417],[390,415],[390,414],[389,414]],"dx":-605,"dy":-106,"length":638.3189127683405,"timing":[0,7,15,23,31,39,47,55,63,71,79,87,95,103,111,120,128,136,145,153,161,170,178,187,195,203,211,220,228,236,245,253,261,270,278,286,296,303,311,320,328,336,351,359]},{"start":[1630,688],"end":[789,676],"points":[[1627,688],[1621,688],[1617,688],[1602,687],[1582,685],[1548,682],[1499,680],[1441,674],[1378,668],[1304,660],[1232,651],[1166,643],[1108,635],[1061,629],[1014,625],[972,620],[936,617],[908,615],[888,614],[876,614],[868,614],[867,614],[867,615],[866,617],[865,619],[864,621],[863,623],[860,625],[859,626],[858,628],[857,630],[855,633],[852,639],[851,642],[848,646],[845,649],[842,654],[838,658],[833,662],[831,664],[829,666],[826,667],[823,669],[819,670],[814,672],[811,673],[807,674],[802,675],[800,675],[796,675],[793,675],[791,676],[790,676],[789,676]],"dx":-841,"dy":-12,"length":871.5924482450126,"timing":[0,8,15,23,31,39,47,55,63,71,80,88,95,104,112,120,129,137,145,154,162,192,199,207,216,223,231,240,247,255,263,271,279,287,295,304,312,320,329,337,345,354,362,370,379,387,395,404,412,420,429,437,445,455]},{"start":[1441,779],"end":[567,217],"points":[[1440,779],[1439,779],[1438,779],[1437,779],[1434,779],[1429,777],[1421,775],[1409,771],[1388,763],[1358,751],[1316,732],[1268,708],[1207,676],[1149,647],[1080,613],[1013,578],[950,547],[891,515],[838,487],[790,461],[747,437],[710,417],[670,396],[638,377],[617,363],[592,346],[580,337],[571,327],[565,319],[561,312],[558,306],[557,304],[557,302],[557,301],[557,299],[557,297],[557,296],[556,295],[556,294],[555,292],[555,290],[555,288],[555,283],[555,275],[555,273],[557,266],[559,261],[561,254],[562,248],[563,241],[564,236],[564,231],[565,228],[565,226],[565,224],[566,222],[566,220],[567,219],[567,218],[567,217]],"dx":-874,"dy":-562,"length":1099.2235868938037,"timing":[0,8,16,190,198,205,214,221,229,237,245,253,261,269,277,285,293,301,309,317,326,334,341,350,358,366,376,383,392,400,408,416,425,433,442,466,475,483,491,500,508,516,525,533,541,549,558,567,575,583,591,600,608,617,625,633,641,650,658,666]},{"start":[1280,436],"end":[1492,766],"points":[[1280,437],[1280,441],[1280,447],[1279,452],[1278,458],[1278,462],[1278,468],[1278,477],[1280,490],[1286,505],[1292,517],[1300,532],[1311,548],[1323,563],[1335,577],[1346,590],[1359,602],[1373,617],[1384,630],[1393,642],[1400,650],[1405,660],[1409,667],[1414,677],[1417,685],[1420,693],[1423,698],[1427,707],[1433,717],[1439,727],[1444,734],[1451,742],[1456,749],[1460,755],[1462,756],[1462,757],[1463,759],[1465,760],[1467,762],[1471,763],[1474,764],[1479,766],[1482,767],[1485,767],[1486,767],[1487,767],[1489,767],[1492,766]],"dx":212,"dy":330,"length":412.9627849785208,"timing":[0,7,15,23,31,39,47,55,63,71,79,87,95,103,111,120,128,136,145,153,161,170,178,186,195,203,211,220,228,236,245,253,261,270,278,367,400,407,415,423,431,439,447,455,463,471,479,503]},{"start":[1113,565],"end":[877,800],"points":[[1113,565],[1112,565],[1111,565],[1110,566],[1109,567],[1108,568],[1107,569],[1106,569],[1106,570],[1105,571],[1104,571],[1103,572],[1102,574],[1098,576],[1095,580],[1091,582],[1084,587],[1074,593],[1058,602],[1033,617],[1001,637],[969,658],[936,680],[909,701],[887,716],[861,737],[839,754],[820,768],[799,785],[793,791],[788,796],[786,798],[786,799],[786,801],[785,801],[785,802],[785,803],[785,804],[785,805],[787,805],[790,805],[793,806],[795,806],[798,806],[803,806],[811,806],[822,806],[831,806],[838,806],[844,806],[851,806],[857,806],[861,806],[865,806],[866,806],[868,806],[869,805],[870,805],[872,804],[873,803],[874,803],[875,801],[876,801],[877,800]],"dx":-236,"dy":235,"length":507.0524108949,"timing":[0,97,129,177,184,192,200,209,217,225,234,242,250,259,267,275,284,292,300,309,317,325,334,342,350,359,367,375,384,392,400,409,418,432,440,448,467,479,487,495,503,511,519,527,535,543,551,560,568,576,584,592,600,608,617,625,634,642,650,659,667,675,684,692]},{"start":[353,679],"end":[584,571],"points":[[353,678],[357,677],[362,676],[367,675],[375,673],[385,670],[397,666],[409,662],[420,659],[437,655],[451,652],[467,647],[483,643],[497,638],[509,633],[523,627],[534,621],[544,617],[555,610],[565,605],[574,601],[581,596],[582,595],[582,594],[583,592],[583,590],[583,589],[583,587],[584,586],[584,581],[584,580],[584,578],[584,576],[584,574],[584,573],[584,572],[584,571]],"dx":231,"dy":-108,"length":269.87751685029366,"timing":[0,161,168,176,184,192,200,208,216,224,232,240,248,256,264,272,280,288,296,304,313,321,329,338,346,360,384,392,413,421,429,438,446,454,463,471,480]},{"start":[584,571],"end":[1205,711],"points":[[584,572],[585,574],[587,576],[589,579],[593,583],[596,587],[599,588],[600,589],[601,590],[601,591],[602,593],[606,595],[612,599],[614,601],[618,603],[626,607],[637,612],[649,616],[663,621],[684,625],[710,630],[747,635],[789,642],[831,648],[868,653],[950,670],[988,677],[1022,683],[1051,690],[1078,696],[1097,702],[1114,707],[1139,715],[1166,723],[1185,728],[1201,730],[1213,733],[1221,734],[1228,734],[1234,735],[1240,736],[1242,736],[1245,736],[1246,736],[1245,733],[1243,732],[1242,730],[1240,729],[1238,727],[1232,724],[1230,722],[1227,721],[1223,719],[1219,716],[1213,714],[1208,713],[1206,712],[1205,711]],"dx":621,"dy":140,"length":741.3784441807844,"timing":[0,7,15,23,31,39,48,56,64,79,98,106,114,123,131,139,148,156,164,173,181,189,198,206,214,223,231,239,248,256,264,273,281,289,298,306,314,323,331,339,348,356,364,373,432,439,448,457,464,473,481,489,498,506,514,522,531,539]},{"start":[607,251],"end":[1216,151],"points":[[609,252],[612,252],[618,253],[622,253],[631,253],[646,253],[668,253],[698,253],[742,252],[799,248],[857,242],[912,237],[960,229],[1010,219],[1050,212],[1085,205],[1119,198],[1138,194],[1150,191],[1160,187],[1167,183],[1169,182],[1171,180],[1174,180],[1175,178],[1179,176],[1184,173],[1187,172],[1193,169],[1197,167],[1202,165],[1204,162],[1205,161],[1206,160],[1206,159],[1207,159],[1207,158],[1209,157],[1211,156],[1212,155],[1214,153],[1215,152],[1216,152],[1216,151]],"dx":609,"dy":-100,"length":626.9498441075043,"timing":[0,7,15,23,31,39,47,55,63,71,79,88,96,104,112,121,129,138,146,154,163,171,179,188,196,204,213,221,229,238,246,254,263,271,279,344,351,359,367,375,383,391,412,488]},{"start":[691,779],"end":[588,142],"points":[[693,779],[694,777],[697,774],[700,766],[702,757],[703,747],[703,735],[701,712],[696,683],[691,652],[682,609],[675,572],[668,532],[661,495],[656,468],[653,440],[648,411],[645,388],[643,370],[638,349],[635,333],[629,311],[624,288],[620,267],[616,246],[613,232],[606,208],[604,199],[602,191],[600,184],[597,177],[595,170],[593,165],[593,164],[593,162],[592,161],[592,160],[592,159],[592,158],[591,156],[591,155],[590,154],[590,151],[589,149],[589,146],[588,144],[588,143],[588,142]],"dx":-103,"dy":-637,"length":652.2556082908363,"timing":[0,7,15,23,31,39,47,55,61,69,78,86,94,103,111,119,128,136,144,153,161,169,178,186,194,203,211,219,228,237,244,253,261,269,278,286,294,303,311,323,331,339,347,355,363,371,379,387]},{"start":[1633,276],"end":[805,672],"points":[[1631,276],[1624,278],[1617,280],[1601,285],[1576,293],[1546,303],[1503,316],[1453,334],[1399,354],[1341,377],[1286,401],[1233,430],[1182,458],[1141,485],[1095,515],[1060,539],[1023,562],[988,580],[962,593],[922,616],[911,623],[909,625],[906,628],[906,629],[905,629],[905,630],[905,631],[903,632],[903,634],[901,636],[900,638],[898,641],[897,642],[894,644],[890,648],[884,652],[880,654],[876,656],[869,659],[861,662],[853,664],[834,668],[826,670],[816,671],[809,672],[807,672],[805,672]],"dx":-828,"dy":396,"length":927.4599060350074,"timing":[0,10,18,26,34,42,51,59,67,76,84,92,101,109,117,126,134,142,151,159,167,176,184,199,207,215,223,242,251,259,267,276,284,292,301,309,317,326,334,342,351,359,367,376,384,392,401]},{"start":[1146,330],"end":[1829,834],"points":[[1146,333],[1145,337],[1144,340],[1142,344],[1141,346],[1141,348],[1141,349],[1140,349],[1140,350],[1140,353],[1140,355],[1141,358],[1142,361],[1150,370],[1164,381],[1186,397],[1223,419],[1266,445],[1314,471],[1399,519],[1434,537],[1463,554],[1487,571],[1517,592],[1545,613],[1573,635],[1596,657],[1622,681],[1640,699],[1657,717],[1668,729],[1675,738],[1682,747],[1686,754],[1689,760],[1692,765],[1693,768],[1696,771],[1698,774],[1701,777],[1701,778],[1701,779],[1702,781],[1707,786],[1709,788],[1713,791],[1722,797],[1730,802],[1739,806],[1747,809],[1757,812],[1768,814],[1779,816],[1788,819],[1799,822],[1810,826],[1819,829],[1824,831],[1826,832],[1828,834],[1829,834]],"dx":683,"dy":504,"length":878.9539891131875,"timing":[0,10,19,26,34,42,51,59,67,76,84,92,101,109,117,126,134,142,150,159,167,176,185,192,201,209,217,226,234,242,251,259,267,276,284,292,301,309,317,326,334,375,385,394,400,409,417,426,434,442,450,459,467,476,484,492,501,509,517,526,534]},{"start":[607,664],"end":[1558,617],"points":[[610,666],[618,669],[630,672],[651,676],[685,681],[735,689],[793,695],[849,701],[904,706],[967,713],[1019,716],[1074,722],[1137,728],[1190,734],[1245,742],[1301,748],[1356,754],[1406,760],[1444,762],[1472,763],[1485,763],[1496,763],[1510,760],[1511,759],[1513,758],[1514,755],[1516,753],[1516,751],[1517,749],[1518,744],[1519,742],[1520,738],[1520,733],[1520,728],[1520,721],[1520,713],[1521,705],[1523,697],[1525,688],[1528,680],[1531,672],[1535,663],[1538,655],[1540,649],[1543,643],[1548,633],[1551,628],[1553,625],[1555,622],[1556,620],[1558,619],[1558,618],[1558,617]],"dx":951,"dy":-47,"length":1061.6174180206226,"timing":[0,8,17,25,33,42,50,58,67,75,83,92,100,108,117,125,133,142,150,158,166,175,183,192,200,208,217,225,233,242,250,258,267,275,283,292,300,308,317,325,333,342,350,358,366,375,383,392,400,408,417,425,433]},{"start":[1031,469],"end":[1509,428],"points":[[1032,470],[1034,472],[1035,472],[1036,473],[1038,474],[1040,474],[1044,475],[1047,476],[1053,477],[1061,477],[1071,477],[1081,477],[1091,477],[1125,474],[1154,469],[1186,464],[1225,459],[1265,452],[1312,444],[1360,437],[1389,432],[1418,427],[1436,423],[1449,420],[1457,418],[1459,417],[1459,416],[1460,416],[1461,416],[1462,415],[1463,414],[1464,414],[1465,414],[1466,414],[1469,415],[1472,416],[1475,416],[1481,418],[1487,420],[1492,421],[1498,424],[1503,426],[1506,427],[1508,428],[1509,428]],"dx":478,"dy":-41,"length":488.41752191327953,"timing":[0,19,27,35,44,52,61,69,77,85,94,102,110,119,127,135,144,152,160,169,177,185,194,202,210,219,227,288,295,303,311,319,327,343,424,431,439,447,455,463,471,479,487,495,520]},{"start":[1509,429],"end":[225,650],"points":[[1509,429],[1506,429],[1501,430],[1499,430],[1496,431],[1489,432],[1484,433],[1478,434],[1474,435],[1468,436],[1462,437],[1457,438],[1449,438],[1439,438],[1423,439],[1397,442],[1369,445],[1327,450],[1277,456],[1217,460],[1141,464],[1051,469],[959,475],[868,486],[789,497],[711,512],[644,527],[585,541],[534,553],[494,564],[462,571],[430,578],[420,581],[419,582],[417,583],[416,583],[415,584],[415,585],[414,585],[414,586],[414,587],[412,587],[411,589],[408,590],[404,592],[401,593],[393,595],[382,598],[370,601],[350,607],[326,613],[299,621],[277,628],[262,634],[250,640],[240,643],[231,647],[229,648],[226,650],[225,650]],"dx":-1284,"dy":221,"length":1313.1591626369154,"timing":[0,86,93,101,109,117,125,134,142,151,159,167,176,184,192,201,209,218,226,234,243,251,259,267,276,284,292,301,309,317,326,334,342,351,359,367,376,401,409,422,430,438,446,454,462,470,478,486,494,502,510,518,526,534,542,551,559,567,576,584]},{"start":[546,621],"end":[1464,257],"points":[[548,621],[549,620],[550,620],[555,618],[559,617],[565,617],[572,616],[589,612],[611,606],[651,597],[697,586],[751,572],[818,555],[885,538],[958,519],[1033,497],[1103,478],[1165,459],[1223,441],[1266,428],[1299,416],[1321,408],[1339,401],[1350,397],[1357,394],[1363,391],[1369,387],[1373,384],[1375,382],[1377,380],[1382,374],[1387,369],[1393,362],[1398,359],[1403,356],[1410,352],[1418,346],[1425,342],[1433,337],[1441,333],[1443,330],[1444,328],[1444,325],[1445,323],[1445,320],[1446,318],[1446,316],[1447,313],[1447,310],[1448,307],[1448,305],[1449,303],[1449,300],[1450,297],[1450,294],[1450,291],[1451,286],[1452,280],[1454,277],[1456,273],[1458,269],[1460,265],[1461,262],[1462,261],[1462,260],[1463,258],[1464,258],[1464,257]],"dx":918,"dy":-364,"length":1028.263499949096,"timing":[0,15,40,72,79,87,95,103,111,119,127,135,143,151,159,167,175,183,191,199,208,216,224,233,241,249,258,266,274,283,291,299,308,316,324,333,341,349,358,366,374,383,391,399,408,416,424,433,441,449,458,466,474,483,491,499,508,516,524,533,541,549,558,566,574,583,599,609]},{"start":[956,247],"end":[1077,850],"points":[[955,247],[954,249],[952,262],[953,289],[960,331],[975,383],[1001,461],[1030,536],[1051,594],[1085,685],[1099,730],[1105,765],[1109,790],[1113,809],[1115,821],[1115,829],[1115,837],[1112,841],[1110,843],[1108,843],[1106,844],[1102,844],[1099,846],[1094,847],[1089,848],[1085,848],[1083,848],[1081,848],[1079,849],[1078,850],[1077,850]],"dx":121,"dy":603,"length":658.623072807203,"timing":[0,8,24,41,57,74,91,108,125,141,158,174,191,207,225,242,258,274,291,307,324,341,357,374,391,407,424,441,458,474,670]},{"start":[1395,599],"end":[1259,241],"points":[[1394,599],[1392,598],[1384,595],[1374,591],[1361,582],[1351,566],[1344,535],[1340,497],[1338,449],[1332,399],[1322,365],[1312,344],[1307,330],[1304,318],[1301,306],[1296,295],[1290,286],[1284,278],[1280,273],[1276,269],[1272,267],[1271,267],[1269,266],[1267,266],[1265,264],[1263,260],[1261,254],[1260,251],[1259,248],[1259,247],[1259,246],[1259,245],[1259,244],[1259,243],[1259,242],[1259,241]],"dx":-136,"dy":-358,"length":404.542312694602,"timing":[0,7,24,41,57,74,91,107,124,141,157,174,191,207,224,241,257,274,291,308,325,341,358,374,391,408,424,441,457,474,520,532,541,558,575,591]},{"start":[1192,362],"end":[1249,782],"points":[[1190,362],[1186,363],[1180,365],[1174,368],[1168,372],[1160,378],[1148,385],[1133,394],[1125,406],[1118,438],[1126,469],[1142,492],[1166,518],[1194,554],[1221,601],[1239,650],[1252,695],[1260,723],[1269,751],[1276,769],[1281,792],[1283,804],[1283,806],[1282,806],[1281,806],[1278,806],[1276,806],[1274,805],[1270,800],[1265,794],[1259,788],[1251,783],[1249,782]],"dx":57,"dy":420,"length":566.3522916131344,"timing":[0,17,33,50,66,82,99,117,133,149,166,182,199,216,232,249,266,282,299,317,332,349,366,426,432,449,466,483,499,516,532,549,566]},{"start":[1633,456],"end":[1059,588],"points":[[1632,456],[1631,456],[1628,457],[1624,457],[1618,457],[1605,456],[1589,455],[1566,454],[1534,452],[1493,447],[1443,441],[1401,439],[1341,445],[1284,467],[1253,489],[1238,513],[1228,549],[1218,584],[1204,615],[1195,630],[1189,635],[1185,636],[1183,637],[1181,637],[1178,636],[1169,632],[1157,626],[1141,619],[1123,611],[1111,605],[1106,601],[1099,599],[1093,595],[1086,592],[1070,589],[1063,589],[1061,588],[1060,588],[1059,588]],"dx":-574,"dy":132,"length":694.2102912191766,"timing":[0,12,29,45,62,79,95,112,129,145,162,180,196,212,229,245,262,279,295,312,329,345,362,379,396,413,429,445,462,479,496,512,531,546,562,579,595,612,629]},{"start":[400,698],"end":[1534,329],"points":[[401,698],[414,690],[447,666],[495,636],[561,602],[663,561],[787,521],[921,478],[1061,432],[1166,403],[1235,389],[1281,384],[1321,383],[1348,383],[1394,387],[1418,390],[1439,391],[1457,391],[1471,390],[1478,388],[1480,386],[1480,385],[1480,382],[1480,376],[1479,368],[1477,361],[1475,356],[1474,353],[1472,351],[1472,349],[1475,346],[1483,341],[1493,337],[1503,335],[1512,332],[1520,331],[1528,329],[1532,329],[1534,329]],"dx":1134,"dy":-369,"length":1246.54045818813,"timing":[0,16,33,50,66,83,100,116,133,150,167,183,200,217,233,250,266,283,300,316,333,350,367,384,400,416,434,451,467,484,500,516,533,550,566,583,600,616,633]},{"start":[1025,229],"end":[455,132],"points":[[1025,229],[1024,229],[1024,230],[1023,231],[1023,233],[1022,235],[1021,238],[1019,242],[1016,249],[1013,255],[1009,261],[1004,269],[998,277],[993,285],[986,295],[980,307],[972,321],[962,336],[953,346],[943,353],[930,359],[922,361],[903,364],[881,364],[843,361],[783,350],[707,331],[644,312],[590,295],[548,275],[514,251],[481,225],[454,202],[436,183],[423,166],[414,155],[406,148],[402,145],[401,143],[400,142],[400,139],[401,139],[407,138],[420,138],[434,138],[443,138],[449,138],[452,138],[453,138],[453,137],[454,136],[455,133],[455,132]],"dx":-570,"dy":-97,"length":824.1373743118285,"timing":[0,67,83,100,117,134,150,167,183,199,216,233,249,266,283,299,316,333,349,366,383,400,416,434,450,466,483,499,516,533,549,566,583,600,616,633,649,666,683,699,716,752,767,783,799,816,834,850,867,888,900,917,933]},{"start":[455,132],"end":[1262,256],"points":[[454,132],[453,131],[452,131],[450,130],[448,130],[446,129],[443,127],[440,127],[454,132],[490,147],[548,167],[626,189],[725,209],[839,232],[918,248],[1043,275],[1095,286],[1123,290],[1138,293],[1151,295],[1162,297],[1177,299],[1186,299],[1192,299],[1196,297],[1196,295],[1197,292],[1198,288],[1205,280],[1213,273],[1217,267],[1218,264],[1219,263],[1221,261],[1228,259],[1236,257],[1243,256],[1248,256],[1252,256],[1257,256],[1260,256],[1262,256]],"dx":807,"dy":124,"length":879.9656887712651,"timing":[0,91,105,122,138,154,171,188,238,254,271,288,304,321,339,354,371,389,405,421,439,455,472,488,505,522,538,555,571,588,605,621,638,654,671,688,704,721,738,754,771,788]},{"start":[1262,256],"end":[193,830],"points":[[1261,256],[1261,258],[1259,261],[1259,266],[1258,273],[1255,283],[1250,293],[1241,307],[1227,319],[1197,334],[1156,353],[1099,375],[1023,403],[927,437],[815,481],[696,537],[595,586],[504,630],[431,667],[377,698],[335,725],[301,746],[254,773],[227,788],[201,800],[182,809],[171,814],[167,816],[165,819],[165,820],[165,822],[165,823],[167,825],[169,826],[169,827],[171,827],[174,828],[182,829],[189,829],[191,830],[193,830]],"dx":-1069,"dy":574,"length":1285.6678328178798,"timing":[0,16,33,50,66,83,100,116,133,150,166,183,200,216,233,250,266,283,301,316,333,351,366,383,400,416,433,450,467,483,501,517,534,551,567,584,601,617,634,650,667]},{"start":[1079,231],"end":[103,751],"points":[[1078,231],[1077,232],[1077,235],[1073,242],[1054,257],[1013,277],[961,299],[896,330],[828,376],[746,435],[642,510],[533,589],[441,645],[349,695],[283,730],[244,746],[221,751],[198,751],[183,749],[172,747],[164,746],[158,744],[154,743],[150,742],[144,742],[138,742],[133,743],[132,743],[131,743],[126,745],[120,746],[116,747],[113,748],[112,749],[109,750],[106,750],[103,750],[103,751]],"dx":-976,"dy":520,"length":1130.9210172265575,"timing":[0,8,26,42,58,75,92,108,125,141,158,175,191,208,225,242,258,276,291,308,325,341,358,375,392,408,425,442,474,491,508,525,541,558,575,592,609,626]},{"start":[103,751],"end":[373,794],"points":[[104,751],[105,751],[108,749],[111,747],[125,740],[144,730],[179,714],[230,693],[289,670],[351,650],[414,634],[463,631],[490,639],[504,656],[506,679],[502,696],[494,709],[479,722],[462,735],[424,760],[406,772],[396,777],[392,779],[390,779],[386,781],[382,783],[379,785],[378,785],[378,786],[378,787],[375,790],[372,793],[372,794],[373,794]],"dx":270,"dy":43,"length":639.5907504433951,"timing":[0,17,34,51,67,83,100,117,133,150,167,184,201,217,234,250,267,283,301,317,333,350,368,384,401,418,434,454,467,484,501,518,546,580]},{"start":[373,794],"end":[586,393],"points":[[374,794],[375,794],[378,793],[384,790],[395,785],[417,773],[452,748],[485,717],[504,688],[515,661],[526,627],[534,586],[538,545],[536,510],[527,474],[520,449],[517,433],[517,420],[517,413],[516,411],[515,410],[514,410],[514,409],[514,407],[517,405],[525,401],[532,399],[543,398],[557,398],[571,397],[579,395],[584,394],[586,393]],"dx":213,"dy":-401,"length":535.377553358125,"timing":[0,43,59,75,92,109,125,141,158,175,191,208,226,242,258,275,291,308,326,342,359,376,392,409,425,441,458,475,491,508,525,542,558]},{"start":[1266,479],"end":[1488,837],"points":[[1265,479],[1265,480],[1262,480],[1259,482],[1258,482],[1255,482],[1249,482],[1237,482],[1222,482],[1206,485],[1197,496],[1200,514],[1215,538],[1236,563],[1270,598],[1319,653],[1373,718],[1417,770],[1449,801],[1468,813],[1476,820],[1480,823],[1482,825],[1483,826],[1484,828],[1485,830],[1486,832],[1487,833],[1488,834],[1488,835],[1488,836],[1488,837]],"dx":222,"dy":358,"length":528.8107523828766,"timing":[0,8,25,41,58,75,91,107,124,140,157,174,190,207,224,240,257,274,290,307,324,341,358,408,425,441,458,475,491,521,528,541]},{"start":[124,173],"end":[647,620],"points":[[125,173],[130,178],[139,184],[153,194],[173,205],[201,218],[236,234],[277,252],[329,274],[379,302],[415,331],[432,350],[460,395],[475,433],[488,475],[501,515],[511,548],[515,575],[520,593],[527,607],[538,619],[548,627],[556,634],[559,636],[560,636],[561,636],[565,636],[570,633],[576,630],[587,624],[602,617],[611,613],[615,612],[619,611],[625,611],[635,613],[642,615],[646,616],[646,617],[646,618],[647,618],[647,620]],"dx":523,"dy":447,"length":775.1693646953628,"timing":[0,15,32,48,65,82,98,115,132,148,165,183,199,215,232,248,265,282,298,315,332,348,365,382,399,416,432,449,465,482,498,515,532,548,565,582,598,615,632,692,700,715]},{"start":[125,480],"end":[310,748],"points":[[125,480],[126,480],[127,480],[129,480],[134,480],[143,480],[156,482],[179,487],[199,493],[217,499],[244,508],[279,519],[325,531],[368,545],[387,557],[387,568],[371,583],[345,604],[324,628],[307,649],[292,673],[281,694],[273,708],[268,715],[268,722],[270,733],[276,745],[282,755],[286,759],[288,761],[293,762],[295,762],[296,762],[297,761],[300,758],[304,753],[308,750],[309,749],[310,748]],"dx":185,"dy":268,"length":556.6550333022985,"timing":[0,52,67,83,100,117,133,150,166,183,200,216,233,250,266,283,300,316,333,350,366,383,400,416,433,450,466,484,500,516,533,550,566,583,600,618,634,650,667]},{"start":[1353,697],"end":[1448,218],"points":[[1352,697],[1350,697],[1345,696],[1329,692],[1303,686],[1266,675],[1215,656],[1164,631],[1131,602],[1120,565],[1127,523],[1147,484],[1183,451],[1233,420],[1282,388],[1331,350],[1361,322],[1376,304],[1390,291],[1397,284],[1399,283],[1400,281],[1402,280],[1403,279],[1406,278],[1410,276],[1415,272],[1418,267],[1421,261],[1425,255],[1431,246],[1438,236],[1441,229],[1445,223],[1448,219],[1448,218]],"dx":95,"dy":-479,"length":776.4686446497237,"timing":[0,10,27,44,60,76,93,109,126,143,159,176,193,209,226,243,259,276,293,309,326,343,359,376,393,410,426,443,459,476,493,509,527,543,560,577]},{"start":[1254,494],"end":[780,228],"points":[[1253,494],[1252,494],[1250,494],[1249,495],[1246,495],[1242,495],[1237,493],[1230,492],[1215,489],[1194,483],[1157,466],[1108,442],[1062,414],[1031,390],[1002,365],[973,345],[937,327],[899,318],[857,310],[819,302],[798,294],[787,287],[780,282],[777,280],[777,278],[777,277],[778,273],[778,268],[778,261],[780,253],[782,246],[783,241],[783,236],[782,231],[781,228],[780,228]],"dx":-474,"dy":-266,"length":585.4775151466855,"timing":[0,14,30,47,64,80,97,114,131,147,164,180,197,214,230,247,264,280,297,314,330,347,364,380,430,447,464,481,497,514,530,547,564,581,598,614]},{"start":[1603,229],"end":[1460,771],"points":[[1602,229],[1601,229],[1594,230],[1584,234],[1569,240],[1556,245],[1539,251],[1523,256],[1502,263],[1471,274],[1422,295],[1374,331],[1344,372],[1338,408],[1355,442],[1383,474],[1420,511],[1453,550],[1484,593],[1503,632],[1518,661],[1527,680],[1528,690],[1526,698],[1523,704],[1523,710],[1522,710],[1521,711],[1514,713],[1506,716],[1498,719],[1492,723],[1488,725],[1484,727],[1478,733],[1472,742],[1468,752],[1465,761],[1464,765],[1462,768],[1461,770],[1460,771]],"dx":-143,"dy":542,"length":798.249073995086,"timing":[0,8,25,42,59,75,92,108,125,142,158,175,194,209,225,242,258,275,292,308,325,342,358,375,392,408,425,442,458,475,492,508,525,542,558,575,592,609,625,642,658,675]},{"start":[1192,741],"end":[798,536],"points":[[1192,740],[1192,736],[1192,729],[1188,721],[1180,710],[1175,701],[1176,694],[1188,686],[1198,679],[1198,678],[1191,675],[1169,671],[1132,666],[1063,653],[973,638],[874,621],[805,609],[772,601],[761,595],[758,593],[758,592],[758,589],[759,586],[760,582],[764,578],[768,574],[778,567],[789,559],[794,554],[797,545],[798,540],[798,536]],"dx":-394,"dy":-205,"length":601.9494645357311,"timing":[0,11,28,45,62,78,95,112,128,145,162,178,197,212,228,245,261,278,295,312,328,345,362,379,395,412,428,445,462,479,495,512]},{"start":[734,756],"end":[1559,413],"points":[[735,756],[736,754],[741,751],[749,745],[762,736],[775,726],[788,718],[799,711],[811,705],[838,696],[881,684],[948,668],[1011,650],[1076,629],[1174,586],[1282,536],[1358,498],[1418,471],[1456,462],[1478,458],[1502,454],[1517,451],[1525,450],[1529,448],[1531,448],[1532,447],[1532,446],[1535,442],[1537,438],[1540,435],[1540,434],[1541,434],[1543,431],[1547,427],[1549,423],[1553,420],[1555,417],[1558,414],[1559,413]],"dx":825,"dy":-343,"length":906.3127619865413,"timing":[0,12,29,46,62,78,95,112,128,145,162,178,195,212,228,245,262,279,295,312,328,345,362,379,395,412,428,445,462,478,495,545,562,578,596,612,628,645,662]},{"start":[1559,413],"end":[658,590],"points":[[1558,413],[1557,413],[1551,413],[1541,415],[1523,417],[1499,419],[1466,420],[1426,422],[1385,422],[1322,418],[1241,417],[1151,426],[1067,455],[1003,489],[967,512],[934,535],[899,559],[871,575],[827,596],[808,604],[790,609],[769,615],[751,618],[740,621],[738,621],[737,621],[735,620],[725,618],[706,617],[686,618],[675,618],[674,616],[674,611],[675,606],[674,602],[670,599],[665,596],[662,594],[660,592],[659,591],[658,590]],"dx":-901,"dy":177,"length":968.585253490448,"timing":[0,6,23,40,56,73,90,106,123,140,156,173,190,207,223,240,257,274,290,306,323,339,356,373,390,410,423,439,456,473,490,506,523,539,556,573,590,607,623,641,656]},{"start":[222,197],"end":[530,273],"points":[[222,197],[223,197],[224,197],[224,198],[224,199],[225,200],[227,204],[228,208],[232,214],[237,223],[244,233],[256,243],[269,248],[285,250],[309,251],[340,249],[376,249],[417,251],[451,254],[472,256],[484,258],[490,259],[492,261],[493,261],[494,261],[494,262],[495,262],[497,263],[499,263],[501,263],[504,264],[508,266],[513,268],[516,270],[519,271],[520,272],[521,272],[523,272],[525,273],[527,273],[528,273],[529,273],[530,273]],"dx":308,"dy":76,"length":339.50776254515733,"timing":[0,56,99,121,133,149,166,183,200,216,233,250,266,283,299,316,333,349,366,383,400,416,433,450,474,487,500,517,534,550,567,583,599,616,633,649,666,683,700,716,733,783,800]},{"start":[532,273],"end":[1083,623],"points":[[532,273],[532,274],[533,275],[534,276],[536,277],[538,279],[541,282],[551,289],[562,295],[574,302],[597,313],[633,329],[694,352],[760,379],[811,405],[853,439],[888,480],[912,516],[933,540],[949,553],[971,564],[995,576],[1013,581],[1026,583],[1037,585],[1043,585],[1047,585],[1049,584],[1050,584],[1053,587],[1056,590],[1058,593],[1061,598],[1066,604],[1071,608],[1075,612],[1078,615],[1080,616],[1081,618],[1082,620],[1083,622],[1083,623]],"dx":551,"dy":350,"length":673.7776703883737,"timing":[0,19,33,50,67,84,100,117,133,150,167,183,200,216,233,250,266,283,300,316,333,350,366,383,400,416,433,450,533,550,566,583,600,616,633,650,666,684,700,717,734,751]},{"start":[678,778],"end":[970,553],"points":[[678,777],[678,775],[680,773],[681,772],[682,772],[683,772],[685,771],[687,770],[692,767],[699,763],[713,755],[737,742],[774,722],[819,699],[871,667],[922,630],[959,598],[981,571],[998,547],[1012,527],[1021,515],[1026,507],[1029,502],[1029,500],[1029,499],[1028,499],[1025,499],[1022,501],[1012,507],[1007,514],[1002,522],[993,533],[982,544],[974,551],[970,553]],"dx":292,"dy":-225,"length":539.6995109601547,"timing":[0,17,33,50,75,117,134,151,168,183,200,217,234,250,267,283,300,317,334,350,367,384,400,417,434,537,551,567,583,600,619,634,650,667,684]},{"start":[1749,581],"end":[387,537],"points":[[1748,581],[1744,580],[1734,577],[1716,570],[1686,560],[1648,550],[1611,539],[1581,531],[1557,525],[1541,523],[1516,521],[1462,514],[1355,498],[1202,488],[1061,494],[917,514],[812,535],[709,556],[638,572],[588,580],[545,586],[519,590],[480,596],[466,596],[464,596],[464,595],[464,593],[465,587],[465,582],[461,578],[454,574],[446,569],[441,563],[438,556],[431,550],[422,544],[408,539],[400,539],[396,539],[395,539],[393,538],[390,538],[387,537]],"dx":-1362,"dy":-44,"length":1412.6214663090109,"timing":[0,17,33,50,67,84,100,117,134,150,167,184,200,217,234,251,267,284,300,317,334,351,367,384,400,426,433,450,467,484,500,517,534,550,567,584,600,617,634,651,701,718,734]},{"start":[283,171],"end":[270,737],"points":[[283,171],[282,171],[281,171],[279,173],[276,181],[274,198],[274,223],[278,247],[278,248],[278,250],[273,273],[261,313],[254,362],[256,420],[249,481],[241,532],[236,585],[230,627],[225,655],[223,678],[222,694],[222,703],[222,707],[222,708],[222,709],[223,709],[224,711],[230,716],[236,722],[243,725],[247,728],[253,732],[259,734],[264,735],[268,737],[269,737],[270,737]],"dx":-13,"dy":566,"length":604.1519218843955,"timing":[0,67,83,100,116,133,150,168,330,334,350,366,383,400,416,434,450,466,483,500,516,533,549,566,583,600,617,634,650,666,683,700,716,733,750,766,874]},{"start":[156,270],"end":[204,806],"points":[[161,271],[164,272],[169,273],[173,274],[181,277],[188,279],[217,285],[256,291],[291,299],[317,311],[337,331],[350,367],[353,414],[348,469],[338,529],[319,603],[302,659],[276,726],[266,759],[264,776],[263,784],[261,791],[259,799],[258,803],[257,803],[253,804],[245,804],[236,806],[230,807],[229,807],[225,804],[221,803],[212,803],[207,804],[204,805],[204,806]],"dx":48,"dy":536,"length":734.4418149813923,"timing":[0,17,32,49,66,83,99,115,132,149,165,182,199,215,232,251,266,282,299,315,332,349,365,382,399,416,432,449,465,482,532,550,566,583,599,616]},{"start":[1275,310],"end":[579,694],"points":[[1274,310],[1273,311],[1264,318],[1249,327],[1221,341],[1191,354],[1131,380],[1077,409],[997,451],[903,501],[816,551],[759,582],[723,601],[698,616],[682,631],[668,647],[656,656],[649,661],[644,664],[638,668],[632,675],[626,682],[622,687],[622,688],[621,688],[617,688],[609,688],[603,688],[602,688],[600,689],[599,689],[596,690],[592,691],[587,693],[584,694],[582,694],[579,694]],"dx":-696,"dy":384,"length":802.657786907756,"timing":[0,4,18,35,53,69,85,102,118,135,152,168,185,202,218,235,253,269,285,302,318,335,352,368,421,436,453,468,485,535,552,568,585,602,618,669,686]},{"start":[579,694],"end":[847,753],"points":[[580,694],[582,693],[587,689],[593,687],[602,683],[619,680],[647,676],[679,676],[695,684],[705,694],[718,712],[733,729],[755,745],[773,751],[781,754],[785,756],[788,759],[789,759],[791,760],[794,760],[797,760],[799,760],[804,760],[810,758],[813,758],[815,758],[817,757],[820,756],[826,755],[835,754],[842,753],[845,753],[846,753],[847,753]],"dx":268,"dy":59,"length":302.8689757202959,"timing":[0,11,28,44,60,77,94,111,127,144,160,179,194,211,228,245,261,278,294,311,328,344,361,377,394,410,427,444,460,477,494,510,540,577]},{"start":[1409,683],"end":[446,775],"points":[[1408,683],[1406,683],[1402,683],[1396,683],[1389,682],[1376,682],[1365,682],[1353,682],[1343,682],[1335,682],[1327,683],[1313,686],[1289,691],[1240,701],[1157,715],[1066,728],[961,744],[840,764],[730,785],[634,803],[573,812],[543,814],[525,815],[520,815],[517,815],[516,815],[512,815],[507,814],[501,811],[494,807],[493,804],[493,801],[494,795],[494,790],[488,786],[478,782],[469,781],[459,781],[446,780],[437,779],[433,778],[433,777],[434,777],[434,776],[437,775],[440,775],[441,775],[443,775],[445,775],[446,775]],"dx":-963,"dy":92,"length":1022.8713283448677,"timing":[0,12,29,46,63,79,96,112,129,146,163,179,196,212,229,246,262,279,296,313,329,346,362,380,396,412,429,446,462,480,496,512,529,546,563,579,596,612,629,646,662,791,805,813,830,847,863,880,896,913]},{"start":[702,370],"end":[1085,756],"points":[[701,370],[701,369],[701,370],[701,375],[704,383],[710,393],[722,404],[741,417],[763,434],[785,456],[812,488],[841,524],[871,562],[887,583],[899,606],[910,639],[921,673],[935,699],[947,714],[958,724],[969,737],[976,746],[983,753],[990,756],[996,758],[1005,761],[1018,763],[1028,763],[1030,762],[1031,762],[1032,760],[1037,758],[1046,757],[1055,757],[1060,757],[1063,757],[1064,756],[1065,756],[1068,756],[1075,756],[1082,756],[1085,756]],"dx":383,"dy":386,"length":592.6393694027637,"timing":[0,14,81,97,114,130,147,164,180,197,214,231,248,264,281,297,314,331,347,364,381,397,414,430,447,464,481,497,514,534,547,564,581,597,615,631,648,665,681,698,714,730]},{"start":[604,568],"end":[1861,701],"points":[[605,568],[606,568],[609,568],[627,565],[653,565],[699,563],[762,563],[837,565],[947,569],[1077,570],[1225,564],[1369,554],[1498,548],[1615,547],[1709,552],[1760,557],[1794,560],[1808,561],[1812,561],[1812,562],[1813,562],[1813,563],[1814,563],[1817,564],[1818,566],[1818,570],[1818,574],[1818,579],[1817,591],[1818,607],[1825,628],[1832,647],[1839,664],[1843,676],[1849,686],[1854,695],[1858,700],[1861,702],[1862,703],[1863,703],[1863,702],[1862,702],[1862,701],[1861,701]],"dx":1257,"dy":133,"length":1370.8220977625717,"timing":[0,59,72,88,104,121,138,155,171,188,205,221,238,255,272,288,304,321,338,365,372,388,404,421,439,455,472,488,505,521,538,555,571,588,604,621,638,655,671,688,819,822,840,855]},{"start":[1861,700],"end":[1710,519],"points":[[1860,700],[1858,700],[1853,699],[1850,697],[1840,693],[1828,686],[1811,674],[1790,656],[1773,639],[1750,613],[1727,587],[1706,563],[1687,541],[1681,532],[1678,527],[1678,526],[1678,525],[1678,524],[1679,524],[1682,524],[1684,523],[1689,522],[1695,521],[1701,520],[1705,520],[1706,519],[1709,518],[1710,518],[1712,518],[1713,518],[1712,518],[1711,518],[1710,519]],"dx":-151,"dy":-181,"length":297.4007244060629,"timing":[0,13,30,46,62,79,97,113,129,146,163,179,196,212,229,246,339,448,462,479,496,512,529,546,562,580,596,613,630,646,807,816,859]},{"start":[1708,519],"end":[1781,234],"points":[[1708,519],[1709,519],[1710,519],[1709,519],[1708,519],[1706,521],[1702,523],[1697,526],[1694,527],[1693,527],[1690,527],[1687,524],[1687,516],[1687,502],[1690,468],[1692,421],[1692,371],[1692,334],[1692,308],[1694,288],[1697,272],[1699,267],[1700,265],[1700,264],[1700,263],[1701,263],[1702,263],[1705,263],[1712,262],[1721,260],[1733,256],[1743,252],[1752,248],[1762,243],[1770,240],[1776,237],[1779,234],[1781,234]],"dx":73,"dy":-285,"length":377.94496680029505,"timing":[0,50,67,198,200,217,233,249,266,283,299,316,333,349,366,383,399,416,433,449,466,483,499,516,547,556,618,633,649,666,683,700,716,733,749,766,783,799]},{"start":[882,771],"end":[1342,221],"points":[[876,764],[871,755],[868,747],[868,742],[868,740],[868,739],[868,737],[868,736],[867,736],[867,735],[866,734],[866,733],[866,731],[866,725],[870,712],[877,690],[888,659],[902,622],[923,578],[960,521],[1026,442],[1100,370],[1154,325],[1189,300],[1210,281],[1222,268],[1230,256],[1239,244],[1247,235],[1253,230],[1258,226],[1264,223],[1271,219],[1277,217],[1281,215],[1289,214],[1297,213],[1306,213],[1316,213],[1325,215],[1332,217],[1334,218],[1335,218],[1335,219],[1337,220],[1339,221],[1340,221],[1341,221],[1342,221]],"dx":460,"dy":-550,"length":778.1873063784661,"timing":[0,17,33,50,67,83,100,117,134,151,167,184,200,217,234,250,267,283,301,317,333,350,367,383,400,417,434,451,467,483,500,517,534,551,567,583,600,617,633,650,667,683,706,718,734,751,767,784,801]},{"start":[1605,492],"end":[1259,160],"points":[[1605,492],[1605,493],[1603,494],[1602,496],[1598,498],[1592,502],[1584,506],[1575,508],[1569,508],[1561,504],[1550,493],[1528,475],[1496,448],[1451,415],[1399,372],[1356,340],[1316,311],[1286,291],[1272,281],[1266,275],[1263,273],[1261,270],[1257,268],[1253,265],[1250,262],[1248,257],[1245,250],[1243,243],[1242,236],[1242,230],[1242,224],[1244,214],[1245,206],[1245,200],[1245,193],[1245,189],[1245,187],[1245,185],[1245,184],[1245,182],[1245,180],[1245,177],[1247,174],[1248,171],[1248,170],[1249,168],[1251,167],[1252,165],[1253,164],[1255,163],[1256,162],[1257,162],[1258,161],[1259,161],[1259,160]],"dx":-346,"dy":-332,"length":555.6384711264692,"timing":[0,118,133,150,166,183,200,216,233,250,266,283,300,316,333,350,366,383,400,417,434,450,467,484,500,516,534,551,566,583,600,616,633,650,666,683,700,716,736,784,801,817,833,850,866,883,900,917,934,950,967,984,1000,1017,1034]},{"start":[1246,556],"end":[189,523],"points":[[1245,556],[1241,556],[1223,556],[1175,556],[1090,557],[966,560],[889,564],[727,570],[613,579],[500,590],[386,604],[296,614],[236,620],[202,624],[184,628],[170,634],[152,641],[144,641],[142,639],[140,638],[139,635],[136,632],[132,628],[130,624],[130,622],[130,620],[130,616],[132,609],[135,601],[138,591],[142,582],[149,572],[155,563],[162,553],[167,544],[168,538],[171,532],[171,530],[172,530],[172,529],[173,529],[176,526],[179,525],[182,524],[185,524],[186,524],[187,524],[188,523],[189,523]],"dx":-1057,"dy":-33,"length":1255.0832320935322,"timing":[0,11,27,44,60,77,95,111,127,144,160,177,194,210,228,245,261,277,294,310,327,344,360,377,394,410,427,444,460,477,494,510,528,544,561,577,594,610,627,734,744,761,778,794,811,828,848,861,878]},{"start":[1316,425],"end":[1644,403],"points":[[1316,423],[1311,411],[1306,402],[1304,397],[1304,395],[1304,394],[1304,395],[1304,396],[1305,399],[1308,402],[1315,404],[1328,405],[1350,404],[1387,399],[1425,394],[1468,388],[1508,386],[1543,386],[1572,388],[1598,392],[1614,395],[1625,398],[1632,401],[1637,402],[1643,404],[1646,404],[1647,404],[1648,404],[1647,404],[1645,403],[1644,403]],"dx":328,"dy":-22,"length":388.8881115683025,"timing":[0,17,33,50,67,87,191,201,218,234,250,267,284,301,317,334,350,367,383,400,417,433,450,467,484,501,517,601,634,651,667]},{"start":[1500,600],"end":[882,221],"points":[[1499,600],[1498,600],[1497,600],[1491,600],[1476,601],[1453,604],[1416,608],[1380,608],[1340,600],[1296,582],[1244,554],[1201,525],[1149,484],[1121,458],[1101,434],[1092,415],[1091,405],[1094,396],[1098,388],[1099,383],[1100,376],[1100,370],[1100,364],[1098,356],[1088,346],[1074,336],[1057,326],[1028,310],[992,295],[952,278],[922,268],[902,262],[886,256],[878,252],[875,249],[874,247],[874,244],[874,240],[874,236],[874,231],[874,227],[874,225],[874,224],[874,223],[875,223],[877,223],[878,222],[879,221],[881,221],[882,221]],"dx":-618,"dy":-379,"length":820.7874716304,"timing":[0,112,117,133,150,166,183,200,217,233,250,268,284,300,316,333,350,366,383,400,417,433,450,466,483,500,517,533,550,567,584,600,616,633,650,667,683,700,716,733,750,767,784,801,833,850,866,883,900,916]},{"start":[1071,359],"end":[836,768],"points":[[1071,361],[1070,366],[1066,373],[1060,383],[1050,397],[1035,413],[1013,438],[980,471],[935,512],[877,564],[825,612],[775,660],[733,705],[712,733],[686,772],[673,792],[667,801],[666,803],[667,803],[668,803],[673,801],[686,796],[703,789],[722,783],[735,780],[751,776],[763,774],[771,774],[777,774],[783,774],[791,772],[798,771],[804,770],[809,770],[813,770],[817,770],[820,770],[822,770],[825,770],[826,770],[828,769],[830,769],[832,768],[834,768],[835,768],[836,768]],"dx":-235,"dy":409,"length":778.6110944787624,"timing":[0,19,35,51,67,84,101,118,134,151,168,184,201,218,234,251,268,284,365,368,384,401,418,434,452,468,484,501,518,534,551,568,584,602,618,634,651,668,685,702,718,735,752,768,785,804]},{"start":[868,666],"end":[1512,738],"points":[[868,665],[868,664],[871,662],[881,656],[899,650],[919,645],[948,642],[969,640],[1049,641],[1114,646],[1179,654],[1234,664],[1286,680],[1334,696],[1373,714],[1411,738],[1444,758],[1469,770],[1490,780],[1502,786],[1511,788],[1519,788],[1524,787],[1528,786],[1531,785],[1536,783],[1539,781],[1541,779],[1542,777],[1542,776],[1542,773],[1539,768],[1533,761],[1527,756],[1521,751],[1518,748],[1516,745],[1515,744],[1514,743],[1513,741],[1512,741],[1512,740],[1512,739],[1512,738]],"dx":644,"dy":72,"length":763.8341279850888,"timing":[0,16,216,231,248,265,282,299,315,331,348,365,381,398,415,431,448,465,481,498,516,532,548,565,581,598,615,631,648,665,681,698,715,731,748,765,782,798,815,832,849,899,915,1098]},{"start":[269,543],"end":[1584,757],"points":[[270,543],[275,543],[287,545],[313,546],[357,545],[436,540],[547,541],[654,552],[765,566],[874,580],[1035,601],[1156,620],[1273,639],[1374,657],[1457,666],[1539,672],[1599,679],[1640,684],[1660,687],[1668,688],[1672,688],[1676,689],[1681,690],[1685,692],[1687,693],[1688,693],[1689,696],[1688,701],[1682,709],[1670,720],[1648,734],[1626,743],[1603,751],[1594,754],[1590,755],[1588,756],[1586,757],[1584,757]],"dx":1315,"dy":214,"length":1558.1210913980412,"timing":[0,12,29,45,62,78,95,112,128,146,162,178,195,212,228,245,262,278,296,312,329,345,362,378,395,412,428,445,462,478,495,513,529,545,562,578,595,612]},{"start":[1585,514],"end":[1595,277],"points":[[1585,513],[1585,510],[1582,503],[1577,493],[1571,476],[1562,448],[1551,421],[1542,397],[1538,380],[1537,367],[1539,354],[1542,342],[1545,335],[1547,331],[1550,330],[1554,327],[1560,325],[1569,319],[1577,314],[1583,310],[1589,307],[1590,306],[1591,305],[1592,305],[1593,303],[1594,300],[1595,298],[1596,297],[1596,295],[1596,294],[1596,293],[1596,290],[1596,286],[1596,283],[1595,282],[1595,280],[1595,279],[1595,277]],"dx":10,"dy":-237,"length":274.08239109026954,"timing":[0,6,23,39,56,72,89,106,122,139,156,172,189,206,223,239,257,273,289,306,323,339,356,373,389,406,422,439,490,507,523,540,557,573,590,606,623,640]},{"start":[1595,277],"end":[1473,765],"points":[[1595,278],[1594,278],[1594,280],[1593,282],[1589,286],[1583,293],[1573,301],[1559,311],[1533,327],[1495,352],[1442,388],[1396,423],[1373,449],[1367,468],[1367,487],[1371,518],[1382,556],[1391,586],[1410,639],[1424,674],[1429,695],[1431,709],[1432,716],[1433,719],[1433,720],[1434,720],[1435,721],[1436,721],[1437,723],[1437,724],[1439,729],[1439,731],[1439,733],[1439,734],[1440,734],[1442,737],[1444,740],[1446,741],[1447,744],[1449,745],[1451,748],[1452,749],[1454,750],[1455,752],[1460,756],[1466,760],[1471,763],[1473,765]],"dx":-122,"dy":488,"length":629.3938188241609,"timing":[0,18,26,42,59,76,92,109,126,142,159,176,192,209,226,242,259,277,293,309,326,342,359,376,393,409,426,443,460,477,492,509,526,582,593,610,626,643,660,676,692,709,726,742,759,776,792,809]},{"start":[1473,765],"end":[1554,423],"points":[[1475,764],[1476,763],[1476,762],[1477,762],[1477,761],[1477,760],[1477,759],[1476,758],[1473,755],[1470,753],[1467,751],[1463,749],[1458,746],[1450,741],[1441,734],[1435,724],[1431,704],[1426,669],[1421,637],[1418,602],[1418,579],[1425,562],[1438,542],[1452,523],[1467,505],[1477,495],[1484,490],[1493,486],[1502,480],[1514,473],[1525,464],[1534,455],[1540,447],[1543,443],[1545,440],[1546,440],[1546,439],[1548,436],[1549,433],[1552,428],[1553,425],[1554,423]],"dx":81,"dy":-342,"length":420.46670050264566,"timing":[0,16,33,49,74,247,252,267,284,300,316,333,349,366,383,399,416,433,451,466,483,499,516,533,549,566,583,600,616,633,649,666,683,699,716,733,749,766,783,800,816,833]},{"start":[1272,677],"end":[814,523],"points":[[1272,676],[1271,675],[1270,675],[1265,674],[1252,673],[1230,671],[1197,665],[1159,657],[1123,649],[1094,640],[1068,630],[1038,617],[1001,600],[967,583],[938,569],[915,558],[902,553],[896,550],[895,549],[894,549],[893,549],[892,549],[892,548],[891,548],[886,546],[877,543],[866,540],[854,539],[843,539],[834,539],[826,539],[820,538],[816,538],[816,537],[816,536],[815,535],[815,534],[814,533],[814,531],[814,528],[814,525],[814,523]],"dx":-458,"dy":-154,"length":498.5179537437977,"timing":[0,104,111,124,141,157,174,191,207,224,241,258,275,291,307,324,341,358,375,401,408,425,443,458,475,491,507,524,541,557,574,591,608,624,711,725,741,758,774,791,808,824]},{"start":[814,523],"end":[1591,282],"points":[[814,522],[815,522],[816,522],[817,521],[818,521],[819,520],[825,516],[844,506],[885,486],[964,457],[1054,439],[1138,427],[1223,419],[1288,410],[1332,403],[1363,398],[1386,394],[1411,387],[1433,380],[1456,373],[1471,368],[1484,364],[1497,357],[1505,353],[1509,349],[1514,344],[1520,334],[1526,325],[1530,318],[1537,307],[1544,296],[1550,286],[1555,280],[1557,278],[1558,278],[1560,277],[1562,277],[1564,277],[1566,277],[1568,277],[1571,277],[1574,279],[1578,281],[1581,282],[1583,282],[1584,282],[1586,282],[1588,282],[1589,282],[1590,282],[1591,282]],"dx":777,"dy":-241,"length":844.5472215419426,"timing":[0,16,33,85,244,250,267,284,300,316,333,350,366,383,400,416,433,450,466,483,500,517,534,550,567,583,600,617,634,650,666,683,700,716,733,750,766,783,800,817,834,851,867,883,900,917,933,950,966,983,1000]},{"start":[1591,284],"end":[591,553],"points":[[1591,285],[1591,286],[1591,287],[1590,287],[1590,288],[1589,289],[1589,290],[1587,291],[1584,294],[1581,297],[1577,300],[1574,302],[1572,304],[1568,307],[1564,310],[1558,314],[1551,316],[1541,322],[1526,329],[1508,337],[1481,348],[1450,358],[1415,370],[1371,385],[1311,407],[1243,432],[1170,461],[1088,492],[1009,519],[921,544],[842,564],[798,573],[778,576],[771,578],[765,580],[753,582],[741,582],[730,583],[723,585],[718,585],[702,587],[686,588],[673,588],[664,588],[644,589],[626,591],[607,591],[588,590],[573,589],[564,588],[563,587],[562,586],[562,583],[562,579],[562,575],[563,573],[565,571],[567,570],[570,567],[574,563],[579,560],[585,557],[589,554],[591,553]],"dx":-1000,"dy":269,"length":1136.6589794301271,"timing":[0,28,49,60,67,83,100,117,133,150,167,183,200,217,234,251,267,283,300,317,333,350,367,383,400,417,433,450,467,483,500,517,533,550,567,583,600,617,633,651,667,683,701,717,733,750,767,783,800,817,833,867,883,900,917,933,950,967,984,1000,1017,1034,1051,1067]},{"start":[1534,669],"end":[477,542],"points":[[1533,669],[1532,669],[1524,671],[1510,672],[1482,674],[1444,678],[1385,685],[1303,692],[1181,698],[1068,698],[947,687],[832,669],[734,647],[655,629],[603,616],[578,609],[546,602],[514,595],[492,588],[472,581],[461,575],[455,573],[452,572],[451,571],[451,570],[451,568],[451,566],[451,565],[451,564],[451,562],[453,560],[455,558],[457,555],[461,553],[465,550],[468,548],[471,546],[473,545],[474,543],[476,543],[477,542]],"dx":-1057,"dy":-127,"length":1141.4001816663467,"timing":[0,3,20,37,54,70,87,104,121,137,153,170,186,203,220,237,253,270,287,303,320,337,354,370,387,404,421,442,455,471,487,504,520,537,553,571,587,603,620,637,642]},{"start":[1200,438],"end":[695,266],"points":[[1200,438],[1200,436],[1200,435],[1200,434],[1198,433],[1197,431],[1196,430],[1196,427],[1194,426],[1192,422],[1188,418],[1182,414],[1172,408],[1163,402],[1150,398],[1129,387],[1077,368],[1024,347],[960,326],[895,306],[824,286],[761,273],[722,266],[701,262],[700,261],[699,261],[696,263],[694,265],[693,266],[694,266],[695,266]],"dx":-505,"dy":-172,"length":551.3385119065132,"timing":[0,63,73,123,140,157,173,191,207,223,239,257,273,290,307,323,339,356,374,391,407,424,440,457,473,542,557,573,590,728,737]},{"start":[577,554],"end":[908,201],"points":[[578,554],[578,553],[579,553],[579,552],[580,551],[580,550],[584,549],[586,546],[591,540],[595,534],[604,522],[621,507],[637,490],[654,465],[682,433],[697,410],[721,382],[738,363],[752,344],[768,326],[782,310],[793,298],[806,282],[808,279],[809,278],[809,281],[809,283],[810,286],[811,286],[811,288],[812,289],[813,293],[817,297],[820,298],[826,296],[839,289],[860,274],[878,258],[887,243],[891,233],[894,225],[896,222],[896,219],[898,216],[899,214],[900,213],[900,212],[901,210],[902,209],[904,208],[904,206],[906,204],[908,202],[908,201]],"dx":331,"dy":-353,"length":525.3348686332661,"timing":[0,19,31,44,59,76,94,110,127,144,160,177,194,211,227,243,260,277,293,311,327,343,361,378,395,443,459,476,505,513,526,543,559,577,592,610,626,643,660,676,692,710,726,743,759,789,797,821,835,843,860,876,893,909]},{"start":[409,516],"end":[149,158],"points":[[409,516],[410,515],[408,515],[408,514],[410,514],[412,512],[415,510],[423,499],[431,486],[435,470],[436,451],[432,426],[413,396],[362,357],[316,337],[275,319],[253,314],[245,312],[245,310],[246,310],[248,308],[250,304],[256,295],[269,274],[274,262],[276,253],[276,243],[276,232],[272,214],[261,186],[254,172],[228,127],[214,98],[204,84],[194,73],[191,69],[188,67],[186,66],[184,66],[182,66],[180,70],[173,78],[164,94],[157,110],[152,135],[150,146],[149,153],[149,156],[149,157],[149,158]],"dx":-260,"dy":-358,"length":711.9745609798795,"timing":[0,13,102,161,180,196,212,229,246,262,280,296,312,328,345,361,378,394,483,494,512,528,545,562,577,595,612,628,645,663,678,696,712,728,745,762,778,795,811,828,845,862,878,895,912,928,945,961,979,995]},{"start":[155,154],"end":[1190,638],"points":[[155,154],[156,154],[156,155],[157,155],[159,158],[161,160],[164,163],[168,167],[169,168],[170,168],[171,168],[173,170],[192,178],[248,188],[362,204],[519,230],[695,261],[882,294],[1104,346],[1208,379],[1277,419],[1317,451],[1340,482],[1359,502],[1377,530],[1384,544],[1385,559],[1380,578],[1371,597],[1359,615],[1346,631],[1324,655],[1306,672],[1291,683],[1280,689],[1272,693],[1267,694],[1263,693],[1259,690],[1246,679],[1230,669],[1215,658],[1200,648],[1192,645],[1190,642],[1190,640],[1190,639],[1190,638]],"dx":1035,"dy":484,"length":1627.3998277606238,"timing":[0,21,31,48,66,81,98,115,131,207,223,231,248,265,281,298,315,331,349,366,381,398,415,431,449,466,481,498,515,531,548,565,581,598,614,631,647,664,681,698,715,731,748,765,782,853,869,880]},{"start":[152,342],"end":[882,644],"points":[[152,342],[152,341],[151,342],[152,341],[153,340],[154,339],[155,338],[157,338],[161,337],[168,334],[192,330],[240,326],[316,325],[408,325],[504,330],[601,330],[735,333],[812,357],[856,381],[892,412],[917,438],[936,455],[948,474],[960,493],[965,518],[964,533],[960,548],[953,561],[948,573],[942,584],[938,588],[932,591],[928,594],[926,595],[923,598],[918,600],[914,603],[911,606],[909,609],[908,611],[908,614],[908,615],[908,617],[908,618],[907,620],[907,621],[906,625],[904,627],[901,630],[898,633],[896,636],[892,639],[886,642],[880,646],[877,648],[878,648],[879,647],[880,646],[881,645],[882,644]],"dx":730,"dy":302,"length":1073.388560344738,"timing":[0,24,39,103,119,127,140,156,172,189,206,223,239,256,274,289,306,323,340,356,372,388,406,422,440,455,472,489,505,523,540,555,572,588,605,622,638,656,673,688,705,722,740,756,773,789,805,822,839,856,872,888,905,922,939,1014,1021,1038,1055,1072]},{"start":[882,644],"end":[768,188],"points":[[883,642],[884,641],[887,635],[891,626],[895,609],[898,594],[896,580],[891,562],[889,557],[879,534],[868,518],[851,496],[812,461],[759,418],[723,382],[695,355],[677,325],[674,306],[676,288],[684,274],[691,265],[696,258],[703,250],[707,246],[709,242],[712,240],[715,240],[717,240],[720,240],[723,240],[728,240],[730,238],[733,235],[736,233],[738,230],[740,227],[741,223],[743,216],[744,210],[745,207],[747,205],[748,202],[751,200],[756,196],[759,194],[761,191],[764,190],[765,190],[766,190],[767,189],[768,188]],"dx":-114,"dy":-456,"length":590.2637970168895,"timing":[0,9,26,41,58,76,91,109,124,141,159,175,192,208,225,241,258,275,291,308,325,341,358,375,391,408,424,441,458,474,491,507,524,541,557,574,590,607,625,641,658,674,691,708,724,741,758,777,792,808,824]},{"start":[800,214],"end":[927,599],"points":[[801,215],[802,215],[804,215],[808,215],[811,215],[821,214],[829,215],[836,222],[839,233],[841,248],[856,278],[863,289],[882,318],[908,366],[920,390],[923,412],[922,434],[917,454],[910,476],[901,493],[895,510],[886,533],[881,544],[877,554],[873,563],[871,568],[871,570],[871,571],[873,572],[876,574],[879,577],[881,581],[891,588],[900,594],[904,597],[905,597],[906,597],[908,598],[911,598],[913,599],[915,599],[916,600],[918,600],[920,601],[923,601],[924,600],[924,599],[925,599],[926,599],[927,599]],"dx":127,"dy":385,"length":486.31120945962255,"timing":[0,18,34,50,67,84,101,117,134,151,174,184,200,217,233,250,267,283,300,317,333,350,366,383,400,416,434,483,501,517,533,551,567,584,600,617,634,651,667,684,701,717,734,750,767,784,800,817,835,845]},{"start":[1135,601],"end":[341,130],"points":[[1135,599],[1136,586],[1133,558],[1129,524],[1125,476],[1122,430],[1115,378],[1081,320],[1037,287],[967,254],[875,231],[779,210],[676,201],[577,191],[506,187],[460,187],[421,189],[404,192],[399,193],[400,192],[403,189],[412,182],[421,174],[424,170],[427,166],[428,165],[428,164],[428,163],[425,162],[416,159],[397,145],[381,138],[370,135],[354,131],[343,128],[338,126],[339,127],[340,127],[340,129],[341,130]],"dx":-794,"dy":-471,"length":1143.0472285651474,"timing":[0,16,33,49,66,82,99,116,132,149,166,182,199,216,233,249,266,282,299,324,335,349,367,381,399,415,432,449,465,482,499,516,532,549,565,581,770,782,799,832]},{"start":[1185,263],"end":[640,552],"points":[[1184,263],[1182,264],[1177,264],[1164,262],[1124,261],[1073,266],[1028,267],[980,272],[917,292],[865,318],[835,339],[818,358],[806,382],[787,424],[774,446],[758,470],[739,490],[713,511],[691,527],[675,541],[663,550],[657,554],[650,558],[638,565],[628,570],[616,574],[612,576],[610,578],[611,576],[613,574],[617,570],[620,568],[624,564],[627,562],[629,561],[632,558],[634,557],[637,554],[638,554],[640,552]],"dx":-545,"dy":289,"length":743.7385838874088,"timing":[0,41,58,76,91,107,125,141,158,174,191,208,225,241,258,276,292,309,323,340,356,372,390,406,423,439,456,473,523,539,557,574,590,607,623,640,656,674,690,708]},{"start":[717,499],"end":[152,162],"points":[[717,497],[717,495],[717,491],[718,490],[718,488],[719,486],[720,482],[720,481],[720,479],[720,478],[717,476],[714,473],[709,470],[688,457],[644,438],[584,418],[473,374],[412,341],[357,310],[324,293],[296,279],[280,270],[269,262],[262,258],[256,255],[244,254],[235,254],[229,254],[228,254],[225,252],[221,247],[217,243],[215,239],[212,235],[208,230],[206,228],[202,224],[201,222],[198,219],[196,217],[192,214],[190,211],[184,203],[164,178],[156,170],[155,167],[154,167],[154,166],[152,163],[152,162]],"dx":-565,"dy":-337,"length":685.4482878134323,"timing":[0,13,31,47,65,80,97,116,132,147,163,180,198,214,231,247,264,281,297,315,331,347,364,380,398,415,431,447,464,482,498,516,531,549,565,581,597,614,631,647,665,682,699,715,732,748,764,872,899,921]},{"start":[152,162],"end":[776,417],"points":[[154,162],[155,162],[156,161],[156,159],[161,158],[182,162],[229,170],[304,186],[404,195],[508,207],[631,230],[685,253],[710,271],[721,289],[723,302],[718,316],[713,329],[705,346],[700,356],[693,368],[686,384],[680,399],[675,412],[676,434],[682,447],[694,457],[707,461],[720,463],[728,463],[731,462],[732,461],[733,460],[733,459],[740,454],[745,450],[752,445],[756,442],[757,440],[758,439],[760,436],[761,433],[764,430],[767,425],[770,422],[773,419],[775,418],[776,417]],"dx":624,"dy":255,"length":884.3733926030259,"timing":[0,14,26,43,60,76,92,109,127,143,159,177,193,209,226,242,259,276,293,310,326,343,360,377,393,409,426,443,459,476,494,527,543,559,576,594,610,627,644,660,677,695,710,725,742,759,775]},{"start":[1327,521],"end":[464,313],"points":[[1327,521],[1326,521],[1326,522],[1325,522],[1324,523],[1322,525],[1319,526],[1316,526],[1313,526],[1309,526],[1297,522],[1278,518],[1239,516],[1179,514],[1079,502],[968,489],[856,466],[692,437],[597,427],[529,417],[488,410],[454,406],[434,406],[412,406],[405,406],[403,406],[403,404],[401,397],[399,388],[394,378],[389,373],[388,371],[388,369],[389,365],[395,357],[404,350],[412,346],[415,343],[417,342],[418,342],[419,342],[420,342],[421,342],[424,342],[425,342],[426,342],[427,342],[428,342],[429,341],[432,340],[435,337],[437,334],[440,332],[445,328],[448,326],[451,323],[454,322],[456,319],[460,316],[461,314],[463,313],[464,313]],"dx":-863,"dy":-208,"length":1076.4531605216125,"timing":[0,15,30,48,65,81,98,115,132,148,164,181,197,214,231,247,264,280,298,313,330,348,364,382,397,413,431,447,463,481,497,514,530,547,564,580,597,613,630,646,697,714,730,747,766,781,805,814,831,847,864,881,897,913,930,946,964,981,996,1014,1030,1047]},{"start":[464,313],"end":[1379,254],"points":[[463,313],[462,313],[461,313],[462,313],[467,314],[472,314],[488,317],[543,319],[596,321],[676,316],[767,307],[873,289],[991,262],[1194,221],[1336,186],[1457,156],[1499,127],[1457,150],[1410,175],[1356,202],[1334,214],[1321,222],[1316,228],[1315,230],[1315,232],[1316,233],[1319,236],[1323,238],[1332,242],[1340,244],[1347,246],[1358,250],[1369,253],[1380,255],[1381,255],[1380,254],[1379,254]],"dx":915,"dy":-59,"length":1353.740746822685,"timing":[0,47,63,126,133,146,163,180,196,213,230,246,264,280,296,313,480,496,514,530,547,563,580,596,616,630,646,662,679,696,713,729,746,763,779,916,938]},{"start":[227,587],"end":[986,149],"points":[[227,586],[226,584],[226,582],[226,580],[228,578],[230,576],[232,571],[237,565],[260,549],[313,530],[390,506],[499,470],[620,438],[778,385],[872,343],[947,301],[995,261],[1016,238],[1026,221],[1032,207],[1040,193],[1044,187],[1048,183],[1052,179],[1054,175],[1055,174],[1055,173],[1041,170],[1026,166],[1013,165],[1004,162],[997,160],[994,158],[993,157],[992,156],[990,154],[989,152],[989,150],[988,150],[987,149],[986,149]],"dx":759,"dy":-438,"length":1032.258616712329,"timing":[0,17,34,51,68,84,101,117,133,152,167,184,201,217,234,251,267,284,300,317,334,350,367,384,401,418,467,484,501,517,533,550,567,583,600,617,633,650,847,862,870]},{"start":[1378,577],"end":[672,407],"points":[[1378,577],[1378,576],[1377,576],[1358,574],[1304,570],[1218,562],[1128,550],[1034,536],[948,516],[884,495],[839,473],[832,467],[829,463],[829,462],[828,461],[827,460],[825,456],[816,448],[804,439],[788,432],[770,426],[751,421],[727,415],[716,412],[712,410],[709,410],[707,410],[705,410],[700,409],[693,409],[680,409],[676,408],[672,407]],"dx":-706,"dy":-170,"length":739.8039113932588,"timing":[0,247,275,291,308,325,341,358,375,392,408,425,442,458,491,508,524,542,559,575,591,608,625,642,658,674,691,708,724,742,758,774,791]},{"start":[1417,510],"end":[644,226],"points":[[1417,510],[1418,510],[1418,511],[1418,512],[1418,513],[1418,514],[1417,514],[1413,517],[1399,522],[1384,526],[1363,530],[1316,530],[1223,512],[1109,478],[977,444],[788,393],[704,365],[653,335],[628,315],[618,304],[616,301],[616,298],[618,295],[622,291],[625,287],[628,284],[628,280],[631,277],[634,270],[640,261],[644,252],[649,242],[649,239],[649,236],[647,233],[647,230],[646,230],[645,229],[644,229],[644,228],[644,227],[644,226]],"dx":-773,"dy":-284,"length":941.9537727840044,"timing":[0,23,40,89,199,211,223,239,258,272,290,306,323,339,356,373,389,405,422,440,456,473,489,506,523,539,556,573,589,605,623,640,656,672,688,706,723,785,796,806,823,1097]},{"start":[1336,330],"end":[524,413],"points":[[1336,330],[1335,330],[1333,330],[1330,334],[1316,338],[1205,350],[1102,351],[985,351],[889,359],[820,362],[764,369],[730,373],[707,376],[681,381],[656,386],[630,390],[603,394],[585,396],[572,399],[560,403],[552,406],[544,410],[542,412],[539,414],[532,415],[526,418],[524,418],[524,417],[524,415],[524,414],[524,413]],"dx":-812,"dy":83,"length":827.8500523856881,"timing":[0,171,182,199,216,233,249,266,283,299,316,334,349,366,383,399,416,433,449,466,482,499,516,533,549,566,582,685,700,716,771]},{"start":[1239,442],"end":[488,278],"points":[[1239,442],[1241,440],[1241,438],[1239,438],[1237,437],[1235,434],[1230,432],[1228,430],[1224,430],[1217,430],[1206,429],[1192,425],[1144,406],[1118,396],[1043,361],[991,334],[937,303],[874,267],[812,244],[760,236],[721,234],[684,232],[672,231],[667,228],[664,226],[660,222],[659,222],[658,222],[651,227],[638,234],[620,243],[599,250],[580,256],[562,264],[550,269],[539,272],[530,276],[527,278],[526,278],[524,278],[510,280],[498,280],[491,280],[490,278],[489,278],[488,278]],"dx":-751,"dy":-164,"length":820.617357133532,"timing":[0,14,31,48,64,80,98,113,130,146,162,179,198,213,230,246,263,280,297,313,329,346,363,380,397,414,467,479,496,513,530,546,563,579,596,613,629,646,662,714,730,746,762,813,829,847]},{"start":[612,379],"end":[1252,510],"points":[[612,378],[613,378],[613,376],[614,374],[614,373],[615,371],[615,370],[616,370],[617,368],[621,362],[637,352],[710,332],[844,324],[1004,319],[1152,338],[1256,374],[1325,414],[1349,446],[1348,462],[1344,476],[1340,487],[1340,494],[1340,498],[1338,500],[1334,505],[1332,507],[1327,511],[1318,514],[1311,518],[1304,522],[1298,522],[1296,522],[1293,522],[1289,519],[1283,518],[1272,518],[1265,517],[1258,515],[1254,514],[1253,514],[1252,514],[1252,513],[1252,512],[1252,511],[1252,510]],"dx":640,"dy":131,"length":942.7467824187306,"timing":[0,15,31,48,64,81,97,175,181,197,215,231,248,264,283,298,314,330,347,364,380,399,415,430,447,464,480,497,514,530,548,564,581,597,614,632,647,664,680,754,765,781,832,851,864]},{"start":[1229,518],"end":[291,160],"points":[[1229,518],[1229,517],[1228,515],[1226,514],[1219,505],[1205,496],[1180,486],[1135,468],[1076,441],[1011,413],[938,378],[906,358],[867,330],[824,298],[769,256],[710,219],[662,190],[631,174],[613,162],[612,160],[612,161],[616,163],[620,179],[622,191],[622,199],[621,205],[618,208],[614,211],[587,215],[554,215],[509,214],[438,202],[370,184],[323,167],[289,146],[283,143],[280,142],[279,141],[278,141],[276,140],[275,138],[274,138],[276,140],[277,142],[280,144],[281,145],[284,148],[286,151],[288,154],[289,156],[291,158],[291,159],[291,160]],"dx":-938,"dy":-358,"length":1159.9636110466097,"timing":[0,119,317,331,348,366,382,398,415,432,448,465,482,499,515,531,549,565,581,598,616,631,649,665,681,698,715,731,749,764,782,798,814,831,848,864,882,897,914,931,947,964,1025,1033,1048,1064,1081,1097,1114,1131,1148,1165,1180]},{"start":[292,161],"end":[1434,361],"points":[[292,161],[293,161],[294,161],[295,161],[295,160],[297,159],[302,158],[311,158],[346,158],[417,160],[508,164],[588,182],[685,196],[786,214],[937,269],[1016,308],[1081,338],[1149,359],[1200,382],[1232,397],[1246,404],[1251,406],[1276,410],[1300,413],[1320,417],[1336,421],[1350,425],[1369,426],[1397,426],[1408,425],[1412,422],[1415,418],[1421,410],[1428,398],[1432,387],[1433,378],[1433,370],[1433,367],[1433,366],[1433,363],[1434,362],[1434,361]],"dx":1142,"dy":200,"length":1235.0295855965737,"timing":[0,106,118,129,146,163,180,196,213,229,246,263,279,296,313,329,345,362,378,396,413,429,446,462,480,496,512,529,546,563,579,596,612,629,646,662,679,696,712,729,746,762]},{"start":[592,534],"end":[1400,612],"points":[[593,534],[593,533],[593,531],[594,530],[595,529],[596,528],[596,526],[599,523],[599,522],[600,522],[605,518],[622,509],[726,470],[823,442],[903,424],[980,410],[1064,401],[1149,398],[1205,410],[1246,423],[1317,451],[1365,471],[1399,487],[1416,502],[1432,518],[1445,533],[1456,546],[1456,547],[1456,548],[1454,550],[1451,554],[1448,558],[1434,566],[1415,574],[1394,580],[1384,584],[1380,587],[1380,590],[1380,594],[1380,595],[1380,596],[1380,598],[1380,599],[1380,600],[1384,604],[1387,606],[1389,609],[1392,611],[1395,611],[1396,612],[1397,612],[1399,612],[1400,612]],"dx":808,"dy":78,"length":1058.378140617915,"timing":[0,8,23,39,56,73,89,107,123,173,189,206,223,239,257,273,289,306,323,340,356,373,390,406,423,439,457,473,490,507,524,540,556,573,591,607,623,640,656,678,690,706,724,739,757,773,791,806,823,839,856,873,925]},{"start":[1424,220],"end":[1184,544],"points":[[1424,221],[1423,222],[1422,222],[1421,222],[1420,222],[1418,223],[1417,223],[1416,223],[1416,224],[1414,225],[1411,227],[1400,233],[1380,245],[1327,276],[1292,298],[1272,317],[1264,340],[1260,366],[1255,397],[1251,424],[1241,471],[1229,508],[1213,541],[1199,567],[1187,586],[1175,607],[1171,617],[1168,620],[1164,623],[1160,626],[1156,629],[1154,632],[1151,632],[1147,630],[1146,628],[1147,626],[1150,621],[1154,615],[1157,607],[1162,597],[1166,586],[1172,574],[1174,566],[1176,560],[1178,555],[1181,551],[1183,549],[1184,546],[1184,545],[1184,544]],"dx":-240,"dy":324,"length":627.2342464703431,"timing":[0,22,33,50,67,83,99,116,137,150,166,183,199,217,233,249,267,283,300,316,333,350,366,383,400,417,433,449,467,484,500,518,533,550,567,583,600,617,633,649,666,684,699,716,733,749,766,783,800,816]},{"start":[827,548],"end":[189,326],"points":[[827,548],[827,547],[828,546],[828,545],[828,544],[827,543],[825,542],[824,542],[821,542],[812,538],[804,535],[790,529],[767,515],[734,494],[704,472],[682,454],[655,426],[637,411],[620,397],[608,386],[596,379],[587,375],[576,371],[571,370],[556,367],[523,364],[500,361],[480,357],[453,352],[423,347],[386,341],[345,333],[328,326],[313,321],[298,317],[284,312],[272,309],[265,304],[263,301],[260,301],[257,301],[255,303],[252,305],[249,305],[244,305],[239,305],[238,305],[236,306],[234,307],[233,308],[232,310],[229,313],[227,314],[224,317],[220,320],[208,324],[204,325],[203,325],[203,324],[202,324],[200,324],[199,324],[196,325],[195,325],[194,325],[192,325],[191,326],[189,326]],"dx":-638,"dy":-222,"length":720.4755404028913,"timing":[0,48,65,127,217,232,252,265,281,299,315,331,348,364,381,397,415,431,447,464,481,497,514,530,547,564,580,597,615,630,648,665,680,697,714,731,748,764,781,797,814,831,848,864,880,898,913,964,982,997,1014,1031,1047,1064,1080,1098,1114,1150,1174,1213,1230,1248,1265,1283,1297,1313,1330,1347]},{"start":[1391,312],"end":[276,187],"points":[[1391,312],[1390,313],[1390,314],[1389,316],[1385,322],[1381,327],[1379,331],[1375,335],[1370,341],[1358,350],[1312,365],[1250,379],[1141,391],[1048,399],[941,401],[818,394],[697,382],[572,374],[441,367],[268,351],[184,338],[113,321],[67,308],[43,294],[36,284],[32,275],[32,258],[38,246],[52,234],[72,216],[93,199],[111,185],[124,173],[138,160],[143,156],[144,154],[147,153],[148,152],[149,152],[152,154],[157,157],[161,158],[169,162],[180,166],[192,173],[205,179],[222,184],[236,189],[248,193],[260,197],[262,198],[263,198],[264,197],[266,196],[269,194],[270,191],[272,190],[273,188],[273,187],[274,187],[275,187],[276,187]],"dx":-1115,"dy":-125,"length":1722.8184226303115,"timing":[0,47,64,80,98,114,130,147,164,180,197,213,231,247,264,282,297,313,330,347,363,380,396,413,430,446,463,480,496,513,530,547,563,580,596,613,629,646,669,680,696,713,730,746,764,779,797,812,829,847,864,887,896,913,931,946,963,979,999,1013,1035,1046]},{"start":[100,279],"end":[825,430],"points":[[100,279],[100,278],[101,278],[102,278],[103,277],[104,276],[115,272],[128,268],[184,265],[259,267],[348,274],[434,287],[533,311],[642,343],[737,372],[801,400],[824,419],[827,422],[827,426],[827,428],[825,430],[820,434],[816,438],[811,442],[808,444],[807,446],[807,445],[808,444],[810,442],[812,440],[816,438],[818,435],[822,433],[824,433],[824,431],[825,430]],"dx":725,"dy":151,"length":816.3896603665179,"timing":[0,13,69,80,168,179,196,213,229,246,263,279,295,313,329,345,362,379,396,412,428,445,461,478,494,511,575,582,595,612,628,644,661,679,696,711]},{"start":[1360,226],"end":[200,588],"points":[[1360,226],[1359,226],[1358,226],[1356,226],[1353,230],[1349,233],[1340,237],[1335,240],[1324,245],[1309,254],[1284,265],[1249,281],[1192,306],[1099,341],[991,373],[798,416],[684,453],[594,479],[495,503],[422,524],[365,537],[309,550],[267,559],[240,569],[224,576],[215,579],[212,582],[212,583],[211,583],[209,585],[207,586],[204,588],[202,588],[201,588],[200,588]],"dx":-1160,"dy":362,"length":1221.959956059175,"timing":[0,106,113,126,142,159,175,192,210,226,242,260,275,292,308,325,341,359,375,391,409,425,441,458,475,492,508,525,542,558,575,591,608,631,675]},{"start":[200,588],"end":[1138,426],"points":[[201,588],[203,586],[205,584],[208,582],[212,578],[216,575],[224,570],[240,559],[267,543],[321,519],[401,489],[483,461],[606,422],[687,400],[762,382],[820,370],[868,366],[918,365],[968,367],[996,370],[1019,373],[1036,377],[1051,381],[1061,385],[1064,387],[1064,389],[1064,395],[1064,402],[1065,405],[1068,406],[1068,407],[1071,409],[1073,410],[1076,410],[1079,410],[1081,411],[1085,412],[1092,412],[1096,414],[1100,414],[1105,415],[1107,416],[1108,417],[1109,417],[1110,418],[1111,419],[1112,419],[1112,422],[1114,423],[1114,424],[1115,424],[1118,428],[1120,431],[1124,434],[1126,436],[1128,437],[1129,437],[1130,437],[1130,436],[1132,436],[1132,435],[1132,434],[1134,433],[1135,432],[1136,430],[1137,428],[1138,426]],"dx":938,"dy":-162,"length":1020.4394093397217,"timing":[0,12,28,45,63,79,95,112,128,146,161,178,195,211,229,245,261,279,295,313,329,345,362,378,395,412,428,447,461,479,496,512,529,545,561,578,594,611,627,644,661,677,694,711,727,755,764,778,795,811,828,845,861,879,896,911,961,981,994,1010,1031,1044,1062,1078,1094,1111,1128]},{"start":[1251,138],"end":[136,245],"points":[[1250,138],[1236,149],[1216,164],[1185,186],[1132,214],[1068,243],[989,277],[875,313],[795,330],[696,339],[602,338],[516,329],[437,318],[365,311],[247,295],[173,274],[122,258],[96,250],[81,245],[74,242],[72,239],[74,235],[79,232],[88,227],[93,223],[96,220],[97,218],[99,217],[99,216],[101,217],[104,218],[105,218],[109,221],[112,223],[116,228],[119,232],[121,234],[124,237],[126,238],[128,240],[129,241],[132,243],[134,244],[135,244],[135,245],[136,245]],"dx":-1115,"dy":107,"length":1319.552635167783,"timing":[0,16,32,49,65,83,99,116,134,150,166,182,200,216,232,249,266,283,299,317,332,350,366,382,398,415,432,449,465,528,535,549,565,581,599,616,632,648,666,682,698,715,731,749,765,790]},{"start":[898,589],"end":[492,570],"points":[[898,589],[898,588],[898,587],[897,586],[897,585],[896,582],[894,581],[892,578],[892,575],[900,570],[903,568],[908,562],[912,558],[912,546],[909,533],[899,521],[882,507],[852,498],[774,487],[716,485],[634,487],[530,491],[418,497],[334,498],[288,494],[268,490],[266,490],[269,490],[276,492],[294,498],[307,502],[318,506],[325,510],[329,512],[333,515],[340,520],[347,523],[358,527],[371,530],[382,534],[395,538],[402,540],[404,541],[406,542],[408,542],[412,543],[414,543],[423,546],[436,548],[445,549],[450,550],[452,551],[454,552],[456,554],[459,555],[462,558],[468,560],[474,562],[477,563],[480,564],[482,565],[486,566],[488,566],[490,567],[492,569],[493,570],[493,571],[493,572],[492,572],[492,571],[492,570]],"dx":-406,"dy":-19,"length":973.7258742772741,"timing":[0,12,28,54,62,79,94,112,129,145,161,179,195,211,228,245,261,278,295,312,328,345,361,378,395,412,429,446,461,478,495,511,528,545,561,578,595,611,628,644,660,678,695,711,728,746,761,778,795,811,827,845,861,878,894,911,928,945,961,977,994,1011,1028,1044,1060,1078,1179,1195,1373,1380,1394]},{"start":[633,407],"end":[861,610],"points":[[633,407],[634,407],[636,407],[640,405],[641,404],[643,403],[644,402],[646,400],[648,398],[652,394],[657,391],[665,386],[676,382],[707,374],[728,370],[751,370],[778,372],[810,383],[857,406],[897,441],[922,478],[953,527],[968,558],[980,585],[983,602],[982,617],[973,629],[959,643],[951,646],[940,650],[926,652],[913,654],[900,658],[885,661],[870,664],[852,665],[848,662],[845,661],[844,659],[844,658],[844,656],[844,654],[843,650],[841,645],[840,641],[839,638],[840,634],[842,630],[846,628],[850,625],[852,622],[856,619],[859,618],[860,616],[860,615],[860,614],[861,613],[861,612],[861,611],[861,610]],"dx":228,"dy":203,"length":707.7630913592303,"timing":[0,20,35,51,69,85,160,168,184,201,218,234,250,268,284,301,318,334,350,368,384,400,417,434,450,468,484,501,518,535,551,568,584,601,617,635,651,667,684,701,717,733,751,767,784,801,818,834,850,868,884,901,918,934,950,967,995,1003,1017,1033]},{"start":[761,222],"end":[991,407],"points":[[762,222],[763,222],[761,223],[760,225],[760,226],[758,227],[756,231],[753,235],[752,239],[752,242],[755,245],[772,250],[808,263],[879,291],[919,306],[941,316],[954,326],[967,337],[978,350],[987,361],[990,366],[993,371],[995,374],[996,378],[997,382],[997,390],[996,398],[994,402],[992,405],[991,406],[991,407]],"dx":230,"dy":185,"length":343.48973551084674,"timing":[0,15,115,132,148,164,181,198,214,231,250,266,282,299,314,332,348,365,382,398,417,433,448,465,481,497,514,531,548,564,581]},{"start":[842,323],"end":[1130,151],"points":[[843,323],[845,322],[846,322],[856,318],[891,312],[936,304],[968,299],[996,294],[1020,289],[1035,284],[1047,279],[1052,276],[1054,273],[1059,268],[1062,259],[1067,249],[1072,237],[1081,225],[1091,213],[1099,201],[1103,190],[1109,174],[1113,167],[1116,162],[1119,158],[1121,154],[1122,153],[1124,152],[1126,150],[1128,148],[1131,146],[1132,146],[1134,145],[1133,145],[1133,146],[1132,146],[1131,149],[1130,150],[1130,151]],"dx":288,"dy":-172,"length":381.4811709303843,"timing":[0,8,20,37,53,71,86,103,120,136,153,170,186,203,220,236,253,269,286,303,319,336,353,369,386,403,420,437,454,470,486,502,520,623,638,652,670,687,703]},{"start":[1077,514],"end":[304,182],"points":[[1078,514],[1079,514],[1080,514],[1081,514],[1082,513],[1084,512],[1088,507],[1092,499],[1096,493],[1097,487],[1097,484],[1097,482],[1089,477],[1068,474],[1031,468],[979,461],[927,453],[857,439],[764,432],[667,420],[500,396],[416,374],[357,359],[333,354],[326,350],[326,349],[326,346],[329,343],[332,340],[332,338],[332,334],[330,326],[328,319],[324,306],[320,287],[316,270],[312,259],[311,248],[310,238],[308,234],[307,226],[306,216],[304,200],[304,194],[304,189],[304,186],[304,185],[304,184],[304,183],[304,182]],"dx":-773,"dy":-332,"length":998.8975989328255,"timing":[0,25,42,84,134,150,166,182,200,216,233,249,267,283,300,316,333,349,366,383,399,415,433,449,466,482,500,516,534,550,566,590,599,616,632,649,667,683,699,716,733,749,765,782,799,817,866,994,1032,1048]},{"start":[281,155],"end":[1003,318],"points":[[281,154],[282,154],[283,154],[284,153],[286,153],[291,153],[315,153],[346,153],[401,153],[488,154],[593,161],[688,172],[764,185],[832,204],[902,230],[928,239],[943,243],[948,246],[949,247],[951,247],[953,250],[959,254],[964,258],[968,262],[972,270],[977,282],[981,294],[986,305],[988,307],[988,309],[988,310],[989,310],[990,310],[991,311],[991,312],[992,312],[992,313],[992,314],[993,314],[995,314],[996,314],[996,315],[997,315],[999,316],[1001,318],[1002,318],[1003,318]],"dx":722,"dy":163,"length":778.811903988072,"timing":[0,60,69,176,183,196,214,229,247,263,280,297,313,330,347,364,381,397,413,430,446,463,479,496,513,530,547,563,580,597,613,645,664,680,697,771,797,812,829,845,863,883,896,913,929,946,962]},{"start":[126,376],"end":[648,521],"points":[[127,376],[128,377],[131,378],[138,379],[149,381],[163,384],[183,387],[214,391],[254,396],[299,402],[353,409],[406,415],[454,421],[503,427],[549,433],[590,439],[624,444],[648,449],[666,453],[675,456],[679,458],[680,458],[680,459],[678,460],[676,461],[673,461],[670,461],[669,461],[669,462],[668,462],[668,463],[667,463],[667,464],[666,464],[665,464],[664,465],[663,466],[662,467],[660,469],[657,472],[655,475],[652,479],[649,481],[646,484],[644,487],[642,489],[641,491],[639,492],[638,492],[638,493],[637,493],[636,493],[635,493],[634,493],[634,494],[633,494],[633,495],[632,495],[631,495],[631,496],[630,496],[629,496],[628,496],[628,497],[627,497],[626,497],[626,498],[625,498],[625,499],[624,499],[624,500],[623,500],[623,501],[622,502],[622,503],[622,505],[621,505],[621,506],[621,507],[621,508],[622,508],[623,509],[625,511],[627,512],[630,513],[634,515],[638,516],[642,518],[645,519],[648,519],[649,520],[648,520],[648,521]],"dx":522,"dy":145,"length":684.8160390324462,"timing":[0,16,33,50,66,83,100,116,133,150,167,184,200,216,233,250,266,283,300,317,333,350,366,383,400,416,433,450,682,717,734,759,777,783,800,816,833,850,866,883,900,917,933,950,966,983,1000,1016,1036,1153,1213,1316,1334,1358,1366,1424,1433,1450,1468,1483,1500,1516,1539,1562,1566,1585,1600,1616,1640,1683,1796,1801,1816,1833,1850,1866,1883,1900,1928,1944,1954,1966,1983,2000,2016,2033,2050,2066,2083,2100,2116,2252,2300]},{"start":[648,521],"end":[1119,194],"points":[[649,521],[649,522],[651,522],[653,522],[658,523],[664,524],[674,525],[689,525],[712,525],[742,523],[782,518],[826,510],[868,499],[915,488],[964,477],[1007,468],[1047,458],[1083,449],[1109,440],[1128,431],[1145,421],[1156,413],[1164,407],[1168,403],[1170,400],[1171,398],[1171,395],[1171,392],[1171,389],[1169,385],[1165,380],[1158,375],[1150,368],[1143,364],[1135,357],[1129,352],[1122,348],[1112,345],[1104,343],[1098,342],[1095,340],[1095,338],[1095,332],[1095,320],[1097,302],[1099,285],[1101,271],[1103,263],[1103,257],[1104,251],[1105,245],[1106,238],[1107,231],[1107,226],[1108,223],[1108,221],[1109,218],[1111,216],[1112,213],[1114,209],[1115,205],[1116,203],[1117,201],[1117,200],[1117,199],[1117,198],[1117,197],[1118,197],[1118,196],[1118,195],[1119,195],[1119,194]],"dx":471,"dy":-327,"length":800.2224372566398,"timing":[0,14,30,47,64,80,97,114,130,147,164,180,197,214,230,247,264,280,297,314,330,347,364,380,397,414,431,447,463,480,497,514,531,547,564,580,597,614,630,647,664,680,697,714,730,747,763,780,797,814,830,847,863,880,897,914,930,947,964,981,997,1014,1030,1051,1619,1664,1714,1730,1747,1797,2045,2243]},{"start":[1119,194],"end":[1524,338],"points":[[1120,194],[1121,194],[1121,195],[1124,197],[1128,199],[1133,202],[1139,205],[1149,209],[1160,215],[1172,221],[1186,227],[1199,233],[1215,238],[1232,243],[1250,248],[1272,254],[1294,260],[1315,267],[1338,276],[1357,283],[1371,287],[1384,291],[1397,295],[1407,299],[1414,303],[1417,305],[1418,306],[1419,306],[1420,307],[1421,307],[1422,307],[1426,307],[1430,308],[1437,309],[1446,310],[1457,312],[1468,315],[1481,318],[1493,321],[1503,325],[1512,328],[1518,330],[1522,332],[1524,334],[1525,335],[1525,336],[1524,336],[1524,337],[1524,338]],"dx":405,"dy":144,"length":436.60600354944813,"timing":[0,14,22,39,55,72,89,105,122,139,155,172,189,205,222,239,255,272,289,305,322,339,355,372,389,405,422,738,756,775,789,805,822,839,855,872,889,905,922,939,955,972,989,1005,1022,1039,1058,1072,1092]},{"start":[1524,338],"end":[1001,814],"points":[[1523,338],[1522,338],[1521,338],[1519,338],[1515,338],[1508,338],[1501,337],[1495,337],[1494,337],[1493,337],[1486,338],[1474,341],[1457,345],[1431,354],[1389,373],[1337,397],[1273,430],[1200,472],[1132,514],[1063,557],[996,599],[949,630],[908,658],[872,684],[851,702],[838,717],[835,725],[836,729],[844,732],[856,736],[872,741],[892,748],[908,756],[925,766],[939,775],[951,783],[961,790],[969,796],[976,803],[981,809],[983,814],[984,815],[985,815],[986,815],[987,815],[988,814],[989,814],[990,813],[991,813],[992,813],[993,813],[994,813],[995,813],[996,813],[997,813],[999,814],[1000,814],[1001,814]],"dx":-523,"dy":476,"length":997.5250332822593,"timing":[0,12,22,39,55,73,89,105,363,372,389,405,422,439,455,472,489,505,522,539,556,572,589,605,622,639,655,672,689,705,722,739,755,772,789,805,823,839,855,872,889,905,969,977,988,1005,1022,1038,1056,1072,1089,1105,1122,1139,1155,1172,1188,1205]},{"start":[983,704],"end":[427,774],"points":[[983,704],[983,703],[983,702],[982,702],[981,702],[981,701],[980,701],[980,700],[979,700],[978,698],[977,696],[976,692],[974,688],[972,679],[970,666],[967,647],[964,625],[962,600],[960,575],[957,548],[956,523],[956,500],[960,475],[966,455],[972,439],[978,425],[980,418],[981,416],[981,415],[979,415],[971,419],[950,429],[918,448],[885,469],[843,497],[799,525],[756,554],[712,586],[665,621],[617,655],[572,685],[535,706],[512,718],[496,726],[485,733],[472,742],[460,752],[451,759],[448,762],[447,763],[447,764],[446,764],[446,766],[445,766],[445,767],[444,767],[443,768],[442,769],[441,769],[440,770],[439,770],[439,771],[437,771],[435,772],[433,773],[430,774],[429,774],[427,774]],"dx":-556,"dy":70,"length":964.9821931623364,"timing":[0,16,33,83,278,297,309,319,333,350,366,383,399,417,433,449,466,483,499,516,533,549,566,583,599,616,633,649,666,683,699,716,734,749,766,783,799,816,833,849,866,883,899,916,933,949,966,983,999,1016,1139,1149,1166,1183,1233,1249,1266,1283,1300,1317,1345,1350,1366,1383,1399,1416,1433,1449]},{"start":[983,400],"end":[1568,572],"points":[[983,400],[983,401],[983,402],[983,403],[983,405],[983,407],[983,408],[983,409],[983,412],[985,417],[990,423],[1002,431],[1021,437],[1050,442],[1089,449],[1143,461],[1203,475],[1261,489],[1320,502],[1368,512],[1409,520],[1446,527],[1477,532],[1499,535],[1513,537],[1520,539],[1521,539],[1520,539],[1517,540],[1515,541],[1513,541],[1512,542],[1513,542],[1517,542],[1525,542],[1534,544],[1543,545],[1555,546],[1569,547],[1582,550],[1591,553],[1599,554],[1601,555],[1602,555],[1601,555],[1600,555],[1599,555],[1599,556],[1599,557],[1599,558],[1599,560],[1599,562],[1599,563],[1598,564],[1596,566],[1594,567],[1592,568],[1591,569],[1589,569],[1586,570],[1583,570],[1580,570],[1576,571],[1573,571],[1570,571],[1569,572],[1568,572]],"dx":585,"dy":172,"length":716.2102896667692,"timing":[0,172,184,200,217,233,250,267,283,300,316,333,350,367,383,400,416,433,450,467,483,500,516,533,550,567,583,633,651,667,683,700,1051,1066,1083,1100,1116,1133,1150,1166,1183,1200,1217,1233,1301,1320,1367,1469,1483,1500,1516,1533,1550,1566,1583,1600,1617,1635,1650,1666,1683,1700,1716,1733,1750,1766,1783]},{"start":[721,491],"end":[1005,425],"points":[[720,491],[718,491],[716,491],[713,492],[710,492],[703,492],[691,492],[675,492],[655,493],[634,493],[619,493],[604,493],[596,493],[594,493],[595,493],[600,493],[610,491],[630,489],[656,486],[687,482],[723,478],[761,474],[797,469],[830,465],[862,461],[887,458],[906,456],[922,454],[936,453],[947,452],[955,452],[960,451],[965,450],[969,449],[973,448],[977,447],[979,446],[980,446],[980,445],[981,445],[982,444],[983,442],[985,439],[988,436],[991,433],[995,431],[998,429],[1001,427],[1003,426],[1005,426],[1005,425]],"dx":284,"dy":-66,"length":550.1358977741831,"timing":[0,36,52,69,86,102,119,136,152,169,186,202,219,236,252,269,285,302,319,335,352,369,385,402,419,436,452,469,486,502,520,536,552,569,585,602,619,636,763,769,785,802,819,835,852,869,885,902,919,935,952]},{"start":[1382,540],"end":[271,636],"points":[[1382,540],[1382,539],[1383,539],[1386,538],[1388,538],[1391,537],[1394,537],[1397,537],[1397,536],[1396,536],[1393,535],[1380,535],[1353,535],[1308,535],[1251,538],[1180,546],[1095,556],[1005,565],[902,573],[805,580],[719,590],[653,600],[604,610],[562,621],[524,632],[491,641],[464,650],[440,659],[419,665],[392,671],[365,675],[342,675],[326,676],[316,676],[306,676],[295,676],[284,675],[275,671],[268,668],[263,665],[261,663],[261,662],[261,660],[263,658],[266,656],[269,652],[273,647],[275,644],[275,642],[275,640],[274,638],[272,637],[271,636]],"dx":-1111,"dy":96,"length":1204.552969652777,"timing":[0,50,66,83,100,116,133,150,331,338,350,366,383,400,416,433,450,466,483,500,516,533,549,566,583,600,616,633,650,666,683,700,716,733,750,766,783,800,816,833,851,866,883,900,916,933,951,966,983,1000,1016,1033,1050]},{"start":[271,636],"end":[1561,157],"points":[[271,635],[270,635],[270,634],[269,632],[269,629],[271,628],[272,628],[274,627],[287,624],[307,618],[337,611],[379,601],[442,587],[531,567],[639,545],[772,517],[949,474],[1139,420],[1332,359],[1491,297],[1588,254],[1659,221],[1703,196],[1729,180],[1740,168],[1739,162],[1725,151],[1707,143],[1695,142],[1690,142],[1688,140],[1685,135],[1675,129],[1658,127],[1642,127],[1633,130],[1623,133],[1610,137],[1593,142],[1581,149],[1574,153],[1569,155],[1565,156],[1562,157],[1561,157]],"dx":1290,"dy":-479,"length":1758.2948830357718,"timing":[0,100,115,127,144,161,358,361,378,394,411,427,444,461,477,494,511,527,544,561,577,594,611,627,644,661,677,694,711,727,744,761,777,794,811,827,844,861,877,894,911,927,944,961,977]},{"start":[1411,314],"end":[938,193],"points":[[1411,314],[1410,314],[1410,315],[1405,317],[1398,321],[1388,327],[1374,334],[1359,343],[1342,352],[1319,363],[1296,375],[1267,389],[1232,403],[1198,414],[1162,418],[1126,413],[1087,394],[1052,368],[1033,347],[1026,329],[1023,313],[1021,295],[1018,274],[1011,254],[1000,237],[983,223],[969,214],[958,209],[952,205],[948,202],[945,200],[942,198],[939,197],[937,197],[937,196],[937,195],[938,194],[938,193]],"dx":-473,"dy":-121,"length":620.53220311715,"timing":[0,63,67,83,100,116,133,150,166,183,200,216,233,250,267,283,300,317,333,350,366,383,400,416,433,450,466,483,500,516,533,550,566,583,685,713,729,766]},{"start":[1736,565],"end":[437,302],"points":[[1735,565],[1732,564],[1724,563],[1711,561],[1689,560],[1653,559],[1605,555],[1532,545],[1431,524],[1325,500],[1206,470],[1068,430],[928,393],[807,359],[705,330],[623,303],[552,274],[505,250],[474,232],[458,222],[448,215],[444,211],[441,210],[441,211],[441,212],[439,219],[436,229],[434,240],[433,253],[437,264],[441,274],[445,284],[448,293],[451,302],[454,309],[455,312],[455,313],[454,313],[453,312],[452,311],[449,310],[447,308],[444,306],[441,305],[439,303],[438,302],[437,302]],"dx":-1299,"dy":-263,"length":1480.3485420199554,"timing":[0,15,31,48,65,81,98,115,132,148,165,181,198,215,231,248,265,281,298,315,332,348,365,390,398,415,433,448,465,481,498,515,531,548,565,581,598,615,631,681,698,715,731,748,765,781,798]},{"start":[437,302],"end":[1667,679],"points":[[437,301],[438,301],[439,301],[442,300],[447,300],[453,300],[461,300],[471,300],[489,302],[519,306],[557,311],[605,317],[666,325],[742,341],[826,361],[931,388],[1035,418],[1121,445],[1202,474],[1288,504],[1359,529],[1441,559],[1503,584],[1551,605],[1586,621],[1606,629],[1616,633],[1623,637],[1627,640],[1629,642],[1629,643],[1629,646],[1629,648],[1629,650],[1629,652],[1629,653],[1629,654],[1631,655],[1637,659],[1644,664],[1651,669],[1656,672],[1660,675],[1664,677],[1666,678],[1666,679],[1667,679]],"dx":1230,"dy":377,"length":1305.396535102648,"timing":[0,79,89,106,122,139,156,172,189,206,222,239,256,272,289,306,322,339,356,373,389,406,422,439,456,472,489,506,522,539,556,572,589,606,622,639,657,672,689,706,722,739,755,772,789,806,856]},{"start":[1475,455],"end":[1012,180],"points":[[1475,455],[1475,456],[1475,457],[1475,458],[1472,462],[1469,464],[1462,464],[1451,460],[1437,453],[1434,452],[1433,451],[1432,451],[1418,445],[1394,436],[1364,425],[1327,407],[1286,385],[1238,357],[1188,329],[1137,304],[1094,279],[1056,254],[1024,230],[1008,215],[999,204],[994,199],[990,195],[988,194],[986,194],[986,193],[986,192],[988,190],[992,186],[998,183],[1005,181],[1010,181],[1012,180]],"dx":-463,"dy":-275,"length":601.7489843450323,"timing":[0,52,73,83,101,117,133,150,167,184,349,350,367,383,400,417,433,450,467,483,500,517,533,550,567,583,600,617,633,705,717,733,750,767,783,800,817]},{"start":[1343,198],"end":[1705,742],"points":[[1343,199],[1344,202],[1350,211],[1363,225],[1382,244],[1411,269],[1448,299],[1491,342],[1531,394],[1571,460],[1605,524],[1634,576],[1656,617],[1670,643],[1675,664],[1677,676],[1677,682],[1677,684],[1677,685],[1676,687],[1676,690],[1676,693],[1677,695],[1677,696],[1677,701],[1679,713],[1684,724],[1688,733],[1691,737],[1693,739],[1697,740],[1703,742],[1705,742]],"dx":362,"dy":544,"length":671.1355538139641,"timing":[0,14,31,48,64,81,98,114,131,148,164,181,198,214,231,248,264,281,298,314,331,347,364,381,397,414,431,448,464,481,498,514,519]},{"start":[1368,343],"end":[966,169],"points":[[1367,342],[1367,343],[1367,344],[1365,349],[1359,356],[1348,367],[1334,379],[1313,394],[1284,410],[1242,424],[1198,435],[1149,442],[1099,446],[1045,445],[990,436],[933,417],[879,390],[845,365],[824,342],[812,315],[806,289],[805,266],[813,243],[832,221],[856,201],[879,182],[894,171],[908,162],[921,154],[934,151],[946,151],[958,154],[961,157],[962,159],[962,160],[962,161],[962,164],[963,166],[965,168],[966,169]],"dx":-402,"dy":-174,"length":902.2790693060471,"timing":[0,26,33,49,66,83,99,116,133,150,166,183,199,216,233,249,266,283,299,316,333,349,366,383,399,416,433,449,466,483,500,517,533,550,566,583,599,616,633,649]},{"start":[1787,200],"end":[239,760],"points":[[1786,200],[1783,200],[1777,200],[1766,203],[1749,207],[1712,217],[1657,231],[1586,246],[1492,263],[1384,280],[1283,292],[1175,302],[1078,304],[997,305],[928,302],[875,298],[842,297],[826,299],[819,306],[812,317],[798,343],[775,382],[740,428],[689,479],[630,528],[571,576],[505,630],[447,675],[402,704],[370,718],[345,724],[330,725],[318,726],[314,726],[313,726],[313,727],[309,729],[303,732],[294,735],[289,735],[287,735],[285,735],[280,735],[273,737],[267,739],[264,741],[262,743],[259,745],[255,749],[250,752],[246,755],[243,757],[242,758],[241,758],[241,759],[240,760],[239,760]],"dx":-1548,"dy":560,"length":1740.5154233303997,"timing":[0,17,34,50,67,84,100,117,134,150,167,184,200,217,234,250,267,284,300,317,334,350,367,384,400,417,434,450,467,484,500,517,534,550,567,583,600,617,633,650,667,684,700,717,734,750,767,783,800,817,835,850,867,884,900,917,933]},{"start":[1471,839],"end":[793,786],"points":[[1471,839],[1472,839],[1473,839],[1473,837],[1473,831],[1470,820],[1467,808],[1465,789],[1463,760],[1463,731],[1460,700],[1454,676],[1441,654],[1424,644],[1405,647],[1374,663],[1335,687],[1284,721],[1232,753],[1175,784],[1116,809],[1061,826],[1011,839],[974,848],[939,851],[905,851],[867,843],[843,836],[831,832],[827,829],[823,827],[819,823],[813,817],[809,811],[805,802],[802,795],[799,791],[797,789],[795,787],[793,787],[793,786]],"dx":-678,"dy":-53,"length":918.199432567454,"timing":[0,17,34,50,66,83,100,117,133,150,167,183,200,216,233,250,266,283,300,316,333,350,367,383,400,416,433,450,466,483,500,516,533,550,566,583,600,616,633,650,663]},{"start":[793,786],"end":[745,180],"points":[[793,785],[794,785],[795,785],[796,785],[798,783],[802,781],[809,778],[818,775],[826,770],[833,761],[841,734],[844,687],[841,632],[831,575],[822,534],[818,506],[818,478],[822,440],[825,402],[825,369],[819,339],[815,318],[815,303],[817,294],[818,286],[816,280],[808,274],[797,267],[782,260],[770,254],[762,248],[755,242],[749,236],[744,229],[739,224],[737,218],[737,211],[739,202],[743,192],[745,186],[745,180]],"dx":-48,"dy":-606,"length":676.6387432022022,"timing":[0,53,70,93,109,126,143,159,176,193,209,226,243,259,276,293,310,326,343,359,376,393,409,426,443,459,476,493,509,526,543,559,576,593,609,626,643,659,676,693,708]},{"start":[551,269],"end":[1464,849],"points":[[551,270],[552,270],[553,270],[555,271],[561,274],[571,279],[584,283],[599,289],[614,294],[634,302],[662,312],[692,322],[722,331],[759,344],[800,362],[850,384],[915,415],[997,461],[1081,515],[1165,571],[1243,619],[1304,654],[1365,689],[1418,723],[1456,755],[1482,780],[1497,798],[1504,809],[1505,814],[1505,816],[1502,818],[1500,820],[1496,820],[1493,820],[1490,820],[1489,822],[1488,823],[1487,825],[1483,829],[1478,833],[1472,838],[1469,842],[1466,846],[1465,848],[1464,849]],"dx":913,"dy":580,"length":1167.7477646251937,"timing":[0,19,33,50,67,83,100,117,133,150,167,183,200,217,233,250,267,283,300,317,334,350,367,383,400,417,433,450,467,483,500,517,533,550,566,583,600,616,633,650,666,683,700,716,733]},{"start":[1188,473],"end":[823,569],"points":[[1189,473],[1188,473],[1186,477],[1185,486],[1185,495],[1180,509],[1162,532],[1122,560],[1051,594],[967,621],[893,635],[830,639],[780,637],[746,629],[723,620],[715,611],[714,602],[721,591],[732,583],[743,580],[754,578],[765,577],[775,576],[786,575],[796,574],[803,573],[810,572],[815,571],[820,570],[822,570],[823,569]],"dx":-365,"dy":96,"length":671.7496585558542,"timing":[0,70,85,102,118,135,153,168,185,202,219,235,252,268,285,302,318,335,352,369,385,402,418,435,452,468,485,502,518,535,552]},{"start":[1592,669],"end":[1755,866],"points":[[1589,670],[1584,672],[1572,675],[1557,679],[1536,683],[1510,688],[1480,693],[1449,698],[1415,703],[1389,707],[1372,712],[1365,717],[1365,723],[1378,733],[1407,747],[1452,763],[1510,782],[1572,800],[1642,817],[1694,826],[1733,833],[1758,839],[1771,842],[1776,845],[1777,845],[1777,847],[1775,850],[1772,853],[1769,855],[1766,856],[1765,857],[1764,857],[1763,857],[1762,858],[1760,860],[1758,862],[1757,864],[1756,865],[1756,866],[1755,866]],"dx":163,"dy":197,"length":700.9625185713294,"timing":[0,16,33,50,66,83,100,116,134,150,166,183,200,216,233,250,266,283,300,316,333,350,366,383,400,416,433,450,466,483,500,516,533,550,566,583,600,616,638,644]},{"start":[916,569],"end":[101,751],"points":[[916,569],[915,569],[911,571],[899,576],[875,583],[840,592],[792,603],[736,616],[680,631],[613,646],[549,657],[476,666],[412,675],[358,684],[313,693],[276,701],[240,707],[209,712],[179,717],[152,721],[135,724],[123,729],[114,734],[105,739],[98,742],[94,744],[94,745],[96,746],[98,746],[98,747],[99,748],[100,751],[101,751]],"dx":-815,"dy":182,"length":854.9488760086244,"timing":[0,71,85,100,117,134,150,167,183,200,217,233,250,267,283,300,317,333,350,367,383,400,417,433,450,467,484,500,517,533,550,567,571]},{"start":[1257,868],"end":[1404,458],"points":[[1257,865],[1255,863],[1254,863],[1250,862],[1242,861],[1227,860],[1208,859],[1184,857],[1155,852],[1118,844],[1079,832],[1042,816],[1018,801],[1006,788],[1003,774],[1008,752],[1023,722],[1044,686],[1076,643],[1121,597],[1171,552],[1229,508],[1282,476],[1319,456],[1345,446],[1360,442],[1368,441],[1373,441],[1374,441],[1375,442],[1380,451],[1387,460],[1392,462],[1395,462],[1398,461],[1400,460],[1402,459],[1404,458]],"dx":147,"dy":-410,"length":841.4474449873339,"timing":[0,17,33,50,67,84,100,117,133,150,167,184,200,217,233,250,267,283,300,317,333,350,367,383,400,417,433,450,520,533,550,567,583,600,617,633,650,667]},{"start":[1571,812],"end":[1159,369],"points":[[1571,812],[1572,812],[1572,811],[1574,811],[1575,810],[1576,810],[1577,810],[1574,809],[1565,805],[1545,793],[1514,772],[1476,744],[1425,702],[1369,652],[1322,606],[1279,561],[1246,521],[1221,491],[1199,462],[1181,438],[1170,420],[1167,408],[1167,401],[1167,395],[1168,390],[1168,386],[1167,384],[1166,381],[1164,378],[1162,374],[1160,370],[1159,369]],"dx":-412,"dy":-443,"length":629.7748919250532,"timing":[0,33,151,166,182,199,216,266,282,299,317,332,349,366,382,399,416,432,449,466,483,500,516,532,549,566,582,599,616,632,649,666]},{"start":[657,651],"end":[1083,533],"points":[[658,651],[660,650],[662,649],[664,648],[666,648],[667,647],[668,647],[668,646],[668,645],[668,643],[668,641],[669,638],[672,634],[675,631],[683,627],[693,622],[704,618],[717,613],[738,606],[763,599],[794,591],[833,586],[871,581],[910,577],[946,572],[977,567],[1007,561],[1031,555],[1050,548],[1063,543],[1070,540],[1073,538],[1077,535],[1081,534],[1083,533]],"dx":426,"dy":-118,"length":452.08573892656955,"timing":[0,16,33,50,67,83,106,122,133,150,166,183,200,216,233,250,266,283,300,316,333,350,366,383,400,416,433,450,466,483,500,517,534,550,566]},{"start":[326,721],"end":[1111,286],"points":[[326,719],[326,718],[326,717],[326,716],[327,714],[328,713],[331,710],[337,706],[347,701],[366,691],[395,680],[440,666],[495,656],[561,649],[631,641],[697,631],[774,613],[850,587],[917,558],[978,526],[1023,498],[1051,476],[1069,453],[1082,429],[1095,406],[1108,389],[1115,378],[1117,369],[1117,363],[1119,359],[1125,353],[1133,342],[1140,329],[1143,317],[1144,311],[1144,308],[1139,304],[1127,298],[1115,293],[1111,291],[1110,289],[1111,288],[1111,286]],"dx":785,"dy":-435,"length":1016.5769147233862,"timing":[0,50,67,83,100,117,133,150,167,183,200,217,233,250,267,283,300,317,333,350,367,383,400,417,433,450,467,483,500,517,533,550,567,583,600,617,633,650,667,683,700,717,733]},{"start":[387,766],"end":[717,311],"points":[[387,766],[386,766],[385,766],[385,765],[390,759],[407,746],[439,725],[491,693],[554,655],[625,613],[680,576],[735,534],[765,505],[772,484],[764,460],[749,442],[732,429],[718,420],[706,413],[696,408],[689,405],[685,403],[684,400],[683,393],[683,386],[685,377],[692,368],[700,358],[709,347],[715,337],[719,328],[720,321],[720,315],[719,312],[717,311]],"dx":330,"dy":-455,"length":715.7481129229509,"timing":[0,49,69,116,135,149,166,183,199,216,233,249,266,283,299,316,332,349,366,384,399,416,433,449,466,483,499,516,532,549,566,583,599,616,634]},{"start":[1056,630],"end":[1182,191],"points":[[1056,630],[1055,630],[1054,631],[1051,632],[1047,632],[1041,632],[1030,632],[1016,629],[1006,620],[1005,607],[1014,574],[1037,528],[1072,475],[1112,425],[1152,376],[1192,328],[1226,286],[1252,251],[1270,221],[1280,200],[1282,193],[1279,191],[1273,190],[1266,189],[1257,191],[1244,195],[1227,201],[1211,203],[1199,203],[1189,201],[1182,200],[1180,200],[1180,199],[1180,197],[1181,195],[1181,194],[1181,193],[1182,192],[1182,191]],"dx":126,"dy":-439,"length":684.1164114483073,"timing":[0,75,81,98,115,131,148,165,182,198,214,231,248,265,281,299,315,331,348,365,381,398,415,431,448,464,481,498,515,532,548,565,583,600,615,637,651,665,681]},{"start":[1320,569],"end":[670,710],"points":[[1320,569],[1319,569],[1318,569],[1317,569],[1316,569],[1313,569],[1309,569],[1303,568],[1293,566],[1280,563],[1256,558],[1222,552],[1176,548],[1136,550],[1084,559],[1031,572],[972,585],[905,603],[852,619],[811,633],[776,644],[754,650],[740,654],[736,656],[737,657],[738,657],[740,657],[736,659],[733,663],[730,667],[727,671],[724,675],[718,681],[711,687],[703,692],[695,696],[687,700],[678,705],[673,708],[670,710]],"dx":-650,"dy":141,"length":693.8782169298073,"timing":[0,75,87,100,116,132,149,166,182,199,216,232,249,267,283,299,316,332,349,366,383,399,416,432,456,466,482,532,549,566,582,599,616,632,649,666,682,699,716,732]},{"start":[99,737],"end":[916,226],"points":[[99,736],[100,735],[101,735],[102,735],[103,734],[105,734],[106,734],[109,733],[111,733],[115,732],[119,732],[127,731],[135,730],[149,729],[167,727],[190,723],[222,718],[268,707],[323,689],[394,655],[471,610],[540,568],[610,525],[673,488],[727,454],[767,423],[801,390],[820,364],[832,340],[834,326],[834,318],[834,316],[833,316],[833,315],[831,315],[826,312],[821,308],[820,306],[823,301],[834,287],[853,268],[874,251],[894,238],[915,228],[935,219],[946,212],[950,210],[949,210],[948,210],[946,210],[944,211],[940,213],[936,214],[932,216],[927,219],[923,221],[921,223],[919,224],[918,225],[917,225],[917,226],[916,226]],"dx":817,"dy":-511,"length":1100.7955608261216,"timing":[0,17,46,58,66,83,100,116,133,150,167,184,200,216,233,250,266,283,300,316,333,350,366,384,400,416,433,450,467,483,500,516,542,551,566,583,600,617,634,650,666,683,700,716,733,750,766,798,804,816,833,850,867,884,901,916,933,950,966,983,1005,1017]},{"start":[647,819],"end":[487,690],"points":[[648,819],[649,819],[649,818],[651,814],[654,808],[663,800],[675,790],[691,775],[712,755],[737,733],[775,701],[809,660],[830,627],[838,610],[833,608],[811,612],[773,628],[724,652],[682,671],[641,687],[607,699],[580,707],[559,711],[545,712],[533,711],[529,709],[528,708],[530,706],[532,704],[534,701],[534,698],[533,694],[528,691],[524,690],[519,690],[511,690],[503,690],[495,690],[490,690],[487,690]],"dx":-160,"dy":-129,"length":680.4661567568397,"timing":[0,16,33,50,66,83,100,116,133,150,167,183,200,216,233,250,266,283,300,316,333,350,366,385,400,416,433,450,467,483,500,516,533,550,566,583,600,616,633,650]},{"start":[489,689],"end":[496,475],"points":[[490,689],[493,689],[499,687],[506,686],[518,683],[530,680],[544,677],[558,674],[575,672],[589,670],[601,669],[609,669],[613,669],[614,668],[613,662],[605,641],[590,614],[566,587],[537,555],[505,524],[484,504],[478,497],[477,493],[477,491],[477,489],[477,487],[480,485],[485,481],[491,477],[495,475],[496,475]],"dx":7,"dy":-214,"length":380.8252759748656,"timing":[0,16,33,50,66,83,100,116,134,150,166,183,200,216,233,250,266,283,300,316,333,350,366,383,401,418,433,450,466,483,500]},{"start":[1717,683],"end":[1549,329],"points":[[1717,683],[1718,683],[1719,683],[1718,683],[1717,683],[1711,684],[1703,687],[1691,691],[1677,694],[1655,699],[1635,700],[1612,697],[1594,685],[1582,666],[1578,644],[1578,614],[1581,570],[1589,518],[1600,472],[1617,428],[1638,398],[1652,384],[1659,376],[1663,372],[1663,371],[1663,370],[1658,368],[1649,365],[1637,363],[1618,359],[1595,349],[1569,334],[1550,323],[1538,313],[1531,305],[1525,297],[1520,293],[1519,292],[1520,292],[1520,293],[1522,298],[1527,305],[1532,311],[1536,314],[1539,316],[1543,320],[1547,324],[1549,327],[1549,328],[1549,329]],"dx":-168,"dy":-354,"length":690.6227442088863,"timing":[0,25,47,111,117,134,150,167,183,200,217,234,251,267,283,300,317,333,350,367,384,400,417,433,450,467,484,501,517,533,550,567,583,600,617,633,650,667,717,767,784,800,817,833,850,867,883,900,917,933]},{"start":[721,232],"end":[181,874],"points":[[722,233],[723,233],[725,235],[729,239],[734,244],[739,251],[744,255],[748,258],[752,262],[755,266],[754,271],[736,285],[688,312],[623,341],[554,372],[491,404],[401,452],[330,496],[276,537],[232,586],[207,636],[194,679],[185,719],[185,750],[194,779],[198,796],[198,802],[197,806],[197,808],[197,811],[197,813],[196,814],[196,817],[196,820],[196,822],[195,822],[195,823],[195,825],[195,829],[194,831],[194,834],[193,838],[192,844],[190,850],[188,856],[187,861],[186,867],[183,871],[182,873],[181,874]],"dx":-540,"dy":642,"length":969.9732721864414,"timing":[0,6,18,35,51,68,85,101,118,135,152,169,185,201,219,235,252,268,285,302,319,335,351,368,385,402,419,435,451,468,485,501,518,535,551,579,585,601,618,635,652,669,685,703,718,735,751,768,785,792]},{"start":[925,770],"end":[827,870],"points":[[925,769],[925,768],[927,766],[933,759],[947,748],[967,732],[1000,713],[1039,701],[1095,692],[1175,684],[1263,676],[1351,668],[1431,660],[1469,659],[1471,661],[1445,680],[1379,722],[1316,755],[1248,779],[1170,800],[1109,814],[1051,823],[1008,828],[986,832],[973,834],[963,835],[957,836],[953,839],[952,842],[952,846],[952,849],[951,852],[949,854],[942,857],[930,861],[916,865],[901,868],[884,870],[867,871],[851,871],[838,870],[832,870],[828,870],[827,870]],"dx":-98,"dy":100,"length":1266.549468149617,"timing":[0,6,20,36,53,71,87,103,120,136,153,170,187,203,220,236,254,270,286,303,320,336,353,370,386,403,420,436,453,470,486,503,520,536,553,570,587,603,620,636,653,670,686,703]},{"start":[1106,629],"end":[846,519],"points":[[1106,628],[1106,627],[1106,626],[1106,623],[1104,617],[1104,607],[1104,597],[1100,581],[1092,555],[1076,518],[1047,475],[1009,446],[970,432],[932,427],[904,426],[888,430],[879,439],[877,447],[878,458],[883,473],[887,486],[890,500],[892,513],[892,519],[891,524],[888,526],[883,526],[876,526],[868,525],[859,523],[852,522],[847,520],[846,519]],"dx":-260,"dy":-110,"length":486.0325393872099,"timing":[0,12,21,38,54,71,88,104,121,137,154,171,188,204,221,238,255,271,288,305,321,338,355,371,387,404,421,437,454,471,487,504,522]},{"start":[515,456],"end":[1226,700],"points":[[516,456],[516,455],[524,453],[536,452],[554,452],[580,455],[614,462],[657,470],[708,480],[773,497],[828,512],[886,534],[940,558],[984,581],[1022,605],[1050,626],[1064,638],[1074,646],[1080,653],[1084,658],[1089,661],[1096,664],[1107,667],[1123,670],[1140,670],[1161,670],[1187,670],[1208,672],[1224,674],[1236,675],[1240,676],[1240,677],[1238,678],[1237,678],[1236,680],[1236,681],[1236,682],[1236,683],[1236,686],[1234,689],[1232,694],[1228,697],[1226,700]],"dx":711,"dy":244,"length":806.2440220853251,"timing":[0,9,25,42,59,76,93,108,126,142,159,175,192,209,225,242,259,276,292,309,326,342,359,375,392,409,425,442,459,476,491,541,559,576,591,608,626,642,659,675,692,708,726]},{"start":[1308,585],"end":[1124,242],"points":[[1308,584],[1308,583],[1304,578],[1296,570],[1284,560],[1267,546],[1251,531],[1236,506],[1224,474],[1214,437],[1208,394],[1207,354],[1206,319],[1205,290],[1205,273],[1205,262],[1204,252],[1202,246],[1199,242],[1196,242],[1191,242],[1181,246],[1169,251],[1158,255],[1148,258],[1140,258],[1135,258],[1128,254],[1126,251],[1124,248],[1124,245],[1124,243],[1124,242]],"dx":-184,"dy":-343,"length":464.97380115357805,"timing":[0,12,29,46,62,79,95,112,129,146,162,178,195,213,229,246,263,279,295,312,330,345,363,378,395,413,429,445,463,478,495,512,520]},{"start":[1214,546],"end":[880,442],"points":[[1214,546],[1214,545],[1214,544],[1214,542],[1214,538],[1212,534],[1209,526],[1204,520],[1194,514],[1174,508],[1141,501],[1092,493],[1039,487],[995,482],[968,477],[948,470],[937,466],[932,462],[929,460],[928,458],[927,456],[927,454],[926,453],[925,452],[925,451],[924,451],[920,450],[913,450],[905,450],[896,448],[888,446],[883,444],[880,442]],"dx":-334,"dy":-104,"length":369.6158456391902,"timing":[0,64,70,82,100,116,132,149,166,182,199,216,233,249,266,282,299,316,332,349,366,383,399,416,432,449,466,482,499,516,532,549,566]},{"start":[883,437],"end":[1431,245],"points":[[884,437],[885,437],[889,437],[898,440],[912,445],[926,451],[940,458],[959,466],[978,471],[1000,472],[1027,468],[1063,457],[1114,437],[1162,418],[1207,398],[1259,374],[1301,356],[1337,338],[1361,327],[1375,318],[1379,314],[1380,312],[1380,309],[1378,306],[1376,302],[1374,298],[1374,295],[1375,291],[1379,286],[1384,282],[1389,277],[1394,272],[1399,267],[1407,262],[1413,257],[1421,251],[1427,246],[1431,245]],"dx":548,"dy":-192,"length":633.1312195254624,"timing":[0,11,24,42,58,75,91,108,125,141,158,175,192,208,225,241,258,274,291,308,325,341,358,374,392,408,425,441,458,475,491,508,525,541,558,574,591,605]},{"start":[687,569],"end":[348,236],"points":[[687,568],[688,566],[688,562],[689,558],[692,554],[698,550],[708,546],[720,542],[732,541],[748,539],[761,538],[767,538],[768,538],[764,536],[746,530],[711,518],[667,499],[626,473],[585,438],[541,388],[497,334],[463,298],[443,280],[431,272],[424,267],[420,266],[419,265],[416,265],[412,265],[404,265],[393,263],[380,262],[369,259],[359,255],[353,251],[349,246],[348,242],[348,238],[348,236]],"dx":-339,"dy":-333,"length":631.3978678708057,"timing":[0,16,33,50,66,83,99,116,133,149,166,183,199,216,233,249,266,283,299,316,333,349,366,382,399,416,433,449,466,483,499,516,532,549,565,583,599,616,632]},{"start":[1292,124],"end":[322,318],"points":[[1291,124],[1283,129],[1261,141],[1227,158],[1189,178],[1150,198],[1101,223],[1030,260],[940,301],[836,336],[734,362],[655,378],[594,385],[548,389],[514,389],[486,386],[468,382],[452,375],[444,369],[436,363],[430,358],[425,354],[421,352],[419,347],[415,342],[409,335],[400,330],[385,323],[369,318],[354,315],[340,314],[332,314],[329,314],[328,315],[328,317],[328,318],[326,318],[323,318],[322,318]],"dx":-970,"dy":194,"length":1048.5350631166868,"timing":[0,13,30,46,64,79,96,113,129,146,163,179,196,213,229,246,263,279,296,313,329,346,363,379,396,413,429,446,463,479,496,513,529,546,564,579,596,614,619]},{"start":[321,561],"end":[1240,347],"points":[[320,561],[321,561],[322,558],[327,555],[336,550],[350,542],[365,535],[375,530],[383,526],[397,521],[419,513],[460,503],[521,489],[581,470],[656,451],[762,431],[861,416],[949,403],[1027,397],[1074,394],[1105,393],[1128,392],[1139,391],[1144,390],[1146,388],[1149,385],[1156,382],[1165,380],[1170,379],[1172,378],[1173,378],[1176,375],[1181,370],[1188,366],[1200,360],[1219,353],[1234,349],[1240,347]],"dx":919,"dy":-214,"length":956.054555065935,"timing":[0,62,70,86,103,120,136,153,170,186,203,220,237,253,270,287,303,320,337,352,370,387,402,419,436,453,470,488,503,521,536,553,569,586,603,619,636,650]},{"start":[862,474],"end":[270,368],"points":[[862,473],[861,472],[860,472],[858,472],[858,471],[857,470],[852,466],[846,455],[842,440],[840,422],[834,405],[814,386],[774,365],[705,339],[623,317],[547,303],[482,298],[428,299],[381,314],[348,333],[332,348],[327,354],[320,358],[308,362],[298,366],[290,369],[287,369],[284,369],[282,369],[279,369],[276,369],[272,369],[270,369],[270,368]],"dx":-592,"dy":-106,"length":683.4859435196751,"timing":[0,16,33,49,111,116,133,149,166,183,199,216,233,249,267,283,299,316,333,349,366,383,399,417,432,449,466,483,499,516,533,549,566,583]},{"start":[1113,138],"end":[224,598],"points":[[1113,138],[1112,138],[1111,139],[1107,146],[1102,154],[1094,164],[1080,178],[1058,197],[1028,222],[986,251],[933,280],[864,308],[780,330],[705,341],[632,353],[568,368],[518,386],[482,399],[452,414],[427,430],[404,449],[381,470],[363,488],[344,507],[325,523],[309,535],[290,547],[272,557],[257,565],[249,570],[246,574],[245,575],[245,577],[242,579],[236,584],[232,588],[230,590],[228,593],[228,594],[227,594],[225,597],[224,598]],"dx":-889,"dy":460,"length":1030.1250378407326,"timing":[0,121,133,150,166,183,200,216,233,250,266,283,300,316,333,349,366,383,400,416,432,449,466,483,500,516,534,549,566,583,599,616,666,683,699,716,733,750,766,782,799,816]},{"start":[224,598],"end":[1458,339],"points":[[225,598],[226,595],[227,594],[229,592],[232,589],[236,584],[241,578],[252,571],[277,561],[317,550],[362,543],[424,535],[495,531],[584,522],[684,506],[790,482],[889,458],[984,441],[1045,436],[1084,436],[1097,439],[1099,443],[1097,450],[1088,461],[1076,474],[1072,484],[1072,489],[1081,493],[1100,493],[1130,487],[1173,474],[1222,458],[1282,435],[1327,417],[1369,395],[1401,378],[1424,366],[1441,358],[1451,353],[1455,349],[1456,346],[1456,345],[1457,342],[1458,341],[1458,340],[1458,339]],"dx":1234,"dy":-259,"length":1381.8265536716149,"timing":[0,17,33,50,67,83,100,117,133,150,167,183,200,216,233,250,267,284,300,317,333,349,367,383,402,416,433,451,466,483,500,517,534,550,567,584,600,616,633,650,666,683,733,750,766,783]},{"start":[1332,254],"end":[668,595],"points":[[1331,254],[1328,254],[1325,257],[1322,258],[1321,259],[1320,259],[1315,262],[1297,268],[1255,283],[1196,300],[1119,326],[1040,354],[971,382],[899,417],[845,446],[802,470],[774,486],[756,500],[745,510],[737,519],[732,527],[728,535],[727,542],[727,546],[727,549],[727,550],[727,551],[727,552],[727,553],[725,554],[723,556],[717,559],[710,562],[702,566],[693,569],[685,572],[680,574],[676,576],[674,578],[674,579],[674,581],[674,582],[674,584],[674,586],[672,589],[671,591],[669,594],[668,594],[668,595]],"dx":-664,"dy":341,"length":770.6743564656676,"timing":[0,12,28,45,62,78,94,111,128,144,161,178,194,211,228,244,261,279,295,312,328,344,361,377,394,412,429,444,461,511,528,544,561,578,595,612,628,645,661,678,696,711,728,745,761,778,795,811,827]},{"start":[1398,255],"end":[135,241],"points":[[1397,255],[1395,256],[1383,264],[1361,276],[1328,290],[1288,304],[1232,319],[1158,335],[1077,347],[994,355],[905,358],[820,359],[735,358],[653,354],[584,351],[518,346],[453,342],[404,338],[356,333],[313,329],[285,325],[260,322],[245,318],[236,314],[228,307],[218,295],[204,282],[188,271],[174,264],[164,258],[159,255],[159,254],[157,254],[152,251],[144,247],[138,244],[135,242],[135,241]],"dx":-1263,"dy":-14,"length":1306.8856745003075,"timing":[0,11,28,44,61,78,95,111,127,145,161,177,194,211,227,244,260,277,294,311,327,344,361,378,394,411,427,445,461,478,494,511,561,578,595,611,628,647]},{"start":[1244,306],"end":[178,563],"points":[[1243,306],[1242,306],[1231,308],[1193,312],[1137,316],[1063,324],[969,336],[897,345],[828,351],[758,358],[685,365],[621,372],[556,380],[502,391],[459,404],[420,422],[396,438],[379,454],[363,471],[348,486],[336,498],[323,514],[308,522],[292,529],[273,534],[257,538],[236,543],[216,547],[204,551],[196,554],[190,557],[190,558],[189,558],[188,558],[188,559],[184,561],[180,562],[179,563],[178,563]],"dx":-1066,"dy":257,"length":1123.9200220953371,"timing":[0,1,19,36,52,69,85,102,118,135,152,168,185,202,218,236,252,268,285,302,318,335,352,369,386,402,418,435,452,469,486,502,518,535,552,568,585,601,610]},{"start":[178,563],"end":[904,274],"points":[[178,562],[177,562],[176,562],[174,561],[174,560],[177,558],[184,554],[197,547],[229,535],[272,522],[331,506],[409,486],[488,467],[576,444],[670,419],[748,392],[816,366],[860,346],[885,332],[896,322],[900,313],[903,304],[904,296],[904,291],[904,288],[903,286],[903,284],[905,282],[908,278],[910,276],[910,275],[909,274],[906,274],[905,274],[904,274]],"dx":726,"dy":-289,"length":826.7959952378345,"timing":[0,9,22,39,55,72,90,105,122,139,155,172,188,205,222,239,256,272,288,305,321,338,355,371,388,405,421,438,455,472,488,505,522,539,555]},{"start":[1052,595],"end":[673,274],"points":[[1051,594],[1050,590],[1050,584],[1050,578],[1049,572],[1048,566],[1044,560],[1036,552],[1024,543],[1000,530],[959,513],[904,493],[846,470],[801,450],[779,434],[762,414],[751,397],[743,381],[738,367],[732,353],[725,341],[716,329],[707,318],[697,310],[689,302],[684,297],[682,293],[681,289],[680,286],[680,283],[679,282],[677,279],[676,278],[675,275],[673,274]],"dx":-379,"dy":-321,"length":526.2268589102152,"timing":[0,18,34,51,67,84,100,117,134,150,167,184,200,218,234,250,267,285,300,317,334,351,369,384,400,417,434,452,467,484,501,518,534,551,567]},{"start":[388,353],"end":[1282,195],"points":[[389,353],[390,353],[399,351],[429,348],[476,342],[552,333],[652,322],[757,308],[878,292],[993,278],[1082,267],[1160,258],[1211,250],[1240,246],[1256,242],[1264,238],[1268,234],[1269,232],[1270,230],[1271,230],[1271,227],[1273,223],[1276,218],[1280,214],[1280,210],[1280,207],[1280,204],[1280,202],[1280,201],[1280,198],[1281,197],[1282,195]],"dx":894,"dy":-158,"length":932.9851724617447,"timing":[0,2,18,35,52,69,85,102,118,135,152,168,185,202,219,235,252,268,285,302,319,335,352,370,385,402,419,435,452,470,485,502]},{"start":[804,259],"end":[279,215],"points":[[804,260],[800,264],[789,270],[774,277],[744,285],[700,294],[633,303],[560,310],[494,316],[436,318],[399,318],[366,314],[338,307],[314,296],[294,284],[275,270],[262,262],[250,255],[242,249],[239,246],[238,243],[237,242],[237,240],[240,237],[243,233],[249,229],[257,225],[267,221],[275,217],[278,215],[279,215]],"dx":-525,"dy":-44,"length":648.0651720548594,"timing":[0,15,31,48,65,81,98,115,131,148,165,182,198,215,231,248,265,281,298,315,331,349,365,381,399,415,431,448,465,482,498]},{"start":[643,550],"end":[120,278],"points":[[643,551],[643,550],[644,549],[644,548],[644,547],[645,546],[646,542],[648,538],[652,530],[660,522],[668,514],[679,509],[686,503],[685,498],[673,489],[645,477],[604,466],[539,449],[466,428],[392,402],[335,380],[288,362],[253,351],[224,340],[206,331],[189,324],[173,316],[159,308],[148,302],[143,297],[137,292],[132,287],[126,282],[122,279],[120,278]],"dx":-523,"dy":-272,"length":683.0738524962221,"timing":[0,32,47,61,67,82,99,116,133,149,165,182,199,216,232,249,266,282,299,315,332,349,366,382,399,416,433,450,466,483,500,516,532,549,566]},{"start":[520,304],"end":[1175,194],"points":[[520,305],[520,310],[520,321],[520,342],[526,364],[534,378],[548,387],[585,392],[639,390],[708,382],[780,370],[854,351],[924,330],[984,310],[1028,291],[1059,277],[1080,263],[1091,254],[1095,247],[1096,241],[1097,234],[1100,226],[1104,219],[1112,212],[1123,206],[1136,199],[1149,193],[1156,190],[1163,189],[1167,188],[1169,188],[1172,190],[1174,191],[1175,192],[1175,193],[1175,194]],"dx":655,"dy":-110,"length":780.6521484471378,"timing":[0,11,27,44,61,78,94,111,127,144,161,178,194,211,227,244,261,277,294,311,327,344,361,378,394,411,428,444,461,477,494,512,527,544,562,566]},{"start":[865,498],"end":[115,183],"points":[[865,498],[864,498],[853,494],[824,485],[805,477],[788,470],[773,465],[758,459],[734,450],[692,437],[638,423],[577,409],[519,394],[462,377],[389,354],[312,332],[244,314],[185,294],[141,276],[106,259],[79,246],[71,239],[68,236],[68,234],[71,231],[73,228],[74,226],[74,222],[76,216],[81,210],[88,203],[96,198],[103,194],[109,190],[112,186],[114,185],[114,183],[115,183]],"dx":-750,"dy":-315,"length":917.0043328207354,"timing":[0,67,83,100,116,133,149,166,183,199,216,233,249,266,283,300,316,333,349,366,383,399,416,433,449,466,483,499,516,533,549,566,583,599,616,633,649,660]},{"start":[390,588],"end":[1324,657],"points":[[391,588],[392,588],[393,587],[397,585],[407,578],[421,570],[449,557],[488,546],[543,538],[611,533],[677,533],[759,535],[866,549],[968,568],[1055,586],[1136,605],[1188,617],[1223,626],[1249,633],[1261,637],[1263,638],[1264,639],[1264,640],[1265,641],[1270,642],[1278,645],[1292,649],[1309,653],[1320,655],[1323,656],[1323,657],[1324,657]],"dx":934,"dy":69,"length":959.2589051938378,"timing":[0,15,31,48,65,82,98,115,131,148,165,181,198,215,231,248,264,281,298,315,331,348,365,381,398,414,431,448,464,481,509,583]},{"start":[1401,368],"end":[824,685],"points":[[1401,369],[1400,370],[1376,370],[1343,371],[1300,371],[1244,373],[1162,382],[1068,408],[991,442],[941,469],[913,486],[896,498],[887,509],[885,519],[884,531],[884,545],[884,554],[883,562],[880,569],[875,578],[867,587],[857,600],[849,613],[842,623],[836,635],[832,648],[827,658],[822,668],[820,678],[819,682],[819,685],[820,685],[823,685],[824,685]],"dx":-577,"dy":317,"length":745.0884094936049,"timing":[0,17,33,50,67,83,100,117,133,150,167,183,200,218,233,250,267,283,300,317,333,350,367,383,400,417,433,450,467,483,500,553,600,617]},{"start":[147,208],"end":[291,423],"points":[[148,208],[148,207],[152,207],[163,205],[186,206],[228,219],[272,242],[324,279],[361,312],[379,337],[383,351],[381,366],[374,375],[365,379],[356,381],[346,382],[335,382],[325,383],[317,386],[312,388],[308,391],[307,395],[307,400],[307,405],[307,409],[307,411],[306,413],[304,415],[299,419],[293,422],[292,423],[291,423]],"dx":144,"dy":215,"length":427.92603963995055,"timing":[0,13,29,46,62,79,96,112,129,146,162,179,196,212,229,246,262,279,296,312,329,346,362,379,396,413,429,446,462,479,496,512]},{"start":[1267,219],"end":[776,591],"points":[[1267,219],[1267,220],[1266,220],[1264,221],[1255,223],[1240,227],[1208,234],[1162,247],[1090,272],[1011,310],[936,356],[883,393],[850,423],[827,449],[812,473],[804,494],[797,516],[792,534],[787,550],[781,563],[778,573],[778,578],[778,580],[779,582],[780,584],[780,586],[780,588],[780,590],[778,591],[777,591],[776,591]],"dx":-491,"dy":372,"length":661.1226557944584,"timing":[0,88,107,117,133,150,167,183,200,217,233,250,267,283,300,317,333,350,367,383,400,416,433,450,466,483,500,517,533,552,580]},{"start":[480,622],"end":[432,210],"points":[[480,620],[484,616],[488,612],[492,606],[496,600],[497,597],[497,594],[497,592],[494,589],[488,583],[478,572],[468,551],[455,522],[442,481],[431,430],[420,366],[413,313],[407,271],[405,252],[405,240],[407,232],[409,227],[410,226],[411,224],[411,221],[412,218],[413,218],[415,218],[419,216],[425,215],[428,214],[430,214],[432,212],[432,210]],"dx":-48,"dy":-412,"length":450.63611868431906,"timing":[0,17,33,50,67,83,100,117,133,150,167,183,200,217,233,250,267,283,300,317,333,350,367,383,400,416,433,450,467,483,500,517,533,550]},{"start":[1202,241],"end":[1595,941],"points":[[1203,241],[1204,241],[1208,246],[1213,248],[1222,253],[1228,265],[1235,276],[1245,292],[1253,312],[1263,336],[1278,374],[1298,408],[1326,453],[1346,492],[1368,528],[1394,565],[1427,610],[1464,661],[1497,708],[1528,757],[1552,798],[1566,835],[1573,862],[1575,882],[1575,892],[1575,894],[1575,895],[1573,897],[1565,905],[1558,914],[1555,920],[1554,920],[1554,921],[1558,924],[1575,934],[1588,938],[1595,940],[1595,941]],"dx":393,"dy":700,"length":843.6271206147252,"timing":[0,5,19,36,53,69,85,103,119,135,152,169,186,202,218,235,252,269,286,303,319,336,352,369,386,402,423,436,453,469,486,503,612,620,636,654,670,728]},{"start":[1467,276],"end":[402,838],"points":[[1467,277],[1470,282],[1475,295],[1477,303],[1478,304],[1478,305],[1478,324],[1474,348],[1472,383],[1471,418],[1475,461],[1488,494],[1516,533],[1565,590],[1626,640],[1688,682],[1736,717],[1775,755],[1798,785],[1805,806],[1805,810],[1798,817],[1781,824],[1747,832],[1695,831],[1601,816],[1495,795],[1315,765],[1154,753],[1005,744],[870,735],[791,735],[735,734],[717,735],[698,744],[672,757],[638,772],[605,782],[586,782],[568,782],[548,782],[536,784],[528,786],[516,787],[502,788],[483,788],[463,792],[438,802],[413,813],[387,826],[362,838],[352,845],[351,845],[352,845],[353,845],[354,845],[360,845],[370,845],[380,844],[392,842],[397,841],[400,838],[401,838],[402,838]],"dx":-1065,"dy":562,"length":2218.641025300054,"timing":[0,10,26,42,60,109,125,142,159,176,193,209,226,243,260,276,292,310,326,343,359,376,393,410,427,443,459,476,493,509,527,543,560,577,593,610,627,643,660,676,693,710,726,743,760,777,794,811,827,843,859,877,893,963,977,1048,1061,1077,1093,1111,1127,1144,1161,1177]},{"start":[1806,152],"end":[680,151],"points":[[1806,153],[1806,156],[1808,164],[1808,174],[1804,182],[1801,188],[1795,198],[1787,212],[1771,222],[1748,225],[1723,224],[1675,208],[1602,177],[1501,140],[1393,107],[1290,98],[1228,101],[1182,101],[1148,101],[1132,98],[1126,98],[1124,98],[1107,103],[1083,108],[1042,111],[1012,115],[982,122],[961,127],[945,128],[922,135],[878,145],[822,151],[764,152],[708,152],[682,152],[678,152],[678,151],[680,151]],"dx":-1126,"dy":-1,"length":1206.4381442185006,"timing":[0,17,34,51,67,84,101,117,134,152,167,184,201,218,234,251,268,284,301,317,334,351,368,384,401,417,435,451,467,484,501,518,534,551,567,584,668,778]},{"start":[1335,231],"end":[1050,786],"points":[[1335,232],[1334,238],[1326,255],[1315,280],[1310,307],[1302,335],[1296,367],[1282,407],[1256,462],[1220,521],[1182,563],[1134,604],[1105,632],[1096,636],[1092,638],[1091,638],[1088,641],[1085,645],[1078,652],[1075,657],[1075,658],[1075,660],[1075,662],[1073,668],[1068,674],[1068,683],[1066,693],[1065,706],[1063,716],[1063,723],[1061,728],[1058,737],[1057,751],[1054,767],[1052,780],[1052,785],[1051,786],[1050,786]],"dx":-285,"dy":555,"length":648.3464987429803,"timing":[0,9,22,40,56,73,89,105,122,140,155,173,190,206,222,240,256,274,290,307,323,350,357,373,390,406,422,440,456,473,490,506,523,540,556,573,589,674]},{"start":[1052,784],"end":[95,861],"points":[[1052,783],[1045,778],[1017,762],[978,748],[940,750],[892,750],[828,750],[748,748],[665,748],[575,746],[474,745],[398,744],[337,742],[296,742],[264,742],[245,743],[240,744],[237,746],[233,753],[230,758],[228,758],[224,762],[224,765],[224,773],[224,782],[222,791],[220,802],[215,811],[211,816],[206,818],[198,824],[187,831],[172,838],[154,846],[141,848],[136,850],[135,850],[134,850],[132,851],[131,851],[128,852],[128,853],[127,854],[126,854],[125,854],[125,855],[118,856],[116,856],[115,857],[113,857],[107,858],[103,858],[101,861],[98,861],[95,861]],"dx":-957,"dy":77,"length":1032.0102400396102,"timing":[0,9,22,38,56,72,88,106,122,139,156,172,188,205,222,238,256,288,306,322,339,357,373,389,406,422,439,456,472,489,506,522,538,556,572,590,607,623,640,656,672,690,770,774,802,806,822,839,857,873,890,906,924,940,956]},{"start":[1885,587],"end":[1284,893],"points":[[1885,588],[1873,595],[1847,608],[1820,625],[1790,642],[1748,665],[1704,690],[1652,716],[1585,748],[1528,775],[1473,797],[1432,812],[1395,818],[1363,826],[1336,835],[1316,843],[1302,847],[1287,852],[1275,855],[1266,858],[1265,860],[1266,867],[1268,878],[1272,885],[1275,888],[1281,892],[1282,892],[1283,893],[1284,893],[1285,893],[1285,893],[1284,893]],"dx":-601,"dy":306,"length":724.3090109668935,"timing":[0,15,32,48,65,82,99,115,132,148,166,182,199,216,232,248,265,282,298,317,333,382,399,417,433,450,465,483,532,548,598,608]},{"start":[1880,224],"end":[1523,692],"points":[[1878,225],[1855,240],[1815,265],[1757,302],[1710,338],[1676,375],[1658,408],[1657,434],[1663,464],[1672,501],[1672,532],[1667,561],[1662,578],[1657,595],[1652,608],[1647,615],[1645,617],[1637,622],[1622,628],[1602,638],[1575,647],[1547,656],[1526,662],[1515,666],[1513,668],[1506,672],[1502,673],[1502,675],[1500,675],[1500,677],[1498,681],[1498,682],[1503,685],[1511,688],[1517,690],[1522,691],[1522,692],[1523,692]],"dx":-357,"dy":468,"length":700.0384174643567,"timing":[0,16,31,47,64,80,97,114,130,147,164,181,197,215,231,248,264,280,298,314,331,348,365,381,398,414,432,448,465,481,498,515,531,549,565,581,605,662]},{"start":[1077,238],"end":[1214,459],"points":[[1077,239],[1077,240],[1077,241],[1077,242],[1078,243],[1079,244],[1082,248],[1086,250],[1090,254],[1097,260],[1105,268],[1116,278],[1127,291],[1138,305],[1150,322],[1161,341],[1170,360],[1179,380],[1186,398],[1190,414],[1194,433],[1196,441],[1196,446],[1196,449],[1195,452],[1195,453],[1195,454],[1195,455],[1195,458],[1195,459],[1196,461],[1198,461],[1200,461],[1204,461],[1206,461],[1208,460],[1209,460],[1210,459],[1211,459],[1213,459],[1214,459]],"dx":137,"dy":221,"length":279.426234587423,"timing":[0,43,60,110,127,143,160,177,194,210,227,244,260,277,294,311,328,344,360,377,394,411,427,444,460,477,494,510,527,544,561,577,594,611,627,644,664,677,711,727,778]},{"start":[785,466],"end":[878,312],"points":[[787,466],[788,464],[790,462],[795,457],[798,453],[802,446],[809,439],[812,434],[821,424],[827,415],[834,406],[843,396],[852,386],[863,374],[872,362],[883,345],[887,336],[891,327],[893,318],[894,313],[895,309],[895,307],[895,306],[895,305],[895,304],[895,303],[894,303],[893,303],[891,304],[889,305],[888,307],[886,308],[885,308],[884,309],[883,309],[882,310],[879,311],[878,312]],"dx":93,"dy":-154,"length":219.52340049727016,"timing":[0,15,32,48,65,82,98,115,132,148,165,182,199,215,232,248,265,282,298,315,332,349,365,392,440,456,520,532,549,566,582,599,615,633,665,682,699,715]},{"start":[411,485],"end":[577,139],"points":[[413,485],[416,485],[417,485],[424,485],[439,485],[455,485],[468,484],[479,481],[489,475],[503,465],[528,443],[547,424],[567,406],[586,391],[607,373],[614,364],[629,356],[662,356],[706,368],[789,401],[798,407],[807,413],[807,414],[808,415],[807,415],[799,405],[782,386],[755,360],[727,330],[701,298],[677,265],[660,238],[638,200],[626,182],[615,164],[608,151],[603,141],[600,135],[599,134],[599,133],[599,131],[599,130],[597,128],[596,127],[594,128],[592,130],[590,132],[590,133],[589,135],[588,136],[587,137],[584,138],[583,138],[580,139],[579,139],[578,139],[577,139]],"dx":166,"dy":-346,"length":839.6200303040273,"timing":[0,7,18,35,51,68,85,101,118,135,151,168,185,202,230,239,267,287,305,338,344,360,373,392,405,419,435,451,468,485,502,518,535,551,568,585,603,619,635,664,711,719,735,752,802,818,835,852,868,885,902,918,935,952,969,985,1047]},{"start":[739,523],"end":[1249,276],"points":[[738,523],[738,522],[741,522],[752,519],[770,514],[791,506],[828,489],[879,467],[937,440],[1004,412],[1063,384],[1104,359],[1127,338],[1150,309],[1162,295],[1170,285],[1174,281],[1176,278],[1179,274],[1185,273],[1185,272],[1187,271],[1189,271],[1204,269],[1209,269],[1212,269],[1219,270],[1228,272],[1235,274],[1241,275],[1246,275],[1247,275],[1249,275],[1249,276]],"dx":510,"dy":-247,"length":589.5077414099239,"timing":[0,237,253,270,287,303,320,337,353,370,387,403,420,437,453,471,487,503,520,537,553,581,589,637,654,670,687,704,720,737,753,770,787,803]},{"start":[1210,214],"end":[297,147],"points":[[1210,215],[1209,215],[1208,216],[1206,217],[1198,220],[1174,232],[1154,243],[1134,258],[1112,274],[1084,297],[1059,319],[1040,341],[1029,358],[1019,373],[1012,384],[1005,393],[986,402],[966,403],[934,400],[880,384],[805,357],[740,329],[678,301],[630,272],[545,224],[410,166],[384,159],[365,155],[359,153],[357,153],[356,153],[345,153],[332,153],[321,153],[316,153],[314,153],[313,153],[311,152],[306,151],[301,149],[299,147],[298,147],[297,147]],"dx":-913,"dy":-67,"length":1041.2474012005077,"timing":[0,16,168,183,200,216,233,250,266,283,300,316,333,350,366,383,400,417,433,450,466,483,500,516,550,623,658,700,733,753,767,784,801,816,833,850,867,883,900,917,933,983,1000]},{"start":[1250,381],"end":[158,578],"points":[[1183,381],[1161,381],[1137,386],[1055,402],[986,415],[901,434],[807,453],[724,472],[658,483],[608,494],[558,503],[511,512],[465,522],[424,528],[386,533],[344,541],[326,547],[315,551],[310,556],[305,559],[297,563],[282,568],[260,572],[236,578],[215,582],[203,585],[200,586],[199,586],[198,586],[193,586],[182,585],[175,585],[172,585],[170,584],[169,583],[168,583],[167,582],[166,582],[165,582],[163,581],[161,581],[160,580],[158,579],[158,578]],"dx":-1092,"dy":197,"length":1052.1192797347067,"timing":[0,6,21,38,54,72,88,105,121,138,155,172,188,205,221,238,255,271,288,305,322,338,355,372,388,405,422,439,455,471,488,505,522,572,591,605,630,654,672,688,705,721,738,755]},{"start":[158,577],"end":[562,284],"points":[[159,576],[162,574],[178,565],[202,554],[237,533],[282,507],[330,478],[381,446],[420,418],[449,396],[478,368],[498,353],[516,341],[529,331],[541,325],[553,318],[565,311],[571,307],[573,302],[574,299],[575,296],[577,293],[577,292],[577,291],[577,290],[576,290],[575,290],[573,289],[571,288],[568,288],[567,287],[566,286],[564,285],[563,284],[562,284]],"dx":404,"dy":-293,"length":528.8752454224492,"timing":[0,10,27,44,61,77,94,111,127,144,161,177,194,210,227,244,262,277,294,310,327,348,360,392,427,444,497,511,528,544,561,578,594,617,689]},{"start":[804,350],"end":[262,157],"points":[[804,350],[803,350],[795,350],[779,346],[755,341],[714,330],[667,315],[606,295],[535,273],[458,255],[394,242],[351,234],[331,228],[322,225],[320,224],[314,222],[299,218],[283,215],[275,213],[271,211],[270,209],[268,205],[264,201],[262,197],[261,195],[261,190],[261,185],[262,181],[262,179],[264,176],[265,173],[266,171],[266,168],[266,165],[266,164],[266,162],[266,160],[266,159],[265,159],[263,158],[262,157]],"dx":-542,"dy":-193,"length":612.7393328619291,"timing":[0,218,234,250,267,284,300,317,334,351,367,384,401,417,434,451,467,484,501,517,534,551,567,584,601,617,634,651,667,684,701,717,734,751,769,784,801,817,834,851,868]},{"start":[389,228],"end":[371,505],"points":[[389,229],[389,230],[389,233],[389,234],[389,235],[389,238],[389,242],[390,256],[394,281],[402,336],[408,385],[411,430],[411,468],[410,502],[406,528],[401,544],[399,554],[399,559],[399,560],[398,560],[397,557],[397,554],[393,545],[389,535],[387,526],[385,520],[383,514],[380,511],[379,509],[377,509],[376,508],[374,507],[372,506],[371,505]],"dx":-18,"dy":277,"length":399.10937003954444,"timing":[0,16,33,51,161,169,183,200,217,233,250,267,283,300,317,333,350,367,384,481,489,500,517,533,550,567,583,600,617,633,650,667,684,734]},{"start":[237,600],"end":[829,379],"points":[[236,599],[247,596],[271,593],[315,590],[364,590],[399,590],[410,588],[423,587],[445,587],[473,586],[508,581],[543,572],[587,557],[644,534],[695,512],[735,488],[757,471],[773,455],[793,431],[797,420],[799,413],[799,410],[799,406],[802,402],[804,398],[805,396],[805,393],[805,390],[806,387],[807,385],[808,383],[811,381],[813,380],[817,379],[821,379],[825,379],[827,379],[828,379],[829,379]],"dx":592,"dy":-221,"length":674.5270704296613,"timing":[0,210,229,245,262,285,297,314,330,347,363,380,397,414,430,447,464,480,497,514,530,547,564,580,597,614,630,647,664,680,697,714,730,747,764,780,797,814,864]},{"start":[1067,291],"end":[208,484],"points":[[1067,290],[1067,291],[1067,294],[1067,298],[1067,299],[1066,299],[1062,301],[1053,304],[1034,308],[1003,314],[942,327],[809,353],[708,372],[599,388],[468,394],[331,394],[222,394],[158,401],[136,404],[127,408],[119,410],[104,414],[84,420],[71,429],[71,437],[78,445],[89,453],[99,459],[112,465],[133,474],[162,480],[187,485],[196,486],[198,486],[199,486],[200,486],[202,486],[206,484],[208,484]],"dx":-859,"dy":193,"length":1177.5071198209685,"timing":[0,16,32,49,65,162,199,216,232,249,266,282,299,316,332,349,366,382,399,416,432,449,466,482,499,516,534,550,566,583,600,616,633,650,666,776,786,800,859]},{"start":[955,830],"end":[167,554],"points":[[954,830],[951,827],[938,819],[916,808],[883,796],[848,781],[814,768],[766,747],[718,727],[667,705],[605,681],[548,663],[506,650],[481,643],[460,637],[441,631],[420,625],[401,619],[386,615],[370,611],[360,606],[353,603],[344,599],[335,595],[323,591],[317,587],[310,585],[305,583],[298,579],[288,576],[278,573],[269,571],[257,568],[248,565],[239,561],[230,559],[222,556],[214,554],[208,553],[202,552],[197,551],[191,551],[185,551],[181,551],[180,551],[178,551],[177,551],[176,551],[175,551],[174,551],[173,551],[172,552],[171,552],[170,552],[169,552],[169,553],[168,554],[167,554]],"dx":-788,"dy":-276,"length":841.3542722481096,"timing":[0,21,38,55,71,88,104,121,138,154,171,188,204,221,238,254,271,288,305,321,337,354,371,387,405,421,437,454,471,488,505,521,537,554,571,587,605,621,638,654,671,689,704,721,824,854,871,904,993,1021,1071,1121,1137,1155,2001,2377,2404,2421]},{"start":[167,554],"end":[1004,734],"points":[[172,555],[181,556],[208,560],[254,567],[314,575],[374,583],[437,591],[501,607],[573,624],[641,643],[691,659],[730,673],[762,687],[775,692],[788,698],[806,706],[828,715],[849,722],[868,729],[886,734],[904,739],[915,742],[924,745],[931,745],[936,746],[937,746],[938,746],[940,745],[941,744],[944,740],[946,737],[948,736],[949,735],[949,734],[950,734],[950,733],[951,732],[952,731],[952,730],[953,730],[954,729],[954,728],[955,728],[956,727],[956,726],[957,725],[957,723],[958,723],[959,722],[959,720],[960,720],[964,720],[969,722],[974,723],[978,724],[983,726],[987,727],[991,729],[994,730],[998,730],[1000,732],[1002,732],[1003,732],[1003,733],[1004,733],[1004,734]],"dx":837,"dy":180,"length":880.2828130178232,"timing":[0,8,25,42,58,75,92,109,126,142,160,176,192,209,225,242,258,276,292,308,325,341,359,375,392,409,425,442,458,475,492,509,525,542,558,575,593,609,626,642,658,676,692,726,742,759,792,826,879,1392,1408,1426,1442,1459,1475,1492,1508,1525,1542,1559,1575,1592,1609,1642,1658,1675]},{"start":[1004,734],"end":[788,211],"points":[[1003,732],[1000,727],[999,721],[993,706],[983,686],[971,659],[954,621],[943,578],[938,547],[933,514],[921,466],[907,442],[891,420],[875,401],[861,386],[852,381],[844,380],[835,381],[829,383],[828,383],[828,382],[828,378],[827,376],[827,374],[825,370],[823,362],[820,347],[818,328],[816,308],[816,290],[816,272],[816,259],[809,246],[803,234],[795,223],[793,220],[792,218],[791,216],[791,213],[790,213],[790,212],[790,211],[789,211],[788,211]],"dx":-216,"dy":-523,"length":598.6450170177501,"timing":[0,16,32,50,67,83,99,116,133,150,166,183,199,216,232,249,266,283,299,316,333,349,366,383,399,416,433,450,466,482,499,516,533,550,566,583,599,616,633,649,666,702,766,783]},{"start":[955,856],"end":[829,203],"points":[[956,856],[957,856],[958,855],[959,854],[959,853],[961,852],[961,851],[962,849],[964,847],[966,845],[968,843],[972,838],[976,832],[982,823],[987,813],[994,797],[1005,776],[1016,756],[1029,735],[1053,704],[1070,689],[1088,678],[1109,666],[1133,654],[1155,647],[1179,642],[1199,640],[1213,636],[1219,635],[1219,634],[1219,630],[1206,615],[1194,606],[1174,595],[1159,582],[1137,567],[1103,547],[1037,510],[959,466],[897,421],[863,390],[846,367],[838,353],[831,337],[825,325],[820,314],[814,303],[811,297],[810,294],[810,290],[811,286],[814,281],[817,275],[821,268],[822,262],[824,254],[825,249],[827,244],[828,239],[830,234],[830,228],[830,222],[830,215],[830,210],[829,205],[829,204],[829,203]],"dx":-126,"dy":-653,"length":1007.073260178822,"timing":[0,16,66,100,116,150,166,182,199,216,233,249,266,282,299,316,332,349,366,382,399,416,432,449,466,482,500,516,533,550,566,583,599,616,632,649,666,683,700,716,732,749,766,783,799,816,832,849,865,882,900,916,933,949,965,982,999,1017,1033,1049,1066,1083,1099,1116,1133,1149,1166]},{"start":[1539,895],"end":[500,418],"points":[[1538,895],[1531,892],[1507,874],[1446,838],[1352,799],[1246,750],[1132,692],[1021,636],[923,590],[859,562],[815,543],[776,527],[755,518],[744,515],[732,511],[721,508],[708,504],[694,500],[688,499],[683,497],[678,493],[669,489],[656,482],[625,469],[603,463],[584,455],[568,448],[556,441],[546,437],[537,433],[528,429],[524,428],[523,427],[522,426],[521,426],[517,424],[514,422],[511,421],[509,420],[507,419],[505,418],[503,417],[500,416],[496,415],[490,413],[485,412],[481,410],[479,409],[477,408],[475,408],[474,408],[473,408],[475,408],[476,408],[482,411],[490,414],[496,417],[498,418],[500,418]],"dx":-1039,"dy":-477,"length":1204.2144096023576,"timing":[0,10,27,43,60,76,93,110,126,144,160,176,193,210,227,243,260,277,293,310,326,343,360,377,393,409,427,443,459,477,493,509,526,543,560,576,593,610,626,644,659,676,693,711,727,744,760,777,826,843,860,877,1144,1161,1176,1193,1210,1227,1243]},{"start":[1040,191],"end":[1685,362],"points":[[1040,190],[1039,190],[1038,190],[1036,190],[1036,191],[1038,195],[1042,198],[1050,206],[1058,210],[1066,217],[1072,220],[1077,224],[1084,231],[1090,236],[1094,240],[1108,251],[1144,270],[1199,297],[1253,321],[1316,346],[1347,355],[1382,364],[1412,374],[1438,379],[1467,384],[1511,391],[1552,397],[1586,400],[1614,400],[1635,400],[1646,398],[1656,392],[1658,390],[1660,388],[1664,386],[1673,380],[1684,377],[1694,371],[1700,368],[1703,366],[1705,365],[1709,363],[1713,363],[1716,362],[1718,361],[1717,361],[1715,361],[1714,361],[1712,361],[1709,361],[1704,361],[1702,361],[1700,361],[1699,361],[1698,361],[1696,362],[1695,362],[1694,362],[1693,362],[1692,362],[1690,362],[1688,362],[1687,362],[1686,362],[1685,362]],"dx":645,"dy":171,"length":780.0668005268909,"timing":[0,33,84,147,219,251,267,284,299,317,333,350,367,388,400,417,434,451,466,483,499,516,533,550,567,584,600,617,634,650,667,684,700,716,733,750,767,783,800,816,834,850,867,883,900,994,1017,1033,1049,1067,1083,1100,1116,1134,1149,1166,1200,1282,1322,1350,1367,1383,1400,1416,1433]},{"start":[1763,438],"end":[639,612],"points":[[1759,438],[1750,437],[1737,437],[1717,437],[1652,439],[1578,449],[1489,451],[1387,457],[1284,471],[1198,482],[1119,494],[1045,505],[976,520],[919,537],[880,549],[855,560],[821,574],[801,583],[783,593],[767,602],[752,608],[738,614],[731,616],[719,621],[709,626],[699,631],[691,633],[682,637],[671,640],[667,641],[666,641],[664,642],[663,642],[662,643],[660,643],[658,643],[655,643],[653,643],[652,643],[651,643],[650,643],[645,641],[640,640],[635,639],[632,638],[631,638],[630,638],[629,637],[628,637],[627,637],[626,636],[625,636],[624,635],[623,634],[623,633],[623,632],[624,630],[625,628],[626,625],[628,622],[630,621],[631,620],[631,619],[632,619],[633,618],[634,618],[635,617],[636,616],[636,615],[637,615],[638,614],[639,613],[639,612]],"dx":-1124,"dy":174,"length":1198.846475839486,"timing":[0,16,34,50,67,84,100,117,133,150,166,183,200,217,234,250,267,283,300,317,334,350,367,384,400,416,433,451,467,483,500,517,533,550,566,583,600,617,634,650,667,934,950,966,983,1000,1017,1050,1067,1083,1116,1149,1218,1274,1330,1350,1367,1383,1400,1416,1433,1450,1466,1483,1500,1517,1533,1566,1600,1616,1633,1666,1707]},{"start":[605,798],"end":[677,345],"points":[[607,796],[610,793],[613,790],[617,786],[622,780],[637,768],[659,754],[682,738],[713,710],[734,684],[745,649],[748,601],[744,553],[737,509],[732,475],[724,452],[719,434],[712,419],[703,406],[698,397],[691,391],[690,389],[688,388],[688,385],[688,383],[688,380],[687,375],[684,369],[681,362],[680,357],[678,353],[678,349],[678,347],[678,346],[677,345]],"dx":72,"dy":-453,"length":527.1112379491409,"timing":[0,17,33,51,67,84,101,117,134,150,167,183,200,217,234,250,268,284,301,317,334,351,367,384,400,417,434,450,467,484,501,517,534,550,584]},{"start":[1009,853],"end":[319,367],"points":[[1005,847],[1004,846],[1003,846],[1003,844],[1004,844],[1005,843],[1007,843],[1009,841],[1011,839],[1013,834],[1015,829],[1015,820],[1015,808],[1014,794],[1008,781],[998,766],[981,746],[964,727],[929,700],[872,664],[790,617],[741,588],[705,568],[672,554],[646,544],[621,532],[596,522],[575,512],[557,504],[541,494],[526,486],[509,476],[486,465],[469,455],[453,446],[441,438],[433,432],[427,428],[416,421],[401,413],[387,405],[375,398],[364,390],[353,383],[344,376],[338,373],[330,371],[325,369],[321,368],[319,368],[319,367]],"dx":-690,"dy":-486,"length":886.3143261689938,"timing":[0,15,31,98,115,132,148,165,182,199,215,231,248,265,282,298,315,332,348,365,382,398,415,432,448,465,482,498,515,531,548,565,581,598,615,631,648,664,682,698,715,731,749,766,781,798,815,832,848,865,881]},{"start":[321,370],"end":[1601,869],"points":[[322,370],[323,370],[324,370],[327,372],[329,372],[333,374],[336,374],[341,375],[347,376],[356,378],[370,381],[384,382],[399,385],[419,387],[450,391],[504,399],[603,422],[679,443],[760,467],[840,493],[913,515],[990,544],[1076,580],[1181,623],[1274,670],[1336,709],[1369,734],[1399,760],[1433,785],[1486,816],[1512,830],[1527,841],[1535,848],[1543,856],[1550,863],[1561,869],[1574,878],[1584,883],[1592,888],[1597,890],[1602,891],[1604,891],[1605,890],[1605,888],[1605,886],[1605,883],[1605,880],[1605,876],[1603,873],[1603,872],[1601,870],[1601,869]],"dx":1280,"dy":499,"length":1426.789149806974,"timing":[0,16,34,50,67,83,100,116,133,151,167,184,201,216,234,250,267,283,299,316,333,350,367,384,400,416,434,450,467,483,500,516,533,550,567,583,600,616,634,650,666,700,717,734,749,766,783,800,817,834,849,867]},{"start":[628,217],"end":[1761,506],"points":[[628,216],[628,218],[628,219],[629,223],[630,224],[631,224],[634,227],[654,235],[697,247],[759,271],[827,294],[906,318],[994,335],[1177,365],[1315,388],[1456,409],[1568,427],[1647,442],[1700,451],[1733,456],[1756,459],[1769,461],[1778,463],[1780,463],[1781,463],[1782,463],[1783,463],[1784,463],[1786,464],[1786,465],[1786,470],[1784,476],[1781,481],[1777,485],[1775,488],[1769,495],[1766,499],[1764,500],[1762,503],[1761,504],[1761,505],[1761,506]],"dx":1133,"dy":289,"length":1244.0054464129935,"timing":[0,100,116,133,149,166,232,250,266,283,299,316,333,350,365,382,399,416,432,449,466,483,500,516,549,566,582,599,616,632,649,666,682,699,716,733,749,766,783,799,816,849]},{"start":[1221,284],"end":[878,633],"points":[[1222,285],[1222,286],[1222,288],[1216,295],[1204,304],[1190,317],[1180,327],[1174,340],[1174,348],[1177,371],[1185,384],[1192,394],[1200,401],[1203,405],[1205,407],[1206,408],[1207,408],[1208,408],[1202,409],[1180,412],[1148,421],[1096,438],[1042,461],[1007,483],[980,506],[956,535],[928,574],[907,603],[897,618],[895,628],[891,635],[890,635],[890,636],[889,636],[888,636],[888,635],[886,634],[884,634],[882,633],[880,633],[879,633],[878,633]],"dx":-343,"dy":349,"length":580.2803685076632,"timing":[0,34,67,84,100,117,134,150,167,183,200,217,234,250,267,284,300,317,383,401,417,434,451,467,484,501,517,534,551,568,584,601,634,683,717,768,784,801,817,834,850,868]},{"start":[1494,202],"end":[1598,780],"points":[[1492,202],[1482,204],[1467,208],[1441,216],[1426,221],[1404,229],[1380,235],[1354,245],[1332,254],[1312,266],[1300,278],[1294,288],[1293,297],[1293,309],[1310,339],[1337,371],[1362,401],[1390,437],[1414,479],[1439,522],[1465,567],[1490,605],[1511,636],[1526,656],[1536,672],[1543,683],[1551,691],[1554,696],[1555,698],[1556,701],[1557,702],[1557,704],[1559,707],[1561,710],[1562,714],[1567,720],[1570,726],[1573,732],[1575,738],[1579,748],[1581,752],[1584,757],[1586,762],[1589,766],[1592,770],[1593,772],[1594,774],[1594,775],[1595,776],[1596,778],[1597,779],[1598,780]],"dx":104,"dy":578,"length":805.7037280937558,"timing":[0,15,32,48,66,83,99,116,133,148,165,182,199,215,232,249,265,282,299,315,332,349,366,382,399,415,432,449,465,482,498,516,532,549,565,582,599,616,632,648,665,683,699,715,732,749,766,782,799,815,832,849]},{"start":[913,409],"end":[130,197],"points":[[915,407],[920,407],[922,406],[923,405],[924,405],[925,405],[926,405],[927,404],[921,400],[865,386],[797,363],[743,339],[689,316],[635,293],[551,260],[489,243],[426,225],[366,208],[318,198],[279,191],[251,185],[228,183],[209,182],[191,181],[172,181],[153,181],[140,181],[136,182],[133,184],[130,186],[128,191],[128,192],[128,194],[129,196],[130,197]],"dx":-783,"dy":-212,"length":860.4857416434731,"timing":[0,15,31,48,65,82,98,115,316,331,348,365,382,398,415,432,448,465,481,498,515,532,549,565,582,598,615,631,649,664,681,699,715,731,748]},{"start":[909,143],"end":[1503,836],"points":[[910,144],[910,146],[911,149],[912,153],[915,170],[926,191],[944,215],[980,256],[1035,309],[1099,362],[1158,412],[1209,455],[1261,494],[1323,532],[1381,574],[1428,610],[1474,653],[1495,679],[1516,710],[1533,733],[1547,752],[1561,770],[1577,789],[1587,802],[1591,810],[1593,814],[1593,816],[1593,818],[1592,821],[1588,824],[1582,828],[1569,833],[1557,836],[1546,839],[1536,842],[1527,844],[1521,845],[1515,845],[1511,845],[1508,845],[1504,843],[1503,843],[1503,842],[1503,840],[1503,838],[1503,837],[1503,836]],"dx":594,"dy":693,"length":1078.6532655744084,"timing":[0,16,34,50,66,83,100,116,133,150,166,183,199,217,233,249,266,282,299,316,333,350,367,383,400,417,433,450,466,483,499,516,533,549,567,583,600,617,633,649,666,683,699,733,750,782,799]},{"start":[1490,218],"end":[1123,556],"points":[[1484,219],[1467,224],[1446,230],[1420,238],[1377,250],[1340,263],[1302,280],[1275,297],[1253,316],[1236,336],[1212,370],[1199,399],[1188,427],[1181,453],[1174,475],[1166,496],[1162,511],[1158,523],[1156,531],[1151,537],[1146,542],[1143,546],[1141,547],[1139,549],[1136,549],[1133,550],[1129,551],[1128,551],[1126,552],[1125,552],[1123,554],[1122,554],[1122,555],[1121,555],[1121,556],[1122,556],[1123,556]],"dx":-367,"dy":338,"length":540.1578381575919,"timing":[0,16,32,50,66,83,100,117,133,149,167,183,200,216,233,249,266,283,299,317,333,349,366,383,400,416,433,449,466,483,500,516,532,566,606,813,838]},{"start":[1125,556],"end":[670,818],"points":[[1125,557],[1122,555],[1108,547],[1082,543],[1036,537],[997,531],[970,530],[941,532],[917,539],[895,553],[859,584],[832,609],[798,635],[778,653],[765,671],[756,684],[749,698],[748,712],[748,721],[747,727],[744,732],[740,736],[736,740],[734,742],[731,745],[728,747],[724,750],[716,756],[709,761],[699,768],[692,775],[688,784],[685,794],[681,802],[677,809],[675,812],[674,814],[672,815],[671,817],[670,817],[670,818]],"dx":-455,"dy":262,"length":598.9874120703704,"timing":[0,214,233,249,266,283,300,316,333,350,366,383,400,416,433,449,466,482,500,517,533,549,566,583,600,616,633,650,667,683,700,717,733,749,766,782,799,816,833,849,1077]},{"start":[913,768],"end":[703,590],"points":[[913,766],[912,765],[912,763],[912,761],[912,757],[912,752],[912,746],[912,739],[915,727],[918,709],[919,691],[919,665],[911,647],[894,626],[864,601],[817,578],[792,567],[773,561],[761,560],[750,560],[742,560],[729,562],[715,565],[707,566],[702,568],[699,570],[698,572],[698,576],[699,579],[701,581],[701,583],[702,585],[703,588],[703,590]],"dx":-210,"dy":-178,"length":384.58126609426404,"timing":[0,33,66,83,100,116,133,150,166,183,200,216,233,249,266,283,300,317,334,349,367,384,400,416,433,450,466,483,499,516,533,549,566,583]},{"start":[703,590],"end":[464,131],"points":[[705,590],[707,587],[709,585],[711,583],[714,579],[718,577],[722,575],[726,572],[730,567],[736,558],[742,531],[742,508],[741,476],[731,444],[716,407],[690,355],[653,298],[600,243],[562,206],[522,175],[489,154],[469,139],[453,127],[451,127],[453,127],[456,127],[458,127],[459,127],[460,127],[461,128],[462,129],[463,130],[464,131]],"dx":-239,"dy":-459,"length":608.4421249254265,"timing":[0,17,33,50,66,83,99,117,133,149,166,183,199,216,232,249,266,284,300,316,334,349,366,383,483,500,517,598,616,633,650,667,683]},{"start":[803,177],"end":[367,316],"points":[[804,177],[805,178],[802,179],[780,182],[740,198],[693,213],[646,228],[601,246],[568,262],[538,275],[518,283],[500,290],[486,296],[471,303],[465,306],[457,307],[447,308],[439,308],[431,308],[421,309],[410,309],[398,309],[388,310],[381,310],[377,310],[374,311],[372,312],[371,312],[370,314],[368,315],[367,315],[367,316]],"dx":-436,"dy":139,"length":466.79780326385185,"timing":[0,15,82,99,115,131,149,165,182,199,215,232,249,265,282,299,315,332,349,365,382,398,416,432,449,465,482,498,515,532,548,565]},{"start":[1257,426],"end":[646,151],"points":[[1256,426],[1251,426],[1237,423],[1213,421],[1184,414],[1147,400],[1088,374],[1012,341],[926,305],[848,274],[797,251],[761,234],[752,227],[747,223],[744,219],[738,210],[730,202],[719,194],[706,187],[694,180],[685,174],[681,171],[677,170],[672,168],[667,167],[663,165],[658,164],[655,163],[651,161],[649,160],[649,158],[649,157],[649,155],[648,154],[647,152],[647,151],[646,151]],"dx":-611,"dy":-275,"length":680.7577522971898,"timing":[0,17,34,51,68,84,101,118,134,151,168,184,200,218,234,250,268,284,301,317,335,351,367,384,401,418,434,451,467,485,517,535,551,568,584,601,618]},{"start":[272,651],"end":[1183,355],"points":[[272,652],[273,652],[276,652],[282,651],[289,650],[302,646],[318,640],[343,631],[378,621],[461,609],[530,598],[614,586],[699,569],[775,549],[848,526],[907,502],[939,490],[963,480],[979,470],[989,464],[1001,457],[1021,448],[1033,441],[1044,435],[1051,428],[1054,426],[1055,423],[1057,421],[1060,419],[1064,417],[1070,415],[1079,410],[1091,406],[1109,397],[1119,391],[1132,385],[1147,379],[1157,374],[1164,371],[1168,368],[1171,366],[1174,364],[1176,362],[1177,360],[1179,359],[1180,358],[1180,357],[1182,356],[1183,355]],"dx":911,"dy":-296,"length":971.3319290162759,"timing":[0,17,34,51,67,84,101,118,134,150,167,184,200,217,234,250,268,284,301,317,333,350,366,383,400,417,433,451,467,483,500,517,533,550,567,583,600,617,633,650,667,683,701,718,733,751,767,784,801]},{"start":[305,508],"end":[804,574],"points":[[305,507],[307,507],[311,506],[335,506],[367,506],[430,507],[504,519],[563,532],[597,543],[624,551],[648,558],[671,564],[694,568],[717,574],[735,579],[749,585],[751,586],[752,586],[754,586],[755,586],[756,587],[760,587],[766,589],[772,590],[777,590],[782,590],[787,590],[791,587],[794,584],[799,579],[801,576],[803,575],[804,574]],"dx":499,"dy":66,"length":516.833244173421,"timing":[0,34,50,68,84,101,117,133,150,167,184,201,218,234,250,267,284,300,317,334,351,367,384,401,418,435,451,467,483,500,518,534,550]},{"start":[1147,244],"end":[1004,539],"points":[[1147,245],[1146,246],[1138,249],[1125,255],[1107,266],[1087,278],[1074,291],[1066,311],[1061,337],[1060,362],[1060,386],[1060,408],[1056,430],[1048,459],[1042,474],[1038,487],[1036,497],[1036,506],[1036,515],[1033,521],[1029,527],[1025,532],[1020,535],[1015,538],[1013,539],[1011,541],[1010,541],[1010,542],[1009,542],[1008,542],[1006,542],[1005,542],[1003,542],[1003,541],[1003,540],[1003,539],[1004,539]],"dx":-143,"dy":295,"length":366.5644324537084,"timing":[0,83,101,117,134,150,167,184,200,216,233,251,267,283,299,317,333,350,366,383,400,417,433,450,466,483,500,517,533,550,566,584,601,650,667,683,750]},{"start":[277,661],"end":[908,707],"points":[[279,660],[292,657],[312,654],[368,647],[420,640],[491,628],[531,612],[559,597],[609,571],[659,543],[687,530],[696,525],[699,522],[702,521],[707,520],[720,520],[727,525],[729,531],[730,541],[732,553],[733,564],[737,577],[746,593],[754,607],[759,623],[762,635],[767,647],[777,667],[788,682],[795,695],[797,700],[799,704],[802,706],[808,708],[818,709],[832,709],[845,709],[857,709],[864,709],[867,709],[868,709],[871,707],[875,707],[881,707],[888,707],[898,707],[904,707],[908,707]],"dx":631,"dy":46,"length":784.2287224085621,"timing":[0,17,33,49,66,83,99,116,133,150,166,182,200,217,233,250,266,283,300,316,333,349,366,383,400,416,433,449,466,483,499,516,533,549,566,583,599,617,633,649,666,683,700,716,732,749,766,783]},{"start":[1685,564],"end":[1225,265],"points":[[1684,564],[1679,564],[1663,563],[1640,563],[1611,559],[1582,551],[1544,534],[1503,505],[1444,457],[1375,392],[1344,353],[1327,319],[1319,300],[1316,287],[1313,278],[1310,274],[1304,268],[1294,262],[1286,258],[1284,256],[1283,256],[1282,255],[1280,255],[1277,256],[1273,258],[1267,260],[1259,261],[1250,263],[1243,263],[1236,263],[1231,263],[1227,264],[1226,264],[1225,265]],"dx":-460,"dy":-299,"length":595.4805802995627,"timing":[0,11,28,44,61,78,95,112,128,145,161,178,195,212,228,245,261,278,294,311,327,344,378,394,411,428,445,461,478,494,511,528,544,562]},{"start":[1532,326],"end":[1755,762],"points":[[1517,330],[1485,339],[1428,354],[1376,371],[1355,385],[1349,393],[1349,408],[1360,422],[1379,439],[1413,461],[1469,491],[1535,529],[1590,564],[1614,586],[1627,604],[1636,621],[1642,636],[1648,651],[1660,675],[1668,689],[1678,704],[1688,717],[1698,728],[1708,738],[1720,746],[1732,755],[1744,762],[1751,766],[1753,767],[1754,768],[1755,768],[1755,766],[1755,765],[1755,763],[1755,762]],"dx":223,"dy":436,"length":760.5344626672148,"timing":[0,16,33,50,67,83,100,116,133,149,166,183,200,216,233,250,267,283,299,316,332,349,367,383,400,416,433,449,466,483,555,583,599,616,633]},{"start":[1151,729],"end":[123,337],"points":[[1151,727],[1135,723],[1104,712],[1065,691],[1009,657],[926,613],[818,565],[708,515],[593,472],[427,420],[338,393],[273,374],[243,365],[228,361],[220,359],[208,356],[195,352],[178,347],[162,343],[159,340],[158,340],[157,339],[156,339],[155,339],[151,339],[146,338],[141,338],[137,338],[134,337],[130,337],[128,337],[126,337],[124,337],[123,337]],"dx":-1028,"dy":-392,"length":1105.8005780468866,"timing":[0,16,33,49,66,83,100,117,133,149,167,183,200,216,232,249,266,283,299,317,333,349,383,400,417,432,450,466,483,500,517,533,549,589]},{"start":[290,174],"end":[585,280],"points":[[294,176],[302,181],[325,192],[358,205],[376,211],[407,223],[435,231],[455,235],[463,237],[476,239],[480,240],[490,242],[503,243],[511,245],[514,246],[520,248],[523,249],[530,252],[535,255],[541,256],[546,258],[557,264],[569,270],[574,273],[579,276],[582,277],[583,278],[584,278],[584,279],[585,279],[585,280]],"dx":295,"dy":106,"length":312.88254659748276,"timing":[0,18,37,52,69,85,103,118,135,151,168,185,202,218,235,252,268,286,302,319,335,352,368,385,402,419,435,452,476,501,518]},{"start":[928,334],"end":[166,182],"points":[[926,334],[922,334],[913,334],[885,330],[819,320],[672,295],[576,277],[435,252],[374,240],[350,236],[322,230],[302,226],[292,223],[273,219],[257,215],[248,213],[232,209],[215,205],[208,203],[194,199],[184,195],[181,194],[177,193],[176,192],[175,192],[175,191],[175,190],[174,190],[174,189],[173,189],[172,188],[171,186],[170,186],[169,185],[169,184],[168,183],[166,182]],"dx":-762,"dy":-152,"length":781.1026912912575,"timing":[0,13,29,46,63,81,96,112,129,146,163,179,196,213,229,246,263,280,296,313,329,346,363,379,396,412,488,529,546,563,579,596,613,630,646,663,679]},{"start":[557,555],"end":[659,162],"points":[[558,555],[561,553],[566,549],[572,545],[576,542],[577,541],[577,540],[578,538],[579,536],[584,527],[600,511],[616,495],[637,459],[662,403],[684,338],[696,287],[708,223],[712,190],[714,171],[715,164],[715,156],[713,150],[712,146],[709,144],[709,143],[707,143],[700,150],[692,159],[681,164],[672,166],[663,166],[659,163],[659,162]],"dx":102,"dy":-393,"length":516.5055733749371,"timing":[0,13,30,46,63,80,96,113,130,146,163,180,196,213,230,246,263,279,296,313,330,346,363,380,396,413,430,446,464,479,496,513,530]},{"start":[962,203],"end":[471,602],"points":[[962,209],[960,221],[957,239],[952,270],[942,305],[936,341],[932,379],[932,412],[932,443],[940,462],[944,470],[947,474],[948,475],[945,478],[918,485],[868,498],[796,512],[734,529],[674,548],[620,566],[583,583],[545,595],[520,602],[507,603],[501,605],[498,606],[499,607],[496,607],[495,606],[490,606],[488,605],[487,605],[486,605],[483,605],[478,603],[474,603],[471,602]],"dx":-491,"dy":399,"length":773.8545105108051,"timing":[0,16,33,50,66,83,100,116,133,149,166,183,199,216,233,250,266,283,300,316,333,350,367,383,399,416,446,579,583,599,616,694,699,716,733,749,766]},{"start":[284,511],"end":[1084,305],"points":[[284,510],[287,510],[296,504],[307,498],[324,487],[346,474],[381,450],[422,429],[502,400],[560,386],[643,364],[728,349],[813,343],[876,340],[932,340],[976,340],[1012,340],[1041,339],[1060,335],[1080,333],[1096,331],[1106,331],[1108,331],[1108,330],[1109,330],[1110,329],[1109,328],[1105,326],[1098,323],[1095,322],[1094,320],[1093,318],[1092,315],[1090,312],[1087,307],[1084,305]],"dx":800,"dy":-206,"length":899.2876219464746,"timing":[0,9,26,43,59,76,93,109,126,143,159,176,193,209,226,243,259,276,293,309,327,342,359,415,426,442,492,509,526,542,559,576,592,609,626,643]},{"start":[520,92],"end":[775,158],"points":[[520,92],[519,93],[519,103],[520,119],[523,142],[532,182],[554,238],[590,293],[630,332],[667,350],[693,353],[724,347],[748,334],[772,306],[789,262],[802,228],[818,200],[827,187],[834,178],[835,171],[835,169],[834,167],[833,166],[832,166],[820,166],[808,166],[799,163],[793,162],[789,160],[784,158],[778,158],[776,158],[775,158]],"dx":255,"dy":66,"length":651.6545534723925,"timing":[0,136,150,166,183,199,216,233,249,266,283,301,316,333,350,366,383,400,417,433,450,466,484,499,516,533,549,566,583,599,616,634,649]},{"start":[133,140],"end":[964,326],"points":[[134,142],[137,146],[153,164],[192,198],[256,234],[343,287],[396,318],[446,346],[485,365],[521,381],[575,396],[640,409],[707,421],[765,423],[801,423],[836,418],[867,410],[904,394],[932,380],[947,367],[956,354],[961,341],[964,334],[965,332],[965,330],[964,330],[964,329],[963,329],[963,328],[963,327],[964,326]],"dx":831,"dy":186,"length":948.8845674356113,"timing":[0,16,33,50,66,83,100,116,133,150,166,183,199,216,233,249,266,283,300,317,333,349,366,383,399,417,433,450,468,484,500]},{"start":[972,729],"end":[1300,182],"points":[[972,729],[972,728],[982,700],[1019,646],[1072,580],[1155,498],[1239,421],[1279,370],[1286,332],[1286,302],[1287,279],[1292,268],[1300,263],[1303,261],[1304,261],[1305,259],[1306,257],[1307,257],[1307,256],[1307,250],[1307,244],[1306,240],[1306,239],[1305,233],[1303,222],[1302,217],[1302,216],[1301,208],[1301,200],[1301,199],[1301,198],[1300,197],[1300,192],[1300,190],[1300,183],[1300,182]],"dx":328,"dy":-547,"length":675.4974996380669,"timing":[0,475,492,510,527,545,563,580,598,616,634,651,669,688,709,724,741,759,813,831,848,867,952,970,988,1006,1191,1203,1221,1238,1291,1309,1327,1345,1433,1451]},{"start":[893,432],"end":[293,284],"points":[[893,431],[885,419],[866,396],[858,379],[852,359],[845,339],[835,320],[811,295],[781,273],[734,252],[678,236],[599,221],[496,206],[381,200],[317,202],[297,206],[295,207],[295,208],[294,208],[291,210],[284,212],[280,215],[277,218],[273,223],[269,229],[266,235],[265,238],[264,244],[265,250],[270,257],[279,269],[285,279],[288,283],[288,284],[289,284],[291,284],[293,284]],"dx":-600,"dy":-148,"length":798.5216505607345,"timing":[0,17,35,53,71,88,106,124,142,159,177,194,212,230,248,266,283,306,326,336,354,372,389,407,424,442,460,477,494,511,529,547,564,582,604,617,634]},{"start":[1167,781],"end":[749,851],"points":[[1167,781],[1166,781],[1120,763],[996,727],[877,711],[818,711],[785,718],[769,724],[759,729],[749,737],[741,747],[734,761],[722,774],[712,786],[707,793],[707,797],[707,798],[706,798],[706,800],[708,807],[709,813],[710,819],[711,824],[711,825],[712,825],[713,825],[716,825],[717,825],[719,825],[720,825],[723,827],[731,833],[736,838],[739,841],[741,844],[745,848],[749,851]],"dx":-418,"dy":70,"length":585.4957938653736,"timing":[0,198,216,234,252,270,288,306,324,342,360,378,396,413,431,449,480,494,502,520,538,556,573,591,608,626,644,698,716,787,804,822,840,858,876,894,912]},{"start":[1627,601],"end":[769,223],"points":[[1626,601],[1625,601],[1623,601],[1621,601],[1614,602],[1599,602],[1576,602],[1566,603],[1566,604],[1565,604],[1521,590],[1387,551],[1204,495],[1021,438],[909,397],[860,370],[830,348],[814,328],[806,315],[803,307],[797,298],[791,289],[791,287],[791,286],[791,284],[790,274],[785,259],[781,252],[781,251],[780,250],[778,245],[776,239],[774,235],[774,234],[773,234],[770,229],[770,228],[770,227],[769,223]],"dx":-858,"dy":-378,"length":985.8476906371718,"timing":[0,12,28,45,63,81,99,116,169,293,311,329,346,364,382,400,418,435,453,471,488,505,523,541,559,576,594,612,669,692,700,718,736,809,824,842,859,968,985]},{"start":[631,699],"end":[1526,166],"points":[[631,699],[632,699],[675,687],[790,649],[967,582],[1104,501],[1198,415],[1260,352],[1290,325],[1293,321],[1293,320],[1304,310],[1331,289],[1353,273],[1355,269],[1356,269],[1359,267],[1370,259],[1382,251],[1395,245],[1408,239],[1422,232],[1432,225],[1437,220],[1441,214],[1442,212],[1444,211],[1452,201],[1461,191],[1472,184],[1478,180],[1481,178],[1489,173],[1504,168],[1520,166],[1526,166]],"dx":895,"dy":-533,"length":1063.4354750183459,"timing":[0,222,240,257,275,293,311,329,347,364,401,419,437,455,473,499,509,526,543,561,578,596,614,632,649,666,740,755,772,790,808,826,843,861,879,897]},{"start":[1786,592],"end":[597,855],"points":[[1786,592],[1785,592],[1784,591],[1773,586],[1722,573],[1610,565],[1495,566],[1410,574],[1355,583],[1303,594],[1236,610],[1159,631],[1097,649],[1063,658],[1045,665],[1015,675],[941,699],[851,732],[811,751],[809,752],[808,752],[807,752],[803,752],[794,752],[786,752],[781,754],[776,756],[766,759],[750,765],[741,771],[738,771],[737,772],[730,776],[706,788],[660,809],[626,828],[614,837],[613,837],[610,839],[606,842],[603,845],[601,849],[598,854],[597,855]],"dx":-1189,"dy":263,"length":1249.7175717452894,"timing":[0,117,175,192,210,227,244,262,279,296,314,332,350,367,385,403,421,438,456,473,504,517,526,544,562,580,598,616,634,652,669,687,705,723,740,758,776,812,830,848,865,883,901,919]},{"start":[1244,844],"end":[1493,315],"points":[[1244,843],[1241,836],[1238,819],[1237,798],[1238,780],[1240,766],[1239,744],[1238,709],[1238,659],[1238,602],[1229,546],[1205,488],[1161,434],[1121,388],[1123,378],[1161,356],[1206,338],[1237,321],[1262,305],[1295,288],[1338,277],[1376,274],[1390,274],[1393,276],[1395,278],[1408,283],[1425,290],[1447,299],[1455,300],[1456,300],[1456,299],[1457,300],[1460,303],[1461,303],[1463,304],[1470,308],[1477,310],[1482,312],[1489,314],[1493,315]],"dx":249,"dy":-529,"length":907.0501040525476,"timing":[0,18,36,53,71,89,107,125,143,161,178,196,213,232,249,267,285,303,320,338,356,374,392,410,428,445,463,481,498,516,535,584,603,705,723,741,758,775,793,810]},{"start":[176,334],"end":[977,547],"points":[[175,331],[175,330],[175,329],[176,329],[178,328],[180,326],[183,325],[188,321],[197,318],[211,314],[233,310],[266,303],[303,301],[353,302],[413,311],[488,328],[559,347],[620,364],[682,384],[740,403],[785,420],[820,437],[845,452],[863,470],[867,475],[869,479],[870,483],[874,491],[880,500],[887,507],[891,511],[892,512],[894,514],[896,517],[899,522],[900,523],[902,525],[905,525],[909,524],[913,523],[918,522],[929,522],[938,525],[943,528],[952,533],[960,537],[964,539],[965,539],[966,540],[967,540],[968,541],[971,542],[973,544],[975,545],[976,546],[977,547]],"dx":801,"dy":213,"length":877.5322241299632,"timing":[0,15,71,81,98,115,132,150,166,182,198,215,232,249,265,282,299,315,331,348,365,381,397,416,432,448,464,481,497,515,531,548,564,580,597,614,681,697,714,730,748,770,783,797,814,831,847,951,964,991,1013,1031,1048,1063,1080,1096]},{"start":[945,201],"end":[416,409],"points":[[946,202],[946,203],[942,207],[913,231],[881,254],[834,289],[775,331],[706,368],[634,400],[587,424],[569,435],[567,438],[568,439],[573,439],[592,435],[613,427],[624,417],[625,413],[619,410],[598,409],[572,413],[547,418],[530,420],[519,420],[506,421],[486,423],[465,425],[450,425],[437,425],[435,425],[433,425],[432,425],[431,425],[430,424],[426,421],[422,417],[417,411],[416,409]],"dx":-529,"dy":208,"length":734.5824803937869,"timing":[0,8,22,40,57,73,89,107,123,140,157,183,192,207,223,240,258,272,289,306,323,340,357,373,389,406,422,439,457,472,496,520,528,539,557,572,590,607]},{"start":[747,405],"end":[306,329],"points":[[747,405],[745,404],[744,403],[739,402],[721,399],[687,394],[630,386],[576,379],[535,377],[502,375],[481,371],[464,367],[443,361],[422,358],[395,359],[379,359],[363,359],[345,358],[321,357],[301,357],[287,357],[281,357],[278,357],[276,356],[275,355],[274,355],[273,354],[274,352],[278,349],[282,346],[286,342],[290,340],[294,337],[300,333],[304,330],[306,329]],"dx":-441,"dy":-76,"length":521.3222077848703,"timing":[0,15,282,298,315,331,348,365,381,399,414,431,448,465,481,499,514,531,548,564,581,598,614,631,648,664,716,731,749,765,781,798,814,831,848,864]},{"start":[1073,358],"end":[455,266],"points":[[1074,358],[1072,357],[1058,352],[1045,349],[1037,348],[1036,348],[1035,348],[1032,348],[1018,348],[987,349],[932,350],[871,350],[800,347],[706,338],[616,326],[506,307],[471,299],[455,292],[451,290],[448,289],[446,288],[442,285],[436,280],[428,275],[416,269],[401,262],[399,261],[398,260],[397,259],[397,258],[398,257],[402,255],[409,252],[424,250],[428,250],[437,250],[446,253],[450,257],[454,263],[455,266]],"dx":-618,"dy":-92,"length":761.117210806396,"timing":[0,16,31,49,65,81,98,116,132,148,165,183,198,216,231,248,266,282,298,369,381,398,414,431,449,466,481,515,544,552,567,581,597,616,631,648,666,681,698,705]},{"start":[78,203],"end":[617,447],"points":[[79,203],[82,203],[102,204],[150,215],[214,230],[283,249],[360,271],[431,292],[493,311],[550,330],[591,344],[612,353],[617,356],[620,358],[621,359],[623,363],[626,370],[627,374],[628,377],[628,380],[628,382],[628,386],[628,390],[626,394],[623,401],[621,405],[619,408],[617,411],[616,414],[616,416],[615,418],[615,421],[615,424],[615,427],[615,431],[615,435],[616,436],[616,437],[617,438],[617,439],[617,441],[617,442],[617,443],[617,445],[617,446],[617,447]],"dx":539,"dy":244,"length":659.0163283474199,"timing":[0,9,26,41,57,75,90,108,126,142,157,176,190,216,257,275,290,308,324,341,358,375,391,407,425,441,457,475,491,508,525,540,557,573,590,607,625,648,728,740,757,776,800,840,856,873]},{"start":[917,184],"end":[166,289],"points":[[916,184],[915,184],[908,185],[907,186],[906,186],[905,187],[904,188],[903,189],[903,193],[903,205],[900,218],[892,228],[876,238],[850,246],[816,255],[751,274],[708,283],[663,289],[605,291],[548,291],[497,291],[451,287],[404,282],[366,278],[341,275],[322,273],[298,271],[269,268],[255,264],[240,259],[226,253],[211,248],[199,244],[196,243],[194,242],[191,241],[190,241],[188,240],[187,240],[186,240],[184,240],[182,241],[180,245],[178,251],[177,257],[175,263],[173,268],[172,274],[171,280],[170,283],[170,284],[169,285],[168,287],[167,288],[166,289]],"dx":-751,"dy":105,"length":833.8653534221365,"timing":[0,13,31,47,66,81,97,114,130,147,164,180,197,214,230,247,263,281,296,314,330,347,363,380,396,413,430,448,464,480,497,514,531,546,563,580,597,614,630,646,696,713,729,747,763,780,796,814,831,847,863,879,896,913,929]},{"start":[166,289],"end":[1162,504],"points":[[166,290],[167,290],[182,284],[220,278],[286,278],[366,287],[450,300],[549,323],[652,350],[741,375],[817,400],[875,423],[917,441],[950,457],[978,471],[985,474],[987,475],[988,475],[994,477],[1008,479],[1028,481],[1053,483],[1080,485],[1105,485],[1120,485],[1126,485],[1132,487],[1136,489],[1138,489],[1139,489],[1141,489],[1144,491],[1146,492],[1147,492],[1148,493],[1149,494],[1152,495],[1156,498],[1159,501],[1161,503],[1162,504]],"dx":996,"dy":215,"length":1035.4525682269982,"timing":[0,8,24,40,57,73,89,107,123,140,157,173,191,206,224,240,257,275,289,307,322,339,357,373,390,407,423,440,457,479,523,539,557,572,599,703,722,740,757,773,789]},{"start":[139,281],"end":[424,161],"points":[[139,280],[140,280],[152,284],[170,289],[202,295],[256,305],[328,318],[402,331],[474,343],[551,350],[623,352],[680,347],[718,337],[733,323],[725,294],[704,270],[665,244],[624,226],[583,212],[547,201],[519,191],[502,184],[498,182],[496,181],[494,180],[491,178],[488,176],[483,174],[477,172],[472,172],[469,171],[466,169],[460,168],[451,167],[442,165],[431,163],[424,161]],"dx":285,"dy":-120,"length":972.6316521760679,"timing":[0,15,32,49,65,81,99,115,131,149,164,181,198,214,233,248,264,281,297,314,331,348,365,423,432,449,464,481,498,513,530,548,564,580,599,614,631]},{"start":[981,496],"end":[883,279],"points":[[980,496],[978,496],[970,496],[959,496],[945,496],[933,496],[920,494],[906,489],[892,481],[881,471],[871,455],[855,407],[847,370],[841,335],[838,305],[839,287],[840,275],[842,265],[844,258],[844,256],[845,255],[846,255],[851,257],[857,261],[863,266],[871,272],[876,275],[879,277],[881,278],[882,278],[883,279]],"dx":-98,"dy":-217,"length":375.44419456909765,"timing":[0,9,27,43,60,77,93,110,126,143,160,176,193,210,227,243,259,276,293,309,368,376,394,409,426,443,459,476,493,510,526]},{"start":[268,217],"end":[843,337],"points":[[264,215],[266,212],[270,209],[277,203],[286,195],[295,187],[301,181],[304,177],[305,176],[308,175],[315,173],[345,171],[396,173],[466,185],[593,212],[674,233],[739,255],[784,275],[811,291],[824,303],[828,310],[829,314],[827,317],[825,319],[825,321],[825,323],[826,324],[827,325],[828,326],[829,327],[833,331],[835,333],[837,335],[838,336],[841,336],[843,337]],"dx":575,"dy":120,"length":646.0765441019686,"timing":[0,17,34,50,67,84,100,117,246,253,267,283,299,317,334,350,367,383,400,417,433,450,467,483,499,517,534,581,590,599,617,632,650,667,683,686]},{"start":[1221,533],"end":[759,143],"points":[[1220,531],[1217,525],[1212,517],[1201,497],[1192,474],[1169,419],[1148,383],[1124,348],[1098,312],[1076,284],[1057,261],[1038,240],[1019,222],[998,205],[977,190],[956,174],[951,171],[936,162],[921,157],[906,154],[891,154],[875,155],[858,159],[837,162],[813,164],[787,165],[771,165],[766,165],[764,165],[763,164],[761,163],[759,160],[757,158],[756,156],[756,153],[756,149],[756,146],[758,144],[759,143]],"dx":-462,"dy":-390,"length":674.7704688793224,"timing":[0,7,23,40,56,72,89,107,122,140,155,172,189,206,222,240,255,272,288,305,322,339,355,372,388,405,422,438,520,528,538,554,572,588,605,621,639,655,671]},{"start":[1385,692],"end":[556,237],"points":[[1385,692],[1384,692],[1383,692],[1382,692],[1378,689],[1375,686],[1353,671],[1309,645],[1237,609],[1144,569],[1029,527],[911,487],[799,448],[690,405],[599,368],[534,340],[480,312],[474,307],[469,298],[469,294],[469,293],[469,292],[469,291],[476,287],[489,284],[520,279],[530,278],[555,275],[563,273],[565,272],[567,271],[568,270],[571,268],[572,267],[573,266],[574,265],[571,262],[565,257],[563,255],[560,253],[558,251],[556,250],[555,249],[554,248],[554,247],[554,245],[554,241],[555,238],[556,237]],"dx":-829,"dy":-455,"length":1157.4222017272334,"timing":[0,27,43,51,67,82,99,116,133,149,166,183,200,216,233,249,266,282,300,316,332,403,415,432,449,466,482,499,515,532,587,599,615,632,795,803,815,832,849,866,882,899,915,1043,1051,1066,1081,1098,1115]},{"start":[387,434],"end":[796,115],"points":[[386,435],[388,435],[389,436],[390,437],[393,439],[401,443],[417,449],[446,455],[504,467],[544,475],[578,482],[609,490],[639,497],[667,497],[687,491],[699,477],[706,451],[708,417],[709,381],[710,345],[711,311],[710,279],[708,245],[711,233],[717,222],[723,210],[728,200],[731,193],[736,183],[745,168],[755,153],[765,139],[774,130],[783,122],[789,118],[794,116],[796,115]],"dx":409,"dy":-319,"length":722.6759700077588,"timing":[0,16,37,50,68,83,99,116,132,149,166,183,199,216,233,249,266,282,299,316,332,349,366,382,399,416,432,449,465,482,499,516,532,549,565,582,599]},{"start":[898,477],"end":[1091,153],"points":[[898,476],[897,475],[890,466],[877,454],[872,450],[867,446],[871,437],[899,416],[952,391],[1012,363],[1067,336],[1104,310],[1120,289],[1122,260],[1115,240],[1110,224],[1107,213],[1105,202],[1101,191],[1095,181],[1090,174],[1088,170],[1087,168],[1087,166],[1085,162],[1085,160],[1085,158],[1086,157],[1087,156],[1090,154],[1091,153]],"dx":193,"dy":-324,"length":492.46844471751206,"timing":[0,8,25,42,58,75,92,108,125,143,158,175,191,208,226,241,258,275,292,310,325,341,358,375,424,441,458,474,491,509,524]},{"start":[999,326],"end":[1002,658],"points":[[999,326],[1000,327],[1000,328],[996,332],[984,340],[972,353],[962,375],[954,408],[952,439],[957,468],[967,498],[974,524],[980,561],[978,581],[976,599],[975,613],[974,626],[974,636],[974,645],[976,653],[978,658],[980,662],[981,663],[984,665],[987,665],[989,665],[992,665],[994,664],[997,663],[999,661],[1001,659],[1002,658]],"dx":3,"dy":332,"length":382.7085673823257,"timing":[0,165,184,201,218,233,250,266,283,300,317,333,349,366,383,400,417,433,450,466,483,499,549,566,583,599,616,634,649,666,683,699]},{"start":[745,206],"end":[670,423],"points":[[745,206],[745,205],[746,205],[748,206],[750,208],[754,212],[759,219],[765,227],[772,236],[780,247],[785,253],[790,260],[795,270],[799,282],[801,299],[800,317],[798,331],[792,345],[783,362],[772,382],[758,403],[743,423],[730,441],[728,444],[726,446],[725,447],[724,447],[723,447],[719,447],[715,445],[710,443],[703,441],[693,437],[688,435],[685,433],[682,432],[678,430],[674,426],[670,423]],"dx":-75,"dy":217,"length":344.6287927286783,"timing":[0,55,66,83,101,116,132,149,166,182,199,216,232,249,266,283,300,315,332,349,366,382,400,415,432,495,503,515,532,550,565,582,598,615,632,649,666,682,698]},{"start":[917,305],"end":[1326,565],"points":[[917,305],[918,305],[918,307],[913,320],[905,337],[898,354],[895,368],[892,380],[887,395],[879,415],[872,438],[869,464],[871,487],[894,514],[931,528],[995,540],[1069,548],[1138,553],[1198,555],[1244,555],[1270,556],[1284,556],[1290,557],[1292,557],[1297,558],[1302,559],[1308,559],[1313,559],[1318,559],[1324,561],[1326,561],[1327,562],[1327,563],[1326,565]],"dx":409,"dy":260,"length":668.5055158886665,"timing":[0,75,84,100,117,133,150,167,183,201,216,233,250,267,283,299,316,334,350,366,383,401,416,466,484,499,516,533,549,567,583,635,649,666]},{"start":[1304,598],"end":[804,321],"points":[[1306,597],[1308,595],[1309,594],[1309,593],[1309,591],[1310,589],[1310,587],[1310,585],[1310,581],[1310,576],[1307,567],[1296,547],[1273,525],[1240,507],[1201,493],[1153,480],[1111,468],[1065,456],[1019,445],[980,436],[949,428],[927,422],[907,414],[888,406],[868,395],[858,388],[855,387],[854,386],[854,385],[862,379],[875,373],[890,367],[900,362],[903,359],[904,355],[898,349],[887,344],[857,334],[831,328],[810,323],[804,321]],"dx":-500,"dy":-277,"length":698.3057387157248,"timing":[0,17,34,84,134,150,169,184,201,217,234,251,267,284,302,317,333,350,367,384,400,418,433,450,468,483,500,523,533,550,567,583,600,618,633,650,666,683,700,718,733]},{"start":[556,266],"end":[1465,502],"points":[[555,267],[555,272],[557,279],[559,288],[566,303],[580,324],[609,349],[660,377],[723,400],[808,418],[898,430],[979,437],[1055,443],[1144,446],[1192,447],[1227,448],[1257,450],[1289,453],[1315,455],[1333,456],[1352,457],[1374,461],[1403,468],[1426,472],[1437,474],[1439,474],[1439,473],[1438,472],[1437,472],[1436,472],[1437,473],[1441,478],[1450,487],[1458,496],[1463,500],[1464,501],[1465,502]],"dx":909,"dy":236,"length":994.412320652949,"timing":[0,16,32,49,67,82,99,116,133,151,166,183,199,216,232,249,265,282,299,317,332,349,367,382,399,496,504,520,534,550,616,632,648,665,682,699,720]},{"start":[1417,477],"end":[856,583],"points":[[1417,477],[1416,478],[1416,479],[1415,481],[1413,485],[1412,489],[1412,492],[1412,493],[1408,498],[1400,503],[1385,509],[1363,515],[1325,518],[1274,518],[1214,519],[1143,528],[1082,540],[1037,550],[1005,560],[975,570],[950,581],[945,588],[943,593],[941,596],[939,597],[936,597],[928,597],[914,597],[901,597],[892,597],[886,596],[881,595],[872,592],[859,585],[856,583]],"dx":-561,"dy":106,"length":599.3331821543359,"timing":[0,130,137,150,167,183,200,217,233,250,267,283,300,317,333,350,368,385,400,416,433,449,466,483,500,516,534,550,566,583,600,616,633,649,666]},{"start":[1410,244],"end":[889,677],"points":[[1409,243],[1406,242],[1388,245],[1354,251],[1312,261],[1263,274],[1201,292],[1115,318],[1040,345],[985,373],[944,400],[914,424],[897,444],[884,474],[878,490],[871,502],[864,514],[858,529],[854,546],[851,562],[849,582],[848,604],[849,621],[850,634],[853,650],[855,656],[861,668],[869,682],[871,687],[872,688],[874,690],[877,692],[881,695],[883,697],[884,698],[885,698],[888,696],[889,690],[889,685],[889,683],[889,681],[889,678],[889,677]],"dx":-521,"dy":433,"length":857.3637887370662,"timing":[0,7,24,40,58,73,90,107,124,140,157,174,190,207,223,240,256,273,290,306,323,340,357,373,391,406,423,440,457,473,490,507,524,540,592,606,623,639,656,673,690,708,723]},{"start":[1098,860],"end":[1369,391],"points":[[1097,860],[1092,854],[1089,849],[1086,837],[1085,818],[1095,783],[1120,736],[1152,699],[1241,611],[1311,547],[1364,494],[1386,467],[1390,455],[1391,450],[1391,446],[1391,443],[1391,442],[1390,442],[1390,441],[1389,438],[1383,431],[1382,431],[1376,426],[1369,418],[1368,413],[1368,411],[1368,409],[1369,407],[1369,401],[1369,396],[1369,393],[1369,391]],"dx":271,"dy":-469,"length":600.2850382694818,"timing":[0,17,33,49,66,83,99,117,133,149,167,183,200,216,233,249,267,283,299,317,333,366,383,400,416,433,450,467,483,500,516,533]},{"start":[178,656],"end":[1548,163],"points":[[180,656],[189,656],[201,654],[207,654],[207,653],[210,653],[235,648],[328,629],[495,587],[714,546],[952,498],[1163,436],[1371,346],[1427,295],[1439,274],[1439,273],[1438,271],[1438,270],[1438,267],[1434,262],[1425,254],[1415,243],[1414,227],[1434,210],[1466,191],[1485,183],[1507,177],[1531,171],[1544,166],[1547,165],[1548,163]],"dx":1370,"dy":-493,"length":1543.3923958376722,"timing":[0,17,34,50,67,100,117,133,151,166,184,200,217,234,250,284,317,333,351,366,384,400,417,434,450,467,484,501,517,534,576]},{"start":[1051,240],"end":[1517,771],"points":[[1054,251],[1062,266],[1068,283],[1077,307],[1087,319],[1095,325],[1097,328],[1097,332],[1103,343],[1124,372],[1168,419],[1229,467],[1288,513],[1336,557],[1382,598],[1454,652],[1491,680],[1505,694],[1509,701],[1514,716],[1520,731],[1525,741],[1525,744],[1525,745],[1526,748],[1526,752],[1526,755],[1524,760],[1521,766],[1519,769],[1518,771],[1517,771]],"dx":466,"dy":531,"length":726.2777095692072,"timing":[0,18,34,50,67,84,101,117,134,151,168,184,200,218,234,251,267,283,300,317,334,351,368,401,418,434,450,467,484,500,518,534]},{"start":[434,269],"end":[1677,276],"points":[[434,266],[436,266],[447,274],[464,288],[494,306],[547,334],[622,368],[708,402],[796,434],[930,478],[1031,500],[1154,508],[1298,500],[1437,475],[1552,428],[1631,376],[1672,341],[1681,327],[1682,324],[1682,322],[1684,320],[1688,316],[1691,313],[1692,309],[1692,303],[1692,291],[1694,283],[1696,281],[1697,280],[1697,279],[1694,279],[1682,276],[1677,276]],"dx":1243,"dy":7,"length":1417.3662894444217,"timing":[0,67,84,100,117,133,150,167,184,200,216,233,250,267,284,300,316,333,350,367,400,417,433,450,467,484,500,517,533,585,600,617,633]},{"start":[109,865],"end":[1620,208],"points":[[109,864],[110,864],[111,864],[125,861],[132,860],[137,860],[138,859],[147,856],[169,850],[275,803],[366,747],[472,672],[577,602],[696,548],[820,511],[1009,461],[1124,433],[1203,411],[1249,397],[1294,388],[1317,384],[1367,375],[1398,368],[1450,352],[1488,337],[1517,319],[1529,308],[1545,293],[1551,289],[1555,284],[1559,280],[1563,276],[1564,274],[1568,259],[1573,243],[1578,225],[1585,212],[1588,204],[1588,203],[1588,202],[1588,200],[1589,200],[1590,199],[1590,198],[1591,198],[1594,198],[1598,198],[1603,200],[1604,200],[1605,201],[1607,202],[1609,203],[1610,204],[1611,204],[1612,204],[1615,205],[1619,207],[1620,208]],"dx":1511,"dy":-657,"length":1705.9854864594731,"timing":[0,8,23,40,56,73,90,107,123,140,156,173,190,206,223,240,256,273,290,306,323,340,360,373,390,407,423,440,456,473,490,506,523,540,556,573,590,607,623,640,656,673,690,710,756,773,790,806,823,840,856,873,890,906,923,940,957,973]},{"start":[1646,138],"end":[1747,602],"points":[[1646,139],[1642,157],[1637,184],[1632,208],[1631,255],[1635,313],[1646,374],[1668,468],[1680,504],[1691,538],[1699,560],[1709,592],[1717,617],[1722,630],[1725,641],[1726,643],[1726,644],[1726,645],[1727,646],[1728,647],[1730,647],[1733,643],[1737,636],[1742,624],[1746,615],[1749,607],[1750,605],[1750,604],[1750,603],[1749,603],[1748,603],[1747,602]],"dx":101,"dy":464,"length":577.4526968668034,"timing":[0,14,31,50,64,80,97,114,130,147,164,180,197,214,230,247,269,283,297,314,331,380,397,414,430,447,464,480,615,664,680,709]},{"start":[1417,530],"end":[351,314],"points":[[1417,530],[1417,531],[1419,532],[1419,533],[1421,537],[1421,543],[1421,547],[1421,559],[1421,575],[1413,596],[1409,608],[1397,631],[1380,653],[1365,665],[1354,670],[1319,679],[1253,680],[1211,678],[1084,659],[918,620],[756,569],[685,541],[543,465],[425,393],[371,356],[347,343],[309,320],[291,309],[270,302],[268,300],[264,300],[266,300],[272,302],[280,305],[286,306],[302,309],[329,312],[343,314],[348,315],[350,316],[350,315],[351,315],[351,314]],"dx":-1066,"dy":-216,"length":1433.5505468884685,"timing":[0,57,65,78,92,105,118,132,145,160,172,185,200,212,225,238,252,265,278,292,305,318,332,345,358,372,385,398,412,425,438,478,492,505,518,532,545,558,572,585,673,705,727]},{"start":[1050,447],"end":[567,806],"points":[[1047,448],[1046,448],[1041,455],[1032,462],[1022,472],[1007,487],[987,506],[962,530],[941,555],[916,583],[895,608],[878,630],[862,648],[847,667],[835,681],[823,693],[813,705],[802,716],[791,725],[771,738],[760,746],[752,752],[745,757],[740,761],[735,763],[731,766],[727,767],[723,768],[718,770],[716,770],[712,770],[708,770],[706,770],[705,770],[703,770],[701,770],[700,770],[698,770],[695,767],[691,765],[683,760],[677,755],[675,752],[672,751],[670,750],[668,750],[667,750],[666,750],[662,750],[657,752],[651,755],[645,758],[635,763],[630,768],[620,773],[612,778],[607,782],[600,786],[592,791],[586,796],[583,798],[578,801],[576,802],[575,802],[572,803],[571,805],[570,805],[567,806]],"dx":-483,"dy":359,"length":639.3799224963896,"timing":[0,8,16,24,32,41,48,56,64,72,80,88,96,110,119,127,135,143,152,160,169,177,185,193,202,210,218,227,236,243,252,260,268,277,285,293,302,310,319,327,335,343,352,360,376,384,392,400,408,416,424,432,440,448,456,464,472,480,488,496,504,512,520,528,536,544,568,584]},{"start":[1213,1018],"end":[612,907],"points":[[1213,1018],[1215,1018],[1216,1018],[1216,1017],[1216,1016],[1216,1013],[1216,1012],[1213,1010],[1210,1005],[1203,998],[1193,992],[1182,985],[1163,976],[1137,963],[1106,951],[1071,940],[1033,927],[990,913],[952,905],[917,900],[837,885],[805,881],[773,877],[751,876],[733,876],[717,876],[703,876],[693,876],[687,876],[683,876],[680,876],[678,876],[677,876],[676,876],[673,876],[672,876],[670,877],[667,878],[663,881],[657,885],[655,886],[651,888],[650,890],[647,892],[646,893],[645,896],[642,896],[640,897],[637,900],[635,900],[631,901],[630,902],[628,902],[626,902],[622,903],[621,905],[620,906],[617,906],[616,906],[615,906],[612,907]],"dx":-601,"dy":-111,"length":651.2328973879712,"timing":[0,247,265,274,282,290,299,307,315,324,332,340,349,357,365,374,382,391,399,407,415,424,432,440,448,457,465,474,483,490,498,543,565,574,582,590,599,607,615,623,632,640,648,663,671,679,687,695,703,711,719,727,735,743,751,759,767,790,799,823,1008]},{"start":[976,1053],"end":[2270,381],"points":[[977,1053],[980,1053],[981,1053],[982,1051],[982,1050],[983,1048],[985,1046],[986,1045],[986,1043],[986,1041],[988,1037],[988,1035],[992,1032],[997,1026],[1008,1017],[1023,1006],[1043,992],[1076,976],[1115,958],[1163,941],[1208,922],[1263,903],[1321,883],[1386,863],[1443,845],[1495,826],[1540,811],[1582,792],[1615,778],[1642,770],[1670,758],[1696,745],[1727,736],[1756,722],[1785,711],[1807,698],[1837,682],[1863,665],[1887,651],[1915,633],[1938,618],[1965,603],[1991,588],[2017,576],[2040,563],[2062,551],[2078,542],[2106,528],[2117,523],[2125,520],[2128,516],[2131,515],[2133,515],[2135,513],[2136,513],[2138,513],[2140,513],[2141,511],[2143,511],[2145,510],[2146,508],[2147,506],[2148,505],[2148,503],[2150,501],[2150,500],[2151,497],[2152,496],[2157,492],[2161,487],[2171,478],[2173,473],[2177,468],[2181,463],[2183,458],[2187,452],[2190,448],[2192,443],[2193,441],[2196,438],[2198,435],[2201,432],[2203,431],[2203,428],[2206,427],[2207,426],[2210,423],[2211,422],[2212,420],[2215,418],[2216,416],[2218,415],[2220,413],[2222,411],[2223,410],[2225,407],[2227,406],[2228,405],[2231,403],[2232,403],[2233,401],[2236,401],[2237,401],[2238,400],[2241,400],[2242,397],[2243,397],[2246,396],[2247,396],[2250,395],[2252,392],[2255,391],[2257,388],[2261,386],[2262,385],[2265,385],[2266,383],[2267,383],[2270,381]],"dx":1294,"dy":-672,"length":1494.799825740494,"timing":[0,8,33,48,56,64,72,80,88,96,104,112,120,128,136,144,152,160,168,176,184,192,200,208,217,225,233,242,250,259,268,275,283,292,300,308,317,325,333,341,350,358,366,375,383,392,400,408,416,425,433,448,457,464,472,480,488,496,504,512,525,534,542,550,558,567,575,583,592,600,608,617,625,633,641,650,658,666,675,683,691,700,708,716,725,733,741,750,758,766,775,784,792,808,824,841,866,875,883,891,900,908,916,925,933,941,950,958,966,975,983,991,1000,1008,1016,1025,1033,1041,1104]},{"start":[2270,381],"end":[602,448],"points":[[2268,381],[2265,381],[2261,381],[2256,383],[2250,386],[2241,388],[2231,393],[2218,398],[2196,407],[2171,416],[2140,430],[2103,446],[2063,468],[2017,495],[1970,527],[1932,557],[1893,586],[1865,615],[1840,643],[1822,665],[1812,680],[1805,692],[1801,698],[1798,705],[1797,708],[1795,711],[1793,712],[1792,713],[1788,713],[1783,713],[1777,713],[1757,708],[1742,703],[1715,693],[1666,672],[1593,647],[1500,617],[1401,587],[1307,562],[1213,541],[1130,523],[1056,511],[990,498],[937,491],[898,487],[875,487],[851,487],[832,487],[816,487],[801,487],[787,490],[772,492],[756,497],[738,500],[722,503],[688,510],[670,512],[652,513],[636,515],[620,517],[605,517],[595,517],[587,517],[583,517],[581,517],[580,516],[578,515],[577,512],[577,511],[577,510],[577,507],[577,506],[577,505],[577,502],[577,498],[577,496],[577,492],[577,490],[577,487],[577,485],[577,482],[577,480],[577,477],[578,475],[580,473],[582,471],[583,467],[586,465],[587,462],[587,460],[590,458],[592,456],[595,453],[596,452],[597,450],[600,448],[601,448],[602,448]],"dx":-1668,"dy":67,"length":1922.031256744408,"timing":[0,8,16,24,32,40,48,56,64,72,81,89,97,106,114,122,131,139,147,156,164,172,181,189,200,222,231,239,247,256,264,272,281,289,297,306,314,322,330,339,347,356,364,372,381,389,397,406,414,422,430,439,447,456,464,472,481,489,497,506,514,522,530,539,568,576,584,592,600,608,616,624,632,640,648,656,664,672,680,689,697,706,714,722,731,739,747,755,763,772,781,789,797,805,814,822,830,832]},{"start":[112,252],"end":[1361,165],"points":[[112,252],[112,251],[112,250],[113,250],[115,250],[116,250],[120,250],[121,250],[122,250],[125,250],[127,250],[130,250],[133,250],[138,251],[150,255],[162,258],[185,262],[218,271],[263,277],[320,283],[392,291],[470,293],[562,300],[661,305],[768,307],[877,310],[975,312],[1155,308],[1227,301],[1283,295],[1327,283],[1357,276],[1377,270],[1391,263],[1402,258],[1410,255],[1413,251],[1417,250],[1418,247],[1421,245],[1421,242],[1422,241],[1422,238],[1422,237],[1422,236],[1422,235],[1422,232],[1422,231],[1421,228],[1420,225],[1416,220],[1411,213],[1407,210],[1403,206],[1398,203],[1395,200],[1392,197],[1391,196],[1388,193],[1386,191],[1381,186],[1377,182],[1371,176],[1366,171],[1363,168],[1361,165]],"dx":1249,"dy":-87,"length":1432.8257069896065,"timing":[0,69,102,117,125,133,141,150,158,167,175,183,192,200,208,217,225,233,242,250,258,267,275,283,291,300,308,317,325,335,341,350,358,367,375,383,391,400,408,417,425,433,442,450,458,467,476,485,493,501,508,516,525,533,541,550,558,566,575,583,591,600,608,616,625,717]},{"start":[328,211],"end":[1307,642],"points":[[329,211],[332,211],[342,215],[359,222],[377,229],[394,234],[399,236],[400,237],[407,242],[427,254],[493,278],[578,306],[668,339],[757,374],[848,414],[932,461],[991,499],[1046,541],[1088,575],[1120,600],[1136,613],[1148,622],[1160,634],[1180,646],[1211,660],[1232,664],[1240,665],[1244,665],[1257,663],[1268,662],[1276,660],[1281,658],[1284,656],[1284,654],[1284,652],[1288,646],[1294,645],[1298,642],[1304,642],[1307,642]],"dx":979,"dy":431,"length":1104.9065368081554,"timing":[0,10,26,43,60,76,93,110,127,143,159,176,193,209,226,243,259,276,293,309,326,344,359,376,393,409,426,443,459,476,493,509,526,543,559,576,592,609,626,642]},{"start":[1467,803],"end":[1735,320],"points":[[1467,802],[1466,802],[1465,801],[1464,799],[1462,796],[1461,794],[1460,794],[1460,793],[1462,790],[1467,782],[1474,771],[1482,760],[1491,745],[1501,727],[1511,709],[1521,688],[1535,663],[1546,640],[1555,618],[1564,593],[1575,564],[1583,538],[1590,508],[1595,480],[1602,453],[1608,426],[1616,405],[1622,390],[1627,375],[1635,362],[1641,351],[1645,342],[1650,331],[1654,322],[1658,312],[1662,308],[1664,303],[1665,301],[1665,299],[1666,297],[1666,296],[1667,296],[1669,296],[1670,296],[1673,296],[1677,298],[1680,301],[1684,303],[1686,306],[1689,307],[1691,310],[1695,311],[1697,313],[1698,313],[1701,314],[1702,314],[1703,314],[1704,315],[1705,316],[1707,317],[1712,319],[1716,320],[1720,320],[1725,320],[1728,320],[1731,320],[1732,320],[1735,320]],"dx":268,"dy":-483,"length":632.159299598084,"timing":[0,6,12,19,26,33,40,48,54,61,67,75,81,88,95,102,109,116,123,130,137,144,151,158,165,172,179,185,192,199,206,213,220,227,234,241,248,255,262,269,276,318,325,332,338,345,352,359,366,373,379,387,394,400,408,414,425,428,435,442,449,457,463,470,477,484,491,498]},{"start":[1735,320],"end":[588,283],"points":[[1734,321],[1733,321],[1732,321],[1730,322],[1729,323],[1728,326],[1725,327],[1723,329],[1719,330],[1716,333],[1711,335],[1705,337],[1699,340],[1692,343],[1686,347],[1679,350],[1674,352],[1665,356],[1653,362],[1638,368],[1625,372],[1605,380],[1575,388],[1538,395],[1498,400],[1455,402],[1407,404],[1354,404],[1298,400],[1242,394],[1192,386],[1143,376],[1094,365],[1053,353],[1009,342],[974,334],[942,329],[912,325],[883,319],[855,314],[829,310],[815,309],[786,307],[757,305],[734,305],[711,304],[681,304],[660,304],[636,304],[612,304],[594,306],[580,307],[569,307],[560,307],[556,307],[554,307],[553,307],[553,306],[553,305],[553,303],[553,302],[553,301],[553,300],[553,299],[554,298],[555,297],[557,296],[562,293],[564,291],[567,290],[572,290],[578,288],[582,286],[584,286],[587,285],[587,284],[588,283]],"dx":-1147,"dy":-37,"length":1256.0049418650206,"timing":[0,3,10,17,24,30,38,45,51,59,65,72,79,86,93,100,107,113,121,128,134,141,148,155,162,169,176,183,190,197,204,211,218,225,232,239,246,253,260,267,274,280,287,295,302,309,316,322,329,336,343,350,357,364,371,378,456,461,467,475,482,491,498,505,510,516,523,530,537,544,550,558,565,572,579,586,593]},{"start":[588,283],"end":[2079,145],"points":[[589,283],[590,283],[592,283],[596,284],[601,286],[607,287],[616,290],[626,292],[639,294],[654,297],[673,302],[693,306],[724,312],[759,320],[807,329],[852,336],[908,342],[979,348],[1039,353],[1106,357],[1180,359],[1250,361],[1323,361],[1395,361],[1459,361],[1519,355],[1571,349],[1620,345],[1664,337],[1709,326],[1742,316],[1774,307],[1802,297],[1832,287],[1858,277],[1880,267],[1903,258],[1923,249],[1944,241],[1959,234],[1975,228],[1994,219],[2010,210],[2025,203],[2036,197],[2046,193],[2050,189],[2054,187],[2055,184],[2055,182],[2055,180],[2055,177],[2052,174],[2050,170],[2047,169],[2044,166],[2042,165],[2041,164],[2041,163],[2041,162],[2042,162],[2045,160],[2045,159],[2046,158],[2048,157],[2049,156],[2049,155],[2053,154],[2053,153],[2055,151],[2056,151],[2058,150],[2061,149],[2064,149],[2066,148],[2069,147],[2072,146],[2074,146],[2077,145],[2078,145],[2079,145]],"dx":1491,"dy":-138,"length":1579.3173858338819,"timing":[0,2,9,15,22,30,36,43,50,57,64,70,78,85,92,98,105,114,119,126,133,140,147,154,161,168,175,182,189,196,203,210,217,224,231,238,245,252,259,266,272,279,286,293,300,307,314,321,328,335,342,349,356,363,370,376,384,390,460,469,474,481,487,494,502,508,515,523,529,536,544,551,557,564,572,578,585,592,599,606,612]},{"start":[892,603],"end":[1121,605],"points":[[891,602],[891,601],[892,601],[894,600],[896,599],[898,598],[900,597],[903,595],[905,594],[907,592],[911,589],[915,586],[918,582],[922,578],[927,575],[931,573],[941,567],[951,561],[964,555],[986,548],[1009,541],[1039,536],[1074,533],[1109,529],[1143,527],[1175,525],[1202,525],[1224,525],[1239,525],[1246,525],[1248,526],[1245,529],[1238,531],[1232,534],[1224,538],[1213,545],[1203,553],[1194,559],[1186,566],[1176,574],[1167,579],[1162,581],[1154,585],[1151,588],[1145,591],[1140,593],[1136,596],[1132,598],[1129,600],[1127,600],[1124,602],[1122,604],[1121,604],[1121,605]],"dx":229,"dy":2,"length":527.2172405777104,"timing":[0,3,10,17,24,31,38,45,52,59,65,73,79,86,94,99,108,113,120,127,134,141,148,156,162,169,177,183,191,197,204,225,232,240,245,253,260,266,274,281,288,294,301,308,315,322,329,336,343,351,357,364,371,378]},{"start":[1121,605],"end":[1742,233],"points":[[1122,604],[1123,603],[1123,602],[1124,602],[1125,602],[1125,601],[1126,600],[1127,600],[1128,600],[1130,598],[1133,597],[1138,593],[1143,590],[1152,584],[1164,577],[1180,567],[1201,555],[1222,541],[1241,529],[1257,520],[1279,507],[1297,496],[1318,485],[1338,471],[1360,458],[1379,446],[1397,436],[1427,420],[1449,409],[1475,397],[1502,386],[1531,375],[1561,364],[1592,353],[1623,341],[1646,332],[1675,318],[1698,307],[1718,298],[1734,291],[1752,280],[1762,273],[1772,267],[1778,262],[1782,259],[1785,254],[1787,252],[1787,249],[1788,247],[1788,244],[1788,242],[1788,241],[1788,239],[1788,238],[1788,237],[1788,236],[1787,235],[1786,234],[1783,232],[1781,231],[1778,231],[1775,230],[1771,229],[1767,229],[1763,229],[1760,229],[1758,229],[1756,230],[1754,230],[1753,230],[1752,230],[1751,230],[1750,230],[1749,230],[1748,232],[1746,232],[1744,233],[1743,233],[1742,233]],"dx":621,"dy":-372,"length":823.8877410043211,"timing":[0,20,31,39,42,62,70,77,84,91,97,105,112,119,125,132,139,146,153,160,167,174,181,188,195,201,209,215,223,229,236,243,250,257,265,270,278,285,292,298,307,312,319,326,333,340,347,354,361,368,375,382,389,396,406,417,424,431,438,445,451,459,466,473,480,487,494,500,507,533,535,546,554,555,563,570,577,584,591]},{"start":[1742,233],"end":[1065,730],"points":[[1742,234],[1742,235],[1740,236],[1738,238],[1735,242],[1734,244],[1729,248],[1723,253],[1718,257],[1708,263],[1701,267],[1691,275],[1683,280],[1671,288],[1660,295],[1649,302],[1637,309],[1620,319],[1601,330],[1576,344],[1551,359],[1519,379],[1488,399],[1452,423],[1422,446],[1382,478],[1355,501],[1326,528],[1303,547],[1283,569],[1268,586],[1257,601],[1247,617],[1238,631],[1233,645],[1225,656],[1219,666],[1214,673],[1208,680],[1204,686],[1197,688],[1191,691],[1186,695],[1181,697],[1174,699],[1170,700],[1167,702],[1163,702],[1161,702],[1158,702],[1156,702],[1154,702],[1150,702],[1148,702],[1144,702],[1142,702],[1137,702],[1133,702],[1126,702],[1120,702],[1114,702],[1108,702],[1106,702],[1098,703],[1095,705],[1090,707],[1087,710],[1085,712],[1083,714],[1081,716],[1077,719],[1075,721],[1072,723],[1069,724],[1067,726],[1067,727],[1067,729],[1066,729],[1066,730],[1065,730]],"dx":-677,"dy":497,"length":868.2735461372948,"timing":[0,14,19,26,33,39,46,53,60,66,74,80,87,94,101,108,115,123,129,136,144,150,157,165,170,178,184,192,198,207,213,219,226,233,241,247,254,261,268,275,282,289,296,303,310,317,324,331,338,345,352,359,366,373,380,386,394,400,408,415,421,428,435,442,449,455,462,470,477,483,490,498,504,512,518,525,533,538,546,553]},{"start":[1065,730],"end":[1807,1187],"points":[[1065,729],[1065,728],[1066,727],[1066,726],[1067,725],[1068,723],[1069,720],[1071,717],[1073,715],[1076,711],[1079,707],[1082,701],[1086,694],[1092,688],[1102,682],[1117,673],[1134,666],[1159,662],[1185,662],[1212,662],[1239,667],[1275,678],[1305,691],[1329,705],[1356,721],[1373,734],[1394,753],[1410,770],[1429,789],[1450,813],[1471,837],[1495,865],[1522,894],[1553,923],[1591,955],[1621,978],[1659,1000],[1695,1019],[1729,1037],[1760,1056],[1788,1070],[1809,1082],[1827,1092],[1843,1101],[1856,1108],[1865,1115],[1873,1119],[1880,1123],[1884,1125],[1886,1126],[1889,1128],[1890,1129],[1891,1130],[1893,1130],[1894,1130],[1895,1130],[1896,1130],[1897,1130],[1899,1130],[1900,1130],[1901,1130],[1904,1130],[1909,1131],[1914,1133],[1925,1134],[1937,1134],[1953,1134],[1966,1129],[1982,1122],[1994,1114],[2004,1104],[2009,1092],[2009,1079],[2009,1063],[2005,1043],[1996,1021],[1985,997],[1973,976],[1963,959],[1954,945],[1946,933],[1940,926],[1937,922],[1936,919],[1935,919],[1934,919],[1932,919],[1929,924],[1925,930],[1920,939],[1914,950],[1902,969],[1890,985],[1878,1001],[1867,1021],[1859,1038],[1853,1056],[1851,1071],[1851,1081],[1851,1091],[1853,1100],[1854,1104],[1857,1111],[1858,1117],[1858,1123],[1858,1129],[1858,1133],[1855,1138],[1852,1141],[1849,1146],[1846,1150],[1842,1153],[1841,1156],[1839,1159],[1838,1162],[1837,1164],[1836,1167],[1835,1169],[1835,1171],[1833,1173],[1832,1174],[1832,1175],[1831,1175],[1830,1176],[1829,1176],[1828,1176],[1826,1176],[1823,1177],[1820,1178],[1819,1179],[1816,1181],[1813,1183],[1811,1184],[1809,1186],[1808,1186],[1808,1187],[1807,1187]],"dx":742,"dy":457,"length":1661.743383736102,"timing":[0,3,11,17,24,30,38,44,51,58,65,72,79,86,93,100,107,114,121,128,134,142,149,155,163,169,177,183,190,197,203,211,218,225,231,238,246,252,259,266,273,280,287,294,301,309,314,322,330,335,343,349,357,364,370,378,384,391,399,405,412,419,426,433,440,447,454,461,468,475,482,489,496,503,510,517,524,531,537,545,551,557,565,572,580,603,607,614,621,628,634,641,648,655,662,669,676,683,690,697,704,711,718,725,732,739,746,753,760,767,774,781,788,795,802,809,816,822,828,837,842,850,856,864,871,877,885,891,899,905,912,919,926,933,940,946,955]},{"start":[1967,898],"end":[2154,443],"points":[[1967,898],[1967,897],[1967,895],[1967,893],[1966,891],[1964,887],[1964,885],[1962,883],[1962,879],[1962,877],[1962,874],[1962,868],[1963,860],[1966,851],[1969,838],[1974,823],[1978,809],[1983,794],[1988,780],[1997,762],[2008,739],[2018,724],[2028,703],[2041,684],[2050,666],[2058,649],[2068,633],[2078,618],[2086,602],[2092,587],[2100,574],[2106,561],[2111,549],[2116,537],[2120,527],[2124,517],[2129,508],[2131,501],[2134,492],[2138,487],[2140,483],[2142,479],[2143,473],[2144,471],[2144,468],[2146,465],[2148,461],[2149,458],[2150,456],[2150,454],[2151,452],[2152,450],[2152,448],[2153,448],[2153,446],[2153,445],[2154,445],[2154,444],[2154,443]],"dx":187,"dy":-455,"length":503.05750149800076,"timing":[0,123,145,152,159,166,173,180,187,194,201,208,215,222,229,236,243,250,256,263,271,277,284,291,298,305,312,319,326,333,340,347,354,361,368,375,381,389,394,403,408,416,423,430,437,443,450,457,464,471,478,486,493,499,506,513,525,550,583]},{"start":[724,355],"end":[347,1221],"points":[[725,355],[726,356],[727,357],[730,358],[732,359],[735,359],[738,360],[744,363],[751,364],[759,366],[769,369],[781,373],[789,376],[803,380],[819,385],[838,390],[854,394],[874,400],[894,406],[909,410],[921,414],[931,420],[935,423],[936,424],[936,428],[933,434],[926,442],[916,453],[904,466],[888,479],[870,493],[842,515],[820,534],[789,560],[757,592],[726,629],[685,683],[652,726],[607,785],[569,834],[540,872],[507,912],[472,951],[446,986],[426,1016],[408,1044],[391,1072],[376,1097],[365,1116],[353,1138],[344,1155],[335,1171],[331,1181],[326,1191],[322,1201],[319,1206],[316,1210],[315,1215],[312,1218],[310,1220],[309,1222],[309,1225],[308,1227],[307,1229],[307,1231],[307,1233],[307,1234],[307,1235],[307,1237],[308,1237],[309,1237],[310,1237],[312,1237],[313,1237],[316,1237],[318,1236],[321,1235],[324,1234],[327,1232],[331,1230],[335,1228],[338,1227],[342,1225],[344,1224],[346,1222],[347,1222],[347,1221]],"dx":-377,"dy":866,"length":1307.4745937349476,"timing":[0,6,13,21,27,34,42,48,55,62,69,76,83,90,97,105,110,118,126,132,139,146,153,160,167,174,181,188,195,202,209,216,223,228,237,243,250,257,263,270,278,284,291,298,305,312,319,327,332,340,347,355,361,368,375,382,389,396,403,410,417,424,431,437,445,452,459,466,486,494,499,506,514,520,527,534,542,548,555,562,569,577,583,590,598,603,612]},{"start":[348,1221],"end":[701,757],"points":[[348,1221],[348,1220],[350,1219],[351,1217],[352,1215],[355,1213],[356,1211],[362,1207],[370,1201],[378,1195],[387,1188],[398,1181],[412,1172],[429,1160],[452,1146],[475,1129],[504,1109],[532,1087],[566,1062],[598,1036],[626,1011],[647,990],[671,970],[687,955],[697,941],[703,928],[706,918],[707,908],[705,900],[700,887],[696,878],[688,867],[679,856],[674,847],[664,837],[656,827],[649,818],[642,811],[638,804],[635,799],[632,796],[632,793],[631,789],[631,788],[631,787],[631,784],[633,781],[633,780],[634,779],[634,776],[635,776],[636,775],[638,774],[641,772],[644,771],[648,770],[652,769],[658,768],[664,767],[670,767],[675,766],[681,765],[687,763],[692,762],[695,761],[696,761],[699,759],[700,759],[700,758],[701,758],[701,757]],"dx":353,"dy":-464,"length":714.7344598974906,"timing":[0,90,97,105,111,118,125,132,139,146,153,160,167,174,181,188,195,202,209,216,223,229,236,243,250,257,264,270,278,284,292,298,305,313,319,327,333,340,348,354,362,367,375,384,388,397,403,410,416,423,431,437,444,451,458,465,472,479,486,493,499,507,514,521,528,535,542,549,556,563,602]},{"start":[701,757],"end":[203,593],"points":[[700,757],[697,757],[692,755],[685,753],[676,749],[664,745],[650,739],[631,730],[612,723],[589,715],[562,704],[538,694],[511,682],[488,672],[459,659],[438,652],[414,642],[396,635],[380,628],[361,622],[346,615],[330,610],[314,605],[303,600],[292,597],[285,594],[280,593],[273,592],[269,591],[265,590],[262,590],[259,589],[255,588],[251,588],[248,588],[244,588],[241,588],[240,588],[239,589],[238,589],[237,590],[236,590],[234,590],[232,591],[228,591],[225,591],[224,591],[221,591],[219,591],[214,591],[212,593],[208,593],[206,593],[203,593]],"dx":-498,"dy":-164,"length":531.1928274834545,"timing":[0,4,11,18,25,32,39,46,53,60,67,74,81,87,95,101,109,115,122,129,136,143,150,157,164,171,178,184,192,199,206,213,219,227,234,240,247,255,261,269,276,281,288,296,302,309,317,323,330,337,344,351,358,365]},{"start":[528,768],"end":[1590,1046],"points":[[528,768],[528,767],[529,767],[530,767],[531,765],[532,765],[536,765],[538,765],[543,765],[548,765],[556,765],[563,765],[572,765],[584,765],[598,765],[616,768],[640,771],[665,776],[694,780],[730,786],[777,792],[825,798],[882,806],[942,817],[1002,827],[1065,837],[1124,850],[1178,863],[1232,877],[1277,888],[1324,901],[1362,914],[1392,927],[1425,941],[1446,950],[1469,961],[1485,970],[1501,980],[1517,990],[1529,999],[1542,1006],[1550,1012],[1559,1019],[1566,1024],[1570,1028],[1574,1031],[1577,1034],[1579,1036],[1581,1036],[1583,1039],[1583,1041],[1586,1043],[1588,1044],[1589,1044],[1590,1046]],"dx":1062,"dy":278,"length":1119.0209333351777,"timing":[0,68,79,85,89,96,103,110,117,124,131,138,145,152,159,165,173,179,186,194,200,207,214,221,228,235,242,249,256,263,270,277,283,291,297,304,311,318,325,332,340,346,353,360,367,374,381,388,395,402,408,416,422,430,437]},{"start":[1439,223],"end":[511,196],"points":[[1439,224],[1439,226],[1439,229],[1438,232],[1436,236],[1433,240],[1429,246],[1426,251],[1420,259],[1415,267],[1406,278],[1395,289],[1380,303],[1357,320],[1329,335],[1291,351],[1249,366],[1206,376],[1162,380],[1129,381],[1087,381],[1060,381],[1026,374],[1004,367],[980,359],[963,352],[947,345],[931,340],[918,334],[903,327],[888,321],[871,313],[855,306],[837,300],[816,292],[796,284],[772,274],[746,266],[725,260],[707,256],[681,248],[659,240],[641,234],[626,228],[609,223],[597,220],[586,217],[576,214],[567,214],[559,212],[554,212],[550,212],[543,210],[537,209],[532,207],[527,205],[523,203],[518,202],[516,200],[515,200],[513,199],[513,198],[512,198],[512,197],[511,197],[511,196]],"dx":-928,"dy":-27,"length":1021.0824337172086,"timing":[0,7,13,20,27,35,41,48,55,62,69,76,83,90,97,104,111,118,125,131,139,145,153,159,167,174,180,187,194,201,208,215,222,229,236,243,250,257,264,271,278,285,292,298,306,313,320,327,334,341,347,355,361,367,375,381,389,395,402,410,417,424,430,455,539,555]},{"start":[1629,282],"end":[1094,499],"points":[[1629,282],[1629,283],[1627,287],[1620,299],[1609,315],[1595,334],[1574,357],[1551,382],[1529,405],[1494,434],[1467,457],[1437,479],[1408,498],[1384,513],[1357,527],[1337,536],[1315,546],[1296,552],[1280,557],[1269,562],[1260,565],[1254,568],[1248,570],[1244,571],[1239,571],[1234,571],[1230,571],[1221,571],[1214,571],[1203,569],[1190,566],[1176,564],[1165,561],[1152,559],[1141,558],[1131,555],[1124,554],[1119,553],[1114,550],[1114,548],[1112,547],[1111,546],[1110,544],[1110,541],[1108,538],[1106,535],[1104,531],[1102,527],[1099,524],[1096,522],[1095,521],[1095,520],[1094,520],[1094,518],[1094,517],[1094,515],[1094,513],[1094,511],[1094,509],[1094,506],[1094,503],[1094,501],[1094,500],[1094,499]],"dx":-535,"dy":217,"length":684.3554591930427,"timing":[0,184,188,195,202,209,216,223,229,237,244,251,258,264,272,278,285,292,299,306,313,320,327,334,341,348,355,362,369,376,383,390,397,404,411,418,425,431,439,445,452,459,465,473,479,486,494,500,507,514,521,528,549,556,563,570,577,584,591,598,605,612,619,628]},{"start":[1094,499],"end":[2346,1219],"points":[[1094,498],[1095,498],[1096,498],[1097,498],[1098,498],[1099,498],[1099,499],[1099,501],[1099,502],[1099,506],[1100,509],[1104,517],[1112,527],[1120,536],[1136,550],[1149,561],[1172,578],[1200,598],[1233,620],[1270,641],[1315,662],[1366,691],[1428,720],[1496,750],[1563,782],[1630,811],[1695,839],[1755,867],[1816,896],[1869,926],[1919,954],[1966,981],[2009,1007],[2049,1031],[2087,1053],[2121,1074],[2153,1093],[2183,1109],[2205,1123],[2227,1137],[2243,1148],[2262,1161],[2278,1173],[2291,1184],[2303,1194],[2313,1202],[2321,1210],[2328,1217],[2335,1224],[2339,1227],[2345,1233],[2348,1235],[2351,1237],[2353,1240],[2354,1240],[2354,1239],[2353,1237],[2352,1237],[2352,1236],[2352,1235],[2352,1234],[2352,1233],[2351,1231],[2349,1228],[2348,1226],[2348,1224],[2347,1222],[2347,1220],[2346,1219]],"dx":1252,"dy":720,"length":1501.164157825666,"timing":[0,5,12,33,62,82,95,102,109,117,123,129,138,143,151,158,164,172,178,185,192,199,206,213,220,227,234,241,248,255,262,269,276,283,290,297,304,311,318,325,331,338,345,352,359,366,373,380,387,394,401,408,415,422,429,464,470,478,526,532,541,547,553,561,567,575,581,588,596]},{"start":[2346,1219],"end":[2399,990],"points":[[2346,1218],[2342,1216],[2336,1212],[2330,1208],[2321,1203],[2310,1196],[2300,1190],[2286,1181],[2276,1174],[2258,1161],[2246,1148],[2235,1134],[2227,1118],[2223,1102],[2221,1086],[2221,1072],[2221,1059],[2224,1046],[2229,1035],[2235,1027],[2241,1021],[2250,1014],[2257,1011],[2263,1007],[2269,1003],[2275,999],[2280,996],[2287,992],[2292,988],[2299,983],[2309,976],[2322,969],[2333,961],[2345,954],[2355,949],[2366,943],[2373,939],[2377,937],[2382,935],[2384,934],[2386,934],[2387,934],[2388,934],[2389,934],[2389,937],[2390,939],[2391,942],[2392,947],[2393,949],[2393,955],[2393,959],[2393,963],[2395,966],[2396,968],[2397,971],[2398,973],[2398,975],[2399,978],[2399,979],[2399,981],[2399,983],[2399,985],[2399,987],[2399,988],[2399,989],[2399,990]],"dx":53,"dy":-229,"length":492.87192223322955,"timing":[0,8,15,22,29,36,43,50,56,64,71,78,85,92,99,105,112,119,126,133,140,147,154,161,168,174,182,188,196,203,209,216,223,231,236,244,252,257,265,271,278,286,312,330,334,341,348,355,362,369,376,383,390,397,404,411,418,424,432,438,446,453,459,467,473,480]},{"start":[2143,246],"end":[1771,1187],"points":[[2143,246],[2143,247],[2140,250],[2135,254],[2128,259],[2119,266],[2108,275],[2096,284],[2082,293],[2065,305],[2044,317],[2023,329],[1997,343],[1973,356],[1944,370],[1920,386],[1887,405],[1846,429],[1808,451],[1770,479],[1737,505],[1703,539],[1676,573],[1654,605],[1637,637],[1625,665],[1619,688],[1618,712],[1618,734],[1618,758],[1618,779],[1621,803],[1627,831],[1632,862],[1639,890],[1644,916],[1650,940],[1655,964],[1659,987],[1661,1001],[1666,1017],[1671,1032],[1677,1046],[1682,1058],[1687,1070],[1693,1082],[1698,1093],[1704,1102],[1709,1110],[1712,1115],[1716,1118],[1720,1122],[1722,1126],[1725,1129],[1728,1133],[1734,1140],[1737,1144],[1742,1151],[1748,1156],[1752,1160],[1757,1164],[1761,1166],[1763,1168],[1765,1169],[1766,1170],[1767,1170],[1767,1171],[1768,1171],[1768,1173],[1768,1176],[1769,1177],[1770,1179],[1770,1182],[1771,1184],[1771,1186],[1771,1187]],"dx":-372,"dy":941,"length":1244.6808790763348,"timing":[0,84,90,97,104,111,118,125,132,139,146,153,160,167,174,180,187,196,202,209,215,222,229,236,243,250,257,264,271,278,285,292,299,306,313,320,327,333,341,348,353,361,368,375,382,389,396,403,410,416,424,431,438,445,451,459,466,473,480,486,493,500,507,514,521,533,535,542,569,576,583,590,597,604,611,618]},{"start":[1771,1187],"end":[2115,731],"points":[[1771,1186],[1771,1185],[1771,1183],[1771,1181],[1770,1177],[1769,1174],[1768,1168],[1766,1163],[1764,1154],[1760,1145],[1756,1134],[1752,1121],[1746,1106],[1742,1089],[1738,1074],[1736,1061],[1736,1048],[1738,1032],[1745,1015],[1755,989],[1763,967],[1779,934],[1794,911],[1813,889],[1834,873],[1856,861],[1879,850],[1919,834],[1943,824],[1967,817],[1990,809],[2008,799],[2027,792],[2046,784],[2063,778],[2076,774],[2090,767],[2101,764],[2109,760],[2120,754],[2127,751],[2131,750],[2133,747],[2135,745],[2137,743],[2139,742],[2139,741],[2138,741],[2137,740],[2136,739],[2135,739],[2134,739],[2133,739],[2133,738],[2132,738],[2129,738],[2129,737],[2128,737],[2127,736],[2124,735],[2122,735],[2119,733],[2117,733],[2116,733],[2115,731]],"dx":344,"dy":-456,"length":712.8879230592314,"timing":[0,4,11,18,25,32,39,45,53,60,67,74,81,88,95,102,109,116,122,130,136,144,151,158,165,171,178,186,192,199,206,213,220,227,234,241,248,255,262,269,275,283,289,297,303,311,360,381,388,393,401,410,417,424,428,435,442,449,456,463,469,477,484,490,498]},{"start":[2115,731],"end":[1206,797],"points":[[2114,731],[2113,731],[2112,730],[2110,730],[2107,728],[2102,726],[2093,722],[2081,717],[2066,713],[2049,708],[2020,704],[1981,702],[1938,700],[1897,698],[1843,696],[1795,694],[1745,694],[1694,694],[1647,694],[1603,694],[1569,696],[1538,700],[1505,703],[1481,707],[1457,710],[1436,714],[1413,718],[1392,724],[1377,727],[1359,731],[1347,735],[1339,738],[1330,740],[1324,742],[1319,745],[1317,748],[1314,749],[1313,751],[1311,753],[1309,755],[1308,758],[1306,760],[1303,763],[1302,766],[1299,769],[1297,771],[1292,774],[1289,776],[1285,778],[1281,779],[1276,782],[1273,783],[1269,784],[1264,786],[1259,786],[1254,787],[1251,789],[1247,789],[1242,790],[1239,791],[1238,791],[1237,792],[1236,792],[1234,792],[1233,792],[1231,793],[1229,793],[1228,793],[1226,793],[1224,794],[1222,794],[1220,794],[1217,794],[1216,794],[1213,794],[1211,795],[1209,795],[1207,797],[1206,797]],"dx":-909,"dy":66,"length":938.4122433131922,"timing":[0,2,9,16,23,30,37,44,51,57,65,72,79,87,92,99,106,113,120,127,134,141,148,155,162,169,176,183,189,197,204,210,218,224,232,238,245,252,259,266,273,280,287,294,301,307,314,322,328,336,342,349,356,363,370,377,384,391,398,405,411,419,425,432,439,446,453,460,467,474,481,488,495,502,509,516,523,530,565]},{"start":[1758,765],"end":[2490,1186],"points":[[1757,765],[1754,765],[1751,768],[1746,770],[1738,774],[1730,779],[1724,784],[1716,788],[1710,796],[1703,805],[1697,814],[1693,822],[1689,830],[1687,839],[1687,848],[1690,859],[1699,871],[1721,890],[1748,907],[1789,932],[1837,954],[1880,970],[1939,989],[1987,1002],[2028,1014],[2080,1029],[2120,1040],[2160,1054],[2193,1069],[2226,1082],[2254,1095],[2291,1113],[2323,1128],[2354,1145],[2381,1159],[2415,1177],[2438,1189],[2462,1200],[2481,1209],[2500,1217],[2511,1225],[2517,1229],[2521,1232],[2523,1233],[2524,1234],[2525,1234],[2525,1235],[2526,1235],[2527,1236],[2528,1237],[2530,1237],[2533,1238],[2534,1238],[2535,1238],[2535,1237],[2535,1236],[2531,1235],[2527,1231],[2523,1228],[2521,1226],[2518,1223],[2514,1221],[2512,1219],[2511,1217],[2510,1216],[2509,1216],[2509,1215],[2509,1213],[2507,1212],[2506,1211],[2506,1210],[2504,1207],[2503,1205],[2503,1202],[2502,1201],[2501,1199],[2499,1198],[2499,1196],[2498,1195],[2497,1193],[2497,1191],[2496,1191],[2495,1191],[2495,1190],[2495,1189],[2494,1189],[2494,1188],[2493,1186],[2491,1186],[2490,1186]],"dx":732,"dy":421,"length":1139.4017016540004,"timing":[0,6,13,19,26,33,40,47,54,61,68,75,82,89,96,103,110,117,124,130,138,144,151,159,164,172,179,186,193,200,207,214,221,228,234,242,248,255,262,270,277,283,291,296,303,311,323,326,332,338,345,352,359,366,414,415,422,430,436,443,450,457,464,471,478,503,506,512,519,526,533,540,547,554,561,568,575,581,589,596,603,611,623,656,674,679,686,693,700,726]},{"start":[1658,1210],"end":[255,662],"points":[[1657,1210],[1657,1209],[1657,1208],[1657,1206],[1657,1203],[1657,1200],[1657,1195],[1657,1190],[1655,1185],[1654,1182],[1652,1176],[1649,1170],[1647,1164],[1641,1154],[1632,1140],[1619,1130],[1599,1115],[1574,1100],[1543,1083],[1504,1066],[1466,1051],[1429,1039],[1374,1019],[1318,1003],[1273,991],[1210,975],[1160,961],[1096,941],[1048,926],[987,906],[931,885],[871,869],[813,847],[758,827],[710,809],[648,789],[600,773],[563,761],[507,744],[472,732],[433,721],[401,712],[372,703],[350,699],[333,696],[322,694],[320,693],[319,693],[318,693],[317,693],[317,691],[315,690],[314,687],[311,686],[309,684],[305,682],[301,679],[297,677],[293,675],[291,673],[288,671],[285,669],[283,668],[280,667],[277,666],[273,664],[269,664],[266,663],[264,662],[261,662],[259,662],[258,662],[256,662],[255,662]],"dx":-1403,"dy":-548,"length":1543.5435868222994,"timing":[0,85,87,94,101,108,115,122,129,136,143,150,157,164,171,177,184,191,198,205,212,219,226,232,240,246,254,260,267,275,281,289,295,303,308,316,324,329,338,344,350,358,364,371,378,385,392,399,428,433,441,448,455,462,469,476,483,490,497,504,510,517,525,531,538,545,552,559,566,573,580,586,595,601]},{"start":[255,662],"end":[193,180],"points":[[256,662],[257,662],[259,663],[262,664],[266,665],[273,666],[282,667],[291,667],[301,669],[310,669],[327,669],[340,669],[356,669],[374,669],[395,670],[420,670],[447,672],[477,672],[510,674],[540,674],[566,674],[599,675],[618,675],[635,675],[645,674],[648,673],[649,671],[650,671],[650,669],[645,663],[637,656],[623,646],[609,637],[597,628],[583,619],[572,609],[557,596],[542,577],[525,555],[507,529],[487,501],[467,472],[450,445],[434,418],[418,395],[404,369],[391,343],[381,320],[373,298],[363,275],[358,255],[352,237],[347,221],[342,206],[338,193],[332,181],[325,169],[319,158],[313,148],[307,142],[300,136],[294,131],[288,128],[283,126],[281,125],[278,125],[275,125],[273,125],[271,126],[267,130],[263,132],[259,136],[255,141],[250,146],[244,150],[240,154],[237,157],[233,162],[230,163],[227,165],[225,167],[222,168],[219,170],[217,171],[216,172],[214,172],[213,173],[211,175],[211,176],[209,176],[207,177],[205,177],[203,178],[200,179],[199,179],[197,180],[196,180],[194,180],[193,180]],"dx":-62,"dy":-482,"length":1180.1090381228614,"timing":[0,7,11,18,24,32,39,46,53,59,67,73,80,87,94,101,108,115,122,129,136,143,150,157,164,170,177,185,191,198,206,212,219,225,234,239,246,253,260,268,274,281,288,295,302,309,316,323,330,337,344,351,358,365,372,378,386,392,400,406,413,421,427,435,441,448,455,462,469,476,483,490,497,504,511,518,525,531,539,545,553,558,566,574,579,588,593,614,623,630,635,642,649,658,663,670,677,684,691]},{"start":[193,180],"end":[1781,459],"points":[[193,181],[193,182],[193,183],[196,183],[197,185],[200,187],[203,189],[207,191],[212,193],[222,198],[231,203],[244,207],[259,211],[279,218],[302,224],[335,231],[369,238],[409,247],[452,255],[498,263],[547,275],[597,286],[657,299],[723,313],[775,326],[844,339],[924,349],[992,354],[1056,359],[1113,363],[1189,367],[1251,369],[1302,370],[1377,372],[1431,374],[1492,376],[1547,376],[1600,378],[1646,378],[1684,378],[1712,378],[1740,378],[1762,378],[1782,378],[1799,378],[1812,379],[1822,379],[1830,379],[1836,379],[1838,379],[1840,379],[1842,379],[1843,379],[1844,379],[1845,380],[1845,381],[1845,382],[1842,385],[1842,387],[1840,391],[1838,396],[1836,401],[1834,407],[1833,413],[1833,418],[1831,423],[1831,426],[1831,429],[1830,432],[1829,434],[1827,438],[1825,441],[1822,444],[1819,447],[1817,450],[1813,452],[1810,455],[1809,456],[1806,457],[1805,458],[1804,458],[1803,458],[1802,458],[1801,458],[1799,458],[1797,458],[1794,459],[1790,459],[1787,459],[1785,459],[1782,459],[1781,459]],"dx":1588,"dy":279,"length":1793.647456059565,"timing":[0,11,15,21,29,35,43,49,55,63,69,76,83,90,97,104,112,118,125,132,139,146,153,160,167,173,182,188,195,201,209,216,222,230,236,243,250,257,264,271,278,285,292,299,306,313,320,327,334,341,348,355,362,368,414,422,424,431,437,445,452,458,466,473,479,487,493,501,507,514,521,528,535,542,549,556,563,570,577,584,590,628,634,640,646,654,659,667,674,681,688,695]},{"start":[2381,1044],"end":[1154,1071],"points":[[2381,1044],[2380,1044],[2379,1044],[2376,1044],[2374,1044],[2369,1044],[2362,1043],[2355,1041],[2346,1036],[2336,1032],[2324,1027],[2307,1018],[2285,1007],[2264,997],[2235,982],[2205,966],[2174,947],[2138,925],[2093,902],[2062,885],[2019,859],[1980,838],[1938,818],[1892,795],[1844,778],[1804,762],[1759,748],[1712,739],[1683,736],[1651,734],[1630,734],[1609,734],[1590,741],[1569,747],[1549,755],[1531,764],[1514,774],[1495,784],[1474,796],[1452,810],[1424,823],[1396,837],[1361,853],[1335,866],[1303,883],[1284,895],[1265,909],[1255,920],[1249,932],[1247,942],[1246,949],[1246,955],[1246,960],[1249,968],[1250,972],[1251,976],[1251,982],[1250,989],[1248,994],[1244,998],[1240,1003],[1234,1007],[1226,1013],[1222,1016],[1217,1019],[1213,1021],[1210,1024],[1206,1027],[1203,1031],[1200,1034],[1197,1037],[1193,1039],[1189,1043],[1186,1045],[1182,1045],[1176,1050],[1171,1053],[1167,1056],[1165,1058],[1162,1061],[1160,1064],[1160,1065],[1160,1066],[1159,1066],[1157,1066],[1157,1068],[1157,1069],[1156,1069],[1156,1070],[1155,1070],[1155,1071],[1154,1071]],"dx":-1227,"dy":27,"length":1449.6946387842145,"timing":[0,61,68,76,83,88,97,102,111,117,123,131,137,144,151,158,165,171,180,185,194,200,207,214,221,228,234,242,249,256,262,269,275,284,290,297,304,311,318,325,333,338,347,352,359,367,375,381,387,394,402,408,416,422,429,436,442,451,457,464,472,477,485,491,498,505,512,520,526,532,540,546,555,560,568,575,582,590,595,603,609,616,626,631,639,644,657,659,671,672,690,694]},{"start":[1729,236],"end":[2244,606],"points":[[1729,236],[1729,237],[1729,238],[1729,240],[1726,243],[1724,246],[1723,250],[1721,257],[1720,262],[1718,269],[1717,276],[1717,280],[1717,287],[1717,290],[1716,296],[1716,302],[1716,308],[1718,317],[1722,326],[1729,339],[1739,355],[1754,375],[1771,396],[1788,415],[1814,437],[1845,459],[1874,478],[1905,495],[1939,512],[1963,524],[1991,537],[2014,549],[2036,560],[2055,570],[2075,580],[2094,590],[2108,597],[2126,608],[2140,617],[2154,622],[2168,631],[2179,638],[2187,643],[2193,646],[2196,648],[2197,649],[2198,649],[2199,649],[2201,648],[2202,647],[2205,643],[2208,640],[2210,637],[2212,635],[2214,632],[2218,629],[2220,627],[2223,625],[2225,622],[2227,620],[2230,616],[2233,614],[2235,612],[2237,610],[2237,608],[2239,607],[2240,607],[2241,607],[2243,606],[2244,606]],"dx":515,"dy":370,"length":744.2899717562698,"timing":[0,83,87,91,98,105,112,119,126,133,140,147,154,161,167,174,181,189,195,202,209,217,223,230,237,244,250,258,265,271,279,285,293,299,306,314,319,327,334,340,348,355,362,369,376,382,405,434,438,445,452,459,466,473,480,487,494,501,508,515,521,529,536,543,550,556,564,571,578,599]},{"start":[2244,606],"end":[146,868],"points":[[2243,606],[2242,604],[2241,604],[2239,604],[2236,604],[2234,604],[2229,604],[2223,604],[2215,603],[2203,603],[2189,602],[2168,600],[2138,596],[2107,593],[2056,586],[1997,580],[1931,575],[1857,571],[1778,566],[1693,565],[1609,564],[1518,562],[1428,562],[1335,562],[1245,571],[1166,580],[1064,596],[1001,605],[904,622],[826,635],[752,642],[685,651],[620,659],[562,663],[506,667],[452,671],[410,673],[362,675],[325,677],[298,679],[274,682],[254,685],[235,689],[221,694],[204,700],[192,706],[176,712],[165,717],[154,723],[147,726],[137,729],[127,734],[121,737],[116,742],[111,745],[107,750],[105,752],[104,756],[103,760],[103,764],[105,768],[108,772],[111,774],[113,779],[117,783],[121,787],[123,789],[125,791],[127,793],[129,795],[129,797],[131,801],[132,804],[133,808],[135,812],[136,818],[137,821],[138,825],[139,829],[140,831],[140,833],[140,836],[140,838],[140,840],[140,842],[140,845],[140,847],[140,849],[140,851],[140,853],[140,855],[140,857],[140,859],[140,861],[140,863],[142,865],[143,866],[143,867],[144,867],[145,868],[146,868]],"dx":-2098,"dy":262,"length":2297.446880489821,"timing":[0,5,12,18,26,33,40,46,53,60,67,74,81,87,95,102,109,116,123,130,137,144,152,158,165,171,179,185,192,199,206,213,220,227,234,241,247,255,262,269,276,283,290,296,304,310,318,325,332,338,345,353,359,366,373,380,387,394,401,408,414,422,428,436,442,449,457,463,470,477,484,491,498,505,511,518,525,532,539,546,554,560,567,574,581,587,595,602,609,616,623,630,637,644,651,658,664,674,679,686,713]},{"start":[146,868],"end":[668,295],"points":[[147,868],[148,868],[149,868],[151,868],[155,867],[161,865],[168,864],[178,864],[186,864],[201,862],[217,859],[235,855],[256,851],[277,844],[301,835],[325,822],[349,809],[371,794],[392,781],[417,761],[434,741],[452,717],[472,688],[498,654],[522,622],[551,588],[578,557],[603,526],[625,496],[648,458],[665,430],[681,398],[692,377],[700,360],[706,345],[711,333],[712,322],[715,310],[716,302],[717,291],[718,285],[719,278],[720,274],[721,269],[723,266],[723,264],[723,263],[723,261],[723,260],[723,259],[722,259],[720,259],[717,258],[713,258],[708,258],[703,258],[699,261],[694,264],[690,267],[685,272],[681,276],[677,281],[674,285],[672,286],[671,288],[671,289],[670,289],[670,290],[668,291],[668,292],[668,293],[668,294],[668,295]],"dx":522,"dy":-573,"length":967.486658865702,"timing":[0,8,13,20,26,34,40,48,54,61,68,75,82,89,96,103,109,117,124,130,138,144,152,158,165,172,179,187,193,200,207,214,221,228,235,243,248,256,262,270,277,283,290,297,304,311,318,325,331,343,346,353,360,366,374,381,388,395,402,409,415,423,430,437,443,450,457,464,471,480,487,493,499]},{"start":[668,295],"end":[2092,181],"points":[[668,296],[668,297],[668,298],[668,299],[670,301],[671,304],[673,306],[674,309],[677,312],[679,315],[684,320],[688,327],[694,333],[705,343],[718,353],[733,363],[752,375],[771,385],[795,398],[817,410],[837,419],[860,430],[881,436],[902,444],[917,448],[935,454],[956,457],[977,461],[1000,463],[1025,463],[1057,463],[1090,459],[1125,453],[1158,444],[1194,429],[1229,415],[1268,396],[1308,376],[1355,357],[1410,337],[1466,322],[1525,303],[1578,290],[1649,274],[1708,261],[1762,251],[1804,244],[1854,237],[1900,231],[1930,228],[1961,222],[1986,216],[2003,211],[2020,206],[2032,203],[2044,200],[2054,196],[2063,195],[2070,192],[2074,191],[2077,190],[2080,188],[2080,187],[2081,187],[2083,186],[2085,186],[2088,184],[2089,183],[2090,183],[2092,182],[2092,181]],"dx":1424,"dy":-114,"length":1521.4687070110876,"timing":[0,8,15,21,28,35,41,49,56,63,69,76,83,90,97,104,112,117,125,133,138,146,153,160,167,173,180,187,194,201,208,215,222,229,236,243,250,257,264,271,278,285,291,299,306,313,319,326,334,340,347,354,361,368,375,382,389,396,403,410,417,424,431,438,444,452,458,465,472,480,486]},{"start":[1190,697],"end":[638,525],"points":[[1191,697],[1191,696],[1189,696],[1185,694],[1180,691],[1174,688],[1168,684],[1161,680],[1155,675],[1142,667],[1127,658],[1107,644],[1083,631],[1056,617],[1028,604],[1001,593],[966,580],[929,568],[893,555],[856,544],[819,535],[781,526],[748,520],[717,513],[691,506],[674,505],[660,504],[651,504],[647,504],[646,504],[645,504],[644,505],[643,505],[642,507],[642,508],[641,509],[640,509],[640,511],[640,513],[640,515],[639,516],[639,517],[639,520],[638,520],[638,522],[638,523],[638,524],[638,525]],"dx":-552,"dy":-172,"length":612.0298298117674,"timing":[0,1,8,15,23,29,36,43,49,57,64,71,78,85,92,98,105,112,119,126,133,140,147,154,161,168,175,182,189,196,253,263,266,273,279,286,308,314,335,342,349,355,363,370,377,385,390,398]},{"start":[638,525],"end":[710,314],"points":[[639,525],[640,525],[643,525],[646,525],[649,525],[654,525],[660,525],[668,524],[678,524],[691,524],[704,522],[719,522],[735,521],[752,520],[765,517],[777,514],[787,510],[792,508],[796,506],[797,504],[798,500],[799,499],[799,496],[799,490],[799,484],[799,479],[799,469],[799,460],[800,449],[800,433],[800,420],[800,407],[800,395],[796,383],[793,370],[788,355],[783,344],[779,336],[773,327],[766,316],[762,308],[759,303],[757,300],[756,297],[753,296],[752,295],[751,295],[750,295],[749,295],[745,295],[739,298],[733,300],[729,303],[723,305],[719,307],[715,310],[713,312],[712,312],[711,312],[711,313],[710,314]],"dx":72,"dy":-211,"length":432.3093442984754,"timing":[0,6,12,19,26,33,40,47,54,61,68,75,82,89,96,103,110,117,124,130,138,144,151,159,165,172,179,185,193,199,207,214,221,228,234,241,248,256,261,269,277,283,290,296,304,311,350,357,374,380,387,395,401,409,415,422,429,440,480,484,492]},{"start":[1947,730],"end":[670,312],"points":[[1947,730],[1946,730],[1944,729],[1938,727],[1931,724],[1919,722],[1902,716],[1875,706],[1833,694],[1787,678],[1728,658],[1665,636],[1603,617],[1521,593],[1449,570],[1365,544],[1294,520],[1237,501],[1188,485],[1154,474],[1114,457],[1089,445],[1067,434],[1044,424],[1023,412],[998,398],[972,383],[944,368],[913,353],[881,338],[844,323],[813,312],[787,305],[765,299],[749,294],[738,292],[730,290],[723,288],[718,288],[716,287],[713,286],[712,286],[710,286],[707,287],[704,289],[702,292],[699,293],[696,295],[694,296],[693,298],[692,300],[691,301],[691,302],[691,304],[690,305],[689,306],[688,306],[687,308],[686,309],[685,310],[682,311],[679,311],[678,312],[677,312],[676,312],[674,312],[672,312],[671,312],[670,312]],"dx":-1277,"dy":-418,"length":1371.107768174433,"timing":[0,168,175,181,188,195,202,210,216,224,230,237,244,251,258,265,272,279,286,293,300,307,314,320,328,334,342,348,355,363,369,376,383,390,397,404,411,417,425,432,439,463,480,487,495,501,508,515,522,530,535,543,550,557,564,570,577,584,591,599,605,612,619,626,633,640,647,654,660]},{"start":[670,312],"end":[1771,948],"points":[[671,312],[673,313],[675,314],[677,315],[681,316],[685,317],[691,318],[698,321],[706,324],[720,328],[740,336],[760,343],[795,358],[822,368],[868,389],[919,411],[962,430],[1012,454],[1067,479],[1130,505],[1168,523],[1237,556],[1280,576],[1328,601],[1370,622],[1404,638],[1445,661],[1477,678],[1509,696],[1536,710],[1555,722],[1577,735],[1595,748],[1609,758],[1621,768],[1634,779],[1641,787],[1648,793],[1655,802],[1663,810],[1668,818],[1673,824],[1674,828],[1678,832],[1678,835],[1678,836],[1678,839],[1678,840],[1678,841],[1678,842],[1677,843],[1676,843],[1676,844],[1675,845],[1675,846],[1675,847],[1675,848],[1675,850],[1675,853],[1677,858],[1680,862],[1684,870],[1691,877],[1699,885],[1708,893],[1715,899],[1724,905],[1732,912],[1737,915],[1742,919],[1747,924],[1749,928],[1750,930],[1751,930],[1751,932],[1751,933],[1751,934],[1751,936],[1751,937],[1751,938],[1751,939],[1751,940],[1750,941],[1750,942],[1749,942],[1749,943],[1748,943],[1747,943],[1747,944],[1746,945],[1745,945],[1744,945],[1744,946],[1743,946],[1743,947],[1742,947],[1741,947],[1740,948],[1740,949],[1739,949],[1739,950],[1739,951],[1739,950],[1740,950],[1740,949],[1741,949],[1741,948],[1742,948],[1743,948],[1744,948],[1744,949],[1745,949],[1746,949],[1747,949],[1749,949],[1750,949],[1752,949],[1754,949],[1757,949],[1758,949],[1761,949],[1763,948],[1765,948],[1766,948],[1769,948],[1770,948],[1771,948]],"dx":1101,"dy":636,"length":1343.74033212092,"timing":[0,4,10,18,24,31,38,45,53,58,66,72,80,87,93,102,107,114,123,129,136,143,149,156,163,171,177,184,191,198,205,212,219,226,233,240,247,254,260,268,275,282,290,295,303,309,316,325,344,366,372,378,385,392,403,411,420,426,434,442,447,456,462,469,477,482,491,496,503,510,517,524,532,538,545,552,560,566,586,600,659,717,745,781,804,809,1041,1358,1386,1392,1403,1407,1428,1508,1511,1520,1542,1560,1567,1574,1585,1629,1866,1870,1898,1920,1927,1954,2286,2287,2294,2302,2309,2317,2323,2330,2337,2344,2352,2357,2364,2371,2379,2386,2393,2399,2406]},{"start":[1771,948],"end":[410,530],"points":[[1770,948],[1768,948],[1764,947],[1758,944],[1749,942],[1737,937],[1712,926],[1684,913],[1643,896],[1598,874],[1540,848],[1477,820],[1422,797],[1340,764],[1264,733],[1190,703],[1113,676],[1048,652],[968,619],[908,595],[834,565],[779,540],[737,524],[687,504],[657,491],[628,477],[605,466],[588,458],[578,453],[571,448],[564,444],[561,442],[557,441],[555,441],[551,439],[548,439],[544,439],[539,439],[533,439],[527,440],[523,445],[519,448],[517,452],[516,456],[515,460],[514,462],[513,466],[513,469],[513,472],[513,474],[513,476],[512,478],[511,481],[510,482],[507,484],[504,484],[498,485],[494,487],[489,487],[482,487],[477,489],[474,489],[468,492],[465,493],[462,496],[460,497],[458,497],[456,500],[454,500],[454,501],[453,502],[452,503],[451,505],[448,507],[447,509],[444,510],[441,512],[439,513],[436,515],[434,516],[431,517],[429,519],[428,520],[427,521],[426,522],[425,524],[425,525],[424,525],[423,525],[423,526],[422,526],[422,527],[421,527],[420,527],[419,527],[418,528],[417,529],[416,529],[415,529],[414,529],[413,530],[412,530],[411,530],[410,530]],"dx":-1361,"dy":-418,"length":1513.8229678577948,"timing":[0,3,10,16,23,30,37,44,51,58,65,72,79,86,93,100,107,114,121,128,135,142,149,156,163,170,176,184,190,197,203,210,217,224,232,238,245,252,259,267,273,280,287,294,302,307,314,322,329,336,342,351,357,363,370,377,384,391,398,405,412,418,426,433,440,447,454,461,468,474,482,489,495,503,510,516,524,530,537,544,551,558,565,572,579,586,594,604,607,613,816,824,833,840,844,849,857,865,871,895,912,919,926,939]},{"start":[410,530],"end":[1302,227],"points":[[411,530],[412,530],[414,530],[418,530],[421,529],[426,527],[433,524],[443,520],[455,514],[471,507],[493,494],[517,484],[559,469],[603,452],[654,437],[706,423],[764,408],[823,395],[882,385],[940,374],[998,361],[1042,350],[1094,336],[1133,322],[1160,313],[1193,301],[1212,291],[1230,282],[1249,273],[1265,265],[1280,259],[1291,253],[1305,247],[1316,242],[1326,238],[1333,235],[1338,233],[1347,230],[1351,228],[1355,227],[1358,226],[1359,226],[1359,225],[1359,224],[1359,223],[1359,222],[1356,220],[1353,219],[1348,219],[1341,219],[1334,218],[1328,217],[1320,217],[1314,217],[1309,217],[1304,217],[1302,217],[1299,217],[1298,217],[1298,218],[1298,219],[1298,220],[1298,221],[1298,222],[1298,223],[1299,224],[1300,224],[1301,225],[1301,226],[1302,226],[1302,227]],"dx":892,"dy":-303,"length":1079.2765719865708,"timing":[0,4,10,17,23,30,37,44,51,58,65,72,79,86,93,100,107,114,121,128,135,142,149,156,162,170,177,183,191,197,204,212,218,225,232,239,246,252,260,266,273,312,315,322,330,335,344,349,356,363,370,378,385,391,398,405,413,418,426,550,566,586,593,600,609,627,637,642,655,665,676]},{"start":[1302,227],"end":[739,737],"points":[[1302,228],[1302,229],[1302,231],[1301,234],[1299,237],[1296,242],[1293,249],[1286,257],[1277,267],[1268,275],[1252,287],[1237,298],[1218,308],[1202,318],[1176,333],[1155,344],[1129,356],[1104,368],[1079,379],[1053,391],[1030,404],[1006,416],[986,427],[963,441],[943,453],[925,464],[908,475],[895,484],[882,494],[872,505],[862,517],[854,526],[850,534],[847,538],[846,544],[843,549],[843,552],[842,556],[842,559],[841,562],[841,566],[841,570],[840,573],[838,577],[836,582],[835,586],[833,591],[831,595],[828,599],[827,603],[826,607],[825,612],[824,615],[824,618],[824,621],[824,624],[824,628],[824,630],[824,634],[821,639],[820,642],[818,646],[816,650],[813,654],[810,658],[809,661],[808,664],[805,669],[803,672],[802,676],[801,679],[800,681],[799,685],[798,688],[797,691],[796,694],[794,698],[793,701],[790,704],[788,707],[785,709],[782,710],[780,712],[778,715],[776,717],[773,720],[773,721],[770,723],[768,725],[766,728],[764,729],[762,730],[760,731],[759,731],[757,732],[755,732],[754,732],[752,733],[749,734],[747,734],[745,736],[743,736],[741,736],[740,736],[739,736],[739,737]],"dx":-563,"dy":510,"length":805.1768811551547,"timing":[0,2,9,17,24,31,38,44,52,57,66,72,79,85,93,100,106,113,120,127,135,141,149,155,162,169,176,184,190,197,204,211,218,225,232,239,246,253,260,267,274,281,288,294,302,308,315,322,329,337,342,350,357,363,372,378,385,391,399,406,412,420,426,433,440,447,454,461,468,475,482,489,495,503,509,516,524,530,538,543,551,558,565,573,579,586,593,599,606,614,620,627,634,642,648,655,664,669,676,683,690,697,704,711,718,726]},{"start":[2393,385],"end":[625,901],"points":[[2393,385],[2393,386],[2392,386],[2390,387],[2389,388],[2387,390],[2385,393],[2382,395],[2379,397],[2375,401],[2369,405],[2361,410],[2351,416],[2337,424],[2321,433],[2300,441],[2277,452],[2245,466],[2205,479],[2162,493],[2118,505],[2062,516],[1983,531],[1922,543],[1843,556],[1769,568],[1667,585],[1566,604],[1468,626],[1375,646],[1278,668],[1193,687],[1114,702],[1043,716],[981,727],[932,741],[894,756],[867,766],[847,777],[836,785],[828,791],[823,796],[822,800],[821,804],[820,808],[819,811],[819,814],[818,817],[815,820],[814,822],[811,825],[809,826],[807,829],[805,831],[802,832],[799,835],[798,836],[796,839],[793,840],[790,842],[787,844],[784,846],[781,848],[775,851],[768,853],[759,855],[750,856],[740,857],[727,859],[713,862],[701,862],[690,863],[682,865],[675,866],[670,867],[666,868],[663,869],[662,869],[662,870],[661,870],[661,872],[660,873],[660,874],[658,875],[658,876],[658,878],[657,878],[656,881],[656,883],[655,884],[654,885],[654,887],[653,889],[652,891],[650,892],[649,893],[646,894],[646,896],[643,897],[641,898],[639,899],[637,899],[634,900],[631,900],[629,901],[626,901],[625,901]],"dx":-1768,"dy":516,"length":1886.9452188471237,"timing":[0,109,139,145,151,159,165,172,179,186,193,200,207,214,221,228,234,242,249,256,264,269,277,283,290,298,304,312,318,325,332,339,346,353,360,367,374,381,388,395,402,409,416,422,430,436,444,450,457,464,471,478,485,491,499,505,512,519,526,534,540,548,554,561,568,575,583,588,596,603,610,617,623,630,639,644,651,658,665,696,700,709,714,721,728,735,742,749,756,763,770,776,784,790,798,805,811,818,825,832,839,845,853,860,866,873,880]},{"start":[625,901],"end":[1621,196],"points":[[626,901],[628,900],[632,897],[636,895],[643,891],[651,886],[664,881],[682,871],[708,861],[738,851],[781,839],[819,828],[857,813],[897,799],[927,785],[966,767],[1003,747],[1046,723],[1080,700],[1112,676],[1144,649],[1173,622],[1205,584],[1239,539],[1273,497],[1308,455],[1335,425],[1367,397],[1400,369],[1433,343],[1464,322],[1482,310],[1510,291],[1532,277],[1545,269],[1557,262],[1565,257],[1571,254],[1574,252],[1576,251],[1577,250],[1577,249],[1578,249],[1579,249],[1579,248],[1579,247],[1579,246],[1581,245],[1582,244],[1583,242],[1584,239],[1585,238],[1587,236],[1590,233],[1591,233],[1594,230],[1596,228],[1597,226],[1599,224],[1600,222],[1601,222],[1602,221],[1602,220],[1603,220],[1603,219],[1603,218],[1604,217],[1605,217],[1606,217],[1606,216],[1606,215],[1606,214],[1607,214],[1608,214],[1608,213],[1609,213],[1609,212],[1611,210],[1612,209],[1612,208],[1614,206],[1615,205],[1616,204],[1617,203],[1618,203],[1618,202],[1619,202],[1619,201],[1619,200],[1620,200],[1620,199],[1620,197],[1620,196],[1621,196]],"dx":996,"dy":-705,"length":1255.0966904508614,"timing":[0,7,14,20,29,34,41,48,55,63,69,76,83,90,97,103,111,118,125,132,139,146,152,160,167,174,181,187,195,201,208,215,221,230,235,243,250,257,265,271,278,438,443,451,459,466,472,479,485,493,500,507,515,521,527,535,541,548,555,562,569,576,584,590,597,603,611,622,625,639,651,653,660,667,676,877,881,888,897,903,909,916,924,933,939,958,1412,1417,1543,1548,1555,1563,1568,1575]},{"start":[2293,1008],"end":[105,499],"points":[[2293,1008],[2293,1007],[2290,1006],[2286,1005],[2283,1002],[2278,1000],[2271,996],[2261,990],[2247,983],[2230,976],[2207,964],[2175,950],[2138,935],[2105,921],[2056,903],[1998,881],[1942,862],[1882,841],[1817,818],[1760,798],[1680,772],[1619,752],[1545,733],[1468,709],[1390,689],[1313,671],[1237,653],[1162,639],[1099,629],[1018,619],[958,610],[887,602],[830,594],[771,585],[721,580],[680,575],[634,567],[591,561],[545,555],[505,552],[468,550],[442,548],[415,547],[386,546],[366,545],[347,545],[331,545],[321,545],[310,545],[304,545],[298,546],[295,546],[292,546],[288,546],[286,546],[281,546],[276,546],[270,546],[262,546],[256,543],[246,541],[238,539],[227,537],[219,535],[209,533],[198,531],[189,530],[182,528],[177,527],[171,527],[168,526],[164,525],[162,525],[158,525],[156,524],[152,523],[148,523],[146,522],[142,519],[137,518],[131,516],[126,513],[122,512],[118,510],[115,508],[112,507],[111,505],[110,504],[109,504],[109,503],[109,502],[108,501],[107,500],[107,499],[106,499],[105,499]],"dx":-2188,"dy":-509,"length":2269.5471415475067,"timing":[0,147,154,160,167,174,182,188,195,202,209,216,223,230,236,244,251,258,265,271,279,285,292,300,306,313,320,327,334,341,347,355,362,369,376,384,389,397,404,411,418,424,431,438,444,452,459,467,473,479,487,494,501,507,515,522,528,535,542,549,556,564,571,576,584,590,597,604,611,619,625,633,639,646,653,660,667,674,681,688,695,702,708,715,723,729,738,743,765,792,801,807,813,820,829,833]},{"start":[1996,1214],"end":[668,254],"points":[[1996,1213],[1996,1212],[1996,1211],[1995,1209],[1993,1208],[1992,1206],[1989,1201],[1987,1199],[1984,1195],[1981,1190],[1977,1183],[1970,1174],[1963,1164],[1953,1153],[1943,1140],[1926,1124],[1900,1097],[1870,1071],[1832,1041],[1796,1014],[1739,971],[1684,933],[1631,897],[1556,847],[1496,811],[1424,766],[1345,713],[1289,677],[1211,627],[1143,585],[1077,543],[1015,498],[957,460],[912,426],[858,384],[819,356],[792,335],[773,318],[756,303],[745,292],[739,284],[734,278],[733,274],[732,271],[730,267],[729,265],[728,262],[726,261],[726,258],[725,257],[724,257],[724,256],[722,254],[722,253],[718,252],[718,250],[716,249],[714,248],[712,247],[710,246],[708,246],[706,246],[704,246],[701,246],[699,246],[698,246],[696,246],[694,246],[692,246],[689,247],[688,247],[686,248],[685,248],[682,250],[681,250],[680,251],[677,252],[676,252],[675,252],[674,252],[673,252],[671,253],[669,253],[669,254],[668,254]],"dx":-1328,"dy":-960,"length":1668.9532645182169,"timing":[0,6,13,16,23,30,38,43,51,57,65,71,79,85,91,99,106,114,121,126,134,141,147,155,161,168,176,183,189,197,203,210,218,223,232,238,245,251,258,266,272,281,288,294,301,307,315,322,329,336,344,349,356,362,370,377,385,390,397,404,412,419,426,434,440,445,454,459,467,475,481,489,495,503,510,516,523,534,540,546,550,558,564,572,578]},{"start":[1222,810],"end":[1562,504],"points":[[1222,809],[1223,808],[1227,805],[1230,802],[1237,799],[1244,794],[1250,789],[1259,782],[1270,773],[1281,765],[1290,755],[1299,746],[1314,733],[1326,719],[1340,704],[1355,692],[1372,679],[1389,668],[1405,656],[1420,645],[1433,636],[1446,628],[1456,622],[1468,613],[1476,607],[1484,603],[1492,596],[1497,593],[1502,588],[1508,583],[1512,578],[1516,574],[1520,569],[1524,564],[1529,559],[1533,555],[1536,551],[1540,545],[1542,542],[1545,537],[1547,534],[1548,531],[1548,529],[1549,528],[1549,526],[1549,525],[1549,524],[1549,523],[1549,522],[1549,521],[1549,520],[1550,519],[1550,518],[1552,515],[1552,514],[1553,513],[1554,512],[1554,511],[1555,510],[1556,510],[1556,509],[1557,509],[1557,508],[1557,507],[1558,507],[1560,506],[1561,505],[1562,505],[1562,504]],"dx":340,"dy":-306,"length":467.7100905205285,"timing":[0,3,12,17,25,31,38,46,52,60,66,72,80,87,95,101,109,115,122,129,136,144,149,157,164,170,178,184,191,198,205,213,219,226,233,240,247,254,261,268,275,282,288,296,302,344,354,358,368,375,379,386,393,400,407,415,421,427,435,449,455,477,486,490,498,518,525,532,543]},{"start":[208,220],"end":[1247,347],"points":[[209,220],[210,220],[213,222],[217,223],[225,226],[238,231],[253,236],[275,241],[299,246],[328,251],[370,258],[405,263],[459,271],[504,276],[550,281],[594,286],[647,290],[703,298],[758,305],[811,313],[864,319],[917,323],[959,328],[1018,332],[1056,337],[1103,341],[1133,346],[1163,350],[1185,352],[1203,353],[1214,355],[1219,356],[1222,356],[1223,356],[1223,355],[1224,355],[1227,353],[1228,352],[1232,351],[1235,350],[1238,349],[1240,349],[1245,348],[1246,347],[1247,347]],"dx":1039,"dy":127,"length":1052.1115771089344,"timing":[0,3,10,16,24,30,37,44,51,58,65,72,79,86,93,99,107,114,120,127,134,142,147,155,161,169,176,182,190,197,203,210,217,225,405,411,418,426,433,440,447,454,461,468,475]},{"start":[1247,347],"end":[1735,257],"points":[[1246,347],[1245,348],[1244,349],[1243,350],[1243,351],[1243,352],[1247,352],[1254,352],[1263,352],[1277,352],[1289,351],[1313,348],[1336,344],[1362,343],[1386,339],[1408,335],[1434,333],[1463,329],[1482,326],[1506,320],[1525,314],[1543,308],[1558,302],[1567,297],[1578,293],[1586,290],[1594,287],[1599,285],[1602,282],[1606,280],[1608,279],[1610,278],[1612,277],[1613,276],[1616,275],[1619,272],[1622,271],[1626,271],[1635,270],[1644,270],[1654,268],[1664,268],[1675,267],[1684,267],[1692,267],[1699,266],[1705,266],[1709,266],[1711,266],[1713,266],[1713,265],[1714,265],[1717,265],[1719,265],[1721,265],[1723,263],[1726,262],[1730,260],[1732,259],[1733,258],[1734,257],[1735,257]],"dx":488,"dy":-90,"length":515.6816874602122,"timing":[0,3,9,15,22,43,50,57,64,71,78,84,92,99,106,113,119,127,133,141,148,155,162,168,175,182,189,196,202,210,216,223,231,237,245,252,258,265,272,280,286,293,300,307,314,321,328,335,342,350,390,398,405,412,418,425,432,439,446,453,459,467]},{"start":[370,614],"end":[1914,1093],"points":[[371,614],[374,614],[378,614],[386,614],[395,612],[406,612],[422,612],[443,612],[466,612],[501,612],[536,615],[588,621],[637,627],[694,634],[764,648],[833,659],[915,677],[999,693],[1081,711],[1164,733],[1249,753],[1319,769],[1397,788],[1471,807],[1541,829],[1605,850],[1662,871],[1710,892],[1746,910],[1785,932],[1812,946],[1833,959],[1850,968],[1863,980],[1875,990],[1884,998],[1891,1006],[1894,1011],[1900,1018],[1907,1024],[1911,1029],[1916,1032],[1923,1037],[1928,1041],[1934,1045],[1939,1048],[1944,1050],[1948,1052],[1949,1054],[1951,1055],[1952,1055],[1952,1056],[1950,1057],[1948,1058],[1946,1059],[1944,1061],[1942,1063],[1940,1065],[1939,1066],[1936,1068],[1934,1071],[1932,1072],[1930,1075],[1927,1077],[1926,1079],[1925,1081],[1924,1084],[1922,1085],[1921,1087],[1919,1088],[1918,1090],[1918,1091],[1917,1091],[1916,1092],[1915,1092],[1915,1093],[1914,1093]],"dx":1544,"dy":479,"length":1727.20228887489,"timing":[0,8,14,22,29,36,44,50,57,64,70,79,84,91,98,105,113,119,127,133,139,147,153,161,167,174,181,188,196,202,209,216,223,230,237,245,251,258,265,272,279,285,293,300,307,314,321,328,335,342,349,370,377,383,389,397,405,411,417,424,432,438,446,452,459,466,473,480,487,494,501,508,515,521,533,538,728]},{"start":[576,235],"end":[821,780],"points":[[576,236],[577,237],[579,239],[583,244],[592,250],[601,257],[615,267],[634,276],[657,288],[688,304],[722,322],[756,341],[799,363],[844,385],[883,407],[929,431],[976,460],[1020,488],[1058,515],[1090,540],[1121,566],[1147,595],[1164,619],[1174,639],[1176,655],[1176,669],[1174,683],[1166,693],[1156,704],[1143,714],[1125,724],[1108,730],[1088,737],[1066,745],[1046,752],[1030,756],[1012,761],[993,766],[972,771],[961,773],[945,778],[937,781],[927,784],[921,785],[918,785],[916,785],[914,786],[913,786],[912,786],[910,786],[908,785],[906,785],[905,783],[901,783],[898,783],[893,782],[888,782],[881,781],[874,781],[867,780],[859,780],[852,780],[848,780],[842,780],[839,780],[837,780],[836,780],[833,780],[832,780],[829,780],[828,780],[826,780],[825,780],[822,780],[821,780]],"dx":245,"dy":545,"length":1154.2920210652833,"timing":[0,1,8,15,22,30,35,43,49,57,64,71,79,85,91,98,105,113,119,126,134,140,147,154,161,168,175,182,189,197,203,210,217,224,231,237,245,251,259,265,272,279,286,293,300,307,314,321,328,335,341,349,355,362,369,376,383,391,397,403,411,418,424,433,438,446,453,460,467,474,481,487,494,502,514]},{"start":[270,748],"end":[1358,859],"points":[[271,748],[272,748],[273,748],[273,747],[274,746],[277,745],[280,744],[283,743],[288,742],[296,741],[306,741],[321,741],[339,741],[357,741],[387,741],[419,743],[454,747],[487,749],[538,755],[586,759],[634,761],[685,765],[724,768],[775,772],[825,779],[869,786],[918,796],[966,803],[1014,809],[1056,817],[1098,824],[1136,833],[1169,839],[1202,847],[1234,852],[1262,857],[1287,862],[1306,865],[1324,867],[1338,870],[1344,870],[1352,871],[1358,871],[1360,871],[1363,871],[1364,871],[1364,869],[1362,867],[1361,866],[1359,864],[1358,863],[1358,862],[1358,861],[1358,859]],"dx":1088,"dy":111,"length":1119.753978332668,"timing":[0,8,13,19,26,33,40,47,54,61,68,75,82,88,96,103,110,117,124,131,138,144,152,157,166,171,178,185,192,200,206,213,220,227,235,241,248,255,262,270,276,284,290,296,304,389,394,401,408,415,423,471,480,499]},{"start":[1746,297],"end":[556,867],"points":[[1745,297],[1743,298],[1740,300],[1736,302],[1728,306],[1719,311],[1705,319],[1690,329],[1668,339],[1643,352],[1602,370],[1552,393],[1503,416],[1462,437],[1422,459],[1369,489],[1320,515],[1270,542],[1223,565],[1185,584],[1137,607],[1108,619],[1068,638],[1038,653],[1014,667],[987,681],[962,693],[939,707],[917,717],[897,727],[879,733],[864,738],[848,744],[833,749],[819,753],[805,757],[790,760],[772,765],[758,768],[732,773],[710,780],[688,786],[665,793],[647,799],[626,806],[610,810],[598,813],[590,815],[580,818],[572,820],[568,823],[564,824],[561,825],[557,828],[556,829],[554,829],[553,832],[551,833],[550,834],[549,837],[548,837],[548,838],[548,839],[548,841],[548,844],[548,846],[548,848],[548,850],[549,852],[550,854],[550,857],[551,858],[551,861],[554,864],[554,865],[554,866],[556,867]],"dx":-1190,"dy":570,"length":1354.987061326271,"timing":[0,5,12,19,27,32,40,47,54,61,67,75,82,88,96,102,109,116,123,130,137,144,151,158,164,171,179,185,193,199,206,213,220,227,234,241,248,255,262,269,276,283,289,297,304,311,317,325,331,338,346,351,359,366,373,381,387,393,401,407,415,435,455,462,470,477,484,490,498,504,512,519,526,534,540,546,554]},{"start":[980,672],"end":[974,1034],"points":[[980,672],[980,671],[981,671],[982,671],[983,669],[985,667],[988,666],[992,665],[996,664],[1002,662],[1006,662],[1016,660],[1021,660],[1028,660],[1034,660],[1041,662],[1045,664],[1048,669],[1050,674],[1051,680],[1052,689],[1052,698],[1052,711],[1055,724],[1057,740],[1060,754],[1061,772],[1063,789],[1064,809],[1064,829],[1064,851],[1062,873],[1057,892],[1049,912],[1042,929],[1032,948],[1022,964],[1012,976],[1003,988],[997,996],[992,1004],[988,1010],[985,1013],[984,1017],[983,1021],[982,1024],[982,1026],[981,1027],[980,1029],[979,1031],[978,1032],[976,1033],[975,1034],[974,1034]],"dx":-6,"dy":362,"length":467.9255430890995,"timing":[0,118,127,132,140,146,153,160,167,175,180,189,195,201,208,215,223,229,236,243,250,257,264,271,278,285,293,299,306,313,320,327,334,341,347,355,362,369,376,383,389,396,403,410,417,424,431,438,445,452,459,466,473,507]},{"start":[607,1110],"end":[2366,961],"points":[[608,1110],[610,1107],[612,1106],[615,1104],[617,1100],[620,1098],[624,1095],[629,1091],[633,1086],[637,1081],[643,1074],[654,1064],[667,1054],[687,1041],[713,1026],[759,1000],[805,979],[865,950],[931,923],[997,894],[1072,870],[1152,852],[1232,838],[1301,826],[1361,820],[1427,814],[1488,811],[1557,803],[1615,800],[1674,798],[1729,798],[1782,796],[1825,796],[1881,799],[1930,803],[1977,805],[2025,808],[2068,810],[2126,818],[2174,824],[2214,830],[2248,835],[2277,842],[2312,849],[2334,856],[2351,863],[2367,868],[2377,870],[2384,874],[2390,875],[2396,878],[2397,880],[2400,881],[2401,883],[2402,885],[2404,887],[2404,888],[2404,889],[2405,891],[2405,892],[2405,893],[2404,895],[2400,899],[2397,903],[2394,906],[2390,909],[2385,913],[2375,919],[2368,924],[2363,929],[2356,934],[2351,937],[2347,940],[2344,943],[2342,944],[2341,947],[2341,948],[2341,949],[2340,950],[2340,952],[2340,953],[2340,954],[2340,955],[2340,956],[2340,957],[2340,958],[2340,959],[2341,959],[2343,960],[2344,960],[2347,961],[2350,961],[2352,961],[2355,961],[2358,961],[2362,961],[2364,961],[2365,961],[2366,961]],"dx":1759,"dy":-149,"length":2009.4617512509096,"timing":[0,8,14,22,29,35,41,49,56,62,69,76,83,91,97,105,111,118,125,132,140,146,153,160,166,175,180,188,195,202,209,216,223,230,237,244,251,259,265,272,279,285,292,299,306,313,320,327,334,341,348,355,361,368,376,381,389,396,403,412,418,425,431,439,445,451,459,465,472,480,486,493,500,507,514,521,528,535,542,549,556,566,569,577,611,619,639,646,653,660,667,674,681,688,695,702,709,716,723]},{"start":[2008,744],"end":[977,1217],"points":[[2007,744],[2006,744],[2005,745],[2004,745],[2001,746],[1997,747],[1992,748],[1986,749],[1982,749],[1974,751],[1965,751],[1954,751],[1941,751],[1927,752],[1913,752],[1897,752],[1882,752],[1865,752],[1846,749],[1825,745],[1801,741],[1771,735],[1735,728],[1697,720],[1649,715],[1599,713],[1553,713],[1511,720],[1474,734],[1445,754],[1419,778],[1402,796],[1382,823],[1369,842],[1357,860],[1346,875],[1331,893],[1317,908],[1300,924],[1278,938],[1253,952],[1225,969],[1199,984],[1168,1002],[1145,1015],[1118,1032],[1097,1043],[1078,1052],[1065,1058],[1055,1064],[1049,1067],[1045,1069],[1042,1071],[1039,1074],[1038,1076],[1036,1078],[1035,1081],[1034,1083],[1032,1085],[1029,1089],[1028,1091],[1025,1094],[1024,1097],[1022,1099],[1021,1102],[1020,1106],[1018,1110],[1017,1113],[1016,1119],[1016,1124],[1014,1129],[1014,1135],[1014,1141],[1013,1144],[1013,1148],[1012,1152],[1012,1154],[1012,1159],[1011,1162],[1011,1166],[1010,1168],[1009,1171],[1008,1175],[1006,1178],[1002,1181],[998,1184],[994,1188],[990,1192],[988,1197],[985,1202],[982,1206],[981,1209],[981,1212],[979,1213],[979,1214],[978,1216],[978,1217],[977,1217]],"dx":-1031,"dy":473,"length":1265.470803175008,"timing":[0,4,9,16,23,30,38,44,52,58,65,72,79,87,93,100,106,113,120,127,134,141,148,156,162,169,176,183,190,197,204,210,218,225,232,239,245,253,260,267,274,281,288,294,301,308,314,321,328,335,342,349,357,364,371,377,384,391,398,406,412,419,426,433,440,446,454,460,468,475,481,489,496,503,509,517,523,531,537,544,551,559,565,572,579,586,593,600,607,614,620,627,634,642,648,655,662,669]},{"start":[631,431],"end":[1255,470],"points":[[631,431],[631,432],[631,434],[632,436],[633,437],[637,441],[638,444],[641,447],[643,449],[645,451],[649,453],[653,455],[659,458],[665,463],[678,469],[692,475],[715,486],[743,496],[770,503],[812,514],[855,523],[903,529],[947,534],[986,538],[1023,540],[1052,541],[1071,541],[1093,541],[1107,541],[1117,541],[1124,541],[1131,541],[1139,541],[1147,541],[1157,538],[1165,536],[1176,531],[1188,528],[1204,524],[1214,521],[1226,516],[1234,514],[1243,510],[1250,507],[1254,505],[1257,503],[1258,500],[1258,499],[1258,498],[1258,496],[1258,494],[1258,491],[1257,490],[1256,487],[1256,486],[1256,485],[1256,484],[1256,483],[1256,480],[1256,479],[1256,478],[1256,477],[1256,476],[1256,475],[1256,474],[1255,474],[1255,473],[1255,471],[1255,470]],"dx":624,"dy":39,"length":693.3807160563015,"timing":[0,70,76,84,89,97,103,111,117,124,131,138,145,152,159,166,173,180,187,193,201,207,215,221,228,236,241,250,256,263,269,276,285,291,298,304,311,319,326,332,340,346,353,360,367,374,381,388,395,402,409,416,423,430,459,471,478,486,493,499,506,513,520,529,538,547,555,562,582]},{"start":[861,1181],"end":[1587,552],"points":[[861,1180],[861,1179],[861,1178],[861,1177],[861,1176],[861,1173],[861,1170],[861,1167],[861,1164],[861,1159],[863,1151],[866,1143],[872,1133],[879,1122],[892,1109],[906,1096],[929,1080],[954,1060],[977,1043],[1011,1019],[1044,997],[1081,978],[1120,956],[1160,935],[1204,913],[1241,893],[1277,873],[1313,853],[1345,835],[1384,814],[1413,797],[1446,780],[1474,766],[1497,752],[1520,742],[1542,727],[1557,717],[1574,706],[1584,698],[1595,690],[1598,684],[1601,678],[1603,673],[1603,670],[1603,665],[1603,660],[1600,657],[1600,656],[1600,655],[1599,653],[1599,652],[1599,651],[1601,647],[1601,643],[1602,638],[1602,635],[1603,631],[1603,626],[1603,623],[1603,619],[1603,616],[1601,611],[1600,607],[1596,601],[1593,598],[1592,594],[1590,591],[1589,589],[1588,585],[1587,582],[1587,578],[1587,575],[1587,573],[1587,568],[1587,565],[1587,561],[1587,558],[1587,554],[1587,552]],"dx":726,"dy":-629,"length":1047.6135365874945,"timing":[0,31,45,53,60,67,74,81,88,94,102,109,116,123,130,136,143,150,157,164,171,178,185,192,199,206,213,220,227,234,241,248,255,262,267,276,282,289,295,302,310,316,323,330,337,345,351,358,365,372,381,385,393,400,407,414,421,429,435,442,449,455,464,470,476,483,490,497,504,511,518,525,531,539,546,553,560,567,574]},{"start":[1435,1040],"end":[2420,981],"points":[[1434,1040],[1430,1039],[1428,1037],[1425,1036],[1422,1034],[1418,1032],[1413,1031],[1409,1028],[1408,1028],[1407,1028],[1407,1027],[1407,1026],[1407,1024],[1411,1021],[1420,1017],[1434,1013],[1451,1011],[1480,1007],[1503,1003],[1538,1000],[1574,996],[1612,994],[1654,992],[1691,991],[1743,987],[1794,982],[1827,979],[1866,975],[1903,973],[1939,970],[1958,970],[1990,968],[2007,968],[2023,968],[2038,968],[2052,968],[2063,968],[2074,968],[2082,968],[2095,971],[2105,973],[2119,976],[2128,978],[2141,983],[2155,988],[2170,991],[2186,996],[2204,1002],[2219,1007],[2232,1012],[2246,1015],[2260,1018],[2268,1020],[2278,1022],[2287,1024],[2293,1026],[2299,1027],[2305,1028],[2311,1028],[2316,1029],[2320,1029],[2324,1030],[2329,1030],[2337,1030],[2343,1030],[2350,1030],[2356,1029],[2363,1026],[2368,1024],[2372,1022],[2377,1019],[2380,1017],[2382,1014],[2383,1011],[2385,1008],[2387,1005],[2388,1002],[2389,1001],[2392,999],[2393,997],[2395,995],[2399,993],[2402,991],[2404,991],[2407,989],[2411,988],[2415,985],[2417,985],[2418,983],[2419,983],[2420,982],[2420,981]],"dx":985,"dy":-59,"length":1081.2114111532735,"timing":[0,6,12,19,27,33,41,47,53,61,71,77,82,89,96,104,110,118,124,131,137,144,151,158,165,173,179,186,194,201,207,215,221,228,234,242,249,256,263,270,277,284,291,298,304,311,318,325,333,339,346,353,359,366,373,381,386,395,401,408,416,421,430,437,443,451,456,465,470,477,486,492,498,505,513,520,527,534,541,547,554,561,569,574,582,589,597,604,611,617,623,630]},{"start":[2420,981],"end":[2108,425],"points":[[2419,981],[2418,981],[2416,981],[2413,980],[2411,979],[2409,978],[2406,976],[2402,974],[2390,972],[2376,965],[2362,960],[2336,949],[2311,942],[2276,931],[2229,918],[2184,907],[2135,900],[2091,894],[2049,889],[1994,881],[1955,873],[1920,862],[1894,851],[1858,834],[1835,821],[1821,813],[1816,809],[1814,802],[1814,797],[1815,788],[1822,773],[1829,758],[1838,737],[1850,715],[1861,690],[1874,666],[1887,644],[1901,622],[1910,606],[1921,588],[1930,573],[1937,561],[1944,547],[1949,535],[1952,527],[1955,517],[1957,508],[1959,500],[1961,493],[1961,487],[1963,483],[1966,476],[1966,475],[1967,470],[1969,468],[1969,466],[1970,464],[1971,464],[1972,463],[1973,462],[1976,461],[1979,459],[1983,457],[1986,455],[1992,454],[1998,452],[2005,450],[2015,449],[2027,448],[2039,445],[2052,442],[2066,439],[2077,435],[2088,433],[2095,432],[2100,430],[2103,429],[2106,428],[2106,427],[2107,427],[2107,426],[2108,426],[2108,425]],"dx":-312,"dy":-556,"length":1162.8433808936581,"timing":[0,5,11,19,24,33,39,46,53,60,66,74,81,88,96,102,109,116,123,130,137,144,149,158,164,172,177,185,191,199,207,212,219,227,233,241,247,254,261,268,276,281,290,296,303,310,317,323,330,337,344,352,359,367,372,380,387,394,400,407,414,421,429,435,442,449,456,464,470,477,483,491,498,505,513,518,525,532,539,547,575,582,589]},{"start":[2122,907],"end":[990,633],"points":[[2123,907],[2123,906],[2123,905],[2123,904],[2123,902],[2120,900],[2118,896],[2113,893],[2107,888],[2097,880],[2085,873],[2070,864],[2054,853],[2035,843],[2007,825],[1978,809],[1951,794],[1912,774],[1880,762],[1841,749],[1803,741],[1764,736],[1727,734],[1684,732],[1644,732],[1603,731],[1564,730],[1503,727],[1453,725],[1403,722],[1359,719],[1297,715],[1246,711],[1204,709],[1156,707],[1122,706],[1086,703],[1065,701],[1045,698],[1035,694],[1024,691],[1017,688],[1013,686],[1007,684],[1004,681],[1000,680],[998,679],[997,678],[995,676],[993,675],[990,671],[988,669],[986,667],[985,665],[985,664],[985,663],[985,662],[985,661],[985,660],[985,659],[985,658],[985,656],[985,655],[987,651],[988,649],[988,647],[989,643],[990,640],[990,637],[990,636],[990,635],[990,634],[990,633]],"dx":-1132,"dy":-274,"length":1230.1752666813793,"timing":[0,102,105,110,117,125,131,138,145,152,160,166,174,179,187,194,200,208,214,221,228,235,242,249,256,263,269,278,284,291,297,305,312,318,326,332,340,347,354,361,367,375,381,388,395,403,409,416,423,430,437,444,451,458,481,491,495,503,511,516,519,528,533,541,547,554,562,568,575,582,589,597,604]},{"start":[990,633],"end":[1411,385],"points":[[991,632],[992,632],[994,632],[996,633],[998,634],[1000,634],[1004,634],[1007,634],[1012,633],[1017,632],[1022,631],[1027,630],[1032,630],[1042,630],[1052,628],[1062,628],[1075,627],[1088,627],[1106,625],[1127,623],[1148,620],[1172,614],[1193,609],[1213,600],[1235,589],[1251,581],[1262,573],[1270,566],[1277,555],[1284,545],[1288,537],[1293,524],[1299,513],[1303,503],[1309,489],[1312,483],[1318,472],[1322,462],[1325,457],[1329,451],[1332,445],[1336,439],[1339,433],[1342,430],[1344,425],[1346,421],[1348,418],[1352,413],[1354,410],[1358,406],[1361,404],[1364,402],[1367,399],[1369,398],[1372,397],[1375,396],[1377,395],[1378,395],[1381,395],[1383,395],[1385,395],[1387,395],[1388,395],[1389,395],[1390,395],[1391,395],[1392,395],[1393,394],[1394,394],[1395,394],[1395,393],[1396,393],[1400,392],[1403,390],[1405,389],[1409,387],[1409,386],[1410,386],[1411,385]],"dx":421,"dy":-248,"length":537.7122096395065,"timing":[0,15,23,30,37,44,51,58,65,72,79,85,92,99,106,113,119,127,133,141,147,155,162,167,176,182,189,196,203,211,216,224,231,237,246,251,260,266,272,280,286,293,300,307,314,321,328,335,341,349,356,363,370,377,384,391,399,404,413,418,425,432,439,460,486,492,500,507,514,520,523,530,537,544,551,558,567,572,579]},{"start":[614,871],"end":[486,606],"points":[[614,871],[615,870],[616,868],[617,868],[619,867],[623,866],[627,865],[631,864],[640,862],[647,861],[657,858],[668,856],[682,852],[692,848],[705,843],[721,835],[731,831],[739,824],[742,822],[742,819],[742,813],[739,808],[733,801],[726,795],[715,789],[700,780],[684,772],[668,764],[639,751],[618,740],[596,729],[577,719],[562,712],[546,701],[535,694],[525,687],[519,682],[516,678],[513,671],[510,662],[507,656],[506,650],[504,643],[503,639],[499,633],[497,627],[495,622],[494,618],[492,615],[492,614],[492,613],[492,612],[492,611],[492,610],[492,609],[492,608],[491,608],[491,607],[488,606],[487,606],[486,606]],"dx":-128,"dy":-265,"length":496.07826472681563,"timing":[0,90,98,105,112,118,125,132,140,148,153,161,168,174,182,189,195,202,209,216,222,230,236,243,250,257,265,270,278,285,292,300,305,313,320,327,335,340,348,355,362,369,376,383,389,396,403,410,417,438,459,471,486,498,501,514,542,549,557,567,623]},{"start":[486,606],"end":[1723,1014],"points":[[486,607],[487,607],[487,608],[489,610],[490,610],[492,612],[494,614],[497,616],[500,620],[507,624],[513,628],[521,633],[532,640],[546,647],[559,654],[582,665],[605,674],[634,686],[671,698],[710,711],[750,722],[788,732],[835,742],[880,748],[931,755],[980,764],[1030,773],[1070,780],[1120,787],[1174,798],[1219,806],[1269,812],[1315,820],[1352,828],[1394,838],[1436,847],[1474,856],[1502,863],[1535,870],[1554,875],[1577,884],[1592,889],[1604,895],[1615,900],[1623,904],[1632,912],[1638,917],[1643,921],[1650,929],[1654,933],[1661,940],[1667,946],[1673,955],[1679,963],[1685,969],[1692,975],[1697,979],[1701,983],[1707,986],[1709,988],[1711,989],[1711,990],[1711,991],[1711,992],[1711,993],[1711,995],[1711,998],[1712,1000],[1713,1002],[1715,1005],[1716,1008],[1717,1010],[1718,1011],[1720,1012],[1720,1013],[1723,1013],[1723,1014]],"dx":1237,"dy":408,"length":1339.7655371020073,"timing":[0,6,9,16,23,31,37,44,51,58,66,71,80,85,92,100,106,113,120,127,134,141,148,155,162,169,176,184,189,197,204,211,218,224,232,238,245,252,259,266,273,280,287,294,301,309,315,322,329,337,343,350,357,363,370,377,385,390,398,405,412,452,458,466,468,474,481,488,495,503,508,516,523,530,538,544,550]},{"start":[1275,148],"end":[1816,640],"points":[[1275,148],[1274,148],[1272,150],[1270,154],[1267,159],[1264,165],[1258,173],[1254,182],[1247,193],[1242,205],[1237,215],[1230,228],[1224,241],[1218,254],[1212,269],[1205,283],[1201,298],[1199,317],[1199,337],[1199,361],[1201,387],[1210,414],[1227,450],[1245,483],[1268,516],[1289,544],[1312,566],[1342,587],[1379,611],[1408,626],[1443,645],[1480,662],[1509,674],[1541,687],[1572,696],[1597,705],[1620,712],[1640,717],[1665,725],[1683,728],[1701,733],[1718,736],[1734,737],[1747,737],[1760,739],[1770,739],[1779,737],[1786,735],[1792,733],[1798,730],[1801,728],[1804,725],[1806,723],[1807,719],[1810,716],[1811,712],[1813,709],[1814,706],[1814,703],[1815,700],[1815,697],[1815,695],[1815,691],[1814,687],[1813,683],[1812,678],[1810,672],[1809,669],[1809,666],[1809,665],[1809,662],[1809,660],[1810,655],[1812,653],[1813,650],[1813,648],[1814,646],[1814,645],[1814,643],[1815,642],[1815,641],[1816,641],[1816,640]],"dx":541,"dy":492,"length":1095.9087615225508,"timing":[0,50,55,62,69,75,82,90,97,105,110,118,124,131,140,145,152,159,166,173,180,187,194,201,208,215,222,229,236,243,250,257,264,271,277,284,291,298,306,311,318,325,332,340,346,353,360,367,374,381,389,395,402,409,416,423,430,437,444,451,459,464,473,478,485,493,500,506,513,520,527,533,541,548,555,562,569,576,583,592,604,665,673]},{"start":[2112,819],"end":[878,360],"points":[[2111,819],[2110,819],[2107,819],[2100,819],[2089,816],[2077,814],[2060,810],[2036,805],[2011,799],[1979,792],[1943,782],[1900,768],[1849,751],[1798,730],[1753,713],[1689,688],[1632,664],[1577,642],[1518,618],[1465,595],[1407,570],[1358,550],[1303,526],[1253,507],[1201,485],[1164,470],[1132,459],[1105,449],[1078,439],[1055,430],[1034,423],[1017,417],[1003,411],[994,408],[983,404],[976,402],[972,401],[968,400],[967,400],[965,399],[964,399],[964,398],[963,398],[961,397],[958,395],[957,394],[956,394],[955,394],[953,393],[952,392],[949,390],[944,387],[939,384],[933,380],[927,378],[920,375],[912,373],[905,369],[899,366],[894,366],[891,364],[888,363],[885,362],[884,362],[883,361],[881,361],[880,361],[879,361],[879,360],[878,360]],"dx":-1234,"dy":-459,"length":1322.0011027724117,"timing":[0,0,8,15,23,29,35,43,49,57,63,71,77,84,92,98,105,112,119,126,133,141,146,153,161,168,175,181,189,196,203,210,217,223,230,237,245,251,260,266,272,279,285,293,300,307,314,368,384,390,397,404,411,418,424,431,438,447,453,460,466,473,481,487,494,501,508,515,522,530]},{"start":[1004,1032],"end":[1732,503],"points":[[1004,1032],[1004,1033],[1005,1033],[1008,1033],[1010,1033],[1013,1033],[1018,1033],[1027,1030],[1038,1026],[1051,1022],[1067,1014],[1087,1005],[1111,995],[1142,982],[1175,966],[1217,945],[1253,928],[1307,903],[1354,880],[1407,852],[1460,828],[1504,808],[1563,777],[1608,754],[1656,728],[1705,700],[1739,681],[1770,664],[1800,647],[1831,631],[1855,618],[1869,609],[1886,600],[1898,594],[1906,589],[1913,584],[1915,580],[1917,578],[1918,576],[1919,573],[1919,570],[1919,566],[1916,562],[1913,557],[1910,551],[1904,546],[1893,540],[1883,535],[1873,530],[1859,525],[1844,519],[1829,517],[1814,516],[1801,516],[1789,516],[1780,516],[1772,516],[1768,516],[1765,516],[1764,516],[1763,516],[1762,516],[1761,516],[1758,513],[1758,512],[1755,512],[1753,511],[1750,510],[1749,510],[1747,510],[1745,510],[1743,509],[1741,509],[1740,508],[1739,508],[1738,508],[1738,506],[1738,505],[1737,504],[1736,504],[1736,503],[1734,503],[1733,503],[1732,503]],"dx":728,"dy":-529,"length":1248.2994431432107,"timing":[0,268,270,278,285,291,298,305,312,319,326,333,340,347,354,361,369,375,382,389,396,403,410,417,423,431,437,444,451,458,465,472,479,486,493,500,507,514,521,527,535,542,549,556,562,570,577,582,590,596,604,610,617,624,631,639,645,652,659,666,674,685,701,708,715,722,728,736,743,750,757,763,770,777,784,792,798,818,826,833,840,846,854,866]},{"start":[1732,503],"end":[1246,220],"points":[[1731,503],[1729,503],[1727,503],[1721,505],[1712,506],[1699,509],[1682,509],[1661,509],[1632,509],[1601,509],[1565,509],[1530,504],[1485,495],[1445,484],[1415,476],[1377,463],[1348,451],[1321,438],[1284,422],[1261,411],[1243,400],[1234,392],[1228,387],[1226,380],[1226,375],[1226,366],[1226,356],[1229,345],[1233,334],[1238,325],[1242,315],[1245,308],[1249,300],[1250,296],[1253,291],[1255,284],[1256,280],[1258,276],[1259,271],[1259,269],[1260,265],[1260,262],[1260,257],[1260,251],[1260,247],[1260,243],[1259,240],[1259,237],[1257,236],[1257,235],[1257,233],[1256,232],[1256,231],[1255,231],[1255,230],[1254,229],[1253,228],[1253,227],[1251,224],[1249,223],[1247,222],[1247,221],[1246,220]],"dx":-486,"dy":-283,"length":709.965178401897,"timing":[0,5,12,19,26,33,40,47,54,61,68,74,83,89,95,102,109,116,123,130,137,144,151,158,165,172,179,186,193,200,207,214,221,228,235,242,249,255,262,269,275,282,289,296,304,310,318,324,331,338,345,352,360,370,373,380,388,394,401,407,415,422,429]},{"start":[536,379],"end":[1275,267],"points":[[536,379],[548,375],[598,359],[664,349],[736,342],[816,336],[896,335],[952,335],[1004,335],[1043,335],[1075,335],[1100,335],[1117,331],[1139,327],[1151,323],[1154,321],[1155,321],[1159,319],[1172,315],[1185,308],[1192,303],[1196,300],[1206,296],[1219,292],[1233,286],[1244,282],[1250,279],[1253,277],[1254,277],[1255,276],[1255,275],[1256,275],[1258,275],[1260,275],[1264,273],[1268,270],[1272,269],[1273,268],[1273,267],[1274,267],[1275,267]],"dx":739,"dy":-112,"length":760.0362342469451,"timing":[0,282,298,315,332,348,365,382,398,415,432,448,465,482,498,515,532,598,615,632,648,665,682,698,715,732,749,765,786,798,815,1018,1032,1048,1065,1082,1098,1115,1132,1148,1218]},{"start":[274,415],"end":[1311,276],"points":[[277,415],[280,413],[286,411],[311,405],[363,395],[461,375],[584,357],[713,339],[887,316],[983,297],[1055,292],[1110,292],[1160,294],[1189,295],[1208,295],[1220,295],[1229,295],[1236,294],[1240,292],[1243,291],[1244,291],[1245,291],[1246,291],[1254,291],[1267,290],[1275,288],[1283,285],[1285,283],[1287,283],[1288,283],[1290,282],[1293,280],[1295,279],[1297,279],[1300,279],[1303,278],[1305,278],[1306,276],[1307,276],[1308,276],[1310,276],[1311,276]],"dx":1037,"dy":-139,"length":1049.6175542317626,"timing":[0,16,29,45,62,79,95,112,129,145,162,179,195,212,229,245,262,279,296,312,329,352,362,379,395,412,429,445,462,479,496,512,529,545,562,579,595,612,629,696,712,729]},{"start":[1725,800],"end":[824,525],"points":[[1725,798],[1725,796],[1724,795],[1716,788],[1683,769],[1633,743],[1546,699],[1452,660],[1367,629],[1277,602],[1177,575],[1066,543],[948,510],[832,482],[736,460],[679,452],[618,446],[592,443],[572,439],[558,437],[556,436],[555,436],[555,439],[556,441],[558,442],[560,445],[564,448],[578,456],[591,463],[605,471],[619,477],[638,487],[657,498],[681,510],[703,521],[728,530],[747,536],[766,541],[784,546],[804,550],[811,551],[815,552],[816,552],[817,552],[818,552],[819,552],[820,552],[821,552],[822,552],[822,550],[823,549],[823,547],[823,545],[823,538],[824,533],[824,527],[824,526],[824,525]],"dx":-901,"dy":-275,"length":1558.5358038198103,"timing":[0,8,23,40,56,73,90,106,123,140,156,173,190,206,223,240,256,273,290,306,323,560,576,592,606,623,640,656,673,690,706,723,740,756,773,790,806,823,840,856,873,889,984,992,1016,1024,1040,1296,1306,1328,1400,1881,1889,1906,1923,1939,1956,1973]},{"start":[1392,461],"end":[303,271],"points":[[1389,462],[1381,462],[1336,462],[1261,456],[1152,450],[1031,440],[915,440],[794,428],[684,420],[593,412],[514,400],[457,383],[426,376],[401,368],[372,359],[354,352],[335,345],[318,341],[301,336],[292,334],[282,330],[276,326],[273,324],[271,322],[270,321],[270,320],[269,319],[269,317],[269,316],[272,313],[278,307],[285,302],[292,294],[296,289],[299,284],[300,281],[302,278],[302,277],[302,276],[302,275],[302,274],[303,272],[303,271]],"dx":-1089,"dy":-190,"length":1199.2409835256658,"timing":[0,16,32,49,66,82,99,116,132,149,166,182,199,216,232,249,265,282,299,315,332,349,366,382,399,415,448,464,472,482,499,516,532,549,566,582,599,624,640,649,666,682,699]},{"start":[303,271],"end":[117,834],"points":[[303,275],[301,284],[294,304],[288,329],[276,357],[264,386],[251,420],[237,457],[219,500],[203,533],[193,557],[187,576],[180,595],[177,607],[175,617],[173,629],[171,640],[170,651],[167,663],[166,675],[163,687],[162,700],[162,711],[160,725],[157,739],[154,744],[152,752],[147,762],[141,775],[135,786],[130,795],[126,802],[123,807],[121,808],[121,812],[120,814],[119,817],[119,818],[118,819],[118,821],[118,823],[117,825],[117,828],[117,830],[117,833],[117,834]],"dx":-186,"dy":563,"length":595.206517357489,"timing":[0,9,25,42,59,75,92,109,126,142,159,175,192,209,225,242,259,275,292,309,326,342,359,376,392,409,426,442,459,476,492,509,526,542,559,576,592,609,626,642,659,676,692,709,726,742]},{"start":[1829,368],"end":[320,392],"points":[[1826,369],[1816,369],[1793,368],[1756,368],[1696,366],[1612,366],[1517,366],[1419,366],[1307,375],[1108,388],[971,396],[855,412],[749,425],[664,444],[597,461],[536,475],[493,484],[469,486],[454,489],[445,490],[444,490],[442,490],[441,490],[438,490],[429,490],[411,484],[391,474],[374,463],[362,454],[350,441],[344,433],[336,419],[331,410],[330,404],[330,401],[329,399],[329,398],[328,397],[327,396],[325,394],[322,394],[321,393],[320,392]],"dx":-1509,"dy":24,"length":1561.6390010882371,"timing":[0,11,28,44,61,78,94,111,128,144,161,177,194,211,227,244,261,277,294,311,328,424,432,444,461,477,494,511,527,544,561,577,594,611,627,644,661,784,794,811,827,844,861]},{"start":[1178,380],"end":[95,678],"points":[[1177,380],[1175,380],[1167,382],[1154,385],[1137,389],[1115,396],[1086,405],[1048,416],[1009,430],[959,447],[899,464],[834,482],[750,507],[663,522],[545,547],[485,563],[428,580],[374,596],[330,609],[298,616],[275,628],[256,638],[246,647],[235,655],[228,664],[222,672],[217,677],[216,679],[214,681],[213,681],[213,682],[212,682],[210,684],[208,684],[200,686],[190,690],[178,691],[165,696],[146,696],[137,696],[129,696],[123,696],[119,694],[118,693],[115,691],[114,690],[112,688],[111,685],[110,684],[109,684],[108,684],[107,684],[106,684],[105,684],[104,684],[102,684],[101,684],[100,684],[99,684],[98,683],[96,682],[96,681],[95,679],[95,678]],"dx":-1083,"dy":298,"length":1151.2165957532761,"timing":[0,8,24,41,57,74,91,107,124,141,157,174,191,207,224,241,257,274,291,307,324,341,357,374,391,407,424,441,457,474,496,508,524,541,557,574,591,607,624,641,657,674,690,744,757,774,791,807,824,1048,1064,1074,1091,1107,1128,1174,1192,1208,1224,1241,1480,1491,1508,1536]},{"start":[1470,446],"end":[809,578],"points":[[1471,446],[1470,447],[1464,449],[1452,449],[1432,451],[1409,456],[1382,463],[1343,475],[1298,492],[1239,515],[1180,539],[1118,565],[1026,600],[970,622],[927,633],[891,646],[862,656],[839,662],[822,667],[808,668],[800,671],[796,672],[793,672],[792,672],[791,672],[791,669],[791,664],[791,656],[795,647],[799,633],[804,617],[808,600],[811,587],[814,576],[815,570],[815,569],[814,571],[813,573],[812,573],[810,577],[809,578]],"dx":-661,"dy":132,"length":837.3754087439246,"timing":[0,24,34,50,67,84,100,117,134,150,167,184,200,217,234,250,267,284,300,317,334,350,367,384,440,450,467,484,500,517,534,550,567,584,600,617,848,856,867,883,900]},{"start":[1045,164],"end":[749,738],"points":[[1044,165],[1043,168],[1039,173],[1033,182],[1019,206],[1009,226],[994,260],[978,308],[954,369],[931,421],[906,468],[886,498],[871,519],[858,539],[844,560],[833,579],[818,604],[807,619],[799,631],[791,645],[783,658],[776,674],[770,687],[764,699],[759,710],[756,714],[755,718],[754,721],[754,723],[754,725],[753,727],[752,730],[752,732],[750,735],[749,737],[749,738]],"dx":-296,"dy":574,"length":648.2155152547623,"timing":[0,8,23,40,56,74,90,106,123,140,156,173,190,206,223,240,256,273,290,306,323,340,356,373,390,406,423,440,456,473,490,506,523,540,556,573]},{"start":[1249,536],"end":[740,844],"points":[[1246,536],[1240,536],[1216,532],[1185,532],[1152,532],[1080,546],[1029,560],[991,575],[955,593],[932,609],[918,628],[907,649],[896,670],[889,689],[880,710],[870,730],[860,744],[849,760],[843,768],[838,776],[833,784],[826,793],[818,799],[811,805],[803,812],[793,816],[782,822],[770,828],[762,831],[754,833],[750,834],[748,835],[747,835],[746,837],[745,837],[744,839],[743,840],[742,841],[741,843],[740,844]],"dx":-509,"dy":308,"length":645.7145377460429,"timing":[0,13,30,47,64,80,97,113,130,147,163,180,197,213,230,247,263,280,297,313,330,347,363,380,397,413,430,447,463,480,497,513,530,547,563,580,597,613,630,648]},{"start":[808,336],"end":[1785,705],"points":[[810,339],[813,341],[818,344],[844,356],[879,372],[923,388],[979,407],[1038,433],[1111,465],[1181,494],[1255,519],[1328,541],[1384,562],[1435,574],[1485,590],[1548,603],[1577,610],[1599,615],[1621,624],[1642,629],[1657,634],[1674,640],[1687,644],[1696,648],[1709,653],[1718,659],[1727,662],[1732,664],[1734,665],[1736,667],[1737,668],[1740,670],[1741,671],[1743,673],[1745,674],[1747,677],[1753,682],[1759,686],[1764,689],[1769,691],[1769,692],[1770,692],[1771,693],[1773,695],[1774,696],[1776,698],[1778,698],[1779,700],[1780,700],[1782,702],[1784,703],[1785,705]],"dx":977,"dy":369,"length":1049.9227262518402,"timing":[0,7,23,40,57,73,90,106,123,140,157,173,190,207,223,240,257,273,290,307,323,340,357,373,390,407,423,440,457,473,490,507,523,540,557,573,590,607,623,640,656,673,690,712,736,752,760,773,790,806,856,873]},{"start":[157,228],"end":[980,801],"points":[[158,229],[161,229],[171,232],[188,237],[206,241],[225,245],[245,249],[267,255],[294,263],[318,270],[366,289],[414,315],[475,349],[542,389],[612,433],[677,481],[748,531],[813,571],[864,604],[898,623],[925,640],[944,653],[963,667],[969,673],[970,677],[973,683],[974,685],[975,689],[976,693],[976,698],[976,705],[976,716],[976,727],[976,741],[976,761],[976,774],[976,783],[977,787],[977,791],[979,795],[979,797],[979,799],[980,800],[980,801]],"dx":823,"dy":573,"length":1063.1303720083226,"timing":[0,10,27,44,60,77,93,110,127,143,160,177,193,210,227,243,260,277,293,310,327,343,360,377,393,410,427,443,460,477,493,510,527,543,560,577,593,610,627,643,660,677,693,710]},{"start":[230,792],"end":[1697,668],"points":[[231,793],[232,793],[234,788],[241,779],[255,767],[275,750],[330,708],[381,674],[430,642],[479,609],[527,582],[564,559],[598,543],[631,533],[665,524],[711,513],[754,509],[811,501],[915,498],[999,506],[1080,519],[1160,533],[1220,550],[1280,568],[1329,584],[1375,597],[1416,607],[1449,617],[1475,624],[1498,631],[1521,638],[1528,639],[1536,643],[1539,644],[1543,644],[1548,647],[1554,648],[1562,650],[1573,650],[1585,651],[1601,651],[1617,651],[1647,653],[1658,656],[1670,657],[1679,661],[1683,661],[1684,662],[1687,663],[1688,664],[1690,666],[1695,667],[1697,668]],"dx":1467,"dy":-124,"length":1574.093121554282,"timing":[0,8,21,38,55,71,88,105,121,138,155,171,188,205,221,238,255,271,288,305,321,338,355,371,388,405,421,438,455,471,488,504,521,538,555,571,588,605,621,638,655,671,688,705,721,738,755,771,788,864,872,888,905]},{"start":[844,452],"end":[1597,592],"points":[[844,452],[844,451],[847,452],[873,460],[898,468],[921,473],[938,475],[957,479],[980,482],[1021,487],[1052,492],[1091,499],[1116,502],[1143,505],[1171,510],[1206,515],[1242,521],[1281,528],[1325,535],[1372,543],[1409,550],[1464,557],[1493,563],[1513,566],[1527,568],[1538,569],[1544,571],[1550,572],[1554,572],[1560,573],[1562,573],[1568,575],[1576,576],[1581,577],[1584,577],[1586,578],[1588,580],[1589,580],[1590,582],[1592,584],[1594,586],[1595,588],[1597,590],[1597,591],[1597,592]],"dx":753,"dy":140,"length":773.8235734823967,"timing":[0,355,368,383,399,416,433,449,466,483,499,516,533,549,566,583,599,616,633,649,666,683,699,716,733,749,766,783,799,816,833,849,866,883,899,916,933,949,966,983,999,1016,1033,1049,1099]},{"start":[924,736],"end":[890,570],"points":[[925,734],[924,733],[919,729],[914,725],[907,721],[902,717],[899,712],[897,706],[894,697],[891,687],[886,674],[874,655],[854,629],[844,612],[828,586],[821,568],[818,557],[818,545],[818,531],[818,522],[823,512],[828,507],[830,504],[834,502],[834,501],[836,502],[843,508],[849,515],[858,526],[864,534],[868,538],[873,541],[873,542],[874,543],[876,545],[879,548],[882,549],[883,550],[884,551],[884,553],[885,553],[886,557],[886,559],[887,562],[889,565],[890,569],[890,570]],"dx":-34,"dy":-166,"length":366.1329978436167,"timing":[0,7,24,40,57,74,90,107,124,140,157,174,190,207,224,240,257,274,290,307,324,340,357,374,390,456,474,492,507,524,540,557,574,590,607,623,640,657,720,728,740,757,773,790,807,824,840]},{"start":[566,829],"end":[604,161],"points":[[568,827],[570,822],[574,811],[576,798],[579,779],[579,754],[576,717],[560,640],[553,588],[545,534],[537,471],[531,425],[525,381],[525,353],[525,330],[525,313],[525,299],[527,289],[530,282],[534,274],[538,267],[546,258],[554,248],[568,236],[583,222],[597,207],[610,192],[617,182],[622,177],[624,174],[624,172],[625,171],[625,170],[624,170],[622,169],[618,167],[614,166],[612,165],[610,164],[609,164],[608,163],[606,162],[605,161],[604,161]],"dx":38,"dy":-668,"length":723.2641741309513,"timing":[0,12,28,45,62,78,95,112,128,145,162,178,195,212,228,245,262,278,295,312,328,345,362,378,395,412,428,445,462,478,495,512,592,600,612,628,645,662,680,751,762,778,795,811]},{"start":[601,774],"end":[1821,648],"points":[[602,774],[605,772],[609,767],[618,758],[625,750],[631,743],[638,732],[641,729],[645,722],[649,717],[654,707],[662,693],[678,679],[699,670],[732,665],[784,664],[844,664],[928,664],[1078,666],[1174,670],[1269,672],[1364,672],[1448,672],[1532,672],[1608,672],[1657,672],[1698,672],[1720,672],[1742,672],[1756,672],[1773,675],[1777,675],[1778,675],[1779,675],[1781,676],[1784,676],[1787,676],[1790,676],[1791,676],[1793,676],[1794,675],[1795,675],[1801,671],[1806,667],[1810,665],[1814,662],[1816,660],[1817,659],[1817,657],[1818,653],[1820,652],[1820,650],[1821,648]],"dx":1220,"dy":-126,"length":1283.08631797554,"timing":[0,16,33,50,66,83,100,116,133,150,166,183,200,216,233,250,266,283,300,316,333,350,366,383,400,416,433,450,466,483,500,516,540,564,572,587,600,616,633,659,668,683,699,716,733,750,766,795,868,899,916,933,950]},{"start":[553,208],"end":[468,519],"points":[[553,209],[554,210],[555,212],[558,215],[561,220],[566,229],[570,245],[570,278],[570,304],[570,332],[561,360],[550,387],[540,412],[530,435],[520,453],[513,465],[505,477],[501,484],[497,491],[491,501],[486,508],[482,513],[477,519],[473,523],[470,528],[467,530],[464,534],[464,535],[464,532],[464,531],[466,526],[467,521],[468,521],[468,520],[468,519]],"dx":-85,"dy":311,"length":376.1688346033471,"timing":[0,8,21,38,54,71,88,104,121,138,154,171,188,204,221,238,254,271,288,304,321,338,354,371,388,404,421,438,609,621,638,654,671,688,704]},{"start":[788,412],"end":[413,402],"points":[[789,412],[791,408],[793,404],[796,399],[798,392],[798,384],[796,375],[792,370],[788,367],[786,367],[775,367],[764,367],[744,367],[715,369],[683,373],[653,379],[618,386],[586,392],[551,399],[521,405],[494,410],[474,414],[453,416],[432,418],[423,418],[421,418],[420,417],[418,415],[416,412],[415,410],[414,409],[414,408],[413,407],[413,405],[413,404],[413,403],[413,402]],"dx":-375,"dy":-10,"length":441.0859374093043,"timing":[0,16,33,50,66,83,99,116,133,150,166,183,199,216,233,249,266,282,299,316,333,349,367,383,399,417,449,466,483,516,533,549,566,583,599,633,697]},{"start":[639,255],"end":[1109,501],"points":[[638,255],[637,255],[637,254],[634,256],[629,261],[624,270],[622,280],[622,291],[638,310],[663,328],[699,347],[740,362],[790,376],[843,391],[893,404],[940,417],[980,428],[1007,437],[1023,444],[1034,452],[1039,460],[1042,464],[1045,466],[1048,469],[1053,473],[1058,477],[1062,479],[1065,481],[1073,486],[1080,490],[1087,494],[1094,496],[1096,497],[1098,498],[1100,499],[1102,499],[1106,500],[1108,501],[1109,501]],"dx":470,"dy":246,"length":584.6947739914325,"timing":[0,49,116,183,199,215,233,249,266,282,299,315,332,349,366,382,399,415,433,449,465,482,499,515,532,549,565,582,599,616,633,649,666,808,817,833,849,865,901]},{"start":[1109,501],"end":[713,266],"points":[[1108,501],[1092,495],[1072,489],[1039,479],[998,464],[956,444],[918,422],[885,402],[860,384],[841,367],[824,351],[802,330],[789,319],[782,312],[777,307],[772,302],[767,296],[762,291],[756,286],[752,282],[746,280],[741,277],[734,274],[726,271],[719,269],[717,269],[717,268],[716,268],[714,267],[713,267],[713,266]],"dx":-396,"dy":-235,"length":468.4345218286728,"timing":[0,20,36,53,69,86,103,119,136,153,170,186,203,220,236,253,270,286,303,320,336,353,370,386,403,420,453,470,486,503,556]},{"start":[1147,196],"end":[396,173],"points":[[1143,196],[1140,198],[1131,201],[1119,206],[1107,211],[1087,220],[1067,231],[1051,242],[1040,252],[1028,262],[989,281],[938,296],[874,307],[803,312],[725,313],[655,310],[599,304],[557,299],[528,293],[507,285],[497,278],[495,273],[492,263],[487,255],[481,249],[474,244],[463,237],[453,232],[441,225],[433,220],[424,214],[417,208],[412,203],[407,198],[403,193],[401,190],[400,187],[399,185],[398,183],[397,181],[397,179],[396,177],[396,175],[396,174],[396,173]],"dx":-751,"dy":-23,"length":829.5754910598665,"timing":[0,15,32,50,66,83,99,116,133,150,166,183,200,215,233,249,265,282,299,316,333,349,366,382,399,416,433,449,466,483,499,516,532,549,566,582,599,616,633,650,666,683,699,716,733]},{"start":[341,164],"end":[961,460],"points":[[341,165],[342,165],[342,166],[352,173],[382,188],[425,206],[482,227],[552,251],[619,276],[682,302],[760,338],[801,363],[825,383],[838,398],[838,404],[834,408],[827,411],[821,416],[819,425],[819,431],[819,435],[820,436],[821,437],[834,446],[844,451],[859,456],[880,459],[899,461],[916,461],[927,461],[931,461],[934,461],[937,461],[942,461],[945,460],[949,460],[950,460],[952,460],[955,460],[957,460],[961,460]],"dx":620,"dy":296,"length":748.2074736276147,"timing":[0,133,215,232,248,265,282,298,315,331,349,365,381,398,415,432,448,465,481,498,515,531,549,565,581,598,615,632,648,665,682,698,716,732,748,765,782,799,815,832,849]},{"start":[82,502],"end":[829,332],"points":[[87,502],[95,502],[109,502],[134,501],[167,499],[214,498],[227,498],[252,498],[275,497],[302,494],[338,488],[408,474],[467,461],[526,449],[584,438],[638,428],[687,417],[726,407],[759,396],[784,388],[800,379],[802,376],[802,375],[802,373],[800,369],[800,366],[800,362],[801,360],[801,359],[803,356],[807,352],[812,348],[818,344],[823,340],[826,337],[827,336],[828,335],[829,334],[829,333],[829,332]],"dx":747,"dy":-170,"length":788.6885035072997,"timing":[0,17,33,50,67,83,100,116,133,150,166,183,199,217,233,250,266,283,300,316,334,350,367,383,400,416,434,451,483,533,550,567,584,600,617,633,650,667,700,731]},{"start":[1183,365],"end":[663,220],"points":[[1182,365],[1181,365],[1178,364],[1171,359],[1165,354],[1161,352],[1156,350],[1149,350],[1137,351],[1129,355],[1124,358],[1123,361],[1124,364],[1127,369],[1127,371],[1120,375],[1113,376],[1087,375],[1044,368],[992,355],[916,333],[869,316],[824,298],[784,281],[752,266],[727,256],[696,242],[685,236],[680,233],[671,227],[664,222],[663,221],[663,220]],"dx":-520,"dy":-145,"length":574.2285412775863,"timing":[0,16,32,49,65,82,99,115,132,148,165,182,198,215,231,249,265,281,299,316,332,348,365,382,398,415,431,449,465,482,499,515,650]},{"start":[633,485],"end":[1104,347],"points":[[632,485],[630,485],[624,479],[618,470],[613,462],[606,447],[596,428],[583,405],[566,382],[546,360],[523,337],[498,312],[494,306],[493,300],[495,290],[502,287],[519,284],[552,283],[596,283],[649,283],[706,284],[767,288],[859,298],[916,304],[943,308],[989,314],[1037,321],[1051,324],[1052,324],[1053,324],[1057,323],[1060,323],[1061,323],[1064,324],[1065,324],[1066,325],[1067,325],[1068,326],[1077,332],[1086,337],[1095,343],[1102,347],[1104,347]],"dx":471,"dy":-138,"length":864.3915319620796,"timing":[0,17,33,50,67,83,100,116,133,150,166,183,200,216,233,250,267,283,300,316,333,349,366,383,400,417,433,449,467,520,533,550,566,599,617,633,703,717,734,750,766,783,799]},{"start":[611,383],"end":[1217,134],"points":[[611,384],[611,385],[616,391],[619,393],[626,395],[636,395],[658,395],[692,391],[741,381],[797,369],[854,354],[908,338],[959,320],[1018,293],[1051,273],[1077,255],[1102,234],[1128,217],[1153,201],[1179,186],[1197,174],[1211,162],[1221,151],[1223,145],[1223,143],[1223,141],[1221,139],[1220,138],[1219,136],[1217,135],[1217,134]],"dx":606,"dy":-249,"length":696.0411684372208,"timing":[0,51,67,84,101,117,134,150,167,184,201,217,234,251,267,284,301,317,333,351,367,384,401,417,434,467,484,500,517,534,572]},{"start":[534,534],"end":[820,134],"points":[[534,535],[535,535],[539,533],[541,530],[542,527],[542,522],[540,516],[534,507],[531,500],[528,489],[532,474],[553,456],[596,438],[680,407],[727,385],[766,361],[792,338],[811,310],[821,281],[823,250],[818,222],[810,200],[802,177],[796,158],[794,146],[797,138],[798,136],[799,134],[801,133],[804,132],[809,131],[811,131],[812,131],[813,131],[814,131],[818,133],[820,134]],"dx":286,"dy":-400,"length":604.2289347735855,"timing":[0,49,66,83,100,116,133,149,166,182,199,216,232,249,266,282,299,316,332,349,365,382,399,416,433,450,466,483,533,550,566,583,599,616,649,667,676]},{"start":[357,535],"end":[870,315],"points":[[358,535],[360,535],[364,535],[367,534],[371,533],[381,530],[400,524],[433,513],[478,496],[531,479],[589,463],[645,450],[696,441],[766,429],[807,416],[844,400],[878,385],[900,373],[903,365],[904,357],[904,348],[904,343],[905,338],[905,335],[902,331],[899,329],[897,327],[891,325],[887,324],[882,321],[878,318],[876,317],[875,316],[873,316],[871,315],[870,315]],"dx":513,"dy":-220,"length":648.5129287082902,"timing":[0,16,33,49,66,83,99,116,132,149,166,182,199,216,232,249,266,282,298,316,332,349,366,382,399,416,432,449,465,482,499,516,533,550,566,599]},{"start":[623,524],"end":[1271,168],"points":[[623,525],[625,524],[627,522],[629,517],[630,512],[630,506],[628,501],[626,499],[623,499],[620,497],[619,490],[619,480],[619,465],[619,445],[616,422],[627,382],[654,359],[710,337],[791,315],[877,296],[950,285],[1015,278],[1070,277],[1106,277],[1129,276],[1140,270],[1147,262],[1157,247],[1166,235],[1178,220],[1185,209],[1187,204],[1188,202],[1190,201],[1199,199],[1211,199],[1219,199],[1224,199],[1227,199],[1235,195],[1246,191],[1255,186],[1266,178],[1270,172],[1271,169],[1271,168]],"dx":648,"dy":-356,"length":865.4244294793103,"timing":[0,33,48,64,82,98,114,131,147,165,181,198,214,231,248,264,281,298,314,331,348,365,381,398,414,431,448,464,481,497,515,531,548,565,581,597,615,631,648,665,681,698,714,731,748,819]},{"start":[1624,214],"end":[440,641],"points":[[1623,213],[1615,213],[1603,213],[1575,216],[1527,220],[1467,226],[1402,236],[1334,245],[1218,263],[1130,286],[1022,316],[903,350],[801,390],[715,425],[654,460],[603,491],[569,516],[543,538],[530,552],[522,564],[512,577],[507,584],[503,588],[501,589],[500,592],[499,594],[496,599],[492,605],[485,612],[478,617],[472,619],[470,619],[465,620],[461,620],[459,622],[458,622],[456,622],[454,622],[445,634],[441,640],[440,641]],"dx":-1184,"dy":427,"length":1296.1052756895206,"timing":[0,7,20,36,53,70,87,103,120,136,153,170,186,203,220,236,253,270,287,303,320,336,353,370,386,403,420,437,453,470,487,503,520,537,553,570,688,704,720,736,753]},{"start":[724,802],"end":[1103,168],"points":[[730,786],[756,750],[811,681],[866,614],[922,538],[992,417],[1020,355],[1033,311],[1036,279],[1036,251],[1036,231],[1036,222],[1039,213],[1042,203],[1044,194],[1045,188],[1046,183],[1050,176],[1057,171],[1066,167],[1078,163],[1085,162],[1088,162],[1090,162],[1092,162],[1093,163],[1096,164],[1097,165],[1100,167],[1102,168],[1103,168]],"dx":379,"dy":-634,"length":762.9657797515413,"timing":[0,13,30,47,64,80,98,113,130,147,163,180,197,214,230,247,264,280,297,314,330,347,363,380,399,415,431,447,464,480,497]},{"start":[1662,293],"end":[299,675],"points":[[1660,292],[1649,292],[1633,292],[1604,292],[1562,292],[1503,292],[1429,292],[1356,292],[1283,292],[1161,292],[1077,300],[987,315],[899,336],[820,358],[763,376],[703,405],[667,429],[639,453],[618,472],[593,494],[576,513],[538,540],[517,554],[500,567],[479,579],[454,586],[435,591],[428,595],[426,595],[421,600],[410,608],[399,616],[394,624],[387,635],[379,645],[370,656],[361,665],[346,674],[340,678],[337,681],[336,682],[332,682],[329,682],[325,682],[319,682],[313,681],[305,679],[301,677],[300,677],[299,676],[299,675]],"dx":-1363,"dy":382,"length":1479.95720598027,"timing":[0,7,19,36,52,69,86,102,119,136,152,169,187,202,219,236,252,269,286,302,319,336,352,369,386,403,419,436,486,503,519,536,553,569,586,603,619,636,653,669,686,736,752,769,786,802,819,836,853,869,886]},{"start":[299,675],"end":[1212,373],"points":[[303,673],[311,670],[334,664],[394,655],[493,645],[617,633],[755,612],[919,591],[1052,572],[1121,559],[1136,554],[1137,553],[1137,551],[1137,548],[1137,545],[1136,545],[1136,541],[1142,526],[1154,508],[1166,486],[1177,462],[1186,443],[1192,426],[1197,413],[1202,404],[1203,398],[1203,391],[1203,388],[1203,387],[1204,384],[1205,382],[1209,379],[1210,375],[1212,373]],"dx":913,"dy":-302,"length":1043.7433141052857,"timing":[0,8,24,41,57,74,91,107,124,140,157,174,190,207,224,240,257,274,290,307,324,341,357,374,391,408,424,441,457,474,491,507,524,541]},{"start":[68,181],"end":[437,479],"points":[[68,182],[71,182],[73,182],[74,182],[76,183],[78,184],[81,185],[85,186],[87,186],[90,188],[94,189],[105,195],[124,206],[156,224],[216,257],[299,303],[401,365],[448,399],[483,431],[504,453],[509,462],[509,465],[509,466],[509,467],[509,468],[507,469],[504,472],[500,475],[490,477],[479,478],[465,478],[454,478],[447,478],[442,478],[439,479],[437,479]],"dx":369,"dy":298,"length":608.4477683596823,"timing":[0,13,30,89,104,113,130,147,163,180,197,213,230,247,263,281,297,314,330,347,364,380,400,416,430,447,463,480,497,514,530,547,563,580,597,614]},{"start":[1222,379],"end":[549,317],"points":[[1216,379],[1209,379],[1187,378],[1153,369],[1107,355],[1023,335],[963,326],[906,319],[849,311],[794,303],[729,293],[671,285],[617,278],[579,278],[558,280],[538,285],[528,290],[519,298],[518,304],[518,309],[518,312],[518,315],[518,319],[520,324],[531,332],[548,339],[565,343],[578,344],[580,344],[581,341],[581,340],[579,338],[575,334],[570,328],[565,324],[559,320],[554,319],[552,319],[550,319],[549,317]],"dx":-673,"dy":-62,"length":847.9241272781362,"timing":[0,13,30,46,63,80,96,113,129,146,163,179,196,213,229,246,263,280,296,313,329,346,363,379,396,413,429,446,463,513,529,546,563,579,596,613,630,646,663,679]},{"start":[1094,505],"end":[471,497],"points":[[1094,505],[1091,505],[1073,497],[1045,482],[989,454],[920,416],[839,376],[758,342],[696,315],[641,297],[595,283],[550,267],[521,257],[501,255],[485,258],[476,271],[470,289],[468,308],[468,329],[468,352],[471,375],[476,397],[479,418],[482,437],[484,457],[484,470],[484,475],[484,476],[484,478],[484,479],[482,482],[481,483],[479,487],[476,491],[473,496],[472,496],[471,497]],"dx":-623,"dy":-8,"length":911.3520771224221,"timing":[0,48,64,81,97,115,131,147,164,182,197,214,231,248,264,280,297,314,331,347,364,381,397,414,432,449,464,481,497,514,531,547,564,581,597,614,632]},{"start":[214,299],"end":[621,567],"points":[[218,299],[223,299],[228,299],[243,302],[270,304],[282,307],[287,308],[293,310],[302,315],[318,321],[343,332],[376,347],[417,368],[463,398],[501,431],[533,469],[570,523],[589,555],[602,574],[611,587],[615,593],[616,593],[618,595],[621,595],[621,594],[621,593],[621,589],[621,581],[621,573],[621,568],[621,567]],"dx":407,"dy":268,"length":551.6490251021032,"timing":[0,8,23,40,56,73,89,106,123,139,156,173,189,206,223,240,256,274,289,306,323,340,357,374,448,456,473,490,506,523,539]},{"start":[1120,161],"end":[523,374],"points":[[1119,163],[1112,164],[1087,174],[1046,190],[972,215],[889,237],[805,271],[735,304],[682,332],[639,351],[595,375],[578,384],[564,389],[553,394],[545,396],[531,399],[518,401],[507,402],[496,405],[482,409],[474,409],[474,407],[474,405],[480,397],[486,391],[490,388],[494,385],[495,384],[496,384],[498,382],[500,382],[505,379],[509,378],[516,376],[521,374],[523,374]],"dx":-597,"dy":213,"length":758.3202416152316,"timing":[0,20,36,51,68,84,102,118,134,152,168,185,201,218,234,251,269,284,301,318,334,441,453,468,484,501,518,534,553,568,584,601,618,634,652,667]},{"start":[1086,219],"end":[891,247],"points":[[1085,219],[1084,219],[1082,219],[1077,219],[1072,219],[1064,223],[1044,229],[1026,234],[999,238],[971,241],[945,241],[918,241],[890,244],[867,248],[855,254],[851,257],[851,258],[858,262],[877,262],[898,262],[918,261],[936,256],[946,251],[946,249],[946,248],[941,246],[932,246],[921,245],[911,245],[902,245],[895,245],[893,245],[892,246],[892,247],[891,247]],"dx":-195,"dy":28,"length":398.6771321434358,"timing":[0,17,34,50,67,84,100,117,134,150,167,184,200,217,234,250,300,317,334,350,367,384,400,450,468,484,500,517,534,550,567,584,600,650,667]},{"start":[626,161],"end":[212,540],"points":[[627,161],[629,161],[630,164],[630,175],[629,187],[624,202],[619,211],[612,222],[599,232],[589,242],[586,257],[596,266],[611,268],[624,271],[626,272],[622,278],[614,286],[604,296],[576,319],[530,356],[482,396],[433,431],[364,472],[326,487],[303,497],[281,507],[266,513],[250,520],[238,525],[225,533],[218,537],[214,539],[213,540],[212,540]],"dx":-414,"dy":379,"length":655.1823824846412,"timing":[0,19,36,51,69,84,101,118,134,152,168,184,201,218,234,264,272,284,301,318,334,352,368,384,401,418,434,451,468,484,501,518,534,584]},{"start":[1352,391],"end":[833,592],"points":[[1353,391],[1353,392],[1353,393],[1352,393],[1348,394],[1341,396],[1331,398],[1311,400],[1274,402],[1209,402],[1101,402],[990,409],[881,433],[825,455],[793,479],[781,502],[780,520],[782,537],[784,552],[786,562],[786,567],[786,569],[786,570],[788,573],[794,579],[806,586],[816,588],[823,590],[826,591],[829,591],[832,592],[833,592]],"dx":-519,"dy":201,"length":725.9568978507053,"timing":[0,16,36,82,99,116,133,149,166,183,199,216,233,249,266,283,299,316,333,349,366,383,399,416,433,449,466,483,499,516,533,549]},{"start":[833,592],"end":[1114,823],"points":[[834,592],[834,593],[835,593],[836,593],[837,593],[841,590],[853,579],[869,564],[885,551],[897,541],[905,532],[909,524],[913,515],[920,509],[927,505],[931,503],[932,503],[933,505],[944,525],[970,574],[1000,636],[1031,691],[1055,726],[1075,753],[1088,770],[1094,780],[1097,786],[1098,790],[1098,791],[1098,792],[1098,793],[1098,794],[1098,796],[1098,799],[1098,802],[1098,804],[1100,808],[1106,815],[1111,820],[1114,823]],"dx":281,"dy":231,"length":508.5172284189373,"timing":[0,40,53,79,90,103,120,136,153,170,186,203,220,236,253,270,286,303,320,336,353,370,386,403,420,436,453,470,486,503,523,536,553,570,587,603,620,636,653,670]},{"start":[184,796],"end":[389,557],"points":[[184,796],[185,797],[196,794],[215,789],[248,777],[307,758],[388,732],[500,702],[605,674],[696,652],[771,631],[822,610],[841,594],[839,587],[828,581],[799,572],[750,558],[692,542],[639,531],[598,528],[564,529],[535,532],[515,536],[501,539],[488,541],[475,542],[463,545],[453,547],[442,549],[430,552],[416,556],[406,559],[399,560],[395,559],[393,559],[390,558],[389,557]],"dx":205,"dy":-239,"length":1160.2525196009844,"timing":[0,16,66,82,99,116,132,149,166,183,199,216,232,249,266,283,299,316,333,349,366,382,399,416,432,449,466,482,499,516,532,549,566,582,599,616,632]},{"start":[1203,412],"end":[608,765],"points":[[1203,413],[1202,413],[1198,413],[1185,415],[1170,418],[1152,422],[1130,426],[1101,430],[1051,434],[995,441],[946,454],[900,471],[860,493],[831,516],[802,545],[770,584],[744,619],[719,654],[697,681],[683,699],[670,715],[663,727],[660,732],[658,735],[658,736],[657,738],[656,740],[655,742],[651,746],[645,752],[638,756],[630,760],[621,763],[615,764],[613,764],[612,764],[611,764],[610,764],[609,765],[608,765]],"dx":-595,"dy":353,"length":734.0092947029691,"timing":[0,72,84,100,117,134,150,167,184,200,217,234,251,267,284,300,317,334,350,367,384,400,417,434,450,467,484,500,517,534,550,567,584,600,617,634,684,700,717,744]},{"start":[148,738],"end":[648,477],"points":[[148,738],[145,741],[137,742],[130,739],[123,735],[118,731],[118,730],[118,729],[118,725],[125,721],[137,716],[164,706],[209,691],[282,674],[357,658],[429,643],[484,636],[525,629],[548,621],[559,614],[565,606],[571,597],[577,588],[583,579],[589,570],[596,560],[606,546],[615,527],[620,516],[623,509],[625,502],[627,496],[629,492],[633,488],[636,486],[640,484],[643,481],[645,480],[647,477],[648,477]],"dx":500,"dy":-261,"length":663.5847064783208,"timing":[0,17,33,50,67,84,100,117,134,150,167,183,200,217,233,250,267,283,300,317,333,350,367,383,400,417,433,450,467,484,500,517,533,550,567,584,600,617,634,644]},{"start":[844,705],"end":[448,649],"points":[[843,705],[842,703],[840,699],[837,692],[834,685],[829,674],[826,666],[824,659],[823,654],[819,651],[807,644],[778,634],[727,620],[667,607],[608,602],[549,601],[502,603],[466,606],[445,607],[436,609],[434,610],[433,610],[433,611],[433,612],[433,613],[433,616],[434,623],[437,631],[440,638],[443,642],[446,645],[448,648],[448,649]],"dx":-396,"dy":-56,"length":496.73867188107323,"timing":[0,15,31,48,65,81,98,115,131,148,165,181,198,215,231,248,265,281,298,315,331,391,398,427,431,448,465,481,498,515,531,548,565]},{"start":[107,687],"end":[616,426],"points":[[107,688],[109,691],[114,695],[122,699],[128,700],[133,700],[141,698],[156,694],[186,685],[231,672],[304,655],[368,641],[425,630],[487,620],[560,609],[623,593],[654,579],[659,573],[654,567],[643,555],[629,538],[622,522],[617,510],[613,499],[610,489],[608,477],[610,468],[611,459],[612,452],[614,443],[615,435],[615,431],[615,428],[616,427],[616,426]],"dx":509,"dy":-261,"length":736.8644676816588,"timing":[0,17,33,50,67,83,100,116,133,150,166,183,200,217,233,250,268,283,300,316,333,350,366,383,400,416,433,450,467,483,500,516,533,550,563]},{"start":[895,348],"end":[812,800],"points":[[895,347],[895,346],[895,347],[896,347],[898,350],[904,354],[916,360],[931,372],[945,391],[954,414],[960,444],[959,483],[948,522],[928,562],[903,604],[883,641],[867,681],[858,712],[853,735],[852,747],[850,754],[849,756],[848,758],[846,761],[844,765],[841,771],[837,777],[830,784],[823,790],[818,795],[814,798],[813,800],[812,800]],"dx":-83,"dy":452,"length":519.6437906144353,"timing":[0,17,127,140,151,166,183,200,216,233,250,266,283,300,316,333,350,366,383,400,416,433,450,466,483,500,516,533,550,566,583,600,616]},{"start":[811,800],"end":[1236,724],"points":[[812,800],[812,801],[812,800],[813,794],[814,774],[815,743],[815,706],[813,666],[808,626],[802,587],[801,562],[803,550],[811,548],[834,542],[891,538],[959,538],[1047,549],[1108,566],[1146,585],[1166,602],[1173,614],[1174,624],[1171,635],[1168,652],[1169,667],[1180,695],[1194,717],[1209,728],[1218,732],[1221,732],[1222,732],[1223,731],[1229,728],[1235,726],[1237,725],[1237,724],[1236,724]],"dx":425,"dy":-76,"length":805.9621492867617,"timing":[0,17,68,83,100,116,133,150,166,183,200,216,233,250,267,283,300,316,333,350,366,383,400,417,433,450,466,483,500,517,574,583,600,617,633,706,832]},{"start":[1039,224],"end":[108,603],"points":[[1040,224],[1040,225],[1041,225],[1041,226],[1041,227],[1041,229],[1041,243],[1041,263],[1044,282],[1047,295],[1049,303],[1049,306],[1048,308],[1045,310],[1030,316],[1004,324],[962,335],[904,347],[833,368],[751,398],[635,440],[525,471],[416,494],[293,522],[208,547],[160,568],[129,585],[114,595],[110,598],[109,598],[109,600],[108,603]],"dx":-931,"dy":379,"length":1077.763683742188,"timing":[0,13,30,52,63,80,96,113,130,146,163,180,197,213,230,246,263,280,296,313,330,346,363,380,396,413,430,446,463,480,496,513]},{"start":[1694,717],"end":[389,713],"points":[[1694,718],[1695,718],[1695,719],[1681,716],[1654,710],[1596,697],[1499,676],[1363,647],[1217,620],[1092,602],[959,588],[820,585],[710,591],[616,609],[554,629],[514,644],[472,658],[429,669],[390,677],[352,686],[322,694],[308,700],[301,701],[300,702],[299,702],[300,702],[303,705],[313,710],[330,716],[350,718],[367,717],[381,716],[388,714],[389,713]],"dx":-1305,"dy":-4,"length":1520.5846595167552,"timing":[0,56,100,117,133,150,166,183,200,216,233,250,266,283,300,316,333,350,366,383,400,416,433,450,466,533,550,566,583,600,616,633,650,667]},{"start":[815,359],"end":[285,563],"points":[[816,359],[816,360],[817,360],[817,361],[817,364],[818,370],[820,377],[824,387],[832,400],[841,411],[853,420],[858,425],[859,426],[859,427],[859,428],[849,431],[810,441],[759,452],[685,464],[595,477],[507,491],[430,503],[372,516],[334,527],[313,535],[303,541],[302,542],[302,543],[302,544],[301,549],[299,554],[298,559],[296,562],[295,562],[294,562],[292,563],[289,563],[287,563],[285,563]],"dx":-530,"dy":204,"length":687.879336959248,"timing":[0,19,45,83,100,118,133,150,166,183,200,217,233,250,269,283,300,317,333,350,366,383,400,416,433,450,467,778,783,800,816,833,850,867,933,950,968,983,1000]},{"start":[1725,576],"end":[430,874],"points":[[1727,577],[1727,579],[1726,580],[1722,581],[1720,581],[1710,583],[1694,584],[1683,586],[1683,587],[1684,587],[1686,587],[1688,587],[1677,587],[1633,586],[1548,579],[1410,565],[1249,554],[1071,542],[901,540],[776,546],[670,559],[596,575],[552,595],[525,617],[510,641],[500,666],[488,694],[477,723],[469,748],[461,773],[453,793],[447,811],[441,825],[437,838],[434,851],[434,865],[435,871],[436,873],[435,873],[432,873],[430,874]],"dx":-1295,"dy":298,"length":1513.0024203908047,"timing":[0,17,34,51,67,84,100,117,134,153,168,184,234,250,267,284,300,317,334,351,367,384,400,417,434,451,467,484,501,517,534,551,567,584,601,618,634,650,715,717,718]},{"start":[1315,306],"end":[1434,675],"points":[[1316,307],[1318,308],[1317,308],[1308,309],[1283,310],[1246,310],[1192,308],[1128,303],[1062,299],[1006,295],[963,293],[939,292],[925,292],[916,292],[910,293],[907,295],[906,300],[913,317],[939,348],[982,383],[1036,413],[1093,439],[1157,479],[1215,525],[1275,580],[1322,624],[1359,659],[1385,681],[1400,690],[1411,693],[1417,691],[1423,688],[1425,688],[1426,688],[1428,686],[1431,682],[1434,677],[1434,675]],"dx":119,"dy":369,"length":1099.2253005099544,"timing":[0,17,37,51,67,84,100,117,134,150,167,184,200,217,234,250,267,284,300,317,334,350,367,384,400,417,434,450,467,484,500,517,534,609,650,667,684,701]},{"start":[1392,333],"end":[446,661],"points":[[1393,333],[1398,333],[1403,331],[1408,331],[1409,330],[1408,330],[1407,330],[1406,330],[1403,332],[1395,334],[1378,339],[1345,349],[1297,362],[1231,378],[1139,397],[1025,417],[895,440],[765,471],[671,497],[578,524],[519,547],[479,566],[456,582],[443,596],[439,603],[438,607],[437,610],[436,612],[435,617],[435,623],[435,627],[435,630],[435,633],[439,639],[442,645],[445,650],[445,653],[446,656],[446,660],[446,661]],"dx":-946,"dy":328,"length":1095.5359783022323,"timing":[0,16,33,49,66,83,148,160,167,183,199,216,233,249,266,283,300,317,333,351,366,383,399,416,433,450,466,483,499,516,533,549,566,583,599,616,633,649,666,683]},{"start":[106,246],"end":[420,696],"points":[[106,246],[107,246],[107,247],[106,247],[107,248],[114,252],[126,260],[145,270],[180,287],[228,306],[287,326],[352,351],[431,377],[491,394],[535,408],[564,421],[582,435],[588,447],[593,460],[594,477],[593,496],[586,519],[572,546],[553,571],[534,593],[514,617],[498,637],[479,657],[463,671],[453,680],[446,687],[443,690],[441,692],[441,693],[440,693],[439,693],[437,693],[435,693],[434,693],[433,693],[432,693],[430,694],[426,695],[423,695],[420,696]],"dx":314,"dy":450,"length":854.1020316669856,"timing":[0,17,33,50,66,83,100,116,133,150,167,183,200,216,233,250,266,283,300,317,333,350,367,383,400,417,433,450,467,483,500,516,533,551,567,633,650,667,683,755,767,783,800,817,833]},{"start":[218,230],"end":[497,303],"points":[[219,230],[219,231],[220,232],[221,232],[224,235],[229,238],[234,244],[241,252],[253,265],[280,289],[320,321],[373,363],[437,403],[498,431],[540,445],[567,451],[573,452],[573,451],[573,450],[565,440],[548,422],[529,404],[513,385],[505,373],[502,361],[500,349],[499,338],[498,331],[497,322],[497,315],[497,311],[497,307],[497,303]],"dx":279,"dy":73,"length":600.9041101527404,"timing":[0,49,65,84,100,115,132,149,165,182,199,215,232,249,265,282,299,316,332,350,366,382,399,415,432,449,465,482,499,516,532,549,565]},{"start":[230,735],"end":[1090,849],"points":[[230,736],[231,736],[234,736],[253,726],[295,712],[355,694],[430,681],[495,674],[551,672],[594,672],[640,678],[697,689],[749,698],[807,709],[857,724],[903,740],[949,758],[1002,778],[1045,794],[1077,806],[1091,813],[1097,817],[1098,818],[1099,819],[1099,822],[1099,824],[1099,825],[1098,825],[1098,827],[1098,833],[1097,836],[1096,840],[1095,842],[1094,844],[1091,847],[1090,849]],"dx":860,"dy":114,"length":935.0964829774965,"timing":[0,25,82,100,115,132,148,165,182,198,215,232,248,265,282,298,315,332,349,365,382,399,415,465,482,498,526,532,549,566,582,600,615,632,648,665]},{"start":[488,533],"end":[1328,291],"points":[[488,532],[489,532],[490,532],[506,524],[561,500],[646,463],[769,416],[900,375],[999,347],[1083,327],[1128,315],[1153,306],[1165,302],[1172,299],[1177,296],[1184,290],[1189,286],[1190,284],[1191,284],[1193,283],[1196,281],[1199,280],[1205,278],[1215,276],[1226,273],[1235,272],[1243,272],[1251,273],[1263,275],[1277,278],[1294,283],[1303,286],[1308,287],[1310,288],[1313,288],[1314,288],[1315,288],[1316,288],[1318,289],[1321,290],[1324,290],[1325,290],[1326,290],[1327,291],[1328,291]],"dx":840,"dy":-242,"length":890.7537883387103,"timing":[0,193,196,211,228,244,261,278,294,311,328,344,361,378,394,411,428,444,461,478,495,511,528,544,561,578,594,611,628,644,661,678,694,711,728,745,823,828,845,861,878,928,945,961,978]},{"start":[1695,529],"end":[462,356],"points":[[1695,530],[1694,530],[1692,529],[1681,525],[1660,521],[1633,517],[1592,507],[1534,491],[1449,466],[1342,433],[1236,404],[1131,380],[982,346],[833,317],[692,293],[580,280],[514,281],[474,287],[453,292],[443,295],[440,297],[437,300],[433,304],[427,308],[420,315],[417,318],[417,320],[417,326],[422,334],[428,341],[435,346],[443,350],[452,354],[458,356],[461,357],[462,356]],"dx":-1233,"dy":-173,"length":1382.8546451415252,"timing":[0,32,36,51,67,84,101,117,134,151,168,184,201,218,234,251,268,284,301,318,334,351,368,384,401,418,434,451,467,485,501,517,535,551,568,584]},{"start":[1805,470],"end":[376,229],"points":[[1806,471],[1806,472],[1805,472],[1791,478],[1769,485],[1734,496],[1687,508],[1632,522],[1565,533],[1472,541],[1380,548],[1253,550],[1141,549],[1017,546],[902,535],[817,518],[759,496],[708,470],[666,448],[630,426],[598,405],[565,378],[541,354],[514,330],[489,308],[466,294],[451,284],[440,275],[433,268],[428,263],[425,260],[424,257],[421,254],[414,248],[404,242],[392,236],[384,233],[380,231],[377,229],[376,229]],"dx":-1429,"dy":-241,"length":1533.9041387572556,"timing":[0,58,67,83,100,117,133,150,167,184,200,217,233,250,267,283,300,317,333,350,367,383,400,417,433,450,467,483,500,517,533,550,567,583,600,617,633,650,700,717]},{"start":[1420,205],"end":[395,378],"points":[[1420,206],[1421,206],[1422,207],[1422,208],[1422,207],[1421,206],[1419,204],[1420,204],[1420,206],[1409,212],[1383,221],[1340,235],[1274,252],[1167,272],[1049,287],[942,297],[850,303],[779,304],[729,305],[686,304],[660,302],[637,302],[620,302],[612,303],[607,304],[600,306],[591,309],[575,315],[554,323],[534,332],[517,340],[501,346],[487,353],[476,358],[463,363],[448,369],[432,373],[419,376],[409,378],[404,378],[401,378],[398,378],[396,378],[395,378]],"dx":-1025,"dy":173,"length":1061.7942174821394,"timing":[0,16,33,50,170,183,200,216,233,250,266,283,300,316,333,350,366,383,400,416,433,450,466,483,500,516,533,550,566,583,600,616,633,650,666,683,700,716,733,751,766,783,800,816]},{"start":[1027,815],"end":[985,450],"points":[[1027,815],[1025,815],[1023,815],[1024,816],[1025,816],[1027,815],[1032,815],[1037,815],[1045,815],[1053,816],[1061,816],[1065,816],[1067,816],[1068,816],[1068,807],[1064,785],[1053,756],[1041,724],[1023,687],[1009,657],[995,632],[989,612],[986,590],[985,571],[986,555],[988,538],[988,520],[987,503],[985,486],[984,473],[984,461],[985,454],[985,451],[985,450]],"dx":-42,"dy":-365,"length":432.6855063709076,"timing":[0,17,33,83,100,150,168,183,200,217,233,250,267,283,300,317,333,350,367,383,400,417,433,450,467,483,500,517,534,550,567,583,600,617]},{"start":[1283,564],"end":[1776,253],"points":[[1283,564],[1284,565],[1284,564],[1280,561],[1262,555],[1233,548],[1183,540],[1122,537],[1064,543],[1014,546],[991,547],[987,547],[991,547],[1014,543],[1050,528],[1110,508],[1175,484],[1248,454],[1339,419],[1428,385],[1499,360],[1564,336],[1626,311],[1668,294],[1710,277],[1740,266],[1757,261],[1767,257],[1773,255],[1774,254],[1775,254],[1776,253]],"dx":493,"dy":-311,"length":1146.556855443095,"timing":[0,17,337,351,367,384,400,417,434,450,467,484,500,517,534,550,567,584,600,617,634,651,667,684,700,717,734,750,767,784,840,850]},{"start":[1171,225],"end":[1533,365],"points":[[1171,225],[1172,225],[1172,226],[1173,226],[1174,228],[1175,230],[1175,231],[1177,239],[1179,249],[1180,265],[1181,288],[1184,314],[1198,351],[1225,383],[1259,405],[1308,424],[1343,428],[1360,428],[1370,426],[1379,424],[1389,421],[1403,417],[1423,410],[1442,402],[1463,393],[1481,386],[1497,380],[1511,374],[1524,369],[1532,366],[1533,366],[1533,365]],"dx":362,"dy":140,"length":504.02597072184454,"timing":[0,16,34,50,66,83,100,116,133,150,166,183,200,216,233,250,266,283,299,316,333,349,366,383,399,416,433,449,466,483,500,516]},{"start":[1204,304],"end":[437,781],"points":[[1204,305],[1205,305],[1206,306],[1208,308],[1216,313],[1224,319],[1227,322],[1227,323],[1220,327],[1200,338],[1149,356],[1091,384],[1025,417],[945,457],[870,492],[813,522],[761,550],[724,570],[699,588],[677,605],[658,624],[642,642],[622,662],[604,679],[587,692],[569,706],[549,721],[531,734],[516,744],[503,753],[488,762],[474,770],[462,774],[454,775],[448,777],[444,778],[441,779],[438,781],[437,781]],"dx":-767,"dy":477,"length":951.2208738439024,"timing":[0,52,61,77,93,110,127,148,161,177,193,210,227,243,260,277,293,310,327,343,360,377,393,410,427,444,460,477,493,510,527,543,560,577,593,610,627,643,660]},{"start":[990,797],"end":[544,694],"points":[[991,797],[993,798],[996,799],[997,800],[1003,804],[1008,808],[1010,808],[1009,808],[1009,807],[1009,806],[1003,797],[982,771],[945,739],[877,698],[794,656],[703,618],[608,595],[548,592],[501,595],[469,603],[454,609],[444,615],[437,621],[430,627],[425,634],[421,639],[420,643],[420,645],[424,649],[431,656],[445,667],[462,677],[481,684],[503,689],[526,693],[539,694],[543,694],[544,694]],"dx":-446,"dy":-103,"length":832.1863403538365,"timing":[0,15,32,48,65,82,99,155,246,251,265,282,299,315,332,348,365,382,398,415,432,448,465,482,498,515,532,549,566,582,599,615,632,649,665,682,699,710]},{"start":[1052,706],"end":[748,428],"points":[[1052,707],[1052,708],[1052,709],[1051,709],[1051,708],[1050,708],[1050,707],[1050,706],[1049,705],[1049,704],[1048,702],[1047,700],[1044,696],[1036,691],[1026,686],[1015,679],[1001,670],[987,660],[966,643],[934,619],[894,590],[857,565],[829,543],[814,527],[801,512],[794,498],[788,487],[785,478],[779,466],[769,449],[759,439],[751,431],[748,428]],"dx":-304,"dy":-278,"length":425.3636410399646,"timing":[0,17,33,107,126,133,206,219,233,250,267,283,300,316,333,350,367,383,400,416,433,450,467,483,500,516,533,550,566,583,600,616,633]},{"start":[412,234],"end":[233,593],"points":[[412,234],[410,237],[404,246],[389,270],[338,348],[297,408],[266,458],[242,494],[230,519],[223,538],[216,558],[212,569],[211,574],[210,578],[210,579],[210,580],[210,581],[210,582],[210,583],[212,584],[213,585],[215,585],[217,585],[219,585],[221,585],[223,585],[227,586],[228,586],[229,587],[231,588],[232,590],[233,590],[233,591],[233,592],[233,593]],"dx":-179,"dy":359,"length":434.4403525343266,"timing":[0,630,635,650,666,683,700,717,733,749,766,783,800,816,833,849,869,920,934,949,966,983,999,1016,1033,1050,1066,1083,1099,1116,1133,1149,1166,1182,1199]},{"start":[233,593],"end":[1358,196],"points":[[235,592],[243,587],[269,570],[354,523],[447,471],[537,422],[683,353],[756,320],[805,302],[975,262],[1067,249],[1119,242],[1158,238],[1205,234],[1233,232],[1253,230],[1277,230],[1309,229],[1325,228],[1340,226],[1356,226],[1364,225],[1369,225],[1372,224],[1374,223],[1375,222],[1376,222],[1376,219],[1376,218],[1377,216],[1377,214],[1377,211],[1377,210],[1377,209],[1375,207],[1370,204],[1367,202],[1364,200],[1362,198],[1360,197],[1358,196]],"dx":1125,"dy":-397,"length":1255.4823257500411,"timing":[0,7,23,39,56,72,89,106,122,139,156,172,189,206,222,239,255,272,289,306,322,339,355,372,389,406,422,439,455,472,489,505,522,539,555,572,589,605,622,638,655]},{"start":[63,370],"end":[1208,551],"points":[[67,370],[72,371],[90,374],[124,379],[232,395],[319,408],[431,430],[530,451],[677,486],[772,502],[846,510],[903,518],[965,528],[999,534],[1022,538],[1055,546],[1074,551],[1093,557],[1112,561],[1136,566],[1145,567],[1152,568],[1157,568],[1158,568],[1159,568],[1160,569],[1161,569],[1162,570],[1163,570],[1164,570],[1166,570],[1168,570],[1172,570],[1180,567],[1186,564],[1194,559],[1199,557],[1204,554],[1206,554],[1206,553],[1207,552],[1208,551]],"dx":1145,"dy":181,"length":1166.4545539118405,"timing":[0,9,26,42,59,76,92,109,125,142,159,175,193,209,226,242,259,276,292,309,325,342,359,376,392,409,432,447,458,475,492,508,525,542,558,575,591,608,625,642,658,675]},{"start":[543,336],"end":[99,532],"points":[[543,336],[541,336],[540,337],[535,340],[529,342],[517,348],[506,353],[491,359],[459,375],[419,395],[378,414],[340,433],[276,471],[221,495],[183,514],[145,530],[128,538],[118,542],[112,544],[108,545],[105,545],[103,545],[99,545],[97,545],[94,546],[92,546],[87,546],[85,546],[84,546],[83,546],[83,545],[83,544],[83,542],[84,541],[85,540],[86,539],[88,538],[89,538],[92,536],[93,536],[95,534],[96,534],[97,533],[98,532],[99,532]],"dx":-444,"dy":196,"length":532.4624353959399,"timing":[0,621,631,650,665,681,698,714,731,748,765,781,798,814,830,847,863,880,897,913,930,947,964,981,997,1014,1030,1047,1064,1089,1131,1147,1164,1192,1214,1231,1247,1264,1280,1297,1314,1330,1347,1364,1380]},{"start":[1202,404],"end":[406,640],"points":[[1202,404],[1201,404],[1190,403],[1154,404],[1097,410],[1012,418],[950,424],[868,439],[823,448],[777,458],[740,466],[693,478],[656,488],[621,502],[595,510],[538,534],[512,543],[485,556],[456,571],[436,581],[414,595],[392,606],[371,619],[367,622],[364,624],[364,625],[362,626],[361,626],[361,627],[361,628],[361,629],[364,630],[370,632],[376,634],[384,635],[390,637],[396,638],[399,638],[401,639],[404,640],[405,640],[406,640]],"dx":-796,"dy":236,"length":931.1849135115978,"timing":[0,632,650,668,683,699,716,732,749,766,782,799,816,833,849,866,883,899,916,933,949,966,983,999,1016,1033,1049,1099,1122,1166,1187,1216,1233,1249,1266,1282,1299,1316,1332,1349,1366,1416]},{"start":[132,549],"end":[761,347],"points":[[132,549],[134,549],[140,546],[151,542],[177,534],[198,525],[247,498],[277,477],[311,459],[349,442],[400,423],[436,413],[462,405],[488,397],[528,386],[545,379],[564,374],[589,368],[600,366],[613,364],[629,363],[652,360],[668,359],[681,357],[695,356],[705,355],[715,354],[723,354],[736,353],[740,353],[744,353],[748,352],[750,352],[751,351],[752,351],[753,351],[755,351],[756,350],[757,350],[759,349],[760,348],[760,347],[761,347]],"dx":629,"dy":-202,"length":670.0681977330205,"timing":[0,477,484,500,517,534,550,567,584,600,617,634,650,667,684,700,717,734,750,767,783,800,816,833,850,866,883,900,916,933,950,966,983,1000,1017,1033,1050,1067,1083,1100,1116,1137,1150]},{"start":[897,175],"end":[148,258],"points":[[897,176],[897,179],[896,184],[896,191],[901,222],[908,254],[915,290],[927,337],[930,361],[933,380],[937,404],[940,434],[941,451],[942,466],[944,475],[944,478],[942,478],[936,478],[921,470],[852,445],[763,400],[693,374],[614,347],[518,327],[468,322],[429,322],[371,323],[332,329],[304,334],[264,342],[188,356],[135,359],[82,358],[52,354],[28,346],[24,343],[20,338],[17,334],[17,333],[16,331],[16,330],[16,326],[17,321],[21,315],[26,310],[31,306],[34,303],[39,302],[49,298],[56,298],[63,296],[70,295],[78,295],[83,295],[86,294],[92,293],[96,291],[100,290],[104,289],[111,286],[119,281],[125,275],[131,271],[136,268],[140,265],[143,263],[145,261],[147,260],[148,259],[148,258]],"dx":-749,"dy":83,"length":1437.362757255679,"timing":[0,16,33,50,66,83,99,116,132,149,166,182,199,216,232,249,322,333,349,366,383,399,416,433,449,466,483,499,516,532,549,566,583,599,616,632,651,666,683,699,716,732,749,766,782,799,816,832,849,866,882,899,915,932,949,965,983,999,1015,1032,1049,1067,1082,1099,1115,1132,1149,1165,1182,1200]},{"start":[1039,570],"end":[1114,330],"points":[[1037,569],[1036,568],[1036,566],[1031,561],[1023,554],[1007,544],[992,537],[985,531],[983,529],[983,527],[986,521],[990,518],[997,510],[1009,500],[1020,492],[1028,485],[1038,474],[1055,458],[1085,434],[1108,413],[1124,394],[1131,378],[1136,356],[1137,345],[1137,338],[1133,332],[1130,329],[1129,327],[1128,326],[1126,326],[1125,325],[1124,325],[1122,325],[1120,326],[1118,327],[1116,329],[1115,330],[1114,330]],"dx":75,"dy":-240,"length":354.6927822837355,"timing":[0,12,28,45,62,79,95,112,129,145,163,179,195,212,228,245,262,278,295,312,329,345,362,378,395,413,428,445,463,478,495,513,528,545,563,578,595,612]},{"start":[786,326],"end":[378,502],"points":[[786,327],[785,328],[784,330],[783,333],[779,337],[772,342],[760,350],[738,356],[710,364],[642,383],[580,402],[517,419],[471,434],[432,441],[409,449],[392,456],[376,462],[364,470],[353,480],[348,486],[344,490],[343,495],[342,499],[342,500],[342,501],[342,502],[343,504],[344,505],[348,505],[352,505],[359,505],[364,504],[369,503],[376,502],[377,502],[378,502]],"dx":-408,"dy":176,"length":528.8501216056429,"timing":[0,7,24,40,57,73,90,106,123,139,156,174,189,206,223,239,256,273,290,306,323,340,356,373,389,406,423,440,456,473,489,506,523,539,556,573]},{"start":[1100,434],"end":[212,537],"points":[[1097,434],[1092,435],[1084,435],[1064,435],[964,435],[867,446],[750,465],[620,487],[520,510],[438,525],[377,538],[318,554],[295,562],[276,569],[258,578],[244,586],[228,598],[220,610],[214,618],[207,626],[203,627],[200,629],[202,628],[204,626],[210,618],[216,606],[220,594],[224,584],[226,571],[228,567],[228,564],[228,561],[226,558],[225,554],[222,551],[220,550],[218,546],[214,541],[213,538],[212,537]],"dx":-888,"dy":103,"length":1039.3890070358102,"timing":[0,7,21,37,54,70,87,104,121,137,154,170,187,204,220,237,254,270,287,304,320,337,360,370,387,404,420,437,454,470,487,504,521,537,553,570,587,604,620,638]},{"start":[843,782],"end":[864,477],"points":[[843,782],[843,781],[843,780],[844,776],[846,771],[847,765],[848,753],[848,737],[841,717],[832,699],[825,690],[807,668],[803,662],[802,659],[801,658],[801,656],[804,650],[814,636],[819,624],[826,611],[830,603],[836,592],[842,579],[845,569],[849,558],[851,547],[854,537],[856,529],[857,523],[858,516],[859,510],[860,504],[861,497],[861,487],[862,481],[862,478],[862,477],[863,477],[864,477]],"dx":21,"dy":-305,"length":334.51633266975654,"timing":[0,74,83,100,116,133,150,166,183,199,216,233,251,266,283,299,316,333,350,366,383,400,416,433,451,466,483,500,517,533,550,566,583,600,616,633,652,732,883]},{"start":[987,488],"end":[963,652],"points":[[987,488],[987,490],[987,494],[987,502],[987,512],[994,528],[1000,540],[1006,550],[1011,561],[1017,573],[1022,583],[1026,593],[1033,612],[1036,623],[1038,633],[1039,645],[1038,656],[1035,662],[1033,668],[1030,671],[1030,672],[1026,673],[1025,674],[1024,674],[1020,674],[1014,674],[1008,673],[1002,670],[989,667],[977,662],[971,658],[967,656],[966,655],[964,653],[963,653],[963,652]],"dx":-24,"dy":164,"length":270.7991186450137,"timing":[0,737,751,767,783,800,817,833,850,867,883,900,917,933,950,967,983,1000,1017,1034,1050,1067,1085,1100,1117,1134,1150,1167,1184,1200,1218,1234,1254,1270,1284,1301]},{"start":[460,276],"end":[1243,368],"points":[[469,279],[492,286],[514,296],[531,308],[543,324],[543,340],[537,359],[521,382],[485,408],[455,426],[444,440],[433,458],[414,487],[385,527],[376,549],[370,571],[365,589],[359,606],[358,624],[363,646],[375,663],[390,673],[404,675],[432,676],[484,669],[549,659],[650,642],[753,614],[863,586],[1037,549],[1128,540],[1201,540],[1251,533],[1278,526],[1288,523],[1295,521],[1296,520],[1296,519],[1296,517],[1296,514],[1292,508],[1284,497],[1267,474],[1253,456],[1243,437],[1238,425],[1236,414],[1236,409],[1236,404],[1236,401],[1236,398],[1237,396],[1237,392],[1239,388],[1240,384],[1242,378],[1243,372],[1243,369],[1243,368]],"dx":783,"dy":92,"length":1612.051711743679,"timing":[0,17,33,50,67,83,100,117,135,150,167,183,200,217,233,250,267,284,302,317,334,350,367,385,400,417,435,450,467,484,501,517,534,550,567,584,600,623,634,651,668,684,701,717,734,751,767,784,801,817,834,851,867,884,902,917,934,951,968]},{"start":[304,716],"end":[918,436],"points":[[304,716],[305,716],[306,715],[312,712],[322,704],[332,697],[342,691],[355,685],[375,679],[402,666],[441,652],[525,629],[574,615],[603,605],[627,596],[646,588],[667,580],[692,569],[716,556],[735,547],[761,536],[777,529],[796,522],[810,515],[822,507],[829,501],[835,494],[841,488],[851,477],[858,472],[864,465],[870,458],[874,453],[877,448],[880,442],[884,438],[885,436],[887,435],[890,434],[892,432],[893,431],[894,431],[895,430],[897,430],[902,430],[907,430],[911,432],[916,434],[917,435],[918,436]],"dx":614,"dy":-280,"length":693.9050920366695,"timing":[0,35,49,66,83,99,117,133,149,166,182,199,216,234,249,266,283,299,316,333,349,366,385,399,416,434,449,466,484,500,516,533,550,566,583,600,616,633,650,666,683,700,717,733,750,767,783,800,817,829]},{"start":[1471,722],"end":[365,691],"points":[[1416,716],[1334,714],[1216,702],[1087,690],[965,672],[814,650],[665,629],[499,612],[453,604],[439,602],[433,602],[428,604],[424,607],[409,611],[396,613],[389,616],[384,619],[377,625],[368,629],[359,635],[353,639],[348,644],[345,653],[343,660],[342,667],[342,672],[345,676],[349,678],[350,680],[351,681],[357,686],[362,689],[363,690],[364,691],[365,691]],"dx":-1106,"dy":-31,"length":1146.38457753376,"timing":[0,16,33,50,66,83,100,116,133,151,166,183,200,216,233,250,266,283,301,317,333,350,367,383,400,417,433,450,467,483,500,517,533,586,600]},{"start":[365,691],"end":[1344,417],"points":[[366,691],[368,690],[370,689],[375,687],[379,686],[390,686],[401,686],[412,685],[427,684],[448,684],[478,686],[521,690],[587,692],[670,697],[739,696],[836,686],[918,670],[998,652],[1097,634],[1184,617],[1257,600],[1339,584],[1367,576],[1383,567],[1395,559],[1413,548],[1431,540],[1446,531],[1448,527],[1449,522],[1449,515],[1449,506],[1446,495],[1435,480],[1432,477],[1421,465],[1410,454],[1397,446],[1380,439],[1363,433],[1355,428],[1349,423],[1347,421],[1346,421],[1346,420],[1345,419],[1344,418],[1344,417]],"dx":979,"dy":-274,"length":1274.7434886828428,"timing":[0,16,29,46,62,79,96,114,129,146,163,179,196,213,229,246,263,280,296,313,330,346,363,379,396,413,430,446,463,481,496,513,530,548,563,580,596,613,630,646,663,680,697,714,730,746,763,780]},{"start":[1211,266],"end":[869,734],"points":[[1208,269],[1193,287],[1129,353],[1052,415],[960,493],[909,535],[868,579],[841,609],[824,630],[812,648],[800,676],[797,687],[790,713],[788,725],[787,730],[786,735],[787,744],[792,760],[799,774],[805,780],[810,781],[811,782],[815,782],[824,782],[834,782],[843,776],[853,769],[859,762],[865,756],[867,754],[868,753],[869,752],[869,750],[870,747],[871,745],[871,741],[871,737],[869,734]],"dx":-342,"dy":468,"length":786.0738731821255,"timing":[0,13,29,46,63,79,96,112,129,146,163,179,196,212,229,246,262,279,296,312,329,346,362,379,396,412,429,446,464,479,498,512,529,546,563,580,597,613]},{"start":[194,424],"end":[1392,610],"points":[[196,424],[209,427],[249,435],[297,441],[370,444],[391,437],[404,426],[410,412],[410,394],[403,370],[389,338],[376,322],[363,306],[350,291],[336,272],[320,252],[305,236],[296,226],[293,223],[291,220],[289,215],[289,211],[288,211],[288,212],[292,215],[309,232],[328,248],[367,274],[461,330],[557,371],[689,424],[818,479],[941,545],[1031,596],[1108,651],[1138,678],[1157,700],[1168,717],[1174,726],[1176,731],[1178,735],[1182,738],[1186,740],[1191,743],[1204,746],[1220,746],[1235,744],[1252,738],[1280,723],[1300,705],[1319,686],[1342,656],[1361,638],[1372,628],[1379,621],[1382,616],[1384,614],[1386,613],[1387,612],[1388,611],[1389,611],[1391,610],[1392,610]],"dx":1198,"dy":186,"length":1787.9032775539065,"timing":[0,13,29,46,63,79,96,112,129,146,163,179,196,213,229,246,264,279,296,314,329,346,363,533,546,563,580,598,613,630,646,663,680,696,713,730,748,763,780,797,813,830,846,863,880,897,913,930,947,963,980,997,1013,1030,1047,1063,1080,1097,1114,1130,1147,1164,1180]},{"start":[282,181],"end":[1257,753],"points":[[282,181],[288,185],[301,192],[326,201],[398,230],[501,281],[610,338],[796,407],[884,456],[968,515],[1032,583],[1086,629],[1110,657],[1126,674],[1139,686],[1142,690],[1142,691],[1143,693],[1145,699],[1150,705],[1153,707],[1155,708],[1166,713],[1175,716],[1186,722],[1203,728],[1221,737],[1237,744],[1245,747],[1249,749],[1250,749],[1251,749],[1252,750],[1253,751],[1254,752],[1256,753],[1257,753]],"dx":975,"dy":572,"length":1148.52110880181,"timing":[0,214,222,233,250,267,283,300,317,334,350,367,385,400,417,433,466,474,483,500,517,568,584,600,617,634,650,668,684,701,724,740,756,767,785,800,818]},{"start":[1568,245],"end":[1182,283],"points":[[1569,245],[1568,245],[1553,250],[1518,261],[1471,285],[1413,316],[1364,340],[1326,349],[1277,358],[1241,364],[1211,371],[1188,375],[1166,377],[1142,378],[1119,380],[1104,382],[1098,382],[1097,382],[1100,369],[1108,355],[1120,342],[1132,331],[1141,323],[1152,314],[1158,308],[1166,302],[1171,297],[1176,293],[1177,291],[1178,291],[1180,289],[1181,285],[1182,283]],"dx":-386,"dy":38,"length":631.5228591939901,"timing":[0,48,63,80,97,114,130,147,164,180,198,214,230,247,264,281,297,315,364,381,397,414,430,447,464,481,497,514,531,547,648,665,681]},{"start":[1289,510],"end":[860,274],"points":[[1289,510],[1288,511],[1288,511],[1286,514],[1284,515],[1283,518],[1280,520],[1276,523],[1266,525],[1255,525],[1243,525],[1223,524],[1206,519],[1186,515],[1166,511],[1149,507],[1136,504],[1123,502],[1118,502],[1116,502],[1110,504],[1098,508],[1083,512],[1062,515],[1024,512],[999,502],[962,482],[922,448],[908,418],[896,391],[883,368],[879,350],[880,336],[884,321],[888,307],[891,296],[892,291],[891,287],[889,284],[885,281],[882,278],[879,277],[876,276],[873,276],[871,276],[869,276],[866,275],[865,275],[864,275],[863,275],[862,275],[862,274],[860,274]],"dx":-429,"dy":-236,"length":605.6201623610596,"timing":[0,114,165,181,198,215,231,248,265,281,298,315,331,348,365,381,398,415,431,448,465,481,498,515,531,548,565,581,598,615,631,648,665,681,698,715,731,748,765,781,798,815,831,848,864,881,898,914,931,948,964,1014,1031]},{"start":[1158,181],"end":[269,556],"points":[[1156,181],[1154,181],[1150,184],[1140,188],[1123,197],[1086,217],[1026,244],[884,293],[763,345],[626,378],[506,410],[419,445],[388,465],[373,485],[368,495],[366,505],[363,516],[356,528],[350,537],[346,542],[343,545],[343,545],[338,545],[329,542],[319,541],[310,542],[302,545],[297,548],[294,551],[292,551],[290,552],[287,553],[285,554],[282,554],[280,555],[278,555],[274,555],[272,556],[270,556],[269,556]],"dx":-889,"dy":375,"length":994.0083723443685,"timing":[0,15,32,49,66,82,99,115,132,149,165,182,199,217,233,250,265,282,299,315,332,382,399,416,432,449,465,482,499,517,532,549,565,582,599,615,632,649,665,682]},{"start":[133,155],"end":[793,617],"points":[[136,158],[166,182],[270,248],[389,321],[488,388],[565,435],[608,467],[621,480],[628,491],[633,504],[644,519],[659,534],[676,546],[699,563],[706,565],[707,566],[712,569],[729,574],[746,577],[759,578],[769,579],[773,579],[775,579],[779,579],[786,580],[789,582],[793,585],[798,589],[802,595],[804,600],[806,604],[806,606],[803,609],[800,611],[796,615],[793,617]],"dx":660,"dy":462,"length":839.9822544524594,"timing":[0,9,26,43,59,76,94,109,126,142,159,176,192,209,226,242,292,309,326,342,359,376,392,409,426,444,459,476,492,509,526,542,559,575,592,609]},{"start":[1293,204],"end":[521,194],"points":[[1293,205],[1290,206],[1286,210],[1283,213],[1279,215],[1278,216],[1273,219],[1265,222],[1253,227],[1222,238],[1205,247],[1189,259],[1173,273],[1153,291],[1120,318],[1064,367],[1025,403],[970,440],[917,457],[850,470],[781,475],[694,465],[654,455],[631,438],[605,410],[585,377],[564,330],[539,278],[526,258],[513,238],[501,218],[493,207],[490,201],[489,198],[489,197],[489,194],[489,191],[490,189],[493,186],[496,185],[502,184],[503,184],[507,184],[509,188],[513,190],[515,191],[518,194],[520,194],[521,194]],"dx":-772,"dy":-10,"length":1080.1492781330126,"timing":[0,7,23,40,56,73,90,106,123,140,156,173,190,206,223,241,256,273,289,306,323,339,356,373,389,406,423,439,456,473,489,506,523,540,556,573,589,606,623,639,656,673,689,706,723,739,756,773,789]},{"start":[1065,278],"end":[373,565],"points":[[1064,279],[1063,281],[1053,290],[1029,305],[978,329],[908,348],[818,366],[681,382],[470,403],[379,415],[346,431],[339,443],[339,454],[342,466],[346,478],[349,492],[349,503],[347,514],[344,527],[341,541],[339,551],[337,558],[335,562],[335,565],[335,566],[336,569],[339,571],[342,574],[347,575],[350,575],[353,575],[355,573],[359,571],[363,568],[369,565],[373,565],[373,565]],"dx":-692,"dy":287,"length":928.244310394963,"timing":[0,8,22,39,56,72,89,106,122,139,156,172,189,206,223,239,256,273,289,306,322,339,356,372,389,406,422,439,456,472,489,505,522,539,556,573,590]},{"start":[377,565],"end":[1173,257],"points":[[379,563],[379,561],[381,560],[386,555],[413,535],[451,504],[513,465],[600,417],[702,368],[809,317],[950,233],[1039,190],[1116,157],[1163,144],[1198,141],[1209,141],[1212,142],[1213,145],[1216,155],[1221,165],[1228,173],[1235,180],[1238,184],[1239,188],[1236,204],[1227,220],[1215,237],[1202,249],[1191,258],[1186,261],[1183,261],[1180,263],[1179,263],[1176,262],[1174,260],[1173,257]],"dx":796,"dy":-308,"length":1107.4213244000202,"timing":[0,7,21,37,55,70,87,104,121,137,154,170,187,204,220,237,254,270,287,304,321,337,354,370,387,404,420,437,454,470,487,504,520,537,553,570]},{"start":[328,238],"end":[1170,352],"points":[[328,238],[329,239],[331,241],[334,242],[335,243],[339,245],[351,249],[371,256],[421,272],[463,279],[496,291],[527,303],[563,316],[586,328],[608,347],[612,358],[606,370],[593,388],[576,405],[549,421],[497,444],[483,456],[478,461],[478,462],[479,463],[490,461],[511,455],[566,436],[640,414],[719,383],[803,344],[883,324],[941,319],[954,316],[961,315],[967,315],[977,315],[990,315],[1004,315],[1022,318],[1026,319],[1032,321],[1042,325],[1054,328],[1066,330],[1076,334],[1083,338],[1086,340],[1089,342],[1096,344],[1103,344],[1111,346],[1117,347],[1123,348],[1126,349],[1133,349],[1146,351],[1156,351],[1166,352],[1170,352]],"dx":842,"dy":114,"length":1213.463401304309,"timing":[0,16,32,49,66,82,99,115,132,149,165,182,199,215,232,249,265,282,299,315,332,349,366,382,399,416,432,448,465,482,498,515,532,549,565,582,598,615,632,648,665,682,699,715,732,749,765,782,798,815,832,848,865,882,898,915,932,948,965,982]},{"start":[1240,547],"end":[166,423],"points":[[1239,547],[1233,551],[1223,555],[1205,559],[1170,555],[1082,529],[963,483],[804,432],[557,374],[453,361],[424,359],[423,360],[423,364],[425,376],[423,389],[408,412],[389,429],[355,449],[326,464],[291,481],[275,488],[266,489],[256,486],[243,481],[229,475],[216,468],[203,460],[185,443],[177,435],[174,432],[172,429],[169,428],[169,427],[166,425],[166,424],[166,423]],"dx":-1074,"dy":-124,"length":1190.096297758908,"timing":[0,7,24,40,57,74,90,107,125,140,157,173,190,207,224,240,257,273,290,307,323,340,357,374,390,407,424,441,457,473,490,507,523,540,557,664]},{"start":[555,325],"end":[1018,390],"points":[[554,325],[552,327],[552,328],[550,329],[550,330],[549,332],[549,334],[549,334],[552,338],[566,346],[599,359],[651,374],[743,393],[839,415],[971,435],[1041,444],[1083,443],[1101,441],[1104,438],[1105,435],[1105,434],[1105,431],[1105,431],[1105,428],[1105,425],[1104,423],[1100,420],[1089,415],[1066,405],[1051,401],[1039,398],[1031,394],[1026,393],[1023,391],[1020,391],[1018,390]],"dx":463,"dy":65,"length":691.2313943555586,"timing":[0,70,84,100,117,134,152,167,184,200,217,234,250,267,283,300,317,333,350,368,383,400,417,433,450,467,483,500,517,533,550,567,583,600,617,634]},{"start":[218,413],"end":[1334,271],"points":[[216,413],[215,414],[211,415],[210,415],[209,415],[210,415],[216,415],[236,416],[260,421],[283,426],[290,429],[292,432],[292,441],[290,455],[283,472],[270,494],[256,513],[247,536],[246,547],[247,551],[248,552],[249,553],[249,553],[251,551],[260,545],[278,534],[329,509],[426,475],[620,425],[770,381],[912,352],[1009,324],[1060,301],[1076,295],[1079,293],[1082,291],[1085,291],[1093,291],[1105,291],[1122,292],[1133,293],[1143,294],[1153,294],[1166,294],[1177,293],[1190,293],[1217,291],[1240,288],[1266,288],[1292,283],[1316,279],[1333,276],[1342,275],[1343,275],[1343,274],[1343,273],[1343,273],[1342,272],[1340,272],[1338,271],[1336,271],[1336,271],[1334,271]],"dx":1116,"dy":-142,"length":1378.5484036818832,"timing":[0,9,25,42,59,152,160,175,192,210,226,242,259,275,292,309,325,342,359,375,392,409,464,475,492,508,525,542,559,575,593,609,625,642,658,675,692,708,725,742,758,775,792,808,825,842,858,875,892,909,925,942,958,975,1056,1072,1080,1094,1108,1125,1142,1164,1188]},{"start":[1333,152],"end":[1679,698],"points":[[1313,161],[1296,168],[1273,177],[1250,187],[1232,208],[1226,256],[1255,324],[1311,393],[1383,450],[1459,503],[1569,557],[1630,588],[1682,616],[1716,639],[1736,653],[1750,665],[1763,678],[1775,688],[1783,699],[1785,702],[1786,702],[1785,703],[1783,704],[1778,706],[1770,709],[1763,711],[1752,711],[1739,708],[1724,706],[1714,704],[1707,701],[1699,699],[1689,698],[1681,698],[1679,698]],"dx":346,"dy":546,"length":988.0536948589821,"timing":[0,16,33,50,66,83,100,117,133,150,166,183,200,216,233,250,266,283,300,317,333,359,366,383,400,416,433,450,466,483,500,517,533,550,566]},{"start":[475,834],"end":[582,412],"points":[[477,832],[482,824],[491,811],[502,788],[510,767],[517,741],[533,681],[543,628],[545,591],[547,560],[547,529],[547,504],[547,481],[547,461],[547,454],[547,452],[547,451],[548,451],[552,448],[555,447],[560,443],[564,439],[567,436],[569,435],[570,434],[570,433],[571,433],[572,432],[573,429],[576,426],[577,423],[578,419],[579,416],[580,411],[581,406],[581,399],[582,396],[582,395],[582,397],[582,404],[582,411],[582,412]],"dx":107,"dy":-422,"length":482.03109279483743,"timing":[0,8,24,41,57,74,91,107,125,141,158,174,191,207,224,241,257,368,376,391,407,424,440,457,474,491,507,696,707,724,740,757,774,791,807,824,840,857,1328,1341,1358,1376]},{"start":[1391,697],"end":[1076,188],"points":[[1387,696],[1375,691],[1296,662],[1168,620],[1016,566],[891,507],[849,477],[845,460],[853,438],[866,415],[882,392],[898,372],[905,358],[921,336],[942,304],[958,287],[975,272],[995,258],[1013,248],[1028,239],[1040,232],[1048,227],[1052,224],[1056,222],[1061,218],[1066,215],[1071,211],[1071,210],[1071,207],[1073,204],[1074,199],[1075,196],[1076,194],[1076,191],[1076,189],[1076,188]],"dx":-315,"dy":-509,"length":969.1218302639776,"timing":[0,15,32,48,65,82,98,115,131,148,165,181,198,215,232,248,265,282,298,315,332,350,365,382,399,415,432,488,498,515,532,548,565,582,598,615]},{"start":[841,256],"end":[1731,606],"points":[[844,259],[867,275],[981,326],[1111,371],[1222,405],[1333,435],[1441,467],[1524,499],[1593,522],[1641,543],[1673,557],[1699,565],[1726,572],[1737,577],[1748,581],[1758,585],[1763,587],[1765,588],[1766,588],[1767,588],[1770,591],[1775,596],[1780,601],[1781,603],[1780,603],[1775,606],[1768,609],[1762,611],[1758,611],[1750,611],[1737,608],[1731,606]],"dx":890,"dy":350,"length":1055.5299998581906,"timing":[0,8,25,42,58,75,91,109,125,142,159,175,192,209,225,242,259,275,292,308,325,342,359,375,400,408,425,442,458,475,492,509]},{"start":[1668,283],"end":[649,679],"points":[[1664,284],[1658,289],[1646,291],[1632,296],[1617,301],[1609,304],[1603,305],[1600,305],[1598,305],[1561,305],[1438,309],[1308,329],[1179,363],[1065,421],[993,477],[931,532],[888,569],[863,595],[848,607],[837,612],[829,615],[820,620],[810,623],[802,624],[791,626],[774,628],[756,629],[739,629],[727,630],[718,631],[713,633],[708,633],[706,633],[705,634],[702,635],[697,640],[690,645],[683,651],[675,656],[667,662],[661,667],[653,676],[649,679]],"dx":-1019,"dy":396,"length":1129.2737137866607,"timing":[0,8,19,35,52,69,85,102,118,135,152,168,185,202,219,235,252,269,285,302,318,335,352,368,385,402,419,435,452,468,485,502,519,536,552,569,585,602,618,635,652,670,685]},{"start":[191,551],"end":[1507,324],"points":[[195,551],[199,550],[207,548],[228,546],[241,545],[254,544],[270,544],[304,544],[389,544],[520,536],[663,517],[805,500],[936,477],[1045,457],[1195,436],[1281,429],[1355,425],[1401,421],[1428,418],[1442,415],[1456,410],[1465,406],[1469,405],[1472,404],[1473,403],[1475,403],[1476,402],[1477,398],[1477,393],[1480,387],[1484,379],[1487,371],[1488,364],[1489,356],[1493,351],[1496,345],[1500,337],[1504,331],[1507,324]],"dx":1316,"dy":-227,"length":1378.5563256110456,"timing":[0,16,33,49,66,83,100,116,133,151,166,182,200,216,233,249,266,283,300,316,333,349,366,383,400,416,433,450,466,483,499,516,533,549,567,583,600,616,633]},{"start":[548,209],"end":[1270,298],"points":[[550,209],[556,212],[572,221],[599,235],[644,256],[699,279],[781,308],[876,337],[937,357],[992,374],[1057,387],[1113,393],[1158,394],[1190,388],[1214,380],[1226,372],[1227,363],[1225,349],[1218,334],[1214,324],[1212,315],[1208,306],[1207,303],[1208,301],[1212,298],[1219,294],[1228,291],[1238,290],[1245,290],[1252,290],[1259,290],[1263,290],[1265,290],[1266,290],[1268,290],[1269,290],[1270,290],[1270,291],[1270,292],[1270,293],[1270,295],[1270,296],[1270,298]],"dx":722,"dy":89,"length":860.304415015053,"timing":[0,17,34,51,67,84,100,117,134,150,167,184,201,217,234,251,267,284,301,317,334,351,368,384,401,418,434,451,467,485,501,518,534,552,568,585,602,822,837,852,869,884,901]},{"start":[530,415],"end":[492,673],"points":[[531,415],[533,418],[536,421],[539,424],[542,428],[543,432],[546,436],[548,443],[550,447],[550,454],[548,465],[541,487],[533,513],[517,549],[498,591],[483,627],[478,641],[478,643],[479,643],[480,643],[480,644],[481,644],[482,645],[484,647],[486,649],[487,651],[487,655],[488,657],[489,660],[490,663],[491,667],[491,671],[492,673]],"dx":-38,"dy":258,"length":284.0224127170872,"timing":[0,9,26,43,59,77,93,109,127,143,160,176,193,210,226,243,260,277,325,353,374,376,394,410,426,443,460,477,493,510,526,542,560]},{"start":[340,361],"end":[243,640],"points":[[340,362],[342,363],[347,366],[355,370],[364,376],[370,381],[372,387],[372,397],[358,421],[337,451],[312,486],[291,519],[275,544],[258,567],[246,585],[241,595],[240,603],[239,607],[239,610],[238,612],[237,615],[236,617],[236,620],[236,623],[236,626],[238,630],[238,632],[239,634],[240,636],[242,639],[243,640]],"dx":-97,"dy":279,"length":337.37395092617453,"timing":[0,11,27,44,62,77,94,111,127,144,161,177,194,211,227,243,261,278,294,312,328,344,362,378,395,411,428,445,461,477,495]},{"start":[1757,588],"end":[902,818],"points":[[1756,588],[1748,588],[1711,587],[1631,582],[1437,575],[1283,576],[1165,589],[1067,605],[1028,624],[1017,652],[1015,687],[1018,709],[1023,724],[1026,741],[1024,754],[1017,770],[1011,782],[1003,794],[993,803],[982,809],[968,815],[955,819],[946,821],[940,822],[935,823],[929,824],[925,824],[921,824],[917,824],[915,824],[914,823],[913,822],[909,821],[905,819],[903,819],[902,818]],"dx":-855,"dy":230,"length":1023.704968642589,"timing":[0,13,28,44,62,78,94,112,128,145,162,178,194,212,228,246,262,278,296,312,328,346,361,378,395,412,428,445,461,480,497,511,529,546,561,579]},{"start":[926,661],"end":[441,427],"points":[[926,662],[926,663],[926,665],[926,667],[926,670],[926,671],[925,671],[923,670],[902,655],[871,638],[817,613],[746,583],[667,549],[604,524],[563,507],[534,492],[511,480],[500,474],[492,471],[484,468],[480,467],[479,466],[479,465],[479,464],[478,463],[476,459],[474,454],[470,448],[462,440],[453,433],[445,429],[442,427],[441,427]],"dx":-485,"dy":-234,"length":558.6472088784362,"timing":[0,19,35,52,68,85,109,118,135,151,169,184,201,219,234,251,269,284,301,319,335,353,381,391,401,419,435,451,468,485,501,519,536]},{"start":[419,531],"end":[840,270],"points":[[420,531],[421,532],[426,535],[439,539],[469,542],[514,542],[567,528],[606,501],[636,466],[659,425],[673,391],[684,371],[696,356],[709,346],[723,336],[743,324],[770,311],[796,299],[815,290],[821,287],[823,286],[824,286],[825,285],[828,282],[831,280],[833,278],[836,276],[838,274],[838,273],[839,271],[840,270]],"dx":421,"dy":-261,"length":539.8361455380008,"timing":[0,11,26,44,60,77,94,110,126,144,160,176,194,210,226,244,260,276,294,310,329,348,360,377,394,410,428,443,460,477,494]},{"start":[193,233],"end":[1681,690],"points":[[194,233],[209,238],[251,247],[338,259],[432,271],[531,285],[668,310],[850,350],[1060,401],[1267,448],[1400,479],[1517,511],[1601,541],[1642,562],[1666,579],[1674,592],[1676,600],[1679,612],[1686,632],[1695,656],[1703,673],[1706,680],[1706,681],[1703,682],[1697,683],[1688,683],[1681,683],[1679,686],[1679,689],[1680,690],[1681,690]],"dx":1488,"dy":457,"length":1662.2203432236333,"timing":[0,17,33,50,66,82,100,115,132,150,166,182,200,216,234,250,266,284,300,316,334,350,368,384,401,416,434,450,467,483,514]},{"start":[1681,690],"end":[903,685],"points":[[1680,690],[1671,684],[1647,673],[1595,654],[1512,629],[1364,590],[1120,540],[921,518],[803,517],[751,521],[732,527],[736,541],[768,571],[810,601],[846,625],[865,638],[879,649],[885,658],[886,662],[886,665],[884,668],[884,672],[884,676],[884,678],[886,680],[887,681],[889,682],[891,683],[893,684],[896,684],[898,684],[901,685],[903,685]],"dx":-778,"dy":-5,"length":1218.4697044257018,"timing":[0,10,24,42,58,74,92,108,126,141,158,176,192,208,226,241,258,276,291,309,325,342,359,375,392,409,426,442,459,476,492,508,526]},{"start":[537,619],"end":[1378,483],"points":[[538,619],[541,619],[548,619],[559,619],[578,619],[633,613],[728,603],[855,587],[985,574],[1112,562],[1242,555],[1310,551],[1354,551],[1381,553],[1393,554],[1400,554],[1404,554],[1405,554],[1407,554],[1409,553],[1410,551],[1411,548],[1411,542],[1407,534],[1402,522],[1395,509],[1386,496],[1381,488],[1379,485],[1378,484],[1378,483]],"dx":841,"dy":-136,"length":954.0992100444588,"timing":[0,15,30,46,63,80,96,113,130,147,164,180,196,214,229,246,264,280,297,314,330,347,364,379,397,413,430,447,464,481,498]},{"start":[465,201],"end":[776,694],"points":[[466,201],[470,201],[483,202],[511,204],[564,205],[622,209],[678,221],[727,239],[749,255],[751,268],[746,293],[740,327],[738,372],[741,439],[751,498],[762,548],[773,589],[780,613],[784,629],[786,641],[787,650],[790,663],[796,673],[802,677],[807,679],[809,679],[809,680],[806,680],[802,682],[797,683],[792,685],[785,688],[778,692],[776,694]],"dx":311,"dy":493,"length":771.4807278018947,"timing":[0,12,27,45,61,77,94,111,127,144,161,177,194,211,228,245,261,278,295,311,328,345,361,378,395,412,461,478,495,511,528,545,561,579]},{"start":[982,338],"end":[1813,747],"points":[[981,338],[980,339],[977,345],[977,355],[977,366],[977,379],[981,395],[999,414],[1057,450],[1154,491],[1288,537],[1424,580],[1532,622],[1577,648],[1589,662],[1590,672],[1586,681],[1584,688],[1582,695],[1579,702],[1577,706],[1575,711],[1574,716],[1578,724],[1600,736],[1628,743],[1664,744],[1700,744],[1718,744],[1724,744],[1731,745],[1745,750],[1765,754],[1782,756],[1789,758],[1789,759],[1790,760],[1791,760],[1792,760],[1798,760],[1804,759],[1809,757],[1810,756],[1811,755],[1811,753],[1812,749],[1813,747]],"dx":831,"dy":409,"length":1044.672855754232,"timing":[0,16,33,50,66,82,100,116,132,149,166,182,199,216,232,249,266,282,299,316,333,349,367,383,400,416,433,450,467,482,500,516,533,550,566,583,600,681,684,700,716,733,750,768,784,801,817]},{"start":[1422,278],"end":[1045,642],"points":[[1422,279],[1421,279],[1420,280],[1417,281],[1408,285],[1388,290],[1346,298],[1298,317],[1246,341],[1213,364],[1190,395],[1172,441],[1158,505],[1150,552],[1143,584],[1128,609],[1118,620],[1110,627],[1101,634],[1094,637],[1090,638],[1086,638],[1081,638],[1071,638],[1062,639],[1053,640],[1048,640],[1047,640],[1046,640],[1045,641],[1045,642]],"dx":-377,"dy":364,"length":586.1747777939421,"timing":[0,6,21,38,54,72,88,105,121,139,155,171,188,205,221,238,255,272,289,305,322,338,355,372,388,405,422,439,455,472,476]},{"start":[1290,328],"end":[704,822],"points":[[1289,328],[1287,330],[1276,337],[1262,348],[1245,364],[1224,384],[1184,419],[1124,468],[1056,518],[995,568],[950,607],[920,637],[902,667],[890,693],[881,711],[871,724],[860,735],[847,747],[825,763],[800,776],[772,788],[746,798],[731,803],[728,806],[726,810],[725,813],[722,820],[718,827],[716,829],[715,829],[714,829],[712,829],[710,827],[707,824],[705,823],[704,822]],"dx":-586,"dy":494,"length":789.8976311221347,"timing":[0,6,22,39,55,73,89,105,122,139,155,172,189,205,222,239,256,273,289,306,323,339,356,373,389,406,423,439,455,473,544,557,573,590,606,623]},{"start":[383,318],"end":[1100,478],"points":[[384,318],[388,316],[399,314],[415,311],[437,310],[475,308],[522,308],[588,308],[684,308],[762,308],[845,308],[916,312],[956,318],[979,327],[1006,342],[1028,353],[1045,369],[1057,384],[1061,394],[1063,405],[1063,416],[1065,422],[1066,427],[1066,432],[1067,437],[1069,442],[1072,446],[1076,448],[1079,450],[1082,454],[1085,457],[1088,460],[1092,464],[1096,469],[1100,473],[1101,476],[1101,477],[1101,478],[1100,478]],"dx":717,"dy":160,"length":806.6036224633665,"timing":[0,17,34,50,67,84,100,117,134,151,167,184,201,217,234,250,268,284,300,317,334,350,367,384,400,417,434,450,467,484,500,517,534,550,567,584,616,626,646]},{"start":[1109,466],"end":[137,232],"points":[[1108,466],[1105,466],[1092,463],[1070,457],[1032,443],[970,426],[912,409],[855,390],[782,366],[716,345],[621,310],[506,269],[421,242],[352,218],[295,202],[257,194],[231,190],[208,189],[194,189],[183,189],[172,190],[163,192],[155,194],[145,198],[140,200],[137,204],[136,209],[136,214],[136,218],[136,220],[135,222],[135,225],[136,229],[136,230],[136,231],[137,232]],"dx":-972,"dy":-234,"length":1047.0332478003197,"timing":[0,10,26,43,59,76,93,109,126,143,159,176,193,210,226,243,260,276,293,309,326,343,359,376,393,410,426,443,460,476,493,509,526,543,559,576]},{"start":[1098,302],"end":[346,518],"points":[[1098,302],[1099,302],[1100,302],[1100,301],[1101,301],[1100,302],[1095,305],[1084,311],[1064,324],[1036,336],[996,355],[943,372],[880,392],[820,408],[745,420],[682,426],[628,428],[571,426],[537,426],[512,426],[489,433],[472,441],[456,449],[441,458],[432,466],[428,474],[424,485],[422,493],[420,498],[419,503],[416,507],[412,510],[408,514],[406,514],[404,515],[403,516],[400,518],[398,518],[392,518],[382,518],[369,518],[359,518],[352,518],[348,518],[347,518],[346,518]],"dx":-752,"dy":216,"length":824.0859903018016,"timing":[0,53,65,82,99,149,165,182,199,215,232,249,266,282,299,315,332,349,365,382,399,416,432,449,465,482,499,515,532,549,565,582,599,615,632,649,665,682,699,715,732,749,765,782,799,848]},{"start":[1181,399],"end":[278,365],"points":[[1180,399],[1177,400],[1168,402],[1156,404],[1141,404],[1120,404],[1082,399],[1031,391],[971,383],[889,372],[821,362],[752,354],[693,350],[649,346],[616,344],[576,344],[551,344],[528,344],[512,344],[501,345],[492,348],[478,353],[463,358],[448,362],[428,369],[411,374],[398,379],[387,384],[377,386],[370,389],[367,389],[365,389],[363,390],[360,390],[354,391],[349,391],[344,391],[338,390],[333,387],[329,386],[327,382],[325,378],[322,373],[319,369],[315,363],[311,358],[308,357],[306,355],[304,354],[303,353],[301,353],[300,353],[299,353],[293,355],[288,358],[287,358],[285,359],[283,361],[281,362],[280,363],[279,364],[278,364],[278,365]],"dx":-903,"dy":-34,"length":936.4743556098041,"timing":[0,14,31,48,64,81,98,114,131,148,164,181,199,214,231,248,264,281,298,314,331,348,364,381,398,414,431,448,464,481,498,514,531,548,564,581,598,614,631,648,664,681,698,714,731,748,764,781,798,814,831,848,964,982,999,1014,1031,1048,1064,1081,1098,1202,1222]},{"start":[545,373],"end":[494,629],"points":[[545,373],[546,373],[547,374],[547,375],[551,380],[555,386],[560,394],[568,404],[571,412],[572,423],[572,437],[572,447],[572,457],[569,473],[569,486],[568,502],[568,518],[568,532],[565,547],[561,563],[556,578],[548,590],[538,604],[532,610],[528,614],[521,620],[517,622],[515,625],[513,626],[512,626],[511,626],[509,626],[508,626],[507,626],[507,625],[506,625],[505,625],[503,626],[500,626],[498,627],[496,628],[494,629]],"dx":-51,"dy":256,"length":302.01550703716055,"timing":[0,17,145,151,167,183,200,217,233,250,266,283,300,316,333,350,366,383,400,417,433,450,468,483,500,517,533,550,567,583,600,617,638,683,700,793,802,817,833,850,867,883]},{"start":[644,612],"end":[1072,567],"points":[[643,612],[641,608],[640,605],[640,602],[640,595],[642,592],[644,585],[655,574],[678,549],[710,519],[737,506],[759,501],[783,500],[812,500],[846,507],[880,519],[925,536],[961,550],[988,557],[1008,562],[1023,565],[1032,566],[1036,566],[1040,566],[1042,566],[1044,566],[1046,566],[1049,566],[1056,566],[1060,566],[1061,566],[1062,566],[1063,566],[1064,566],[1065,566],[1066,566],[1067,566],[1068,566],[1069,567],[1071,567],[1072,567]],"dx":428,"dy":-45,"length":498.23285375597226,"timing":[0,19,36,51,68,84,101,118,134,151,167,184,201,217,234,251,268,284,301,317,334,351,367,384,401,418,434,451,467,484,501,592,603,617,634,659,679,685,701,718,734]},{"start":[950,651],"end":[468,348],"points":[[950,651],[949,650],[948,650],[948,649],[948,648],[946,646],[944,642],[937,631],[926,618],[904,598],[891,586],[875,573],[857,554],[837,535],[808,518],[776,502],[721,475],[675,460],[636,448],[604,441],[560,427],[543,422],[529,415],[510,405],[498,399],[489,395],[481,391],[473,385],[466,381],[464,378],[464,377],[465,372],[465,370],[465,367],[465,365],[465,363],[465,360],[465,355],[465,354],[465,351],[467,349],[468,348]],"dx":-482,"dy":-303,"length":602.4242232697214,"timing":[0,73,97,112,120,134,151,167,184,200,217,234,251,267,284,301,318,334,351,367,384,400,417,434,450,468,484,501,517,534,584,600,617,634,650,668,684,700,717,734,750,801]},{"start":[1155,513],"end":[316,191],"points":[[1153,513],[1148,513],[1145,513],[1144,513],[1142,513],[1140,513],[1139,513],[1139,512],[1138,512],[1137,512],[1132,511],[1118,508],[1092,501],[1039,482],[914,429],[801,386],[663,343],[531,308],[431,290],[378,281],[356,274],[347,270],[344,268],[343,267],[342,266],[341,265],[341,263],[342,252],[342,239],[335,223],[328,211],[324,201],[321,194],[319,190],[317,190],[316,190],[316,191]],"dx":-839,"dy":-322,"length":937.8376008961443,"timing":[0,17,35,51,101,118,135,215,222,235,252,269,285,301,318,335,352,368,385,402,418,435,452,468,485,502,568,585,602,618,635,652,668,685,791,806,871]},{"start":[1111,325],"end":[180,519],"points":[[1109,325],[1108,324],[1103,324],[1085,324],[1027,323],[918,323],[777,328],[645,343],[506,389],[435,410],[343,423],[258,436],[203,447],[181,455],[169,461],[161,464],[156,466],[154,467],[153,468],[149,472],[140,485],[138,491],[137,499],[137,513],[144,530],[155,539],[166,542],[174,543],[176,543],[177,543],[177,542],[178,541],[178,539],[180,537],[180,536],[180,535],[180,531],[180,530],[180,524],[180,519]],"dx":-931,"dy":194,"length":1105.3712612294823,"timing":[0,10,26,43,60,77,94,110,126,143,159,177,193,210,226,243,260,277,294,310,327,343,360,377,393,410,427,443,460,477,495,511,527,543,560,640,647,660,677,694]},{"start":[283,527],"end":[450,230],"points":[[283,527],[283,528],[282,528],[281,528],[282,529],[286,530],[296,531],[311,535],[329,539],[349,542],[372,544],[399,546],[427,547],[456,547],[490,546],[523,545],[554,544],[585,543],[616,542],[646,540],[675,539],[702,538],[729,537],[754,534],[774,530],[789,524],[800,518],[808,512],[812,506],[814,502],[814,496],[813,490],[810,483],[804,475],[796,466],[786,457],[774,448],[758,438],[744,427],[730,415],[716,404],[701,393],[685,382],[669,371],[651,360],[633,349],[616,338],[600,329],[584,320],[569,312],[556,305],[543,297],[530,291],[518,283],[505,277],[494,271],[485,267],[476,263],[469,259],[463,256],[459,252],[456,249],[454,246],[453,244],[453,243],[453,242],[453,241],[453,240],[453,239],[453,237],[452,235],[450,233],[449,232],[448,231],[447,230],[447,229],[447,228],[447,227],[447,225],[447,224],[448,225],[448,226],[449,226],[449,227],[449,228],[450,229],[450,230]],"dx":167,"dy":-297,"length":1031.755326821912,"timing":[0,9,33,50,96,112,119,126,133,141,149,158,166,174,181,189,196,204,212,220,226,234,241,249,264,271,278,285,292,299,306,313,320,327,334,341,349,358,365,373,380,388,395,410,417,424,431,438,446,452,458,467,474,482,487,496,504,512,519,527,533,542,550,557,565,574,590,597,604,611,620,628,633,641,650,658,666,681,689,695,874,912,919,927,950,958,972]},{"start":[461,280],"end":[803,235],"points":[[470,284],[486,290],[507,296],[530,300],[553,303],[579,304],[606,304],[663,302],[689,301],[718,300],[743,300],[767,300],[791,299],[814,297],[837,294],[855,292],[871,290],[886,287],[898,284],[907,281],[913,278],[916,277],[917,276],[917,275],[915,274],[912,273],[908,272],[903,271],[895,270],[888,269],[879,267],[870,264],[861,261],[851,258],[840,255],[829,252],[820,250],[811,247],[805,245],[801,244],[798,243],[797,242],[796,241],[795,241],[797,239],[800,238],[802,237],[803,236],[803,235]],"dx":342,"dy":-45,"length":591.5113443917304,"timing":[0,6,14,22,29,38,45,60,67,76,83,92,99,107,113,122,136,143,150,157,164,173,178,208,214,221,229,237,245,253,260,268,282,289,296,303,310,317,324,331,338,345,354,362,408,415,421,430,608]},{"start":[487,183],"end":[1084,698],"points":[[487,183],[486,183],[486,184],[488,188],[491,196],[496,205],[504,214],[511,224],[520,234],[531,243],[542,254],[554,265],[567,277],[580,291],[593,305],[609,321],[630,340],[655,360],[683,379],[716,399],[745,417],[773,435],[799,451],[823,465],[845,480],[866,498],[887,516],[908,535],[928,556],[949,577],[969,598],[990,616],[1009,632],[1023,645],[1039,656],[1052,667],[1063,678],[1072,689],[1080,698],[1086,705],[1090,711],[1092,715],[1095,719],[1097,723],[1100,727],[1103,731],[1105,734],[1107,737],[1108,738],[1108,737],[1107,736],[1106,735],[1105,735],[1104,732],[1102,729],[1101,725],[1099,722],[1098,719],[1096,716],[1094,713],[1093,710],[1091,707],[1089,704],[1088,703],[1087,702],[1086,701],[1085,700],[1084,699],[1084,698]],"dx":597,"dy":515,"length":891.048449862683,"timing":[0,46,67,84,91,99,108,115,122,129,138,146,160,167,174,181,188,195,202,209,216,224,229,237,245,254,262,270,275,283,292,306,313,320,327,334,341,347,354,361,370,377,384,391,399,407,415,423,429,462,469,477,516,570,577,585,591,599,607,615,623,632,637,646,660,667,674,681,691]},{"start":[431,273],"end":[1784,809],"points":[[431,273],[431,274],[432,275],[435,277],[439,278],[445,281],[455,287],[470,293],[491,300],[516,308],[549,318],[584,328],[623,341],[666,354],[712,368],[760,386],[809,408],[864,432],[922,457],[982,487],[1042,518],[1101,550],[1159,580],[1210,605],[1254,626],[1292,645],[1327,663],[1363,679],[1396,692],[1423,705],[1445,714],[1464,722],[1478,728],[1489,734],[1500,738],[1512,741],[1524,744],[1536,747],[1547,749],[1557,750],[1565,751],[1572,752],[1577,752],[1580,752],[1581,752],[1581,751],[1582,751],[1584,751],[1587,751],[1594,752],[1604,753],[1617,756],[1631,759],[1643,761],[1654,763],[1663,764],[1672,766],[1683,769],[1695,773],[1715,780],[1722,783],[1726,784],[1727,784],[1728,785],[1731,786],[1735,789],[1740,793],[1747,799],[1755,806],[1764,812],[1772,816],[1777,818],[1779,819],[1780,819],[1780,818],[1780,817],[1782,814],[1783,812],[1783,811],[1784,810],[1784,809]],"dx":1353,"dy":536,"length":1478.6258057420855,"timing":[0,142,196,220,229,235,241,249,257,265,273,282,289,295,303,318,325,332,339,345,352,360,366,374,381,390,396,403,411,419,428,435,443,450,457,466,473,482,490,495,503,512,526,533,540,547,554,561,569,575,582,589,598,604,611,619,627,635,643,658,666,673,681,690,697,704,711,719,734,741,748,755,762,769,811,836,852,860,866,873,881]},{"start":[780,589],"end":[1504,558],"points":[[780,588],[787,582],[796,576],[807,569],[820,562],[837,554],[859,547],[886,541],[915,537],[949,535],[982,534],[1011,534],[1039,534],[1064,535],[1087,536],[1108,536],[1127,537],[1142,538],[1156,539],[1165,540],[1171,541],[1176,541],[1182,542],[1190,543],[1199,545],[1211,548],[1222,550],[1233,552],[1244,554],[1256,556],[1269,557],[1282,558],[1296,559],[1309,560],[1323,560],[1337,560],[1352,559],[1369,558],[1389,557],[1410,557],[1429,558],[1447,559],[1462,560],[1475,561],[1483,562],[1489,562],[1493,562],[1497,562],[1499,562],[1500,562],[1501,561],[1502,561],[1502,560],[1503,560],[1503,559],[1504,559],[1504,558]],"dx":724,"dy":-31,"length":741.2779642007725,"timing":[0,8,15,22,30,38,46,54,60,67,75,84,98,105,113,118,125,132,139,146,153,162,168,176,183,192,199,207,213,221,229,237,246,253,262,268,276,283,291,306,313,320,327,334,341,347,354,361,369,375,384,403,424,437,484,516,523]},{"start":[1140,534],"end":[1749,541],"points":[[1140,534],[1139,534],[1138,535],[1138,536],[1139,537],[1140,540],[1142,543],[1145,545],[1148,548],[1149,551],[1150,552],[1151,553],[1154,555],[1160,557],[1171,560],[1188,563],[1210,565],[1235,566],[1260,567],[1285,568],[1311,568],[1342,568],[1376,569],[1412,571],[1451,573],[1489,577],[1528,578],[1564,578],[1597,577],[1626,574],[1654,572],[1676,571],[1695,570],[1711,569],[1723,568],[1734,566],[1743,565],[1752,563],[1760,561],[1766,559],[1770,558],[1771,557],[1772,557],[1773,556],[1773,555],[1772,555],[1771,555],[1771,554],[1769,553],[1767,552],[1764,550],[1762,548],[1760,547],[1757,546],[1756,545],[1755,544],[1753,543],[1752,542],[1751,542],[1750,541],[1749,541]],"dx":609,"dy":7,"length":682.0626402920631,"timing":[0,67,105,112,120,128,136,142,150,165,172,179,191,196,205,212,227,235,241,248,258,262,269,277,283,291,297,305,313,320,328,337,344,350,358,373,380,387,394,401,410,415,422,491,504,529,545,559,573,580,589,594,601,608,615,621,629,636,645,652,675]},{"start":[1749,541],"end":[1346,207],"points":[[1747,541],[1739,542],[1729,542],[1706,542],[1693,541],[1680,540],[1666,539],[1650,537],[1630,534],[1606,532],[1579,529],[1548,525],[1515,520],[1482,514],[1448,506],[1413,497],[1381,488],[1354,478],[1332,467],[1314,456],[1301,444],[1291,432],[1283,420],[1277,407],[1272,393],[1271,380],[1272,368],[1276,357],[1281,347],[1288,338],[1294,330],[1299,322],[1304,313],[1307,305],[1311,297],[1314,290],[1317,284],[1320,278],[1323,273],[1326,268],[1330,263],[1333,259],[1336,255],[1338,251],[1339,247],[1340,243],[1340,240],[1340,236],[1340,233],[1340,229],[1340,226],[1340,225],[1340,224],[1340,223],[1340,220],[1341,219],[1341,218],[1341,216],[1342,215],[1343,213],[1343,212],[1343,211],[1344,210],[1345,209],[1345,208],[1346,207]],"dx":-403,"dy":-334,"length":729.3655663838034,"timing":[0,7,16,30,38,45,54,62,69,76,83,92,100,114,122,128,135,142,148,156,163,169,176,184,191,199,208,215,224,229,238,246,260,267,274,281,288,295,301,309,322,329,336,343,350,357,364,372,378,385,392,400,408,484,491,500,507,586,591,599,614,624,646,653,662,676]},{"start":[326,336],"end":[1166,155],"points":[[326,336],[327,336],[329,336],[333,335],[339,334],[348,333],[358,332],[372,331],[388,330],[407,329],[428,328],[454,328],[484,328],[519,328],[561,329],[602,329],[646,328],[694,324],[745,318],[794,314],[843,310],[889,304],[932,299],[969,291],[1001,285],[1026,277],[1047,271],[1066,264],[1083,257],[1097,251],[1108,246],[1114,241],[1118,237],[1121,233],[1124,229],[1127,225],[1129,221],[1132,217],[1133,214],[1134,213],[1134,211],[1135,209],[1136,207],[1137,204],[1139,200],[1142,196],[1145,192],[1148,188],[1150,185],[1152,183],[1153,181],[1154,180],[1154,179],[1154,178],[1155,177],[1155,175],[1156,173],[1157,172],[1157,169],[1158,168],[1158,166],[1159,164],[1160,162],[1161,160],[1162,159],[1163,158],[1164,158],[1165,157],[1166,156],[1166,155]],"dx":840,"dy":-181,"length":903.9747463970091,"timing":[0,77,101,108,116,123,137,144,151,158,165,172,179,186,193,201,208,216,222,230,238,246,255,269,276,283,290,297,304,311,319,326,332,339,347,354,363,371,379,385,393,400,415,422,429,436,443,450,457,464,471,479,485,508,516,524,532,539,547,555,562,570,578,584,592,601,617,679,693,701]},{"start":[1087,161],"end":[363,345],"points":[[1087,161],[1087,162],[1086,163],[1085,164],[1082,167],[1079,170],[1073,173],[1069,176],[1065,179],[1060,183],[1052,187],[1043,192],[1034,197],[1025,203],[1013,209],[999,217],[981,226],[960,236],[936,247],[909,258],[880,269],[847,279],[813,289],[778,299],[740,307],[705,314],[672,320],[641,326],[611,332],[582,336],[556,339],[530,343],[504,347],[481,350],[458,353],[439,354],[426,353],[415,352],[406,351],[398,349],[392,348],[386,348],[381,348],[378,348],[378,347],[377,346],[376,346],[376,345],[374,345],[370,345],[366,345],[364,345],[363,345]],"dx":-724,"dy":184,"length":764.1900239510524,"timing":[0,36,66,74,81,89,105,112,120,132,139,146,153,160,167,174,181,189,198,204,212,220,227,235,250,257,264,271,278,285,292,301,306,313,320,328,336,344,352,358,366,373,382,396,444,458,472,528,574,582,590,605,611]},{"start":[1459,204],"end":[913,217],"points":[[1458,205],[1455,208],[1448,211],[1439,214],[1429,217],[1418,220],[1406,223],[1393,227],[1379,230],[1365,233],[1351,237],[1335,241],[1317,247],[1298,254],[1272,260],[1244,265],[1213,268],[1184,268],[1156,268],[1129,266],[1106,265],[1085,264],[1066,263],[1050,261],[1037,259],[1026,258],[1017,257],[1010,256],[1002,254],[996,253],[990,250],[983,247],[976,243],[969,239],[963,235],[955,230],[947,226],[941,223],[936,220],[933,217],[931,216],[930,215],[929,215],[928,214],[927,214],[925,214],[923,214],[920,215],[917,215],[916,216],[915,216],[914,216],[913,217]],"dx":-546,"dy":13,"length":567.1384679113222,"timing":[0,14,22,30,38,46,53,62,68,76,90,97,104,111,122,130,138,146,154,162,170,176,184,191,200,207,222,229,236,243,250,257,264,271,278,286,292,300,308,315,324,330,337,354,375,382,389,396,403,410,416,424,430]},{"start":[359,742],"end":[1375,284],"points":[[365,737],[374,730],[383,721],[394,712],[409,702],[428,692],[451,681],[481,669],[515,655],[554,639],[597,620],[641,600],[690,580],[738,559],[785,540],[831,522],[880,503],[926,483],[966,465],[1005,447],[1044,431],[1082,417],[1116,403],[1143,393],[1169,382],[1194,373],[1213,364],[1231,356],[1246,349],[1259,341],[1270,336],[1278,332],[1287,327],[1295,323],[1303,319],[1309,315],[1315,312],[1319,310],[1320,309],[1321,308],[1324,307],[1325,306],[1326,306],[1326,307],[1328,307],[1330,307],[1333,307],[1336,306],[1339,305],[1343,303],[1347,300],[1352,297],[1357,294],[1363,291],[1366,290],[1368,289],[1369,288],[1370,287],[1371,287],[1372,286],[1373,285],[1374,285],[1374,284],[1375,284]],"dx":1016,"dy":-458,"length":1113.6378618827998,"timing":[0,8,14,22,30,38,45,60,67,74,82,89,96,102,109,116,123,131,137,146,154,162,169,176,184,192,206,213,220,228,234,244,248,255,262,270,276,284,292,346,366,373,380,446,463,470,477,484,492,499,508,516,524,530,538,546,560,567,574,581,588,595,602,609]},{"start":[1584,175],"end":[1512,300],"points":[[1584,175],[1583,175],[1582,175],[1581,176],[1579,177],[1574,180],[1568,183],[1560,187],[1550,193],[1539,198],[1514,212],[1500,218],[1486,225],[1471,233],[1453,242],[1434,252],[1410,264],[1384,277],[1356,291],[1328,308],[1300,325],[1275,343],[1256,359],[1245,372],[1241,381],[1242,386],[1245,387],[1250,387],[1258,386],[1273,382],[1294,377],[1319,371],[1346,367],[1372,362],[1395,356],[1414,350],[1449,338],[1466,334],[1482,330],[1495,327],[1506,324],[1514,322],[1521,320],[1525,318],[1529,316],[1533,315],[1536,314],[1538,313],[1539,312],[1540,311],[1540,310],[1543,309],[1546,308],[1550,307],[1553,306],[1556,305],[1558,304],[1559,304],[1560,303],[1559,303],[1558,303],[1555,303],[1550,302],[1546,301],[1542,300],[1538,299],[1534,299],[1530,299],[1526,299],[1522,299],[1518,299],[1515,299],[1512,300]],"dx":-72,"dy":125,"length":789.4389185626317,"timing":[0,7,56,65,70,79,87,95,103,111,125,133,141,148,157,164,173,179,187,202,209,216,223,231,236,243,250,257,265,273,280,286,295,303,311,318,334,341,349,357,365,373,380,387,394,403,417,424,431,438,445,466,473,481,487,495,503,511,519,595,603,611,619,627,635,641,649,657,672,678,685,692,695]},{"start":[1492,680],"end":[545,474],"points":[[1491,680],[1491,678],[1492,674],[1493,670],[1494,668],[1494,667],[1494,666],[1491,664],[1487,661],[1483,658],[1476,655],[1467,651],[1454,646],[1438,640],[1389,626],[1356,618],[1320,608],[1276,599],[1227,587],[1179,574],[1133,557],[1087,541],[1040,525],[996,511],[952,496],[912,484],[872,474],[837,465],[807,457],[781,452],[759,448],[740,445],[723,443],[707,442],[691,442],[677,441],[663,440],[651,438],[643,436],[637,435],[633,434],[632,434],[631,435],[630,435],[628,436],[627,438],[624,441],[620,444],[615,448],[609,452],[603,456],[597,459],[591,462],[585,464],[579,467],[571,469],[565,471],[559,472],[553,473],[549,474],[545,474]],"dx":-947,"dy":-206,"length":1009.3417482464912,"timing":[0,16,29,36,43,49,122,170,176,184,192,200,207,215,230,237,246,253,262,270,277,284,292,300,308,315,324,332,338,346,355,362,369,378,384,392,400,408,416,424,438,492,500,515,522,529,536,543,551,556,563,570,578,585,591,600,607,616,623,632,647]},{"start":[545,474],"end":[661,426],"points":[[546,476],[548,480],[555,489],[564,496],[574,502],[585,508],[595,512],[606,516],[618,520],[633,523],[651,524],[672,523],[696,521],[724,517],[747,513],[770,507],[789,502],[805,496],[816,490],[822,486],[826,483],[827,481],[827,479],[827,477],[825,474],[822,471],[819,467],[816,463],[813,458],[809,454],[804,450],[798,447],[791,444],[783,442],[775,439],[767,437],[759,435],[753,433],[749,432],[746,432],[744,431],[742,431],[740,430],[738,430],[734,430],[730,430],[725,430],[720,429],[716,429],[712,428],[708,428],[704,427],[700,426],[696,426],[693,426],[690,426],[689,426],[688,426],[686,426],[685,426],[682,426],[678,426],[674,426],[670,426],[667,426],[664,426],[663,426],[662,426],[661,426]],"dx":116,"dy":-48,"length":490.86858255385033,"timing":[0,16,25,30,37,46,54,60,68,76,84,92,107,114,122,127,134,141,150,155,162,169,176,183,192,200,208,214,222,230,238,252,259,266,273,280,287,294,301,308,315,322,330,338,346,354,362,367,376,384,398,405,412,419,426,433,440,461,467,475,484,491,502,509,516,524,530,537,546]},{"start":[1055,325],"end":[1040,580],"points":[[1055,326],[1054,327],[1052,328],[1049,330],[1045,333],[1040,337],[1035,340],[1030,343],[1026,346],[1022,349],[1016,353],[1009,357],[1000,361],[991,366],[982,372],[973,379],[965,387],[957,396],[953,407],[949,420],[946,434],[945,447],[946,458],[949,468],[952,477],[955,485],[961,502],[964,512],[967,523],[970,534],[974,545],[978,556],[982,566],[987,575],[992,584],[996,591],[1001,597],[1004,602],[1007,605],[1011,609],[1012,609],[1013,610],[1015,610],[1017,611],[1019,612],[1024,614],[1026,614],[1027,615],[1028,615],[1030,613],[1031,611],[1032,609],[1033,606],[1034,603],[1035,600],[1036,597],[1037,594],[1038,591],[1039,587],[1040,584],[1040,582],[1040,581],[1040,580]],"dx":-15,"dy":255,"length":407.3821763596677,"timing":[0,7,14,22,30,38,46,54,60,67,76,90,97,104,112,118,125,132,139,146,154,160,167,175,183,191,208,215,222,230,238,246,254,262,268,276,284,299,306,313,321,330,338,346,353,368,375,383,408,446,454,462,468,476,484,492,500,508,516,522,530,537,556]},{"start":[1040,580],"end":[1491,419],"points":[[1039,581],[1038,581],[1032,580],[1026,579],[1020,578],[1014,576],[1008,574],[1002,571],[996,568],[989,564],[981,560],[973,556],[965,550],[958,544],[954,540],[951,536],[951,533],[952,530],[955,526],[960,520],[968,512],[979,504],[993,496],[1011,488],[1034,479],[1062,470],[1093,462],[1121,456],[1150,452],[1177,448],[1205,444],[1229,441],[1252,438],[1278,437],[1302,436],[1323,436],[1344,435],[1362,434],[1376,432],[1388,430],[1399,428],[1409,427],[1419,427],[1430,427],[1439,427],[1448,428],[1454,428],[1459,428],[1462,429],[1465,429],[1468,429],[1472,429],[1475,429],[1477,429],[1477,428],[1478,428],[1479,426],[1482,425],[1484,423],[1487,422],[1489,421],[1490,420],[1491,419]],"dx":451,"dy":-161,"length":672.1470744023526,"timing":[0,24,32,38,46,54,62,70,78,86,93,101,108,116,124,132,137,146,154,162,176,183,190,197,204,212,218,226,231,240,246,253,262,270,277,285,291,300,307,322,329,336,343,350,357,364,370,378,386,394,400,408,416,424,440,478,508,516,524,532,539,548,554]},{"start":[1492,770],"end":[1752,300],"points":[[1489,768],[1483,766],[1474,762],[1461,757],[1447,751],[1432,745],[1418,741],[1405,738],[1393,735],[1381,732],[1368,729],[1354,725],[1341,721],[1330,715],[1322,707],[1319,698],[1320,687],[1325,674],[1332,661],[1339,647],[1350,631],[1364,613],[1383,594],[1404,571],[1427,548],[1451,524],[1477,500],[1500,481],[1519,465],[1537,452],[1553,441],[1571,428],[1587,415],[1608,401],[1627,387],[1644,376],[1658,365],[1669,356],[1678,348],[1686,341],[1692,335],[1696,330],[1700,326],[1703,322],[1706,318],[1709,314],[1711,311],[1712,309],[1713,308],[1713,307],[1717,305],[1723,303],[1729,302],[1735,300],[1739,298],[1742,297],[1743,296],[1743,297],[1745,298],[1748,299],[1750,300],[1751,300],[1752,300]],"dx":260,"dy":-470,"length":796.0175796047444,"timing":[0,8,16,21,30,38,52,59,66,73,80,87,94,101,107,116,122,135,142,149,156,163,170,177,184,191,200,208,216,224,230,238,246,260,267,274,281,288,295,303,309,316,324,330,338,346,354,362,370,376,424,432,438,446,454,469,477,530,538,546,554,562,586]},{"start":[927,521],"end":[1435,626],"points":[[926,522],[923,524],[919,528],[916,532],[915,535],[914,538],[913,539],[912,541],[911,542],[910,543],[908,544],[907,545],[904,546],[900,547],[896,548],[892,549],[890,550],[890,551],[891,553],[897,556],[906,558],[919,559],[934,560],[955,563],[983,567],[1017,573],[1054,583],[1093,594],[1134,604],[1173,612],[1206,620],[1234,626],[1260,632],[1281,637],[1300,641],[1318,645],[1332,648],[1345,651],[1356,654],[1365,656],[1373,657],[1377,657],[1379,657],[1380,657],[1381,657],[1383,656],[1385,656],[1389,656],[1394,656],[1399,655],[1405,655],[1411,654],[1414,653],[1416,652],[1417,651],[1418,650],[1418,649],[1419,648],[1420,647],[1421,646],[1423,644],[1425,641],[1428,638],[1431,635],[1433,632],[1434,630],[1435,629],[1435,628],[1435,627],[1435,626]],"dx":508,"dy":105,"length":622.727879436346,"timing":[0,20,27,34,41,48,55,62,69,76,84,92,100,108,116,124,129,138,146,154,162,170,179,193,200,208,221,228,235,242,249,256,263,270,278,285,292,300,308,316,323,329,338,354,362,370,378,384,392,400,407,423,430,436,444,451,458,464,471,478,486,493,500,509,516,524,532,538,546,600]},{"start":[553,297],"end":[1794,504],"points":[[553,297],[553,298],[551,302],[549,308],[547,314],[546,320],[545,326],[544,332],[545,338],[546,344],[547,349],[549,354],[552,360],[558,367],[566,375],[579,383],[595,391],[618,399],[644,405],[676,411],[713,417],[756,421],[803,428],[855,433],[905,437],[956,445],[1010,451],[1117,463],[1173,471],[1226,479],[1277,490],[1333,503],[1384,520],[1435,536],[1481,551],[1524,564],[1560,574],[1589,582],[1611,586],[1630,589],[1644,592],[1657,595],[1668,597],[1678,598],[1686,598],[1692,598],[1695,597],[1697,596],[1698,594],[1698,593],[1699,592],[1700,590],[1702,587],[1705,584],[1709,580],[1715,576],[1723,572],[1730,568],[1738,564],[1744,561],[1748,557],[1750,554],[1751,552],[1752,549],[1753,547],[1754,545],[1756,542],[1759,538],[1763,533],[1766,529],[1769,523],[1772,519],[1776,515],[1779,512],[1782,511],[1784,510],[1785,509],[1786,509],[1786,508],[1787,508],[1789,506],[1790,506],[1792,505],[1793,505],[1794,504]],"dx":1241,"dy":207,"length":1384.198803277043,"timing":[0,57,111,119,126,135,143,151,157,165,180,186,193,200,207,214,221,229,235,242,250,256,264,272,281,289,297,311,319,327,335,342,351,359,365,373,388,395,403,408,415,422,429,436,444,451,458,464,473,481,489,497,505,513,519,534,541,549,554,561,568,575,582,589,597,605,613,621,627,635,643,651,665,673,680,686,693,700,707,770,781,789,797,811,818]},{"start":[1794,504],"end":[1519,294],"points":[[1793,504],[1792,505],[1791,505],[1791,506],[1790,507],[1787,507],[1781,507],[1772,506],[1761,503],[1746,498],[1728,490],[1707,480],[1685,468],[1661,455],[1637,441],[1611,427],[1585,414],[1561,403],[1540,392],[1523,383],[1508,375],[1497,367],[1491,361],[1488,357],[1487,353],[1486,349],[1485,345],[1484,340],[1483,337],[1483,334],[1483,331],[1483,328],[1483,325],[1485,320],[1486,319],[1486,317],[1487,315],[1488,314],[1489,313],[1491,312],[1494,311],[1497,310],[1500,309],[1503,308],[1505,307],[1508,306],[1510,304],[1512,301],[1514,299],[1517,296],[1518,295],[1519,294]],"dx":-275,"dy":-210,"length":428.3330290314186,"timing":[0,19,26,54,100,116,124,130,138,146,154,162,170,178,184,192,206,213,221,227,234,241,248,255,263,270,278,284,292,300,308,316,324,338,345,354,362,370,377,384,391,399,414,423,428,435,442,451,456,463,470,477]},{"start":[491,477],"end":[846,516],"points":[[491,477],[492,476],[494,475],[499,473],[508,470],[522,466],[539,462],[558,459],[579,458],[602,457],[627,456],[653,455],[678,455],[702,455],[726,456],[750,458],[771,461],[791,465],[809,469],[827,473],[842,476],[856,480],[867,483],[876,486],[885,487],[892,488],[896,489],[897,489],[898,489],[899,491],[903,492],[907,494],[910,495],[911,495],[910,496],[909,496],[908,497],[904,498],[896,500],[891,501],[885,502],[879,502],[873,502],[867,502],[863,502],[859,502],[855,502],[851,502],[848,502],[847,502],[846,502],[845,502],[845,503],[845,504],[845,505],[845,506],[845,508],[845,509],[845,510],[845,511],[846,512],[846,513],[846,514],[846,515],[846,516]],"dx":355,"dy":39,"length":510.2410966695557,"timing":[0,136,144,152,160,168,174,182,197,204,210,218,225,231,238,245,252,260,268,276,282,290,299,306,314,329,336,343,349,390,405,412,420,426,498,506,514,522,537,544,552,560,568,575,584,590,597,606,620,627,634,676,830,873,890,900,905,914,922,930,937,960,968,987,998]},{"start":[563,220],"end":[1650,655],"points":[[564,221],[567,224],[571,228],[577,232],[583,236],[590,240],[598,244],[609,248],[622,254],[641,261],[664,268],[689,278],[716,289],[746,300],[777,309],[810,318],[849,327],[888,337],[931,348],[975,362],[1069,396],[1113,412],[1154,428],[1194,442],[1232,455],[1271,471],[1306,488],[1340,505],[1372,520],[1401,535],[1430,548],[1455,559],[1476,568],[1494,576],[1510,583],[1524,589],[1536,595],[1546,599],[1555,603],[1565,607],[1575,612],[1587,616],[1600,621],[1611,625],[1620,628],[1625,629],[1626,630],[1627,630],[1633,633],[1639,637],[1643,639],[1644,639],[1645,639],[1645,642],[1648,647],[1649,651],[1650,654],[1650,655]],"dx":1087,"dy":435,"length":1180.5155401549735,"timing":[0,8,14,22,30,38,46,54,60,68,76,83,92,100,108,114,122,130,138,152,160,167,176,187,194,201,208,215,222,230,238,246,254,262,268,276,283,298,305,312,319,326,333,340,347,355,362,408,417,425,430,437,446,516,524,533,539,546]},{"start":[1650,655],"end":[1449,247],"points":[[1649,654],[1648,653],[1639,650],[1626,644],[1610,637],[1592,629],[1573,620],[1527,602],[1506,594],[1485,586],[1467,579],[1449,572],[1433,564],[1416,557],[1398,548],[1381,537],[1363,523],[1342,506],[1324,487],[1308,466],[1298,447],[1290,431],[1285,417],[1282,404],[1282,391],[1283,378],[1286,364],[1291,350],[1297,336],[1303,323],[1310,312],[1318,302],[1325,295],[1333,287],[1341,282],[1348,277],[1355,273],[1363,269],[1370,265],[1376,262],[1384,260],[1393,257],[1402,256],[1411,255],[1420,254],[1428,253],[1433,252],[1436,251],[1439,250],[1440,250],[1441,249],[1442,249],[1443,248],[1444,248],[1446,248],[1447,248],[1448,248],[1449,248],[1449,247]],"dx":-201,"dy":-408,"length":720.836944977579,"timing":[0,8,14,22,30,38,46,60,68,76,84,92,100,108,114,122,137,144,151,158,164,171,179,186,193,200,208,214,222,230,238,248,255,262,269,276,284,292,300,308,316,321,329,338,352,359,366,373,380,387,394,401,408,416,435,442,449,456,654]},{"start":[1448,247],"end":[1345,149],"points":[[1448,247],[1447,247],[1446,247],[1445,248],[1441,249],[1437,250],[1431,251],[1423,252],[1414,253],[1405,254],[1396,255],[1385,256],[1374,257],[1361,258],[1347,259],[1331,260],[1314,261],[1295,261],[1275,260],[1254,258],[1233,255],[1214,251],[1199,248],[1189,245],[1184,242],[1182,239],[1182,236],[1182,232],[1182,228],[1185,224],[1189,220],[1194,216],[1201,211],[1211,205],[1221,200],[1232,194],[1242,189],[1251,183],[1262,179],[1273,175],[1283,171],[1292,167],[1300,164],[1307,162],[1312,161],[1316,160],[1319,159],[1321,158],[1324,157],[1326,156],[1328,155],[1330,154],[1333,153],[1336,152],[1339,151],[1342,150],[1344,149],[1345,149]],"dx":-103,"dy":-98,"length":465.38090619660744,"timing":[0,13,51,59,67,73,81,89,97,105,113,121,127,135,143,151,159,173,180,188,194,201,208,215,222,229,236,243,251,259,267,274,281,289,297,304,319,326,333,340,347,354,361,368,375,381,389,397,405,413,421,430,437,444,451,459,467,475]},{"start":[1657,263],"end":[1579,645],"points":[[1657,263],[1657,264],[1656,265],[1652,267],[1647,269],[1641,271],[1633,274],[1625,277],[1617,280],[1611,283],[1607,284],[1604,285],[1603,286],[1602,286],[1601,287],[1597,288],[1591,289],[1567,290],[1548,290],[1526,291],[1502,292],[1476,295],[1452,298],[1432,302],[1418,307],[1408,314],[1401,322],[1397,329],[1395,336],[1395,344],[1396,355],[1401,372],[1409,394],[1420,420],[1431,446],[1442,470],[1452,491],[1461,509],[1471,523],[1480,536],[1489,548],[1498,559],[1506,568],[1514,578],[1522,587],[1530,596],[1538,607],[1547,616],[1554,623],[1559,627],[1563,630],[1566,633],[1569,635],[1572,637],[1574,638],[1575,639],[1576,640],[1577,641],[1577,642],[1578,643],[1579,644],[1579,645]],"dx":-78,"dy":382,"length":653.0954124145369,"timing":[0,35,55,62,69,77,84,91,97,107,113,119,126,135,143,151,159,174,181,189,197,205,212,219,227,235,250,257,264,272,278,285,292,299,307,313,319,327,335,343,351,361,368,375,382,390,397,405,413,421,426,435,442,451,465,472,479,486,493,500,507,514]},{"start":[991,338],"end":[1756,608],"points":[[990,339],[989,340],[987,342],[986,345],[984,349],[982,353],[981,357],[979,362],[977,367],[976,372],[976,378],[975,384],[974,390],[974,396],[974,402],[982,420],[993,432],[1013,446],[1037,460],[1066,474],[1098,487],[1127,498],[1158,507],[1191,515],[1229,522],[1269,530],[1313,541],[1359,555],[1405,568],[1444,579],[1477,589],[1509,597],[1538,606],[1566,615],[1593,624],[1616,632],[1633,638],[1647,642],[1659,645],[1672,648],[1686,651],[1703,656],[1719,660],[1734,663],[1745,666],[1751,667],[1754,667],[1755,667],[1761,667],[1767,668],[1774,668],[1780,668],[1783,667],[1785,666],[1786,665],[1786,663],[1786,662],[1785,660],[1785,659],[1784,658],[1784,657],[1783,656],[1782,654],[1781,651],[1778,648],[1776,644],[1773,640],[1771,636],[1769,632],[1768,628],[1766,624],[1764,621],[1763,618],[1762,616],[1761,615],[1760,614],[1759,613],[1759,612],[1758,611],[1757,610],[1757,609],[1756,608]],"dx":765,"dy":270,"length":1001.6348371560235,"timing":[0,7,18,25,32,39,46,53,61,70,76,84,91,99,107,122,130,138,145,153,162,169,176,183,191,200,207,215,223,229,237,245,253,268,275,281,289,296,303,309,316,324,330,338,345,353,361,369,408,415,424,429,437,446,454,470,477,484,491,499,508,515,523,531,537,552,560,568,573,580,587,594,601,608,616,623,631,639,645,653,661,669]},{"start":[345,105],"end":[1379,460],"points":[[345,105],[345,106],[348,110],[352,116],[356,123],[359,129],[362,135],[367,141],[373,150],[384,161],[400,174],[421,190],[488,229],[525,250],[529,253],[573,274],[615,293],[657,314],[706,334],[759,353],[814,374],[874,395],[937,417],[999,439],[1058,457],[1114,469],[1164,477],[1203,480],[1236,483],[1264,485],[1287,487],[1307,488],[1323,489],[1333,489],[1338,486],[1339,484],[1339,482],[1338,478],[1337,471],[1338,468],[1342,467],[1348,466],[1356,465],[1363,465],[1370,464],[1374,463],[1377,462],[1378,461],[1378,460],[1379,460]],"dx":1034,"dy":355,"length":1153.4742144454344,"timing":[0,69,123,131,139,146,154,161,168,178,185,193,207,215,227,234,241,248,255,262,270,276,284,292,300,308,314,323,331,338,346,355,362,368,377,385,393,401,415,423,430,438,447,455,463,469,476,491,498,508]},{"start":[1061,620],"end":[1538,694],"points":[[1061,620],[1073,623],[1094,626],[1118,630],[1144,636],[1173,643],[1204,649],[1240,656],[1278,664],[1319,673],[1355,680],[1385,684],[1409,687],[1431,690],[1447,692],[1461,694],[1471,696],[1479,699],[1485,700],[1491,701],[1495,702],[1497,702],[1498,702],[1499,702],[1502,702],[1506,702],[1510,702],[1513,702],[1514,701],[1515,701],[1516,700],[1517,700],[1518,700],[1521,699],[1525,698],[1530,697],[1534,696],[1537,695],[1538,694]],"dx":477,"dy":74,"length":487.02833564327915,"timing":[0,242,250,258,266,272,280,288,296,304,312,317,326,334,342,350,357,365,372,380,388,396,410,418,424,431,438,446,452,459,467,473,550,570,577,584,591,599,605]},{"start":[187,668],"end":[1268,362],"points":[[188,668],[198,664],[223,658],[256,652],[292,644],[331,635],[372,626],[408,618],[443,608],[476,597],[502,586],[523,575],[543,563],[561,551],[576,540],[590,527],[599,516],[603,505],[602,496],[598,488],[592,481],[585,475],[577,470],[568,465],[559,460],[550,456],[539,452],[528,448],[516,444],[505,440],[494,436],[485,431],[471,422],[468,418],[467,415],[468,412],[473,408],[480,405],[491,402],[505,400],[523,397],[547,395],[578,394],[619,394],[667,394],[719,395],[771,394],[819,393],[865,392],[906,389],[942,388],[978,387],[1012,387],[1045,388],[1076,391],[1103,395],[1124,399],[1138,401],[1157,401],[1163,401],[1169,401],[1175,400],[1179,399],[1180,398],[1181,397],[1182,396],[1184,395],[1188,392],[1193,388],[1200,384],[1206,381],[1210,379],[1213,377],[1214,376],[1215,375],[1223,373],[1231,372],[1238,371],[1245,370],[1249,368],[1252,367],[1253,366],[1254,365],[1255,365],[1259,364],[1263,363],[1266,363],[1267,362],[1268,362]],"dx":1081,"dy":-306,"length":1445.9277083025045,"timing":[0,17,24,31,38,45,53,59,68,76,84,92,100,107,114,121,130,138,145,154,160,168,176,183,192,199,208,214,221,229,238,245,260,268,276,284,292,300,308,314,322,336,344,350,357,364,373,378,388,396,399,408,413,422,430,437,446,453,469,476,484,492,500,508,514,522,530,544,552,559,566,573,580,586,623,630,638,646,653,662,667,676,690,738,760,767,774,781,788]},{"start":[1075,810],"end":[508,485],"points":[[1075,810],[1075,809],[1074,807],[1073,806],[1071,803],[1069,797],[1069,794],[1068,790],[1067,786],[1066,782],[1064,776],[1061,770],[1057,763],[1051,755],[1045,746],[1036,735],[1025,723],[1011,710],[996,697],[978,686],[957,676],[936,667],[913,657],[887,648],[859,639],[831,630],[804,621],[776,612],[747,602],[720,591],[696,580],[672,569],[650,558],[630,548],[610,539],[592,530],[577,522],[563,515],[550,509],[539,505],[531,501],[525,498],[521,495],[518,493],[515,491],[512,490],[511,489],[510,488],[510,487],[509,486],[509,485],[508,485]],"dx":-567,"dy":-325,"length":676.3849167210924,"timing":[0,53,61,69,84,91,99,107,115,123,131,137,145,153,161,169,177,185,191,199,207,222,229,236,243,250,257,264,271,278,285,292,299,306,314,323,330,339,344,353,361,375,382,389,396,403,410,418,424,431,452,459]},{"start":[1370,126],"end":[287,442],"points":[[1356,135],[1329,152],[1213,212],[1105,258],[988,298],[827,342],[711,370],[576,406],[512,421],[468,427],[420,426],[400,422],[383,418],[363,413],[352,410],[350,410],[344,408],[340,406],[339,406],[336,406],[332,405],[328,404],[324,403],[320,405],[314,408],[308,413],[304,417],[304,418],[304,420],[304,421],[298,428],[292,436],[288,442],[285,445],[284,445],[284,444],[285,443],[286,443],[286,442],[287,442]],"dx":-1083,"dy":316,"length":1152.4253808772012,"timing":[0,11,29,45,62,82,95,111,133,145,166,178,196,211,231,245,262,281,297,313,334,347,364,379,395,412,429,445,461,480,496,515,530,546,565,594,657,663,676,728]},{"start":[1190,538],"end":[516,208],"points":[[1185,538],[1174,534],[1111,523],[1035,513],[916,493],[853,474],[809,451],[782,429],[754,395],[736,374],[713,352],[703,343],[693,338],[676,326],[664,318],[644,304],[631,297],[618,291],[602,282],[596,278],[588,272],[583,268],[580,266],[573,262],[570,260],[563,254],[556,247],[548,240],[538,231],[532,226],[526,222],[524,219],[522,217],[520,216],[520,214],[520,212],[519,210],[518,210],[516,208]],"dx":-674,"dy":-330,"length":774.3576510041617,"timing":[0,14,29,45,63,78,94,111,131,144,164,177,195,211,227,247,262,278,295,312,329,347,362,378,395,412,432,444,461,478,495,509,527,543,563,575,595,612,628]},{"start":[1316,456],"end":[838,400],"points":[[1298,459],[1269,464],[1200,479],[1120,492],[1011,504],[967,506],[924,498],[904,489],[874,470],[859,456],[845,441],[830,422],[821,413],[815,406],[810,398],[808,394],[808,393],[809,392],[811,392],[815,392],[819,392],[825,393],[828,393],[832,394],[833,397],[834,398],[834,399],[835,399],[836,400],[837,400],[838,400]],"dx":-478,"dy":-56,"length":572.6813569809146,"timing":[0,10,25,40,60,73,91,108,124,142,156,174,190,206,227,243,257,277,290,305,326,342,360,374,392,408,423,441,460,488,506]},{"start":[256,234],"end":[820,466],"points":[[264,237],[275,242],[317,263],[346,278],[374,293],[436,324],[498,354],[516,362],[563,382],[608,402],[625,413],[640,427],[643,432],[647,443],[648,449],[648,452],[648,456],[648,462],[647,472],[648,477],[652,482],[656,483],[660,483],[669,482],[680,478],[708,469],[731,462],[756,456],[772,450],[791,446],[810,441],[832,438],[839,438],[840,438],[841,438],[841,440],[841,442],[840,443],[840,445],[839,446],[838,446],[836,449],[835,451],[834,454],[830,458],[827,461],[824,464],[824,466],[822,467],[822,468],[821,468],[820,468],[820,467],[820,466]],"dx":564,"dy":232,"length":718.2183815778534,"timing":[0,11,27,44,60,76,96,109,128,145,163,180,193,212,230,246,260,277,292,311,327,343,360,379,393,412,429,445,462,476,492,512,529,545,562,582,597,611,633,644,659,675,695,709,725,745,761,777,791,811,830,850,860,880]},{"start":[620,500],"end":[1223,177],"points":[[636,487],[656,468],[696,433],[757,386],[832,331],[882,293],[920,265],[967,234],[1000,214],[1035,194],[1055,184],[1069,179],[1082,175],[1085,175],[1086,176],[1088,176],[1090,178],[1095,178],[1114,176],[1132,173],[1144,171],[1151,171],[1152,174],[1152,175],[1152,176],[1153,177],[1154,178],[1159,179],[1164,180],[1170,180],[1176,180],[1187,180],[1194,180],[1204,180],[1216,178],[1220,177],[1223,177]],"dx":603,"dy":-323,"length":695.0204202787986,"timing":[0,7,24,37,57,74,89,106,122,139,157,174,190,207,222,242,287,304,325,341,355,371,391,413,425,437,453,473,488,506,521,539,554,572,589,605,621]},{"start":[947,174],"end":[141,635],"points":[[940,178],[915,190],[794,246],[697,288],[552,343],[463,380],[361,426],[317,447],[294,458],[278,466],[263,475],[242,490],[226,502],[212,512],[195,522],[187,527],[182,531],[173,542],[164,553],[156,563],[150,573],[148,575],[148,576],[148,577],[148,578],[148,581],[148,586],[150,591],[152,598],[153,603],[153,610],[152,614],[150,622],[149,626],[149,627],[148,627],[148,628],[148,629],[145,631],[144,634],[141,635]],"dx":-806,"dy":461,"length":960.2332966398055,"timing":[0,12,32,48,64,80,99,116,132,146,166,183,199,214,230,247,265,284,296,313,334,346,367,391,398,413,430,446,461,483,498,514,530,548,565,581,596,613,634,647,663]},{"start":[457,604],"end":[636,156],"points":[[458,604],[459,604],[459,605],[459,606],[460,607],[462,607],[463,607],[465,606],[470,600],[476,593],[487,579],[499,562],[515,539],[533,511],[552,480],[570,441],[588,398],[602,361],[616,310],[626,276],[631,246],[633,219],[636,197],[640,181],[642,171],[642,168],[642,165],[642,163],[641,162],[641,160],[641,159],[639,158],[638,157],[637,156],[636,156]],"dx":179,"dy":-448,"length":505.27333750945957,"timing":[0,84,101,117,134,218,234,251,267,284,301,317,334,351,367,384,402,417,435,450,467,483,501,518,534,551,567,600,634,650,667,684,718,751,784]},{"start":[1229,230],"end":[432,812],"points":[[1229,231],[1229,232],[1227,232],[1225,233],[1222,234],[1219,236],[1212,240],[1205,245],[1193,258],[1184,273],[1172,290],[1150,318],[1120,351],[1090,386],[1052,419],[1012,453],[976,492],[951,528],[923,557],[895,581],[870,598],[843,618],[830,628],[815,636],[797,643],[773,653],[745,661],[719,672],[693,679],[661,686],[630,697],[600,704],[572,715],[537,731],[518,743],[503,753],[490,760],[483,766],[480,768],[478,770],[476,771],[471,774],[468,777],[462,779],[456,782],[451,786],[447,788],[445,789],[441,793],[440,796],[438,799],[436,802],[435,804],[434,805],[433,808],[433,809],[433,811],[432,812]],"dx":-797,"dy":582,"length":1016.3645871088913,"timing":[0,50,67,83,100,117,133,151,167,183,200,217,234,253,267,283,300,316,333,350,367,383,400,417,434,450,467,483,500,516,534,549,567,583,601,617,633,650,667,684,700,716,733,752,766,783,800,817,833,850,867,883,899,917,934,950,967,983]},{"start":[363,327],"end":[898,792],"points":[[364,328],[367,338],[375,352],[387,367],[398,378],[406,386],[420,396],[427,402],[438,409],[450,418],[456,422],[469,432],[483,440],[500,453],[522,466],[548,482],[567,495],[584,511],[608,536],[634,568],[655,593],[679,614],[709,636],[734,655],[764,679],[783,693],[799,705],[812,716],[826,725],[837,733],[846,741],[858,751],[869,760],[878,767],[885,773],[892,778],[899,782],[903,785],[907,787],[908,788],[909,788],[910,788],[910,790],[909,791],[904,791],[902,792],[901,792],[900,792],[898,792]],"dx":535,"dy":465,"length":735.7145552045228,"timing":[0,17,34,50,67,84,102,118,134,151,167,183,200,217,234,250,268,284,300,317,334,351,368,384,400,416,434,450,467,483,501,517,534,551,567,583,600,617,634,651,683,801,834,850,867,884,901,918,934]},{"start":[159,842],"end":[710,121],"points":[[157,842],[157,841],[158,841],[158,840],[162,840],[166,838],[174,835],[188,828],[207,819],[230,808],[258,792],[295,772],[329,753],[367,730],[405,705],[436,682],[472,654],[489,633],[504,611],[517,585],[530,556],[540,529],[547,505],[553,484],[557,464],[557,446],[557,428],[556,411],[556,395],[556,390],[556,384],[556,379],[556,375],[556,369],[556,365],[556,361],[558,353],[560,345],[561,335],[567,323],[577,302],[586,284],[592,261],[602,231],[611,205],[623,176],[637,149],[649,123],[662,105],[673,88],[681,72],[689,66],[689,73],[689,81],[689,88],[689,96],[690,104],[690,106],[690,107],[690,110],[690,112],[690,115],[690,116],[690,118],[690,119],[692,121],[692,122],[693,125],[696,128],[698,130],[699,130],[701,130],[702,130],[705,130],[707,130],[708,130],[710,129],[710,128],[710,126],[710,125],[710,123],[710,122],[710,121]],"dx":551,"dy":-721,"length":1097.4937979265546,"timing":[0,116,133,149,166,183,200,216,233,250,266,283,299,316,332,349,365,382,400,415,432,450,466,483,500,516,533,549,566,583,599,615,632,650,666,683,700,716,732,749,766,782,799,816,832,849,866,882,899,916,933,1100,1116,1133,1149,1165,1182,1199,1215,1233,1250,1265,1282,1300,1316,1332,1349,1366,1382,1398,1416,1482,1499,1516,1532,1549,1565,1599,1615,1633,1649,1665,1683]},{"start":[515,139],"end":[1455,806],"points":[[515,140],[516,140],[521,142],[530,145],[545,151],[567,160],[603,174],[641,190],[689,212],[736,235],[798,269],[852,301],[908,338],[961,378],[1016,423],[1063,464],[1110,505],[1157,549],[1193,585],[1224,618],[1258,656],[1292,701],[1330,748],[1364,792],[1386,825],[1402,851],[1416,871],[1430,887],[1439,895],[1445,898],[1446,898],[1446,897],[1446,892],[1446,886],[1445,880],[1444,872],[1444,864],[1446,858],[1448,851],[1450,843],[1452,836],[1453,827],[1454,820],[1454,813],[1454,809],[1455,807],[1455,806]],"dx":940,"dy":667,"length":1316.8430004777479,"timing":[0,3,20,37,53,70,86,106,119,136,153,169,186,204,221,236,252,269,286,303,319,336,352,369,386,403,420,436,453,469,485,502,519,535,552,569,587,603,619,636,652,669,686,702,719,735,752]},{"start":[1528,372],"end":[178,715],"points":[[1529,372],[1530,373],[1529,373],[1527,374],[1512,379],[1489,383],[1449,390],[1397,398],[1325,408],[1246,423],[1150,450],[1059,480],[964,511],[851,545],[751,572],[658,598],[563,626],[486,651],[405,677],[343,696],[294,715],[259,734],[229,749],[208,758],[192,764],[184,769],[183,770],[186,768],[187,763],[188,756],[188,749],[188,741],[188,735],[187,730],[187,726],[187,723],[186,721],[186,720],[184,719],[182,718],[181,717],[180,717],[179,717],[179,716],[178,716],[178,715]],"dx":-1350,"dy":343,"length":1473.3671056572782,"timing":[0,16,145,150,166,183,199,216,233,249,268,283,300,316,333,350,366,383,399,417,433,451,466,484,499,517,533,583,600,617,633,650,666,684,700,717,733,750,766,783,814,827,841,852,927,942]},{"start":[919,558],"end":[1561,159],"points":[[920,558],[921,557],[928,554],[941,547],[959,538],[987,522],[1022,503],[1078,469],[1132,435],[1192,400],[1272,362],[1326,339],[1383,314],[1437,288],[1480,263],[1506,244],[1535,223],[1554,207],[1565,193],[1571,183],[1573,175],[1574,172],[1574,171],[1574,170],[1574,168],[1570,164],[1566,161],[1563,160],[1563,159],[1562,159],[1561,159]],"dx":642,"dy":-399,"length":788.4964486596245,"timing":[0,3,20,38,53,70,87,103,119,137,154,170,186,203,221,236,253,272,286,304,321,336,434,441,453,469,486,504,522,536,553]},{"start":[707,302],"end":[955,819],"points":[[708,302],[711,304],[718,312],[734,328],[755,349],[780,374],[807,405],[829,433],[847,462],[864,497],[876,531],[887,568],[894,614],[897,654],[900,693],[903,734],[908,767],[911,793],[914,814],[917,826],[920,834],[921,836],[924,836],[925,835],[928,834],[934,831],[940,828],[946,825],[951,823],[954,820],[955,820],[955,819]],"dx":248,"dy":517,"length":636.4411857942838,"timing":[0,10,27,44,60,77,93,110,127,144,160,177,194,211,227,244,260,278,293,311,327,345,393,411,427,444,460,477,494,511,527,544]},{"start":[266,843],"end":[792,473],"points":[[266,842],[267,841],[270,838],[275,834],[281,828],[290,820],[301,811],[317,798],[336,785],[364,759],[390,736],[413,719],[441,701],[466,687],[494,668],[520,648],[544,628],[568,605],[591,578],[608,559],[621,545],[631,532],[636,523],[640,517],[643,512],[644,510],[644,511],[644,512],[645,512],[648,513],[649,513],[648,512],[647,512],[642,509],[641,508],[643,509],[644,509],[645,509],[643,509],[643,508],[643,507],[644,506],[645,506],[645,505],[647,504],[649,503],[654,502],[662,502],[674,500],[688,498],[703,494],[717,491],[731,489],[741,486],[749,483],[755,480],[761,479],[765,478],[768,477],[770,477],[772,476],[775,476],[778,475],[782,475],[787,474],[790,473],[792,473]],"dx":526,"dy":-370,"length":687.1216225041971,"timing":[0,7,23,40,57,73,90,107,124,140,157,173,190,207,224,241,258,275,291,308,325,341,358,375,391,408,753,768,773,790,807,1068,1073,1090,1107,1156,1173,1190,1208,1223,1240,1256,1274,1406,1423,1440,1456,1473,1489,1508,1523,1540,1556,1573,1590,1608,1623,1639,1656,1673,1689,1706,1723,1739,1756,1773,1789]},{"start":[1237,142],"end":[196,475],"points":[[1236,142],[1229,148],[1212,160],[1194,173],[1162,192],[1124,215],[1070,247],[1003,283],[935,314],[861,342],[776,368],[702,385],[619,396],[548,403],[481,409],[419,414],[360,418],[317,421],[284,425],[258,427],[235,431],[222,433],[217,437],[215,443],[215,449],[215,454],[213,459],[208,466],[202,471],[197,473],[196,475]],"dx":-1041,"dy":333,"length":1127.1051756913648,"timing":[0,20,37,54,70,85,101,118,134,151,168,185,201,218,237,251,267,284,302,318,337,351,368,385,402,418,434,451,467,485,501]},{"start":[803,645],"end":[257,793],"points":[[804,645],[804,644],[805,643],[805,642],[803,640],[797,638],[785,638],[766,638],[745,639],[720,642],[689,646],[661,652],[631,660],[598,670],[566,683],[528,706],[487,734],[443,757],[410,768],[379,775],[350,782],[330,788],[316,791],[307,793],[302,793],[298,794],[292,795],[287,796],[282,797],[276,798],[269,799],[261,800],[255,800],[253,801],[253,800],[253,799],[253,798],[254,798],[254,797],[255,797],[255,795],[256,794],[257,793]],"dx":-546,"dy":148,"length":599.9499362338588,"timing":[0,7,22,36,52,70,86,102,119,136,152,169,186,204,221,236,253,269,286,303,319,336,352,369,386,402,419,436,454,469,486,503,519,536,682,698,718,727,738,752,769,785,802]},{"start":[1197,639],"end":[430,569],"points":[[1197,638],[1196,638],[1196,637],[1196,636],[1195,636],[1193,633],[1188,629],[1175,619],[1153,604],[1119,586],[1070,566],[1021,550],[969,539],[915,530],[861,526],[799,525],[746,528],[685,534],[632,541],[585,547],[547,553],[510,558],[483,562],[463,566],[450,567],[441,568],[435,568],[434,568],[433,568],[432,569],[430,569]],"dx":-767,"dy":-70,"length":796.2566419353021,"timing":[0,20,29,57,75,90,107,123,140,157,174,190,207,225,241,257,275,290,308,324,341,357,374,393,408,423,440,457,507,523,541]},{"start":[1530,761],"end":[146,676],"points":[[1529,761],[1528,761],[1528,760],[1527,760],[1526,759],[1522,757],[1511,752],[1489,745],[1446,733],[1393,721],[1333,711],[1253,702],[1182,696],[1104,690],[1011,684],[923,683],[835,685],[731,685],[636,682],[543,675],[458,665],[376,655],[314,647],[262,638],[229,631],[207,625],[193,621],[190,621],[187,621],[180,621],[172,622],[165,625],[159,629],[153,635],[146,643],[141,651],[141,656],[141,660],[141,664],[141,667],[141,668],[143,670],[144,673],[146,675],[146,676]],"dx":-1384,"dy":-85,"length":1441.2251655042746,"timing":[0,20,26,106,122,138,155,171,188,205,222,238,255,272,288,304,321,338,355,371,388,405,421,438,454,471,488,504,522,538,555,571,588,605,621,638,655,671,688,704,720,737,754,771,787]},{"start":[146,676],"end":[1189,225],"points":[[147,676],[148,675],[156,673],[170,671],[199,669],[235,666],[281,661],[338,655],[417,643],[494,625],[601,560],[692,506],[779,470],[840,448],[914,421],[970,399],[1017,383],[1057,368],[1081,357],[1098,347],[1106,339],[1110,334],[1111,329],[1112,324],[1112,317],[1113,309],[1116,302],[1120,298],[1123,292],[1127,284],[1132,274],[1137,265],[1145,256],[1151,249],[1159,243],[1169,236],[1178,232],[1185,228],[1188,225],[1189,225]],"dx":1043,"dy":-451,"length":1179.0065586065464,"timing":[0,11,28,46,61,78,94,112,129,146,161,179,199,213,228,246,261,278,294,311,327,344,361,378,396,411,428,446,461,479,494,512,529,545,561,577,594,611,627,644]},{"start":[166,521],"end":[1734,218],"points":[[167,521],[170,520],[177,518],[187,517],[202,517],[224,517],[260,517],[302,517],[355,513],[434,500],[508,480],[583,464],[667,449],[744,435],[825,422],[914,407],[988,393],[1058,378],[1136,363],[1202,350],[1263,338],[1330,326],[1387,315],[1441,304],[1496,292],[1543,282],[1586,272],[1627,263],[1656,253],[1675,244],[1691,236],[1701,232],[1709,229],[1712,227],[1713,227],[1715,226],[1717,226],[1719,225],[1722,224],[1725,221],[1731,219],[1734,218]],"dx":1568,"dy":-303,"length":1602.2676429580777,"timing":[0,12,29,45,62,79,95,112,129,146,162,179,196,213,229,246,264,279,295,312,329,345,362,378,395,412,429,445,463,479,497,513,529,545,562,612,628,645,662,678,695,712]},{"start":[438,325],"end":[1324,686],"points":[[439,325],[440,326],[448,328],[462,332],[497,343],[543,358],[607,379],[687,412],[776,452],[855,488],[936,524],[1002,553],[1060,582],[1118,613],[1162,639],[1199,662],[1227,680],[1250,698],[1265,710],[1275,718],[1280,720],[1281,720],[1285,720],[1290,719],[1296,714],[1300,706],[1304,699],[1309,696],[1314,694],[1320,691],[1322,689],[1323,687],[1324,686]],"dx":886,"dy":361,"length":992.8070007627922,"timing":[0,5,20,37,54,70,87,104,121,137,155,170,187,203,222,237,254,271,287,304,320,337,354,370,386,403,420,436,454,470,487,503,520]},{"start":[1672,575],"end":[775,481],"points":[[1671,575],[1668,575],[1664,575],[1654,576],[1638,578],[1617,581],[1590,584],[1557,586],[1510,588],[1457,588],[1390,586],[1300,580],[1224,573],[1150,566],[1070,559],[1019,554],[932,543],[885,535],[835,526],[799,518],[775,510],[764,505],[760,501],[758,498],[758,497],[758,496],[757,496],[757,494],[759,493],[761,492],[763,491],[764,489],[766,486],[769,484],[771,483],[773,482],[774,481],[775,481]],"dx":-897,"dy":-94,"length":951.8244187030293,"timing":[0,11,30,46,61,79,95,112,128,145,163,179,196,211,228,248,263,280,295,311,328,345,362,379,394,417,429,478,495,511,528,545,561,578,594,611,627,644]},{"start":[934,568],"end":[1516,641],"points":[[933,568],[931,568],[925,566],[916,563],[907,558],[890,549],[871,539],[854,528],[841,518],[830,508],[827,498],[826,484],[826,472],[828,464],[831,460],[831,459],[832,459],[833,459],[834,459],[836,456],[836,454],[836,452],[836,453],[837,456],[851,461],[866,463],[896,468],[939,478],[993,493],[1049,510],[1093,526],[1149,548],[1199,569],[1234,582],[1273,596],[1302,607],[1328,616],[1354,625],[1376,631],[1390,635],[1405,638],[1418,640],[1428,641],[1437,641],[1446,642],[1453,642],[1459,642],[1466,642],[1472,642],[1483,643],[1491,643],[1499,643],[1506,643],[1511,643],[1513,643],[1515,642],[1515,641],[1516,641]],"dx":582,"dy":73,"length":896.1803504915226,"timing":[0,15,35,49,66,82,99,115,132,148,165,181,198,214,231,247,444,452,464,480,497,514,635,648,666,681,697,714,730,747,764,780,797,814,831,847,864,880,897,914,931,947,964,981,997,1014,1031,1047,1065,1082,1097,1115,1130,1147,1164,1181,1205,1210]},{"start":[1861,715],"end":[1443,254],"points":[[1861,715],[1860,715],[1859,715],[1856,715],[1851,715],[1843,714],[1824,710],[1796,704],[1759,698],[1707,693],[1654,691],[1577,687],[1480,680],[1411,677],[1349,675],[1312,665],[1294,645],[1289,615],[1301,575],[1327,538],[1361,501],[1400,457],[1425,422],[1443,391],[1455,364],[1461,348],[1465,332],[1466,324],[1466,319],[1462,313],[1455,306],[1447,299],[1441,293],[1439,289],[1438,286],[1437,281],[1435,275],[1435,270],[1434,266],[1436,263],[1438,259],[1440,257],[1442,255],[1443,254]],"dx":-418,"dy":-461,"length":1040.6095762399798,"timing":[0,17,33,50,67,85,100,117,135,151,167,184,201,217,236,250,267,283,300,316,333,350,366,383,400,418,435,450,466,483,500,517,533,550,566,583,600,616,634,650,666,683,700,716]},{"start":[1676,823],"end":[338,626],"points":[[1676,823],[1677,823],[1678,824],[1678,825],[1674,826],[1663,828],[1646,829],[1618,829],[1570,825],[1514,819],[1451,812],[1379,804],[1302,794],[1224,782],[1140,768],[1065,756],[992,746],[910,734],[835,721],[760,708],[681,696],[615,688],[554,680],[497,673],[450,669],[403,664],[359,658],[326,651],[305,646],[295,643],[292,641],[292,640],[294,638],[298,636],[301,635],[302,633],[304,631],[308,630],[314,628],[322,627],[330,626],[335,626],[337,626],[338,626]],"dx":-1338,"dy":-197,"length":1455.1822640483163,"timing":[0,14,30,47,64,80,97,113,130,147,165,182,197,214,230,247,263,280,297,313,330,347,365,380,397,414,430,447,463,482,497,515,530,547,563,581,598,613,630,646,663,683,697,714]},{"start":[62,639],"end":[926,823],"points":[[62,638],[65,636],[75,633],[95,630],[123,627],[164,624],[223,623],[287,628],[376,641],[451,653],[522,666],[589,681],[657,699],[709,715],[757,735],[791,752],[817,769],[837,783],[855,797],[868,807],[882,816],[894,822],[904,826],[911,827],[916,828],[917,828],[918,828],[919,827],[922,827],[924,827],[925,826],[925,825],[926,824],[926,823]],"dx":864,"dy":184,"length":909.1663568495692,"timing":[0,11,27,44,60,77,93,110,127,143,160,176,193,210,228,245,260,278,293,312,327,345,361,377,393,464,481,493,510,526,543,637,676,726]},{"start":[621,685],"end":[802,234],"points":[[621,684],[621,683],[622,681],[623,680],[628,676],[636,670],[647,660],[662,637],[678,610],[695,577],[711,546],[727,516],[743,487],[757,455],[768,428],[779,399],[787,374],[796,347],[803,325],[810,304],[816,289],[820,276],[822,263],[823,255],[824,249],[824,246],[824,244],[823,243],[821,242],[819,241],[818,241],[817,240],[815,239],[813,237],[810,237],[807,236],[804,235],[802,234]],"dx":181,"dy":-451,"length":515.903225061173,"timing":[0,17,53,69,86,102,119,136,153,169,187,203,221,236,254,270,287,303,320,336,353,370,387,402,419,436,453,469,486,502,519,536,553,570,586,606,619,636]},{"start":[1269,758],"end":[780,555],"points":[[1268,758],[1268,757],[1266,754],[1264,750],[1261,746],[1257,740],[1253,735],[1252,727],[1253,720],[1255,715],[1254,711],[1246,706],[1229,700],[1199,691],[1153,676],[1105,661],[1056,647],[1007,632],[966,619],[929,604],[895,587],[870,574],[851,566],[833,560],[819,556],[808,553],[801,552],[794,551],[789,551],[787,551],[787,552],[786,552],[784,553],[782,554],[780,555]],"dx":-489,"dy":-203,"length":556.5237184205768,"timing":[0,12,28,45,62,78,95,111,128,144,162,179,195,211,228,246,261,279,294,312,329,345,362,378,395,411,429,445,462,478,494,550,561,579,594]},{"start":[1114,814],"end":[1219,355],"points":[[1113,814],[1112,814],[1111,814],[1110,813],[1105,811],[1098,807],[1088,804],[1079,799],[1072,795],[1070,791],[1071,784],[1081,769],[1099,743],[1121,709],[1141,674],[1163,634],[1180,596],[1197,549],[1208,509],[1218,474],[1228,443],[1236,421],[1242,401],[1247,381],[1249,365],[1251,352],[1252,342],[1252,336],[1250,331],[1250,329],[1250,328],[1249,328],[1247,328],[1245,328],[1244,328],[1240,330],[1235,333],[1230,338],[1226,343],[1223,347],[1221,351],[1219,354],[1219,355]],"dx":105,"dy":-459,"length":597.8534227808108,"timing":[0,15,27,40,57,74,90,106,123,139,156,173,190,207,224,244,257,275,290,307,324,340,358,373,389,406,422,439,456,473,506,522,539,556,574,589,607,623,641,656,673,689,706]},{"start":[1656,283],"end":[1372,518],"points":[[1655,283],[1651,285],[1643,288],[1630,293],[1607,301],[1581,309],[1536,322],[1485,340],[1442,362],[1405,386],[1373,411],[1349,437],[1341,454],[1341,468],[1343,477],[1348,484],[1356,489],[1366,494],[1375,497],[1385,499],[1391,501],[1395,501],[1397,501],[1397,502],[1397,503],[1395,504],[1389,507],[1381,510],[1375,512],[1371,514],[1371,516],[1371,517],[1372,517],[1372,518]],"dx":-284,"dy":235,"length":486.33614827558813,"timing":[0,13,30,46,63,79,96,112,129,146,162,179,196,212,229,246,265,281,297,314,330,346,364,437,450,462,481,496,512,529,545,566,580,596]},{"start":[889,685],"end":[1711,791],"points":[[890,685],[891,685],[895,682],[901,677],[909,670],[919,659],[927,649],[941,635],[956,621],[968,616],[980,615],[994,616],[1009,621],[1023,627],[1046,638],[1078,655],[1123,674],[1170,687],[1222,696],[1274,704],[1330,713],[1383,721],[1435,731],[1487,739],[1529,744],[1569,748],[1603,751],[1637,754],[1663,756],[1681,758],[1691,759],[1694,759],[1694,760],[1694,761],[1695,761],[1696,764],[1697,766],[1697,768],[1698,773],[1701,779],[1705,783],[1708,787],[1710,789],[1711,790],[1711,791]],"dx":822,"dy":106,"length":889.2633081376038,"timing":[0,5,20,37,53,70,88,103,123,137,154,170,187,204,220,237,253,270,287,304,320,337,353,370,387,404,420,437,454,471,489,504,520,552,555,570,587,603,620,638,653,672,687,703,775]},{"start":[1524,470],"end":[823,285],"points":[[1523,470],[1508,471],[1479,472],[1445,470],[1399,460],[1335,446],[1264,431],[1195,417],[1120,403],[1055,392],[991,379],[922,363],[873,349],[839,340],[818,335],[810,332],[808,330],[808,329],[808,328],[808,327],[809,326],[809,324],[811,321],[813,315],[814,311],[817,305],[820,300],[822,295],[823,291],[823,288],[823,285]],"dx":-701,"dy":-185,"length":779.6337727972568,"timing":[0,16,33,49,66,83,99,116,133,149,166,184,199,216,233,250,268,283,301,319,333,349,366,383,399,416,433,452,466,483,501]},{"start":[405,190],"end":[177,471],"points":[[405,191],[407,193],[408,199],[409,208],[408,222],[404,237],[398,259],[391,282],[382,304],[368,327],[348,345],[328,355],[302,365],[278,371],[256,376],[234,381],[213,384],[201,387],[191,392],[186,397],[183,400],[181,406],[181,414],[181,421],[181,430],[182,439],[182,444],[182,448],[182,451],[182,456],[181,460],[180,463],[178,466],[178,468],[177,469],[177,470],[177,471]],"dx":-228,"dy":281,"length":420.8141622320312,"timing":[0,9,26,42,59,75,92,109,127,143,159,176,193,209,226,242,259,276,292,309,326,344,359,376,392,409,426,444,461,476,493,509,525,542,559,575,581]},{"start":[633,603],"end":[1135,356],"points":[[633,603],[634,604],[635,604],[636,604],[638,603],[642,602],[649,599],[657,592],[664,579],[666,557],[664,522],[658,489],[644,462],[625,439],[613,425],[610,418],[611,412],[618,406],[639,399],[671,391],[713,381],[761,371],[818,362],[870,353],[919,344],[972,335],[1014,330],[1049,327],[1083,325],[1107,324],[1122,324],[1130,324],[1131,326],[1134,329],[1136,331],[1136,332],[1136,333],[1137,338],[1137,344],[1137,349],[1136,353],[1135,355],[1135,356]],"dx":502,"dy":-247,"length":789.7297546579923,"timing":[0,17,135,184,200,216,234,249,267,283,300,316,334,349,367,383,403,416,434,450,467,485,500,517,533,550,566,583,599,617,633,650,699,716,733,749,766,782,799,816,833,849,865]},{"start":[1164,322],"end":[514,850],"points":[[1163,323],[1162,324],[1157,328],[1149,334],[1134,343],[1108,360],[1077,379],[1035,407],[996,436],[955,469],[909,508],[861,550],[820,587],[783,623],[746,662],[719,694],[697,724],[677,759],[662,790],[647,814],[634,831],[625,840],[616,845],[609,847],[606,847],[603,846],[600,844],[595,841],[589,838],[581,836],[573,833],[565,832],[557,832],[548,832],[541,834],[532,836],[526,838],[522,840],[519,842],[519,844],[518,844],[518,845],[517,846],[516,847],[516,848],[515,848],[515,849],[514,849],[514,850]],"dx":-650,"dy":528,"length":879.8574170440396,"timing":[0,9,26,43,59,76,95,111,128,143,160,178,193,210,226,244,259,276,292,309,326,343,362,377,392,409,426,443,459,476,493,509,526,542,559,576,592,609,626,642,660,2361,2375,2393,2412,2428,2441,2462,2475]},{"start":[1217,523],"end":[1631,376],"points":[[1217,523],[1218,523],[1218,524],[1222,526],[1228,529],[1236,532],[1246,536],[1257,541],[1272,545],[1288,549],[1306,551],[1328,552],[1348,552],[1376,549],[1400,542],[1425,531],[1448,516],[1471,499],[1496,477],[1518,458],[1542,439],[1563,423],[1581,410],[1597,399],[1607,391],[1615,385],[1622,381],[1626,379],[1628,377],[1629,377],[1629,376],[1630,376],[1631,376]],"dx":414,"dy":-147,"length":476.43172728316466,"timing":[0,126,134,150,167,184,201,218,234,250,269,286,302,317,334,350,367,384,400,417,435,450,467,483,502,517,534,551,567,594,601,617,635]},{"start":[956,147],"end":[1121,853],"points":[[956,146],[956,145],[956,146],[957,147],[960,152],[967,160],[975,169],[985,181],[996,193],[1008,205],[1019,217],[1028,228],[1033,236],[1039,241],[1041,243],[1041,244],[1041,246],[1042,263],[1042,298],[1042,340],[1038,388],[1031,430],[1027,471],[1026,516],[1029,554],[1033,591],[1036,630],[1038,664],[1040,702],[1042,732],[1046,760],[1050,784],[1055,803],[1058,814],[1061,822],[1066,828],[1069,832],[1070,834],[1070,835],[1070,836],[1073,839],[1076,843],[1080,848],[1085,852],[1093,857],[1098,858],[1102,859],[1103,859],[1104,859],[1105,859],[1107,859],[1110,857],[1115,856],[1118,854],[1120,853],[1121,853]],"dx":165,"dy":706,"length":792.4642749941547,"timing":[0,21,97,103,117,134,150,167,183,200,217,234,250,267,284,361,367,383,400,419,433,450,467,483,500,518,534,550,567,584,600,617,634,650,667,684,700,718,734,751,766,783,800,817,833,850,866,883,900,916,933,952,967,983,1000,1017]},{"start":[279,186],"end":[114,423],"points":[[279,187],[279,189],[279,196],[278,217],[272,234],[262,252],[247,278],[232,299],[216,322],[199,344],[187,355],[176,365],[163,381],[156,390],[153,395],[151,400],[150,401],[148,407],[146,410],[146,412],[145,414],[144,415],[144,418],[143,419],[141,421],[139,424],[137,426],[135,427],[133,428],[132,428],[130,428],[126,428],[122,428],[121,428],[120,428],[119,428],[118,427],[117,426],[114,424],[114,423]],"dx":-165,"dy":237,"length":311.24280310788095,"timing":[0,3,19,35,51,68,84,101,118,134,151,168,185,201,218,234,251,268,284,302,319,334,351,368,384,401,418,434,451,508,521,535,556,569,584,683,718,735,751,768]},{"start":[322,439],"end":[896,210],"points":[[322,439],[323,439],[323,438],[324,438],[327,438],[333,438],[344,440],[363,443],[385,449],[415,457],[461,467],[514,479],[578,488],[652,491],[713,491],[760,482],[798,465],[822,447],[837,429],[850,412],[859,395],[869,377],[878,356],[885,335],[891,319],[896,306],[897,298],[898,293],[898,286],[899,279],[900,273],[900,265],[900,257],[900,248],[900,240],[900,234],[899,230],[899,225],[899,220],[898,218],[897,215],[897,211],[896,211],[896,210]],"dx":574,"dy":-229,"length":775.3518106309218,"timing":[0,26,33,50,67,83,100,117,133,150,167,183,200,217,233,250,267,283,300,317,333,351,367,383,400,417,433,450,467,483,500,517,533,550,567,583,601,617,633,650,667,683,700,750]},{"start":[243,653],"end":[1057,515],"points":[[244,653],[246,653],[255,652],[267,650],[284,650],[309,648],[343,647],[388,646],[454,641],[525,634],[609,623],[715,614],[816,611],[911,606],[1000,599],[1059,590],[1090,579],[1104,570],[1104,566],[1099,560],[1089,554],[1079,547],[1072,541],[1065,534],[1062,530],[1061,530],[1061,529],[1061,527],[1059,524],[1058,521],[1058,520],[1058,518],[1058,517],[1057,515]],"dx":814,"dy":-138,"length":944.4306329198841,"timing":[0,9,26,42,59,76,92,109,126,142,159,176,192,209,226,242,259,276,292,309,325,342,359,376,392,409,426,442,459,476,492,509,526,542]},{"start":[1662,579],"end":[1016,736],"points":[[1662,578],[1662,577],[1662,576],[1662,575],[1660,574],[1658,572],[1656,571],[1654,569],[1650,567],[1640,565],[1629,562],[1601,558],[1566,556],[1518,556],[1444,556],[1350,564],[1263,575],[1193,588],[1124,607],[1080,624],[1046,641],[1025,659],[1013,673],[1010,686],[1009,697],[1009,708],[1011,715],[1015,721],[1019,725],[1019,726],[1019,727],[1019,729],[1019,732],[1019,735],[1018,735],[1017,736],[1016,736]],"dx":-646,"dy":157,"length":749.569891648461,"timing":[0,23,44,52,69,84,100,117,134,150,167,184,200,217,234,250,267,284,300,317,334,350,367,384,400,417,434,450,467,484,500,517,534,550,705,717,733]},{"start":[909,520],"end":[427,291],"points":[[908,519],[906,519],[891,518],[857,513],[818,506],[774,497],[732,483],[693,466],[664,444],[639,416],[623,389],[605,361],[585,337],[566,316],[550,307],[533,305],[519,305],[505,312],[490,322],[476,333],[469,340],[462,345],[459,346],[457,347],[456,347],[455,347],[454,347],[452,345],[449,340],[446,335],[441,328],[438,320],[435,313],[433,304],[430,298],[428,293],[427,291]],"dx":-482,"dy":-229,"length":611.5794612407922,"timing":[0,19,31,48,65,81,98,115,131,148,164,181,198,215,231,248,264,281,298,315,331,348,365,381,398,415,432,448,465,481,498,514,531,548,564,581,598]},{"start":[927,859],"end":[1257,686],"points":[[927,858],[927,857],[927,856],[927,855],[927,854],[928,851],[931,848],[934,841],[942,831],[947,822],[953,811],[969,791],[998,762],[1035,731],[1090,690],[1134,661],[1167,640],[1191,628],[1202,625],[1203,625],[1204,627],[1204,632],[1204,639],[1204,646],[1205,653],[1206,658],[1209,662],[1214,666],[1223,672],[1233,678],[1245,682],[1254,685],[1256,686],[1257,686]],"dx":330,"dy":-173,"length":461.85447117523404,"timing":[0,50,81,89,100,116,133,150,166,183,200,216,233,250,266,283,300,316,333,350,366,383,400,416,433,450,466,483,499,516,533,550,566,583]},{"start":[1328,289],"end":[413,736],"points":[[1329,289],[1329,290],[1329,295],[1324,304],[1304,319],[1268,345],[1195,383],[1080,429],[917,476],[798,509],[689,541],[596,576],[529,605],[467,632],[417,661],[390,682],[371,697],[352,715],[332,735],[317,752],[309,766],[307,773],[307,775],[307,779],[308,782],[310,783],[320,785],[352,785],[383,782],[410,775],[423,770],[425,768],[427,766],[427,764],[427,761],[427,759],[427,756],[427,754],[425,752],[421,748],[418,744],[416,740],[414,738],[414,737],[413,736]],"dx":-915,"dy":447,"length":1322.7567536483743,"timing":[0,24,41,57,74,91,107,124,141,158,174,191,207,224,241,258,274,291,307,324,341,357,374,391,408,425,441,458,475,491,507,524,541,557,574,591,608,625,641,658,675,691,708,725,829]},{"start":[624,851],"end":[1586,411],"points":[[624,850],[625,842],[654,823],[706,804],[810,772],[954,733],[1119,687],[1314,632],[1445,600],[1546,570],[1596,556],[1622,548],[1629,544],[1630,542],[1629,540],[1626,538],[1623,537],[1616,536],[1603,533],[1582,527],[1563,514],[1557,503],[1557,491],[1557,480],[1558,470],[1558,462],[1562,452],[1567,441],[1573,429],[1579,420],[1583,413],[1585,411],[1586,411]],"dx":962,"dy":-440,"length":1246.4672702638663,"timing":[0,16,32,49,66,83,99,116,133,150,167,183,199,216,233,250,267,283,300,317,333,349,366,383,400,416,433,449,466,483,499,516,533]},{"start":[324,206],"end":[1012,491],"points":[[325,206],[331,206],[347,211],[368,216],[396,222],[427,229],[463,236],[503,245],[549,256],[594,267],[647,280],[686,293],[722,306],[755,323],[787,342],[822,369],[846,394],[865,418],[882,443],[898,467],[915,488],[933,503],[954,511],[967,514],[975,514],[983,514],[992,514],[999,512],[1002,511],[1003,511],[1003,510],[1004,510],[1009,506],[1013,502],[1014,500],[1015,497],[1015,494],[1014,493],[1014,492],[1012,491]],"dx":688,"dy":285,"length":802.7162769524986,"timing":[0,14,31,47,64,80,97,115,130,147,164,180,198,214,231,248,264,280,297,314,330,347,363,380,397,413,431,447,463,480,536,547,563,580,596,613,630,651,663,680]},{"start":[356,196],"end":[1154,254],"points":[[355,196],[356,196],[363,200],[378,206],[398,213],[421,221],[446,232],[470,246],[503,263],[531,275],[579,288],[630,295],[697,298],[754,298],[811,298],[859,295],[904,287],[950,284],[1003,280],[1039,275],[1066,272],[1084,270],[1096,268],[1102,267],[1106,266],[1115,265],[1126,264],[1137,263],[1144,261],[1145,261],[1146,260],[1146,259],[1148,258],[1151,255],[1153,254],[1154,254]],"dx":798,"dy":58,"length":824.3126946084161,"timing":[0,88,101,118,135,152,168,184,204,218,234,250,267,284,300,317,334,350,367,384,400,417,434,450,467,484,500,517,534,550,661,667,684,701,717,734]},{"start":[771,359],"end":[665,199],"points":[[771,358],[766,357],[757,353],[745,345],[732,335],[721,324],[710,313],[693,296],[683,286],[676,275],[670,265],[666,257],[664,251],[664,243],[664,236],[663,229],[662,223],[661,218],[661,215],[661,213],[661,212],[661,211],[661,210],[661,209],[662,206],[662,205],[662,204],[663,204],[663,203],[663,202],[664,201],[664,200],[665,199]],"dx":-106,"dy":-160,"length":209.2804569114861,"timing":[0,15,32,49,66,83,100,115,132,149,166,183,199,216,232,249,266,284,300,317,332,359,375,396,432,449,465,482,580,583,599,615,632]},{"start":[633,552],"end":[186,358],"points":[[633,551],[634,549],[634,543],[636,537],[637,528],[637,514],[637,505],[637,496],[637,491],[639,486],[644,481],[646,477],[647,472],[647,467],[630,460],[598,454],[551,447],[480,441],[408,429],[349,418],[287,397],[249,384],[224,371],[215,366],[214,365],[213,365],[212,364],[203,361],[193,358],[188,358],[187,358],[186,358]],"dx":-447,"dy":-194,"length":565.218401348669,"timing":[0,17,34,50,67,84,100,117,134,150,167,184,201,217,234,250,267,284,300,317,334,350,367,384,400,523,534,551,567,584,601,651]},{"start":[185,358],"end":[614,194],"points":[[185,358],[185,357],[187,357],[191,357],[200,356],[214,356],[236,356],[266,360],[291,363],[322,367],[360,368],[402,368],[451,361],[484,348],[508,333],[523,320],[535,307],[546,298],[556,287],[561,279],[563,271],[568,262],[575,254],[580,246],[584,239],[585,233],[587,229],[587,225],[588,221],[589,217],[590,213],[591,210],[593,209],[593,208],[594,206],[595,205],[598,203],[601,202],[602,200],[604,199],[605,198],[606,198],[607,197],[608,197],[609,197],[610,197],[611,196],[612,195],[613,195],[614,195],[614,194]],"dx":429,"dy":-164,"length":515.629949580134,"timing":[0,103,118,133,149,165,183,199,215,232,248,265,281,298,315,331,348,365,381,398,415,431,448,465,482,498,515,531,549,565,582,598,615,632,649,665,682,698,715,732,748,765,782,858,898,915,998,1015,1033,1048,1215]},{"start":[1085,480],"end":[293,212],"points":[[1086,479],[1086,478],[1083,476],[1073,472],[1039,461],[970,441],[846,410],[685,380],[558,357],[460,337],[399,325],[359,316],[324,304],[309,298],[302,293],[298,289],[293,284],[286,278],[275,269],[265,261],[261,255],[255,247],[249,237],[243,226],[241,220],[241,215],[242,211],[245,209],[248,208],[250,207],[254,207],[261,207],[270,207],[283,209],[291,211],[293,212]],"dx":-792,"dy":-268,"length":967.0075299742185,"timing":[0,68,150,167,184,200,217,233,250,267,283,300,317,333,350,367,383,400,417,433,450,467,484,500,517,534,550,567,584,600,617,634,650,667,684,700]},{"start":[1118,425],"end":[685,559],"points":[[1118,425],[1117,424],[1116,424],[1114,423],[1112,423],[1110,423],[1104,423],[1086,419],[1040,413],[991,412],[960,418],[932,432],[904,448],[876,463],[849,476],[829,488],[814,498],[799,509],[782,519],[764,530],[747,541],[738,546],[729,549],[717,551],[706,554],[701,555],[699,556],[698,556],[697,556],[695,557],[692,557],[687,558],[685,558],[685,559]],"dx":-433,"dy":134,"length":472.3890448288347,"timing":[0,110,117,133,150,166,185,201,217,233,249,266,283,300,316,333,350,366,383,400,416,433,450,466,483,500,517,781,793,801,817,833,850,866]},{"start":[174,301],"end":[1123,214],"points":[[174,302],[186,303],[207,305],[226,305],[247,305],[276,305],[305,307],[335,309],[380,318],[425,327],[487,333],[573,337],[652,334],[739,318],[801,307],[863,295],[908,286],[950,278],[987,271],[1018,264],[1049,258],[1066,255],[1079,251],[1089,249],[1101,245],[1111,243],[1118,241],[1119,240],[1120,240],[1121,240],[1122,239],[1123,238],[1124,237],[1125,233],[1124,228],[1124,222],[1123,218],[1123,215],[1123,214]],"dx":949,"dy":-87,"length":986.9218631808133,"timing":[0,17,34,50,66,83,100,118,134,151,169,184,202,216,233,249,266,283,299,316,333,350,366,383,399,416,433,450,466,483,500,516,533,549,566,583,599,616,633]},{"start":[965,230],"end":[528,516],"points":[[966,230],[965,231],[965,232],[963,234],[962,234],[961,234],[954,236],[941,236],[925,238],[911,239],[884,243],[855,248],[818,261],[781,283],[744,307],[713,327],[689,342],[674,351],[661,357],[650,364],[642,371],[636,380],[629,392],[623,403],[617,413],[613,421],[610,432],[605,445],[602,452],[598,460],[596,463],[596,464],[595,466],[593,467],[588,470],[579,476],[570,481],[560,487],[551,492],[544,498],[537,505],[532,510],[531,512],[530,514],[529,515],[528,516]],"dx":-437,"dy":286,"length":552.6489414454772,"timing":[0,35,52,72,85,101,118,134,153,168,185,201,218,235,251,268,284,301,318,335,352,368,385,401,418,435,452,468,485,502,518,535,551,568,585,601,618,635,651,668,685,701,718,735,751,768]},{"start":[119,505],"end":[506,331],"points":[[118,505],[118,504],[118,503],[125,500],[139,496],[150,492],[164,488],[184,485],[208,482],[231,480],[254,477],[283,472],[307,464],[336,449],[371,432],[405,415],[436,398],[463,379],[473,370],[479,363],[482,358],[484,355],[485,352],[487,348],[490,344],[492,339],[493,337],[494,336],[495,336],[496,335],[497,335],[499,334],[499,333],[501,333],[505,332],[506,331]],"dx":387,"dy":-174,"length":441.7697366572396,"timing":[0,18,34,51,67,83,100,117,134,151,167,184,200,217,234,251,267,284,300,317,334,351,367,384,400,417,434,450,503,517,534,550,600,617,634,650]},{"start":[1492,315],"end":[948,932],"points":[[1490,316],[1490,317],[1488,321],[1481,326],[1471,332],[1454,339],[1433,344],[1404,350],[1363,359],[1310,364],[1236,383],[1178,402],[1121,427],[1080,448],[1047,463],[1026,483],[1005,512],[988,562],[976,615],[964,661],[956,704],[949,735],[947,764],[946,796],[946,822],[946,842],[946,853],[946,856],[946,858],[946,859],[946,862],[946,867],[946,872],[948,876],[948,878],[946,884],[946,896],[946,911],[946,924],[946,931],[946,932],[947,932],[948,932]],"dx":-544,"dy":617,"length":967.4192149306674,"timing":[0,5,22,39,55,72,89,105,122,138,155,171,188,205,221,238,255,271,288,305,321,338,355,371,388,405,422,438,455,475,488,505,521,538,555,571,588,605,621,638,655,980,1022]},{"start":[167,298],"end":[1615,513],"points":[[169,299],[171,304],[184,316],[213,329],[250,343],[293,363],[335,384],[381,401],[429,420],[481,436],[541,449],[610,456],[699,458],[790,460],[893,465],[1005,473],[1125,479],[1216,482],[1293,496],[1364,511],[1402,518],[1414,523],[1414,524],[1415,526],[1416,532],[1418,535],[1423,538],[1425,541],[1430,542],[1441,540],[1464,535],[1497,537],[1526,529],[1545,524],[1552,520],[1559,518],[1563,517],[1572,514],[1582,514],[1591,514],[1597,514],[1598,514],[1600,514],[1606,514],[1612,514],[1614,514],[1615,515],[1615,513]],"dx":1448,"dy":215,"length":1503.0692580436928,"timing":[0,10,26,43,59,77,93,109,126,143,159,176,193,209,226,243,259,276,293,309,326,343,363,376,393,409,426,443,459,476,493,509,526,544,559,576,593,609,626,643,659,676,726,743,759,776,793,842]},{"start":[1093,675],"end":[107,846],"points":[[1092,678],[1081,685],[1068,692],[1054,696],[1043,700],[1011,711],[973,720],[915,721],[849,716],[774,701],[717,687],[676,670],[658,659],[646,643],[618,618],[582,604],[541,591],[493,589],[450,587],[405,596],[355,609],[305,630],[266,652],[231,671],[206,694],[189,705],[169,724],[148,744],[126,770],[109,794],[90,817],[84,828],[84,833],[82,834],[82,835],[84,835],[87,836],[93,837],[100,838],[106,839],[108,841],[109,841],[109,842],[109,842],[109,843],[109,845],[107,846]],"dx":-986,"dy":171,"length":1177.8004854131436,"timing":[0,17,34,50,67,84,100,117,134,150,167,184,200,217,234,250,267,284,300,317,334,350,367,384,400,418,434,452,468,484,501,517,534,550,576,589,600,617,634,650,667,684,848,853,868,884,900]},{"start":[1464,520],"end":[919,383],"points":[[1463,520],[1462,520],[1455,527],[1446,533],[1427,543],[1386,560],[1341,574],[1291,579],[1230,588],[1157,588],[1099,583],[1058,571],[1017,550],[986,527],[969,501],[965,483],[962,473],[965,453],[965,441],[965,428],[963,423],[962,416],[962,414],[961,409],[959,407],[957,403],[955,402],[949,401],[946,398],[940,396],[932,393],[923,387],[919,386],[919,384],[919,383]],"dx":-545,"dy":-137,"length":682.6029904670529,"timing":[0,5,21,38,55,71,88,105,121,138,155,171,188,204,221,238,255,271,288,305,321,338,355,371,388,405,421,438,455,472,488,505,521,538,554]},{"start":[788,873],"end":[1417,158],"points":[[789,871],[805,838],[823,797],[838,747],[841,707],[843,662],[847,614],[859,576],[879,525],[910,463],[962,394],[1008,338],[1063,286],[1115,245],[1178,207],[1228,180],[1269,161],[1286,156],[1290,154],[1294,154],[1302,154],[1308,154],[1314,156],[1321,159],[1330,163],[1334,166],[1335,166],[1340,168],[1360,169],[1384,164],[1405,160],[1413,159],[1414,158],[1415,158],[1416,158],[1417,158]],"dx":629,"dy":-715,"length":1061.05248303271,"timing":[0,16,32,49,65,82,99,116,132,149,165,182,199,216,232,249,265,282,299,315,332,349,366,382,399,415,472,482,500,516,532,549,565,582,632,649]},{"start":[1743,421],"end":[614,668],"points":[[1742,421],[1739,421],[1734,427],[1729,428],[1723,431],[1722,431],[1719,434],[1700,443],[1660,462],[1598,488],[1521,521],[1411,552],[1323,578],[1237,598],[1156,621],[1103,636],[1050,655],[1002,672],[973,689],[952,696],[921,710],[890,720],[856,727],[816,727],[785,716],[751,704],[714,684],[697,672],[687,664],[681,658],[679,657],[679,654],[678,654],[676,653],[673,652],[668,651],[660,650],[654,650],[648,652],[645,653],[642,655],[638,657],[635,658],[629,662],[620,665],[615,668],[614,668]],"dx":-1129,"dy":247,"length":1210.232490416716,"timing":[0,10,26,43,59,169,176,193,210,226,243,261,278,294,311,328,344,361,377,394,411,427,444,461,477,495,511,527,544,561,577,594,611,628,644,661,677,694,711,727,744,761,777,794,811,827,844]},{"start":[1339,683],"end":[138,671],"points":[[1338,685],[1338,685],[1337,686],[1335,689],[1333,689],[1331,692],[1328,695],[1324,696],[1317,698],[1312,699],[1306,699],[1299,695],[1285,690],[1257,684],[1202,677],[1133,672],[1049,665],[944,660],[846,653],[748,650],[638,640],[545,633],[464,628],[397,619],[344,617],[306,615],[273,615],[252,614],[238,614],[224,618],[219,619],[217,621],[216,621],[213,625],[210,628],[204,634],[198,641],[194,644],[192,647],[183,653],[172,661],[163,664],[157,666],[157,667],[157,667],[152,667],[145,669],[142,670],[140,670],[139,670],[138,671]],"dx":-1201,"dy":-12,"length":1230.978019539997,"timing":[0,17,34,50,67,84,100,117,134,151,168,184,200,217,235,251,267,284,300,317,334,351,367,384,400,417,434,450,467,484,500,517,542,550,567,584,600,617,634,650,667,684,700,750,767,784,800,817,834,850,867]},{"start":[142,673],"end":[819,308],"points":[[146,673],[153,676],[170,682],[205,685],[259,688],[334,685],[439,683],[546,679],[645,676],[723,666],[805,647],[847,630],[883,609],[910,591],[930,565],[951,531],[958,500],[963,475],[967,453],[967,440],[963,432],[955,421],[945,408],[924,387],[901,368],[881,352],[862,338],[845,327],[833,322],[830,317],[827,316],[824,314],[821,312],[819,308]],"dx":677,"dy":-365,"length":1150.3203120758317,"timing":[0,17,33,49,66,83,99,116,133,149,166,183,199,216,233,249,266,283,299,316,333,350,366,383,400,417,433,449,466,483,499,516,533,549]},{"start":[1252,346],"end":[181,739],"points":[[1253,346],[1253,347],[1249,350],[1236,363],[1214,377],[1177,402],[1133,421],[1081,440],[1017,452],[959,456],[897,459],[828,461],[770,462],[722,457],[658,461],[591,462],[522,473],[455,485],[407,502],[364,528],[321,555],[295,579],[280,600],[270,617],[265,628],[257,644],[248,664],[226,695],[209,716],[200,725],[197,729],[194,733],[189,737],[186,740],[185,740],[185,741],[184,741],[183,741],[182,741],[181,741],[181,739]],"dx":-1071,"dy":393,"length":1219.2652025601503,"timing":[0,34,43,60,77,93,110,127,144,160,177,193,212,228,243,260,277,293,310,327,344,361,377,394,410,427,444,460,477,494,510,527,544,560,577,594,613,628,644,660,677]},{"start":[735,252],"end":[966,668],"points":[[735,254],[737,261],[740,272],[744,286],[755,303],[766,333],[775,369],[790,415],[802,467],[811,515],[814,556],[823,590],[830,616],[837,637],[844,655],[854,663],[858,670],[860,671],[864,671],[869,671],[879,672],[895,674],[908,679],[924,682],[936,686],[942,688],[943,688],[946,684],[949,682],[951,679],[954,675],[959,673],[961,672],[963,670],[965,669],[966,669],[966,668]],"dx":231,"dy":416,"length":558.150848091956,"timing":[0,15,31,48,65,82,98,115,131,148,165,181,198,215,231,248,265,281,298,315,331,348,365,381,398,415,431,448,464,481,498,515,531,548,565,581,598]},{"start":[393,491],"end":[1368,95],"points":[[392,491],[390,492],[389,492],[387,492],[383,492],[379,489],[372,489],[364,489],[357,490],[355,491],[351,493],[350,497],[361,510],[376,523],[397,541],[435,558],[490,570],[550,575],[620,579],[718,572],[818,560],[926,536],[1038,493],[1158,429],[1253,369],[1337,304],[1379,257],[1409,219],[1423,185],[1426,178],[1426,176],[1423,171],[1423,161],[1420,154],[1417,144],[1412,129],[1406,118],[1399,108],[1391,102],[1383,99],[1373,97],[1369,95],[1368,95]],"dx":975,"dy":-396,"length":1390.5478569407553,"timing":[0,17,33,50,67,84,100,117,133,150,167,183,200,217,234,250,267,283,300,317,334,350,367,383,401,419,433,450,466,483,500,517,537,550,567,583,600,617,633,650,667,683,701]},{"start":[1383,128],"end":[245,851],"points":[[1383,129],[1381,131],[1381,132],[1376,136],[1370,144],[1359,160],[1337,200],[1299,258],[1256,313],[1201,363],[1128,416],[1051,459],[967,499],[907,524],[776,579],[673,628],[573,679],[487,722],[410,758],[348,781],[316,792],[299,799],[294,806],[291,812],[288,819],[279,830],[268,839],[253,847],[248,850],[246,851],[245,851]],"dx":-1138,"dy":723,"length":1380.5383548545683,"timing":[0,14,31,48,64,81,98,115,131,148,164,181,198,214,232,248,264,281,298,315,331,348,364,381,398,414,431,448,464,481,531]},{"start":[245,851],"end":[836,221],"points":[[249,851],[262,851],[286,851],[339,844],[416,829],[509,812],[599,796],[680,779],[776,753],[848,726],[893,702],[908,690],[908,688],[911,685],[914,680],[928,654],[945,615],[966,570],[988,510],[997,460],[998,409],[990,380],[978,353],[966,334],[958,319],[946,306],[936,288],[924,269],[911,259],[903,256],[895,256],[884,254],[875,251],[869,247],[866,247],[865,246],[864,246],[862,244],[856,241],[853,237],[850,235],[848,233],[845,230],[843,227],[841,224],[838,223],[837,222],[836,221]],"dx":591,"dy":-630,"length":1248.2242573224098,"timing":[0,17,34,50,67,84,100,117,134,150,167,184,203,217,236,251,267,284,300,317,334,350,367,383,400,417,434,450,467,484,500,517,534,551,568,584,634,650,667,684,700,717,733,750,767,784,800,817]},{"start":[1619,153],"end":[1727,840],"points":[[1607,150],[1584,157],[1536,176],[1493,200],[1447,233],[1414,257],[1385,283],[1357,302],[1332,321],[1299,345],[1266,369],[1222,395],[1170,425],[1124,462],[1095,498],[1089,532],[1103,559],[1138,584],[1200,609],[1281,629],[1386,662],[1499,695],[1572,722],[1627,750],[1659,772],[1669,792],[1669,801],[1669,808],[1669,810],[1669,811],[1671,816],[1678,830],[1685,839],[1688,841],[1689,842],[1691,842],[1694,842],[1700,840],[1707,839],[1717,838],[1723,838],[1727,838],[1727,840]],"dx":108,"dy":687,"length":1408.191489924486,"timing":[0,17,35,51,68,85,102,118,135,152,170,185,200,216,233,250,266,283,301,316,333,350,366,384,400,416,433,450,466,536,549,566,583,600,616,633,650,666,683,700,716,733,783]},{"start":[1221,758],"end":[183,329],"points":[[1214,759],[1211,760],[1210,760],[1210,758],[1206,756],[1193,747],[1153,730],[1081,704],[1003,680],[919,656],[831,625],[715,584],[634,546],[536,513],[462,484],[403,463],[357,437],[334,423],[321,411],[310,402],[302,397],[293,389],[288,386],[276,376],[262,367],[246,360],[233,359],[225,357],[222,356],[221,355],[219,353],[213,351],[210,349],[210,347],[209,347],[209,346],[208,346],[207,345],[203,344],[201,341],[197,338],[193,334],[187,331],[183,329]],"dx":-1038,"dy":-429,"length":1130.049351030966,"timing":[0,16,66,170,183,200,217,233,250,266,283,299,316,333,349,366,383,400,416,433,450,467,483,500,517,533,550,566,583,600,616,633,651,666,683,700,716,733,750,767,784,800,816,833]},{"start":[1590,454],"end":[498,196],"points":[[1590,454],[1565,458],[1510,470],[1431,491],[1353,508],[1288,515],[1242,524],[1231,529],[1230,530],[1232,533],[1236,539],[1239,543],[1239,545],[1237,548],[1226,556],[1178,565],[1115,566],[1042,561],[967,546],[867,515],[774,486],[688,449],[618,413],[559,376],[516,331],[494,293],[475,270],[451,242],[438,230],[435,228],[434,228],[434,227],[434,226],[439,222],[443,216],[451,210],[461,205],[470,204],[480,203],[489,201],[492,199],[493,199],[494,201],[496,198],[498,196]],"dx":-1092,"dy":-258,"length":1383.0995385400872,"timing":[0,21,38,54,71,88,104,121,138,156,171,188,204,221,238,254,271,287,304,320,337,354,370,388,405,421,438,454,472,488,504,536,538,554,571,588,604,621,638,654,671,688,705,721,738]},{"start":[694,719],"end":[473,263],"points":[[695,719],[698,717],[703,716],[708,714],[713,711],[714,707],[716,698],[717,685],[717,659],[698,606],[671,556],[645,512],[612,482],[583,458],[564,441],[555,424],[549,410],[545,392],[540,373],[532,353],[521,332],[510,315],[500,296],[490,283],[481,274],[477,265],[475,261],[473,260],[473,261],[473,262],[473,259],[473,262],[473,262],[473,262],[473,257],[473,263]],"dx":-221,"dy":-456,"length":568.4785504727517,"timing":[0,10,26,43,60,77,93,111,127,143,160,177,193,210,227,244,260,277,293,310,327,344,360,377,393,410,427,443,460,477,496,510,526,543,560,577]},{"start":[1146,347],"end":[1833,212],"points":[[1142,350],[1138,351],[1135,355],[1133,360],[1133,365],[1133,370],[1133,376],[1133,385],[1135,399],[1139,415],[1150,433],[1164,436],[1183,437],[1213,433],[1251,426],[1299,414],[1357,397],[1409,379],[1465,355],[1534,326],[1606,300],[1677,271],[1742,247],[1801,228],[1827,219],[1830,218],[1830,217],[1831,215],[1833,213],[1833,212],[1833,212]],"dx":687,"dy":-135,"length":816.4624594813941,"timing":[0,16,34,50,67,84,102,117,133,151,167,184,200,217,234,250,267,283,300,317,334,350,367,386,400,417,554,567,583,601,617]},{"start":[400,178],"end":[1788,820],"points":[[399,178],[399,178],[398,185],[397,197],[397,215],[397,236],[396,258],[400,292],[405,326],[421,359],[447,401],[479,437],[517,463],[557,484],[650,518],[749,544],[904,572],[1059,592],[1220,608],[1377,630],[1487,644],[1583,663],[1621,673],[1646,685],[1652,690],[1654,696],[1657,705],[1660,716],[1661,720],[1663,724],[1664,728],[1666,733],[1674,743],[1684,750],[1692,756],[1698,758],[1702,762],[1709,771],[1724,785],[1729,792],[1732,795],[1732,796],[1733,796],[1734,796],[1736,798],[1743,802],[1752,808],[1757,810],[1758,811],[1760,813],[1765,813],[1770,813],[1774,815],[1776,817],[1778,817],[1779,817],[1781,817],[1784,819],[1786,820],[1788,820]],"dx":1388,"dy":642,"length":1694.8290771707868,"timing":[0,5,22,39,55,72,88,105,122,139,155,172,189,206,222,238,255,272,289,305,322,342,355,372,388,405,422,438,455,472,489,505,523,538,555,572,589,605,622,639,655,672,689,705,722,739,755,772,789,805,822,839,855,872,888,905,922,938,955,961]},{"start":[413,331],"end":[1027,192],"points":[[413,329],[416,329],[418,329],[422,329],[447,330],[470,333],[498,339],[528,344],[561,351],[598,359],[642,367],[683,375],[716,378],[743,377],[770,371],[801,360],[858,335],[899,312],[931,294],[957,277],[981,266],[1000,257],[1015,251],[1026,248],[1032,246],[1034,245],[1034,244],[1037,243],[1040,241],[1042,239],[1043,236],[1044,233],[1044,226],[1041,216],[1036,205],[1032,200],[1029,196],[1028,193],[1027,192]],"dx":614,"dy":-139,"length":718.0529454510291,"timing":[0,16,24,40,56,73,90,106,123,140,156,173,190,206,223,240,257,273,290,306,323,340,356,373,390,406,423,440,457,473,490,506,523,540,556,573,590,606,656]},{"start":[185,151],"end":[926,266],"points":[[186,151],[188,152],[190,153],[192,153],[200,157],[220,165],[261,182],[331,206],[412,229],[499,250],[586,272],[718,304],[783,319],[819,326],[845,327],[871,327],[893,327],[908,327],[914,325],[919,323],[925,321],[929,317],[931,314],[932,310],[934,306],[935,301],[935,295],[935,288],[935,281],[933,274],[930,270],[926,266]],"dx":741,"dy":115,"length":825.9341058321879,"timing":[0,15,32,42,59,75,92,109,126,142,159,176,192,209,225,242,259,275,292,308,325,342,359,375,392,409,425,442,459,475,492,509]},{"start":[1031,197],"end":[373,351],"points":[[1031,197],[1029,197],[1027,197],[1022,201],[1016,205],[1008,210],[997,219],[983,227],[961,235],[930,242],[880,254],[805,266],[729,268],[648,268],[572,268],[532,269],[508,273],[497,275],[491,277],[488,279],[481,283],[473,288],[459,296],[444,306],[431,315],[422,322],[412,328],[399,335],[387,342],[380,347],[376,350],[375,350],[374,351],[373,351]],"dx":-658,"dy":154,"length":694.6267336037755,"timing":[0,86,100,116,133,150,166,183,199,216,233,250,266,283,301,317,333,350,366,383,400,416,433,450,466,483,500,517,533,550,566,583,600,640]},{"start":[461,585],"end":[1222,496],"points":[[462,585],[463,585],[464,585],[467,584],[475,581],[500,570],[554,541],[621,503],[681,457],[735,417],[779,381],[821,346],[839,331],[854,319],[871,309],[891,300],[910,292],[927,285],[942,282],[957,280],[975,280],[996,284],[1016,292],[1050,304],[1070,312],[1087,320],[1101,328],[1109,332],[1114,337],[1117,340],[1121,344],[1122,348],[1123,351],[1123,358],[1126,370],[1129,377],[1135,385],[1139,391],[1144,394],[1150,400],[1162,409],[1172,418],[1181,426],[1188,432],[1192,434],[1193,437],[1197,440],[1207,447],[1217,453],[1227,460],[1233,463],[1236,466],[1237,467],[1237,468],[1237,469],[1236,475],[1235,480],[1233,485],[1231,490],[1229,493],[1229,494],[1228,495],[1228,496],[1227,496],[1226,496],[1226,497],[1225,497],[1224,497],[1223,497],[1222,496]],"dx":761,"dy":-89,"length":981.7076845619923,"timing":[0,8,18,35,51,68,85,101,118,134,151,168,185,201,218,234,251,268,284,301,318,334,351,368,384,401,418,434,451,468,484,501,518,534,551,568,585,601,618,634,651,668,685,701,718,735,751,768,784,801,818,834,851,872,884,901,918,935,951,968,985,1001,1280,1608,1618,1688,1888,2104,2234,2251]},{"start":[127,532],"end":[660,287],"points":[[128,531],[129,531],[132,529],[135,528],[144,526],[157,526],[179,526],[218,526],[247,529],[272,533],[298,538],[320,543],[330,547],[333,548],[333,550],[333,553],[328,559],[325,565],[321,570],[321,572],[322,572],[334,571],[359,565],[404,551],[472,523],[542,484],[609,443],[662,407],[691,382],[709,366],[718,347],[721,340],[723,333],[724,327],[725,321],[727,312],[727,303],[727,292],[723,285],[719,281],[714,277],[710,275],[707,274],[701,274],[694,274],[685,276],[676,279],[666,284],[660,287]],"dx":533,"dy":-245,"length":835.5484877172654,"timing":[0,15,23,37,54,71,87,104,120,137,154,170,187,204,223,237,254,271,287,304,320,337,354,370,387,404,421,437,454,471,487,504,521,537,554,571,587,604,620,637,654,671,687,704,720,738,754,771,786]},{"start":[310,548],"end":[1240,460],"points":[[310,548],[312,547],[313,546],[316,545],[332,540],[352,532],[377,527],[404,520],[430,515],[457,510],[486,505],[520,498],[557,489],[604,481],[668,466],[774,441],[918,424],[991,422],[1053,422],[1099,422],[1131,422],[1155,422],[1182,423],[1207,427],[1226,431],[1241,433],[1250,435],[1255,435],[1260,436],[1262,437],[1265,438],[1266,440],[1267,440],[1267,443],[1265,445],[1260,450],[1254,455],[1250,459],[1249,460],[1247,460],[1243,460],[1240,460]],"dx":930,"dy":-88,"length":1010.6247679987006,"timing":[0,26,35,50,67,83,100,117,134,150,167,184,200,217,233,250,266,283,300,317,333,350,367,383,400,417,433,450,466,483,500,517,533,550,567,583,601,617,634,683,700,708]},{"start":[463,238],"end":[1118,245],"points":[[465,238],[466,238],[467,238],[468,238],[470,239],[471,241],[474,244],[477,251],[482,257],[486,262],[495,268],[506,276],[524,289],[552,301],[593,312],[658,321],[741,323],[854,323],[975,323],[1102,323],[1149,322],[1171,319],[1179,317],[1181,315],[1182,314],[1182,312],[1183,310],[1184,307],[1185,304],[1185,299],[1183,292],[1173,284],[1164,278],[1153,273],[1145,269],[1140,267],[1136,265],[1133,264],[1130,260],[1127,259],[1125,256],[1123,252],[1121,248],[1118,245]],"dx":655,"dy":7,"length":849.8912917102286,"timing":[0,28,36,50,66,83,100,116,133,149,166,183,200,216,233,250,266,283,300,316,333,350,366,383,400,416,433,450,467,483,500,516,533,550,566,583,600,616,633,650,666,683,700,716]},{"start":[804,223],"end":[433,403],"points":[[802,223],[799,223],[787,229],[762,242],[731,262],[690,285],[651,302],[621,315],[592,333],[565,349],[540,363],[513,379],[501,386],[492,391],[482,396],[476,400],[472,403],[470,403],[468,403],[463,405],[457,407],[452,407],[448,408],[445,408],[443,408],[441,408],[438,408],[436,408],[435,408],[434,407],[434,406],[433,405],[433,404],[433,403]],"dx":-371,"dy":180,"length":420.5318269268251,"timing":[0,9,25,42,58,75,92,109,125,142,159,175,192,209,225,242,259,275,292,309,325,342,359,375,392,408,425,442,459,576,625,642,658,675]},{"start":[309,322],"end":[999,224],"points":[[311,322],[313,326],[319,331],[336,338],[384,345],[479,348],[606,348],[739,347],[857,333],[951,314],[1043,290],[1076,278],[1110,267],[1135,253],[1147,242],[1150,239],[1149,235],[1148,234],[1148,233],[1147,233],[1145,231],[1142,228],[1131,220],[1114,214],[1092,207],[1073,206],[1055,206],[1038,207],[1023,213],[1008,217],[1001,220],[1000,221],[1000,222],[999,224]],"dx":690,"dy":-98,"length":1031.383130386034,"timing":[0,7,18,35,52,68,86,103,118,135,151,169,185,202,218,235,252,268,285,302,319,335,352,369,385,402,420,435,453,469,485,502,672,696]},{"start":[644,210],"end":[1442,406],"points":[[644,210],[644,211],[644,212],[645,214],[646,214],[648,215],[651,218],[652,219],[655,221],[657,225],[657,232],[659,238],[663,247],[667,255],[672,265],[692,283],[711,294],[751,311],[820,336],[919,358],[1020,377],[1106,386],[1181,391],[1260,402],[1320,410],[1348,413],[1362,413],[1376,414],[1388,414],[1400,414],[1412,414],[1423,414],[1429,410],[1435,409],[1437,409],[1439,409],[1440,408],[1441,407],[1442,406]],"dx":798,"dy":196,"length":861.0667196909391,"timing":[0,23,31,47,64,81,98,114,132,148,165,181,199,215,231,248,264,281,298,314,331,347,364,381,397,414,431,449,465,481,498,515,531,547,564,581,632,664,681]},{"start":[67,521],"end":[1420,259],"points":[[67,519],[68,519],[75,519],[86,517],[144,504],[179,490],[252,469],[339,446],[417,425],[498,405],[594,386],[693,360],[794,345],[898,323],[1068,307],[1170,299],[1257,298],[1310,294],[1343,294],[1361,294],[1370,295],[1372,296],[1373,296],[1377,294],[1379,293],[1380,292],[1380,291],[1384,290],[1395,287],[1409,282],[1421,275],[1426,270],[1430,265],[1431,262],[1432,261],[1432,260],[1433,258],[1433,257],[1432,257],[1430,257],[1427,257],[1425,258],[1422,259],[1420,259]],"dx":1353,"dy":-262,"length":1420.7069734491367,"timing":[0,47,63,80,97,113,131,149,164,181,198,213,231,247,263,280,297,314,331,347,364,381,431,447,464,481,560,597,613,630,647,663,680,697,715,730,747,992,1031,1048,1065,1081,1097,1114]},{"start":[214,566],"end":[1081,384],"points":[[212,566],[214,565],[216,563],[225,563],[230,562],[250,559],[298,557],[397,543],[442,535],[614,491],[718,473],[808,471],[892,470],[976,470],[1043,466],[1096,455],[1135,447],[1162,440],[1188,429],[1204,417],[1209,405],[1210,398],[1208,393],[1207,392],[1206,391],[1205,390],[1202,388],[1188,381],[1171,375],[1146,369],[1132,366],[1129,366],[1124,367],[1120,371],[1114,375],[1108,378],[1100,382],[1096,383],[1093,383],[1091,383],[1086,384],[1085,385],[1084,385],[1083,385],[1081,385],[1081,384]],"dx":867,"dy":-182,"length":1175.6854467072944,"timing":[0,35,51,69,85,102,118,135,151,167,184,201,218,235,251,268,284,301,319,335,353,368,384,401,417,434,452,468,485,502,518,534,551,567,584,601,619,634,651,668,685,701,719,735,759,769]},{"start":[539,367],"end":[972,196],"points":[[538,367],[537,367],[536,367],[539,367],[567,359],[633,340],[703,319],[771,298],[837,279],[884,263],[905,251],[914,243],[919,235],[921,228],[922,223],[926,215],[930,211],[935,207],[941,203],[947,199],[949,198],[951,195],[955,194],[959,191],[959,190],[960,190],[962,190],[963,190],[967,190],[969,190],[971,190],[971,191],[972,191],[972,193],[972,195],[972,196]],"dx":433,"dy":-171,"length":493.81366226887576,"timing":[0,23,32,47,63,80,97,114,130,147,164,181,197,213,230,247,263,280,297,314,364,380,397,414,430,455,463,480,497,513,530,547,720,730,747,763]},{"start":[813,286],"end":[153,557],"points":[[811,286],[808,286],[804,286],[786,286],[742,287],[681,301],[611,329],[543,363],[477,395],[427,421],[391,443],[367,458],[345,470],[308,485],[271,495],[233,504],[192,515],[158,527],[137,539],[127,544],[123,546],[122,547],[121,547],[121,548],[121,551],[121,554],[123,555],[125,557],[129,557],[133,557],[136,557],[144,557],[150,557],[153,557]],"dx":-660,"dy":271,"length":786.3994886919803,"timing":[0,15,24,41,57,74,91,107,124,141,157,174,191,207,224,241,257,274,291,307,324,341,432,474,490,507,524,541,557,574,591,607,624,641]},{"start":[778,649],"end":[1226,529],"points":[[777,649],[776,646],[776,634],[776,603],[776,549],[776,490],[774,450],[772,430],[773,417],[776,410],[783,403],[798,397],[822,395],[919,403],[1029,429],[1137,457],[1215,477],[1235,484],[1246,487],[1251,490],[1253,491],[1251,495],[1246,505],[1241,510],[1233,519],[1230,523],[1228,524],[1227,525],[1227,526],[1226,528],[1226,529]],"dx":448,"dy":-120,"length":780.8684371272979,"timing":[0,16,33,50,68,83,100,117,133,150,167,183,200,216,233,250,267,283,377,385,400,416,433,450,466,483,512,520,533,550,568]},{"start":[1387,438],"end":[631,463],"points":[[1387,439],[1372,437],[1345,431],[1295,425],[1250,418],[1194,403],[1131,388],[1056,368],[954,343],[839,319],[737,309],[669,309],[631,313],[615,324],[609,335],[603,358],[600,369],[593,381],[585,393],[577,404],[571,414],[566,422],[563,428],[560,436],[557,443],[556,447],[555,450],[555,455],[563,458],[570,461],[578,463],[588,463],[602,463],[614,463],[623,463],[627,463],[630,463],[631,463]],"dx":-756,"dy":25,"length":1012.9323528072541,"timing":[0,38,55,71,88,105,121,138,155,171,188,205,221,238,255,271,288,305,321,338,355,371,388,404,421,447,455,471,488,505,521,538,555,571,588,605,621,640]},{"start":[299,606],"end":[1137,291],"points":[[301,607],[302,607],[304,608],[307,608],[312,609],[315,610],[319,613],[323,616],[337,627],[346,633],[369,650],[383,661],[428,692],[461,707],[557,723],[615,715],[741,668],[813,637],[964,567],[1033,532],[1145,470],[1183,446],[1221,415],[1228,404],[1233,383],[1230,372],[1218,354],[1212,346],[1210,340],[1208,331],[1208,326],[1208,324],[1206,321],[1198,314],[1194,310],[1187,303],[1182,301],[1172,297],[1164,295],[1148,293],[1141,291],[1137,291]],"dx":838,"dy":-315,"length":1206.77023454524,"timing":[0,16,66,83,101,117,133,150,167,184,199,215,232,249,267,283,300,317,334,351,366,384,399,417,434,450,467,485,500,517,534,550,567,583,600,617,632,650,666,684,702,717]},{"start":[1579,708],"end":[735,303],"points":[[1579,708],[1579,708],[1575,706],[1574,705],[1562,699],[1555,694],[1535,682],[1521,676],[1492,667],[1479,664],[1452,662],[1437,661],[1399,661],[1368,656],[1274,634],[1217,617],[1105,580],[1050,557],[947,500],[900,468],[831,404],[811,379],[791,350],[785,339],[777,326],[776,325],[775,325],[773,324],[771,323],[762,321],[762,321],[762,321],[761,321],[761,321],[760,320],[759,319],[754,314],[753,312],[748,308],[747,308],[746,307],[746,307],[741,305],[740,304],[735,303],[735,303]],"dx":-844,"dy":-405,"length":968.9505746591211,"timing":[0,11,27,44,60,78,94,111,127,145,161,178,195,210,228,243,260,279,294,311,327,344,361,378,395,411,428,444,460,478,495,563,577,595,612,628,645,660,677,694,712,728,745,761,778,794]},{"start":[862,795],"end":[596,670],"points":[[863,795],[863,794],[864,792],[864,789],[864,787],[864,786],[864,783],[864,779],[868,768],[873,760],[885,739],[893,724],[904,699],[904,689],[894,675],[880,669],[829,662],[798,663],[743,669],[720,672],[686,674],[672,674],[649,669],[642,668],[641,667],[635,667],[632,667],[627,667],[624,667],[617,668],[613,669],[607,669],[606,669],[606,669],[605,669],[601,670],[600,670],[597,670],[597,670],[596,670]],"dx":-266,"dy":-125,"length":434.7246646670071,"timing":[0,17,34,50,67,83,99,116,133,151,166,184,199,219,235,250,267,284,300,317,332,351,366,384,400,451,466,484,499,517,534,550,567,584,601,617,634,650,667,680]},{"start":[1104,720],"end":[816,297],"points":[[1104,719],[1102,717],[1102,716],[1101,713],[1100,710],[1098,704],[1098,703],[1097,700],[1096,699],[1091,694],[1085,689],[1060,671],[1039,655],[993,607],[972,579],[947,526],[938,501],[926,454],[920,434],[908,403],[904,391],[900,382],[893,370],[891,367],[887,363],[884,361],[876,357],[871,355],[861,352],[856,351],[845,346],[841,343],[832,334],[829,329],[824,317],[823,312],[819,304],[818,302],[817,298],[816,297]],"dx":-288,"dy":-423,"length":533.0116451320132,"timing":[0,11,22,37,54,70,87,103,121,138,155,170,188,205,220,237,254,270,287,305,322,336,354,370,388,404,420,437,454,471,487,505,522,539,554,571,587,605,620,638]},{"start":[1109,265],"end":[1244,586],"points":[[1110,264],[1110,265],[1109,267],[1106,273],[1100,281],[1093,291],[1087,301],[1084,303],[1074,318],[1061,335],[1049,353],[1037,374],[1029,394],[1026,414],[1028,433],[1038,441],[1056,447],[1081,454],[1109,462],[1139,471],[1165,485],[1184,498],[1199,510],[1210,522],[1220,536],[1227,546],[1232,553],[1234,555],[1235,558],[1236,562],[1237,566],[1239,572],[1240,575],[1240,578],[1240,580],[1242,582],[1244,585],[1244,586]],"dx":135,"dy":321,"length":473.9300458644158,"timing":[0,26,34,49,66,83,100,117,133,150,166,183,199,216,232,249,267,282,299,316,333,349,366,383,399,416,433,449,466,482,499,515,532,549,566,583,599,616]},{"start":[1115,651],"end":[168,279],"points":[[1113,651],[1110,651],[1098,646],[1080,632],[1027,594],[966,559],[903,526],[830,497],[752,463],[676,430],[606,409],[544,390],[482,377],[430,370],[380,362],[328,353],[285,342],[255,334],[219,321],[200,309],[185,298],[176,293],[173,290],[172,290],[170,288],[170,287],[169,287],[169,284],[168,282],[168,280],[168,279]],"dx":-947,"dy":-372,"length":1032.4976416646402,"timing":[0,12,29,45,61,78,94,111,128,145,162,178,195,212,228,245,262,278,295,312,328,345,362,378,395,411,428,478,495,513,528]},{"start":[89,159],"end":[822,340],"points":[[89,159],[89,161],[90,164],[92,169],[100,187],[114,206],[138,233],[181,271],[248,314],[317,347],[384,363],[435,369],[469,369],[492,368],[509,366],[527,366],[552,366],[571,365],[595,361],[619,356],[640,350],[661,347],[687,346],[710,346],[728,345],[735,344],[736,344],[737,343],[738,343],[743,343],[749,345],[754,345],[761,346],[770,347],[775,347],[779,347],[783,347],[785,347],[787,347],[788,347],[792,346],[795,346],[797,346],[799,345],[800,345],[801,345],[803,345],[806,344],[812,343],[816,342],[818,342],[820,340],[821,340],[822,340]],"dx":733,"dy":181,"length":815.2921645709813,"timing":[0,126,135,149,166,182,198,216,232,249,266,282,299,316,332,349,366,382,399,416,432,449,466,482,499,516,532,549,566,582,599,615,632,649,666,682,699,716,732,748,765,781,798,815,836,848,865,881,898,915,932,948,965,982]},{"start":[531,309],"end":[860,174],"points":[[531,310],[531,311],[531,312],[531,313],[531,314],[531,316],[531,317],[531,318],[531,319],[531,321],[531,322],[532,323],[532,324],[534,326],[539,326],[551,328],[567,330],[588,330],[613,330],[638,330],[681,326],[712,326],[748,326],[783,331],[812,333],[835,334],[858,338],[883,350],[910,366],[927,382],[938,393],[942,402],[943,406],[943,404],[943,397],[943,389],[936,370],[925,351],[914,333],[902,312],[891,290],[880,266],[876,255],[872,241],[869,232],[866,222],[864,214],[860,206],[856,198],[854,192],[853,190],[853,189],[853,185],[854,178],[856,174],[857,174],[859,174],[860,174]],"dx":329,"dy":-135,"length":711.4115183929249,"timing":[0,24,47,55,71,96,105,129,167,217,249,267,284,301,317,334,351,367,384,400,417,434,450,467,484,500,517,533,550,567,583,600,617,698,705,717,734,750,767,783,800,817,833,850,867,884,900,917,933,950,966,983,1000,1017,1033,1063,1100,1109]},{"start":[1127,576],"end":[716,202],"points":[[1127,576],[1125,576],[1120,574],[1115,567],[1097,551],[1061,526],[948,456],[877,415],[828,381],[804,360],[788,342],[780,330],[778,317],[776,304],[775,292],[768,279],[759,265],[751,255],[744,249],[739,245],[734,241],[731,234],[726,228],[723,222],[720,217],[720,213],[718,210],[717,209],[717,207],[716,205],[716,203],[716,202]],"dx":-411,"dy":-374,"length":577.6575901959326,"timing":[0,261,269,284,300,317,333,351,366,383,399,416,433,450,466,483,500,516,533,549,566,583,599,616,633,650,666,683,700,716,733,750]},{"start":[716,202],"end":[93,439],"points":[[716,205],[719,212],[722,223],[726,250],[718,282],[690,317],[612,362],[538,378],[456,389],[380,399],[323,409],[274,415],[236,421],[210,421],[185,421],[162,420],[148,418],[139,418],[132,418],[130,418],[128,418],[124,420],[120,422],[115,425],[107,429],[101,432],[100,433],[99,434],[97,435],[96,436],[96,437],[95,438],[94,439],[93,439]],"dx":-623,"dy":237,"length":744.8744693719266,"timing":[0,8,21,38,55,71,88,105,121,138,154,171,187,204,221,237,254,271,287,304,321,338,354,371,388,404,421,437,454,471,487,504,521,537]},{"start":[904,164],"end":[1164,618],"points":[[904,165],[904,166],[904,171],[904,178],[899,187],[894,198],[889,211],[882,226],[872,242],[863,258],[854,269],[845,281],[839,289],[834,300],[832,314],[832,332],[832,350],[848,375],[881,407],[940,442],[1000,471],[1056,496],[1096,516],[1128,534],[1137,545],[1141,548],[1142,550],[1142,551],[1145,556],[1152,563],[1163,570],[1172,574],[1176,575],[1177,576],[1177,578],[1177,582],[1177,584],[1177,587],[1176,589],[1176,593],[1175,595],[1175,598],[1174,600],[1173,601],[1172,602],[1172,604],[1172,605],[1171,606],[1170,608],[1169,610],[1168,610],[1168,612],[1168,613],[1167,614],[1165,617],[1164,618]],"dx":260,"dy":454,"length":671.6377249977447,"timing":[0,10,27,44,61,78,94,111,128,144,161,177,194,211,227,244,260,277,294,311,327,344,361,377,394,411,427,444,460,477,494,510,527,577,594,610,627,644,661,677,694,710,727,744,760,777,794,810,827,844,860,877,894,910,928,944]},{"start":[304,595],"end":[1078,230],"points":[[305,595],[312,595],[333,594],[372,585],[436,558],[508,500],[561,438],[594,396],[608,372],[611,353],[608,333],[596,313],[588,298],[588,292],[599,281],[634,272],[696,265],[764,263],[832,263],[904,265],[973,271],[1036,281],[1076,284],[1087,284],[1092,284],[1098,282],[1099,282],[1099,280],[1099,279],[1099,277],[1096,274],[1095,271],[1089,265],[1084,258],[1080,252],[1076,248],[1076,245],[1076,239],[1076,235],[1076,232],[1078,230]],"dx":774,"dy":-365,"length":1058.3345940359575,"timing":[0,8,24,42,57,74,91,107,124,140,157,174,191,207,224,241,256,273,290,306,323,340,357,374,390,407,424,448,457,474,491,507,523,540,557,573,590,606,623,640,656]},{"start":[122,222],"end":[1229,318],"points":[[122,222],[121,223],[122,224],[123,225],[128,230],[136,240],[149,250],[168,261],[191,277],[228,300],[300,334],[430,376],[528,391],[637,395],[740,394],[848,380],[943,367],[1021,347],[1079,329],[1115,318],[1140,309],[1156,299],[1168,294],[1181,290],[1203,288],[1216,288],[1228,288],[1244,288],[1260,288],[1275,289],[1282,290],[1283,291],[1281,292],[1279,292],[1278,293],[1274,294],[1269,298],[1265,300],[1261,302],[1256,305],[1251,306],[1244,309],[1238,312],[1232,315],[1230,318],[1229,318]],"dx":1107,"dy":96,"length":1281.541583441179,"timing":[0,16,90,100,116,133,150,167,183,200,216,233,249,266,283,300,316,333,350,366,383,400,416,433,449,466,483,501,515,532,549,565,585,601,616,633,649,666,683,699,716,732,749,766,783,799]},{"start":[1349,642],"end":[495,184],"points":[[1348,642],[1330,638],[1275,624],[1191,600],[1080,566],[971,525],[876,478],[790,431],[720,386],[663,345],[630,317],[609,297],[595,282],[581,269],[572,258],[557,250],[539,242],[521,237],[506,232],[498,229],[496,228],[496,226],[496,222],[496,215],[496,209],[494,198],[493,194],[493,193],[493,192],[493,191],[493,189],[493,188],[494,186],[494,185],[495,184]],"dx":-854,"dy":-458,"length":1005.5654979416299,"timing":[0,15,32,49,65,82,99,115,132,148,165,182,198,215,231,248,265,282,298,315,332,349,365,382,398,415,431,455,465,481,498,515,531,548,565]},{"start":[2209,812],"end":[681,401],"points":[[2208,812],[2198,809],[2149,800],[2043,781],[1860,747],[1627,704],[1380,660],[1113,614],[889,579],[734,547],[629,522],[582,504],[574,497],[573,494],[573,492],[575,487],[580,482],[590,474],[597,464],[610,456],[620,447],[628,439],[639,431],[647,425],[650,421],[651,421],[654,418],[656,415],[659,414],[661,412],[664,410],[666,410],[668,407],[670,405],[673,404],[674,402],[675,402],[678,402],[679,401],[680,401],[681,401]],"dx":-1528,"dy":-411,"length":1817.6739213581918,"timing":[0,9,26,43,60,76,93,110,126,143,160,176,193,210,226,243,260,276,293,310,326,343,360,376,393,527,543,560,577,593,610,627,643,660,677,693,875,910,927,943,960]},{"start":[115,456],"end":[746,1040],"points":[[116,457],[146,472],[182,498],[235,542],[303,605],[375,673],[451,743],[515,800],[560,838],[583,861],[593,872],[599,879],[602,882],[602,883],[603,883],[606,887],[610,892],[613,900],[619,915],[627,931],[637,944],[646,955],[654,966],[667,977],[683,991],[700,1004],[718,1019],[733,1029],[741,1036],[745,1039],[746,1039],[746,1040]],"dx":631,"dy":584,"length":866.3328494657012,"timing":[0,17,34,50,67,84,100,117,134,150,167,184,200,250,267,284,301,317,334,351,367,384,401,417,434,451,467,484,501,517,534,551]},{"start":[1130,559],"end":[523,165],"points":[[1130,558],[1124,554],[1112,543],[1101,533],[1087,520],[1075,507],[1060,492],[1044,476],[1021,455],[992,430],[960,400],[922,369],[892,342],[878,325],[876,319],[884,312],[915,305],[1001,300],[1170,303],[1346,299],[1638,285],[1847,272],[1991,268],[2068,268],[2078,268],[2077,269],[2064,269],[2036,269],[1995,269],[1939,272],[1892,275],[1873,277],[1873,276],[1873,277],[1861,276],[1823,275],[1741,274],[1587,272],[1337,269],[1037,255],[776,233],[579,210],[486,191],[476,183],[480,179],[489,175],[490,175],[492,174],[501,172],[513,168],[521,166],[522,165],[523,165]],"dx":-607,"dy":-394,"length":3219.8370296038293,"timing":[0,13,30,47,64,80,97,114,130,147,164,180,197,214,230,247,264,280,297,314,330,347,364,380,397,414,430,447,464,480,497,514,569,614,631,647,664,681,697,714,731,747,764,781,797,814,831,847,864,881,898,914,964]},{"start":[2060,240],"end":[1005,743],"points":[[2060,240],[2060,239],[2059,239],[2057,239],[2054,239],[2049,240],[2033,246],[1999,264],[1940,296],[1865,331],[1752,375],[1592,422],[1418,471],[1255,515],[1127,544],[1046,557],[1017,561],[1016,561],[1016,562],[1018,563],[1020,571],[1023,583],[1025,598],[1026,619],[1026,643],[1024,665],[1021,685],[1019,701],[1018,712],[1016,719],[1014,725],[1012,730],[1010,736],[1006,740],[1006,743],[1005,743]],"dx":-1055,"dy":503,"length":1287.1872569283958,"timing":[0,66,221,233,250,267,283,300,317,334,350,367,384,400,417,434,450,467,525,534,550,567,584,600,617,634,650,667,684,701,717,734,750,767,784,800]},{"start":[775,186],"end":[1456,775],"points":[[774,186],[769,186],[766,186],[764,186],[764,185],[764,186],[765,186],[780,197],[821,228],[872,275],[927,339],[988,414],[1066,497],[1145,576],[1227,645],[1299,701],[1350,739],[1376,760],[1382,765],[1383,765],[1384,765],[1385,765],[1386,765],[1390,766],[1396,766],[1404,766],[1416,768],[1431,770],[1443,772],[1451,774],[1454,774],[1456,774],[1456,775]],"dx":681,"dy":589,"length":938.0856608467813,"timing":[0,18,36,51,68,164,173,185,201,218,235,251,268,285,301,318,335,351,368,385,444,498,503,518,535,552,568,585,602,618,635,652,668]},{"start":[1456,775],"end":[797,1016],"points":[[1455,775],[1453,774],[1434,774],[1404,781],[1365,794],[1317,813],[1255,838],[1196,864],[1135,885],[1063,909],[996,930],[944,944],[906,956],[884,963],[873,966],[871,968],[869,969],[864,971],[859,975],[852,980],[845,985],[839,989],[834,995],[826,1000],[819,1005],[814,1008],[810,1009],[807,1011],[803,1014],[799,1015],[798,1016],[797,1016]],"dx":-659,"dy":241,"length":707.124661190467,"timing":[0,5,22,38,55,72,88,105,122,138,155,172,188,205,222,238,255,272,289,305,322,339,355,372,389,405,422,439,455,472,489,552]},{"start":[797,1016],"end":[2254,322],"points":[[797,1015],[801,1014],[815,1004],[850,983],[916,949],[1033,901],[1187,839],[1388,762],[1602,682],[1804,603],[1957,545],[2080,491],[2160,447],[2207,415],[2228,394],[2238,382],[2246,375],[2251,370],[2255,365],[2256,364],[2260,361],[2262,360],[2264,359],[2267,355],[2271,350],[2272,347],[2271,346],[2270,346],[2270,344],[2267,341],[2266,339],[2263,336],[2262,334],[2261,332],[2260,330],[2258,329],[2257,327],[2256,324],[2255,323],[2255,322],[2254,322]],"dx":1457,"dy":-694,"length":1663.3547163984288,"timing":[0,10,27,44,61,77,94,111,127,144,161,177,194,211,227,244,261,277,294,311,327,344,361,411,427,444,688,698,711,728,744,761,778,794,811,828,844,861,878,895,911]},{"start":[1021,396],"end":[2410,730],"points":[[1022,396],[1032,396],[1066,394],[1137,392],[1285,397],[1511,414],[1748,427],[1971,448],[2144,480],[2251,515],[2308,547],[2327,563],[2332,570],[2334,574],[2340,580],[2347,587],[2356,596],[2366,607],[2374,615],[2377,620],[2378,624],[2382,632],[2386,643],[2392,651],[2396,658],[2398,665],[2400,672],[2401,679],[2401,689],[2402,699],[2402,708],[2404,715],[2406,720],[2407,722],[2407,725],[2407,726],[2408,726],[2408,727],[2409,729],[2410,730]],"dx":1389,"dy":334,"length":1524.1389214551505,"timing":[0,14,31,48,64,81,98,114,131,148,164,181,198,214,231,248,264,281,298,314,331,348,364,381,398,415,431,448,465,481,498,515,531,548,565,581,606,615,631,648]},{"start":[632,393],"end":[2062,181],"points":[[632,393],[633,393],[648,401],[701,415],[797,425],[920,429],[1089,429],[1280,421],[1471,406],[1660,383],[1817,353],[1921,330],[1973,315],[1980,312],[1981,311],[1982,307],[1989,301],[1997,294],[2003,289],[2005,285],[2008,281],[2009,279],[2010,278],[2011,271],[2014,260],[2020,244],[2029,230],[2036,217],[2045,204],[2050,194],[2054,188],[2055,187],[2055,185],[2057,184],[2060,182],[2061,181],[2062,181]],"dx":1430,"dy":-212,"length":1521.8032137047228,"timing":[0,170,184,200,217,234,250,267,284,300,317,334,350,367,384,400,417,434,451,467,484,501,517,534,551,567,584,601,617,634,651,667,684,701,717,734,759]},{"start":[1371,808],"end":[1164,425],"points":[[1371,808],[1371,807],[1371,808],[1371,807],[1372,803],[1373,781],[1371,746],[1368,694],[1365,633],[1359,571],[1349,511],[1329,462],[1302,427],[1275,410],[1250,402],[1230,399],[1225,400],[1222,401],[1215,406],[1211,411],[1205,415],[1201,418],[1200,418],[1200,419],[1199,419],[1192,421],[1183,422],[1177,424],[1175,424],[1174,424],[1171,424],[1167,424],[1165,425],[1164,425]],"dx":-207,"dy":-383,"length":550.3615657151571,"timing":[0,16,66,176,182,199,216,233,249,266,283,299,316,333,349,366,383,466,483,499,516,533,549,566,583,600,616,633,650,700,716,733,750,766]},{"start":[387,515],"end":[2131,414],"points":[[388,515],[391,516],[413,521],[484,536],[627,551],[785,562],[957,577],[1124,598],[1269,617],[1422,637],[1576,646],[1714,633],[1848,598],[1949,557],[2003,518],[2031,488],[2042,472],[2048,466],[2056,457],[2070,451],[2083,444],[2092,440],[2098,436],[2103,432],[2111,429],[2117,422],[2122,420],[2123,419],[2123,418],[2126,417],[2129,415],[2131,414]],"dx":1744,"dy":-101,"length":1817.9575430614595,"timing":[0,11,28,44,61,78,95,111,128,144,161,178,194,211,228,245,261,278,295,311,328,345,361,378,395,411,428,445,461,478,495,511]},{"start":[2131,414],"end":[596,135],"points":[[2130,414],[2129,416],[2126,419],[2120,425],[2103,436],[2075,453],[2036,471],[1976,486],[1891,494],[1774,496],[1581,486],[1340,463],[1109,431],[894,392],[733,347],[622,306],[550,271],[516,244],[508,229],[507,215],[511,200],[515,186],[520,176],[526,168],[533,161],[539,153],[545,147],[548,144],[550,143],[551,143],[551,142],[552,142],[564,140],[580,139],[593,136],[596,135]],"dx":-1535,"dy":-279,"length":1836.0683313347606,"timing":[0,10,27,44,60,77,94,111,127,144,161,177,194,211,227,244,261,277,294,311,327,344,361,377,394,411,427,444,461,477,494,511,528,544,561,578]},{"start":[841,158],"end":[1146,318],"points":[[842,158],[857,172],[922,212],[1013,252],[1112,290],[1200,323],[1260,349],[1292,363],[1296,366],[1295,366],[1287,361],[1272,353],[1258,347],[1245,344],[1236,340],[1228,338],[1224,336],[1223,336],[1223,335],[1222,335],[1221,334],[1220,334],[1218,333],[1217,333],[1216,332],[1209,331],[1202,329],[1189,325],[1172,323],[1159,321],[1150,319],[1146,318]],"dx":305,"dy":160,"length":661.7936852435582,"timing":[0,13,30,47,63,80,97,113,130,248,264,280,297,314,330,347,364,380,402,416,430,447,464,480,497,514,530,547,564,580,597,614]},{"start":[2424,415],"end":[2419,1117],"points":[[2424,416],[2423,416],[2418,416],[2405,418],[2378,427],[2325,444],[2235,469],[2106,494],[1935,515],[1770,524],[1645,522],[1552,509],[1509,496],[1500,487],[1499,480],[1501,474],[1503,469],[1508,466],[1514,464],[1525,466],[1544,479],[1592,518],[1665,577],[1769,651],[1882,723],[1982,781],[2070,832],[2130,874],[2170,911],[2194,936],[2207,955],[2216,970],[2221,983],[2224,993],[2229,1003],[2234,1011],[2238,1017],[2244,1022],[2254,1029],[2267,1037],[2286,1047],[2304,1058],[2319,1066],[2333,1074],[2348,1082],[2362,1088],[2377,1095],[2390,1101],[2402,1107],[2409,1110],[2414,1113],[2417,1114],[2418,1115],[2419,1117]],"dx":-5,"dy":702,"length":2104.811414569626,"timing":[0,66,82,99,116,132,149,166,182,199,216,232,249,266,282,299,316,332,349,366,383,399,416,433,449,466,483,499,516,533,549,566,583,599,616,633,649,666,683,699,716,733,750,766,783,800,816,833,850,866,883,900,916,933]},{"start":[667,903],"end":[591,294],"points":[[668,903],[669,903],[698,890],[728,876],[754,862],[771,847],[778,830],[781,805],[783,769],[781,713],[765,639],[740,566],[709,491],[678,422],[656,369],[641,331],[634,310],[630,300],[629,296],[628,294],[624,290],[622,288],[621,287],[620,287],[620,288],[617,288],[608,290],[604,292],[599,292],[595,293],[592,294],[591,294]],"dx":-76,"dy":-609,"length":742.7932362129542,"timing":[0,2,19,35,52,69,85,102,119,135,152,169,185,202,219,235,252,269,285,302,319,335,352,376,419,436,452,469,486,502,519,536]},{"start":[526,853],"end":[1846,547],"points":[[527,853],[532,852],[555,845],[594,833],[645,819],[713,804],[755,794],[772,790],[782,787],[801,783],[843,772],[921,751],[1041,724],[1192,695],[1375,668],[1554,644],[1685,627],[1779,612],[1827,600],[1837,595],[1838,594],[1839,593],[1842,592],[1843,591],[1843,590],[1843,584],[1843,574],[1843,566],[1843,557],[1843,552],[1844,548],[1845,547],[1846,547]],"dx":1320,"dy":-306,"length":1390.385645659502,"timing":[0,10,26,43,60,76,93,110,126,143,160,176,193,210,227,243,260,277,293,310,327,343,360,377,482,493,510,527,543,560,577,593,610]},{"start":[2315,382],"end":[1900,964],"points":[[2314,382],[2313,383],[2306,386],[2294,393],[2279,406],[2261,430],[2238,467],[2203,516],[2155,581],[2106,655],[2062,734],[2024,805],[1994,871],[1974,918],[1965,943],[1959,959],[1957,969],[1954,973],[1952,976],[1950,981],[1945,985],[1939,990],[1938,992],[1937,992],[1936,992],[1926,986],[1918,980],[1908,973],[1903,968],[1901,965],[1900,964]],"dx":-415,"dy":582,"length":772.8979427422119,"timing":[0,4,21,37,54,71,87,104,121,137,154,171,187,204,221,237,254,271,287,304,321,337,354,382,387,404,421,438,454,471,488]},{"start":[1194,253],"end":[767,188],"points":[[1194,254],[1196,261],[1204,286],[1217,320],[1231,360],[1247,406],[1265,457],[1279,499],[1283,517],[1283,521],[1273,522],[1240,511],[1184,485],[1106,450],[1010,406],[916,363],[837,322],[786,290],[760,270],[752,263],[750,260],[748,257],[744,251],[742,247],[740,243],[741,240],[742,236],[742,231],[744,225],[748,219],[752,213],[757,206],[761,197],[764,191],[767,189],[767,188]],"dx":-427,"dy":-65,"length":961.6561911199407,"timing":[0,7,24,41,57,74,91,107,124,141,157,174,191,207,224,241,257,274,291,307,324,341,358,374,391,408,424,441,458,474,491,508,524,541,558,574]},{"start":[770,1047],"end":[889,493],"points":[[770,1046],[770,1044],[773,1033],[781,1012],[793,980],[811,946],[845,893],[908,833],[996,773],[1104,703],[1199,635],[1240,586],[1249,551],[1238,527],[1210,511],[1167,498],[1120,488],[1078,480],[1042,470],[1014,461],[998,455],[988,450],[979,447],[973,445],[966,445],[954,444],[940,444],[925,447],[914,452],[907,458],[902,461],[897,465],[894,469],[891,471],[889,474],[887,479],[886,483],[886,485],[887,489],[888,491],[888,492],[888,493],[889,493]],"dx":119,"dy":-554,"length":1130.7431793989745,"timing":[0,4,21,37,54,71,87,104,121,137,154,171,187,204,221,237,254,271,288,304,321,338,354,371,388,404,421,438,454,471,488,504,521,538,554,571,588,604,621,638,654,671,694]},{"start":[1439,381],"end":[76,685],"points":[[1439,381],[1438,381],[1438,382],[1437,383],[1436,383],[1436,384],[1435,384],[1424,392],[1386,409],[1297,432],[1141,461],[941,487],[706,513],[491,543],[339,573],[250,603],[228,615],[228,616],[229,616],[229,616],[227,619],[226,628],[222,635],[217,640],[211,647],[201,656],[187,665],[171,672],[156,676],[145,678],[143,678],[142,678],[141,678],[138,678],[136,680],[134,680],[133,680],[132,680],[126,681],[115,681],[101,681],[87,683],[77,684],[76,685]],"dx":-1363,"dy":304,"length":1425.1505531869655,"timing":[0,22,34,50,67,199,201,217,234,250,267,284,300,317,334,350,367,394,402,451,467,484,501,517,534,551,567,584,601,617,634,691,701,717,734,751,916,920,934,951,968,984,1001,1018]},{"start":[1542,1046],"end":[700,285],"points":[[1542,1045],[1541,1043],[1530,1024],[1522,1008],[1512,986],[1501,959],[1491,931],[1476,895],[1445,849],[1390,801],[1307,746],[1209,693],[1108,645],[1008,596],[933,551],[881,510],[849,477],[822,444],[800,420],[786,400],[773,382],[759,367],[747,357],[737,348],[729,342],[723,336],[717,331],[716,329],[716,327],[712,318],[711,306],[706,297],[703,289],[701,286],[701,285],[700,285]],"dx":-842,"dy":-761,"length":1174.69406404531,"timing":[0,3,20,37,54,70,87,104,120,137,154,170,187,204,220,237,254,270,287,304,320,337,354,370,387,404,420,437,454,470,487,504,520,537,554,570]},{"start":[172,593],"end":[1561,874],"points":[[170,593],[163,593],[155,591],[151,590],[149,589],[148,588],[147,588],[148,588],[153,588],[208,591],[323,591],[501,589],[703,597],[957,628],[1217,671],[1409,716],[1548,758],[1626,791],[1643,801],[1643,802],[1644,804],[1645,806],[1644,808],[1640,813],[1632,821],[1626,831],[1617,841],[1606,852],[1592,862],[1580,869],[1572,871],[1568,872],[1563,873],[1562,874],[1561,874]],"dx":1389,"dy":281,"length":1663.590363329133,"timing":[0,16,33,50,66,117,133,190,200,217,233,250,267,283,300,317,333,350,367,383,433,450,467,483,500,517,534,550,567,584,600,617,634,650,679]},{"start":[910,1012],"end":[1032,277],"points":[[911,1012],[911,1011],[915,1004],[925,993],[940,969],[960,929],[989,877],[1026,802],[1069,713],[1108,627],[1129,556],[1139,488],[1140,436],[1138,396],[1136,364],[1136,335],[1136,310],[1137,286],[1136,268],[1134,257],[1132,252],[1129,248],[1125,247],[1116,246],[1104,246],[1092,246],[1085,246],[1080,247],[1079,248],[1072,252],[1057,261],[1044,269],[1036,275],[1032,276],[1032,277]],"dx":122,"dy":-735,"length":924.5371273493324,"timing":[0,5,21,38,55,71,88,105,121,138,155,171,188,205,221,238,255,271,288,305,321,338,355,372,388,405,422,438,455,639,655,672,688,705,722]},{"start":[1032,277],"end":[2207,291],"points":[[1032,278],[1035,283],[1052,306],[1090,334],[1155,356],[1249,365],[1379,360],[1531,351],[1702,335],[1857,321],[1977,313],[2056,310],[2087,309],[2093,309],[2098,308],[2110,307],[2125,305],[2142,304],[2153,304],[2156,303],[2157,303],[2158,303],[2162,302],[2166,302],[2168,302],[2168,301],[2170,301],[2173,300],[2176,300],[2179,298],[2184,297],[2192,295],[2200,293],[2207,291]],"dx":1175,"dy":14,"length":1207.9925291407894,"timing":[0,7,23,40,57,73,90,107,123,140,157,174,190,207,224,240,257,274,290,307,331,340,357,374,390,407,424,440,457,474,490,507,524,540]},{"start":[343,399],"end":[245,862],"points":[[343,400],[348,403],[366,411],[395,423],[441,434],[494,448],[523,460],[529,472],[519,499],[494,536],[458,579],[423,621],[393,659],[369,696],[346,731],[329,759],[316,783],[308,799],[304,808],[302,815],[297,821],[294,828],[291,833],[291,836],[290,836],[289,837],[283,840],[273,845],[263,851],[256,856],[251,859],[246,862],[245,862]],"dx":-98,"dy":463,"length":694.9804981749378,"timing":[0,7,24,41,57,74,91,107,124,141,157,174,191,207,224,241,257,274,291,308,324,341,358,374,391,441,458,474,491,508,524,541,558]},{"start":[145,258],"end":[1158,936],"points":[[145,258],[145,259],[154,263],[225,294],[365,337],[568,394],[812,468],[1023,549],[1187,639],[1276,723],[1308,789],[1305,838],[1287,867],[1274,879],[1269,882],[1268,883],[1265,884],[1258,887],[1253,889],[1248,892],[1239,897],[1224,904],[1208,913],[1194,919],[1182,924],[1173,927],[1168,928],[1164,930],[1161,931],[1160,932],[1159,934],[1158,936]],"dx":1013,"dy":678,"length":1541.1151443657373,"timing":[0,194,199,216,233,249,266,283,299,316,333,349,366,383,400,416,433,450,466,483,500,516,533,550,566,583,600,616,633,650,666,683]},{"start":[1115,1046],"end":[118,1082],"points":[[1115,1046],[1115,1045],[1111,1040],[1102,1029],[1076,1008],[1026,974],[947,935],[811,901],[644,884],[487,881],[349,891],[252,907],[197,926],[176,939],[169,950],[162,959],[154,970],[144,985],[138,1002],[132,1016],[128,1030],[124,1041],[123,1052],[123,1057],[123,1060],[123,1061],[123,1062],[123,1065],[123,1068],[123,1071],[123,1073],[123,1074],[123,1075],[122,1076],[120,1078],[118,1081],[118,1082]],"dx":-997,"dy":36,"length":1146.7289759553223,"timing":[0,153,167,184,201,217,234,251,267,284,301,317,334,351,367,384,401,417,434,451,467,484,501,517,534,551,567,584,601,618,634,651,706,718,734,751,768]},{"start":[2423,503],"end":[1683,472],"points":[[2422,503],[2421,503],[2400,510],[2365,522],[2322,534],[2283,545],[2233,557],[2160,571],[2056,583],[1928,591],[1784,595],[1677,596],[1628,590],[1621,586],[1621,585],[1627,582],[1646,570],[1672,554],[1704,537],[1739,519],[1767,504],[1776,500],[1776,499],[1775,499],[1772,497],[1764,495],[1760,493],[1758,494],[1752,492],[1741,489],[1727,484],[1711,480],[1696,475],[1686,472],[1683,472]],"dx":-740,"dy":-31,"length":1089.2908296173734,"timing":[0,4,21,38,54,71,88,104,121,138,154,171,188,204,228,238,254,271,288,304,321,338,354,428,438,455,471,488,505,521,538,555,571,588,605]},{"start":[285,665],"end":[738,1048],"points":[[286,665],[292,665],[308,663],[336,659],[394,656],[472,655],[541,659],[589,669],[615,684],[632,709],[646,745],[660,791],[675,843],[688,892],[703,941],[718,980],[734,1012],[749,1036],[754,1047],[755,1052],[756,1055],[757,1060],[758,1061],[757,1061],[755,1061],[751,1060],[746,1058],[741,1055],[739,1051],[738,1049],[738,1048]],"dx":453,"dy":383,"length":766.4270646845549,"timing":[0,10,27,44,60,77,94,110,127,144,160,177,194,211,227,244,261,277,294,311,327,344,361,497,511,527,544,561,577,594,611]},{"start":[1702,391],"end":[2048,1070],"points":[[1702,392],[1701,402],[1700,424],[1697,446],[1691,482],[1689,532],[1708,596],[1759,674],[1842,746],[1930,797],[2012,840],[2060,874],[2074,899],[2076,923],[2071,947],[2068,967],[2067,979],[2067,988],[2066,995],[2063,1001],[2058,1007],[2048,1018],[2035,1030],[2023,1042],[2018,1050],[2017,1053],[2016,1053],[2017,1053],[2018,1053],[2023,1056],[2028,1058],[2036,1062],[2045,1068],[2048,1069],[2048,1070]],"dx":346,"dy":679,"length":904.1371751349062,"timing":[0,14,31,48,64,81,98,114,131,148,164,181,198,214,231,248,265,281,298,315,331,348,365,381,398,415,431,627,631,648,665,682,698,715,732]},{"start":[2048,1069],"end":[1544,766],"points":[[2048,1070],[2048,1069],[2048,1064],[2043,1052],[2027,1033],[1999,1010],[1949,980],[1863,942],[1746,900],[1613,859],[1517,840],[1485,838],[1485,837],[1486,837],[1486,838],[1486,839],[1489,838],[1495,834],[1504,828],[1512,822],[1516,815],[1518,806],[1520,801],[1523,798],[1528,792],[1532,783],[1536,777],[1541,773],[1542,770],[1544,767],[1544,766]],"dx":-504,"dy":-303,"length":726.9572551754944,"timing":[0,60,74,90,107,124,140,157,174,190,207,224,241,261,274,295,307,324,341,358,374,391,408,424,441,458,474,491,508,524,541]},{"start":[1422,241],"end":[250,912],"points":[[1423,242],[1425,244],[1426,247],[1425,251],[1408,265],[1356,301],[1275,354],[1166,418],[1039,486],[909,558],[775,621],[634,679],[513,717],[431,743],[380,762],[358,770],[350,774],[341,778],[332,786],[321,798],[315,808],[311,816],[308,822],[304,832],[298,841],[292,853],[285,865],[277,879],[269,888],[262,898],[257,904],[254,907],[251,909],[250,911],[250,912]],"dx":-1172,"dy":671,"length":1385.0554168022293,"timing":[0,10,27,43,60,77,93,110,127,143,160,177,193,210,227,243,260,277,293,310,327,344,360,377,394,410,427,444,460,477,494,510,527,544,560]},{"start":[1657,462],"end":[337,210],"points":[[1656,462],[1654,462],[1632,462],[1590,464],[1510,463],[1378,452],[1204,436],[1005,406],[814,372],[625,335],[488,303],[415,279],[393,265],[390,261],[390,260],[391,259],[392,256],[395,254],[397,249],[398,245],[398,241],[396,238],[396,235],[394,234],[392,233],[389,230],[383,226],[371,221],[354,216],[338,212],[337,210]],"dx":-1320,"dy":-252,"length":1384.3629716953942,"timing":[0,3,20,37,53,70,87,103,120,137,153,170,187,203,227,237,254,270,287,304,320,337,354,370,387,404,421,437,454,470,487]},{"start":[424,328],"end":[1929,356],"points":[[425,328],[442,336],[521,366],[663,404],[871,444],[1116,470],[1356,488],[1581,504],[1758,521],[1879,533],[1949,538],[1966,539],[1967,539],[1967,538],[1967,537],[1967,535],[1975,525],[1985,509],[1990,487],[1991,465],[1989,450],[1983,440],[1977,434],[1975,432],[1975,430],[1973,420],[1969,407],[1967,395],[1967,387],[1967,379],[1967,375],[1967,373],[1966,371],[1965,369],[1963,366],[1960,362],[1956,361],[1951,358],[1946,358],[1943,358],[1940,358],[1936,358],[1932,357],[1930,357],[1929,356]],"dx":1505,"dy":28,"length":1786.234759038411,"timing":[0,8,25,41,58,75,91,108,125,141,158,175,191,216,234,241,258,275,291,308,325,341,358,375,392,408,425,442,458,475,492,508,525,542,558,575,592,608,625,642,658,675,692,708,723]},{"start":[609,152],"end":[663,869],"points":[[609,152],[620,159],[642,176],[669,205],[694,246],[707,296],[712,364],[711,440],[704,511],[697,588],[696,659],[699,712],[704,752],[709,778],[712,795],[714,806],[715,812],[715,815],[715,819],[713,825],[709,832],[705,840],[701,851],[697,857],[694,862],[693,862],[693,863],[692,863],[690,863],[688,863],[687,863],[685,863],[682,863],[679,864],[675,866],[670,867],[667,868],[665,868],[664,869],[663,869]],"dx":54,"dy":717,"length":786.7927351443439,"timing":[0,149,166,183,199,216,233,249,266,283,300,316,333,350,366,383,400,416,433,450,466,483,500,516,533,550,575,583,600,616,633,650,666,683,700,717,733,750,767,783]},{"start":[663,869],"end":[586,228],"points":[[663,868],[663,867],[664,863],[669,849],[675,832],[682,814],[691,798],[697,786],[704,775],[706,758],[709,733],[705,699],[689,650],[664,588],[630,525],[596,457],[565,394],[543,338],[527,296],[517,272],[512,263],[510,261],[511,260],[512,259],[514,257],[523,253],[539,246],[552,239],[565,235],[576,232],[585,229],[586,228],[587,228],[586,228]],"dx":-77,"dy":-641,"length":744.7736056393753,"timing":[0,4,18,35,51,68,85,102,118,135,152,168,185,202,218,235,252,268,285,302,318,335,352,368,418,435,452,469,485,502,519,535,567,602]},{"start":[1621,166],"end":[2115,370],"points":[[1620,165],[1620,166],[1616,177],[1595,207],[1551,250],[1485,308],[1385,383],[1274,474],[1151,590],[1041,717],[956,829],[900,917],[880,966],[879,980],[881,987],[881,991],[880,991],[879,991],[879,993],[874,994],[872,995],[871,995],[873,991],[891,969],[938,924],[1029,861],[1195,775],[1395,694],[1629,617],[1841,555],[1987,511],[2068,480],[2087,466],[2089,463],[2090,463],[2091,461],[2096,456],[2100,449],[2102,446],[2103,444],[2103,443],[2104,439],[2106,431],[2110,418],[2114,400],[2115,385],[2115,370]],"dx":494,"dy":204,"length":2584.4952827409334,"timing":[0,188,200,216,233,250,266,283,300,316,333,350,366,383,400,417,433,493,500,517,533,550,567,583,600,617,634,650,667,683,700,717,733,750,767,783,800,817,834,850,870,884,900,917,934,950,967]},{"start":[846,151],"end":[2385,368],"points":[[846,152],[847,152],[852,157],[875,174],[921,193],[1018,217],[1150,236],[1311,250],[1524,256],[1760,255],[1967,250],[2151,254],[2264,264],[2314,274],[2326,280],[2328,280],[2330,281],[2338,285],[2351,289],[2363,295],[2372,299],[2382,306],[2389,309],[2390,310],[2391,311],[2391,314],[2391,324],[2391,338],[2390,350],[2389,358],[2386,365],[2385,368]],"dx":1539,"dy":217,"length":1629.9525834108854,"timing":[0,11,21,38,54,71,88,104,121,138,154,171,188,204,221,238,254,271,288,304,321,338,354,371,388,405,421,438,455,471,488,505]},{"start":[1793,536],"end":[444,325],"points":[[1792,536],[1791,536],[1783,536],[1775,539],[1764,543],[1746,548],[1719,558],[1668,569],[1596,574],[1506,573],[1372,560],[1200,541],[1019,515],[829,491],[642,474],[502,465],[411,457],[374,452],[371,451],[370,446],[372,439],[378,433],[385,422],[393,411],[404,399],[410,390],[416,383],[418,379],[419,377],[420,375],[421,371],[423,367],[426,360],[430,352],[434,345],[438,337],[442,329],[443,326],[444,325]],"dx":-1349,"dy":-211,"length":1581.47320853971,"timing":[0,2,17,34,51,68,84,101,118,134,151,168,184,201,218,234,251,268,284,334,351,368,384,401,418,435,451,468,485,501,518,535,551,568,585,601,618,635,651]},{"start":[444,325],"end":[2210,723],"points":[[445,326],[451,330],[467,340],[495,358],[551,388],[652,426],[793,464],[969,495],[1179,520],[1378,547],[1549,572],[1718,595],[1850,610],[1926,624],[1963,631],[1971,633],[1971,634],[1973,636],[1984,643],[1998,651],[2011,660],[2019,664],[2023,667],[2030,670],[2038,675],[2053,682],[2072,689],[2101,694],[2133,698],[2157,702],[2175,707],[2184,710],[2190,713],[2198,718],[2204,721],[2207,722],[2208,722],[2209,723],[2210,723]],"dx":1766,"dy":398,"length":1827.4613820971365,"timing":[0,14,31,48,64,81,98,114,131,148,164,181,198,214,231,248,269,281,298,314,331,348,364,381,398,415,431,448,465,481,498,515,531,548,565,581,631,648,665]},{"start":[995,1110],"end":[156,323],"points":[[996,1110],[998,1108],[1001,1107],[1004,1103],[1011,1096],[1022,1082],[1045,1057],[1069,1024],[1088,981],[1084,934],[1050,884],[975,823],[866,759],[728,689],[583,624],[435,563],[324,514],[270,478],[254,453],[251,436],[251,426],[251,419],[250,415],[250,413],[250,411],[250,407],[249,403],[246,396],[237,387],[220,374],[200,362],[185,353],[176,347],[171,341],[166,335],[162,329],[159,326],[158,325],[157,325],[157,324],[156,323]],"dx":-839,"dy":-787,"length":1356.6143609979083,"timing":[0,14,31,48,64,81,98,114,131,148,164,181,198,215,231,248,264,281,298,314,331,348,364,381,398,415,431,448,465,481,498,515,531,548,565,581,598,615,641,648,661]},{"start":[2038,457],"end":[345,1057],"points":[[2037,457],[2016,455],[1961,455],[1851,468],[1661,492],[1395,524],[1096,571],[770,637],[496,719],[316,793],[221,853],[203,884],[213,901],[224,912],[226,913],[227,914],[230,919],[239,928],[244,939],[249,958],[255,981],[268,1008],[284,1028],[300,1042],[313,1050],[320,1052],[328,1055],[334,1058],[339,1059],[340,1059],[340,1060],[341,1060],[341,1059],[345,1057]],"dx":-1693,"dy":600,"length":2151.6015400071037,"timing":[0,15,31,48,65,81,98,115,131,148,165,181,198,215,231,248,265,281,298,315,331,348,365,381,398,415,432,448,465,482,498,528,532,548]},{"start":[1740,350],"end":[342,674],"points":[[1739,350],[1737,350],[1732,350],[1723,351],[1710,351],[1693,351],[1681,351],[1641,349],[1602,345],[1547,344],[1454,342],[1399,342],[1348,347],[1298,356],[1237,370],[1165,397],[1095,425],[995,469],[901,508],[823,542],[723,573],[635,588],[567,600],[479,617],[452,620],[427,626],[407,629],[392,633],[383,635],[377,636],[370,639],[365,641],[360,644],[355,652],[354,656],[351,659],[351,662],[348,665],[348,666],[347,667],[346,670],[345,671],[344,672],[342,674]],"dx":-1398,"dy":324,"length":1465.0480846228459,"timing":[0,10,27,44,60,77,94,110,127,144,160,177,194,210,227,244,260,277,294,311,327,344,361,377,394,411,427,444,461,477,494,511,528,544,561,577,594,611,628,644,661,678,694,711]},{"start":[359,587],"end":[689,669],"points":[[361,586],[362,586],[363,585],[366,584],[373,581],[380,579],[389,576],[400,574],[412,573],[429,573],[449,576],[491,591],[536,606],[564,618],[590,635],[608,646],[626,659],[642,671],[651,678],[659,682],[660,683],[661,683],[662,683],[663,683],[664,683],[666,683],[668,682],[674,681],[679,679],[681,678],[683,677],[685,677],[686,675],[687,675],[688,675],[689,674],[689,673],[689,672],[689,671],[689,669]],"dx":330,"dy":82,"length":365.85008173666597,"timing":[0,8,23,40,56,73,90,107,123,140,156,173,190,207,223,240,257,273,290,307,323,340,357,383,400,440,457,474,490,507,528,540,557,574,591,753,768,777,790,807]},{"start":[1448,223],"end":[587,200],"points":[[1447,223],[1446,224],[1444,226],[1441,229],[1436,234],[1428,242],[1424,246],[1402,263],[1381,272],[1360,280],[1332,285],[1295,286],[1249,283],[1135,259],[1094,248],[1009,228],[876,192],[796,174],[733,162],[675,153],[629,147],[601,144],[580,144],[565,144],[551,144],[540,146],[533,151],[532,152],[530,154],[529,157],[529,160],[533,167],[538,173],[543,177],[551,182],[556,185],[560,186],[564,188],[566,188],[570,189],[571,189],[574,189],[574,190],[575,190],[576,190],[579,191],[581,194],[584,196],[585,197],[585,199],[587,200]],"dx":-861,"dy":-23,"length":1036.1065463139905,"timing":[0,14,30,47,64,81,97,114,131,147,164,181,197,214,231,247,264,281,297,314,331,348,364,381,398,414,431,448,464,481,498,514,531,548,564,581,598,614,631,648,664,681,698,731,748,765,781,798,815,831,848]},{"start":[167,150],"end":[873,333],"points":[[168,150],[169,150],[172,149],[173,149],[175,149],[182,148],[201,150],[214,153],[266,165],[351,195],[396,212],[427,226],[552,270],[614,288],[692,318],[771,351],[818,368],[866,384],[907,399],[921,402],[933,405],[935,405],[939,405],[943,407],[948,407],[953,407],[957,407],[959,407],[959,406],[957,402],[949,392],[932,378],[924,373],[911,362],[899,354],[889,347],[881,340],[876,335],[875,334],[873,333]],"dx":706,"dy":183,"length":950.7060948754375,"timing":[0,15,23,35,52,68,85,102,118,135,152,168,185,202,218,235,252,269,285,302,319,335,352,369,385,402,419,436,452,469,485,502,519,535,552,569,586,602,619,636]},{"start":[557,784],"end":[1553,807],"points":[[557,783],[557,782],[558,780],[558,779],[560,773],[562,762],[564,748],[568,728],[570,705],[575,682],[579,663],[583,644],[584,624],[582,609],[576,592],[570,580],[565,575],[561,574],[554,574],[549,574],[544,573],[539,573],[534,574],[530,577],[529,578],[529,579],[529,582],[541,591],[593,615],[624,625],[757,665],[893,695],[1041,729],[1180,763],[1320,799],[1415,824],[1472,840],[1515,852],[1536,863],[1557,876],[1560,879],[1566,880],[1567,878],[1567,870],[1565,856],[1560,836],[1557,819],[1555,810],[1554,809],[1554,807],[1553,807]],"dx":996,"dy":23,"length":1416.3514370279106,"timing":[0,15,23,38,55,72,88,105,122,138,155,172,188,205,222,238,255,272,288,305,322,338,355,372,389,405,422,439,455,472,489,505,522,539,555,572,589,605,622,640,655,760,772,789,806,822,839,856,872,889,984]},{"start":[1829,826],"end":[131,215],"points":[[1829,826],[1829,825],[1828,823],[1828,821],[1825,819],[1820,812],[1809,805],[1793,793],[1767,777],[1727,753],[1648,716],[1553,666],[1454,628],[1286,563],[1164,522],[1063,484],[953,443],[857,404],[765,367],[666,325],[553,280],[470,244],[388,220],[307,194],[226,167],[191,158],[168,153],[148,150],[133,148],[127,148],[123,148],[122,148],[121,148],[120,148],[120,151],[120,163],[120,178],[123,188],[127,195],[129,197],[129,198],[129,199],[130,200],[130,201],[131,202],[131,204],[131,206],[131,207],[131,208],[131,209],[131,213],[131,214],[131,215]],"dx":-1698,"dy":-611,"length":1918.9436861754916,"timing":[0,123,140,150,167,183,200,217,233,250,267,284,300,317,333,350,367,383,400,417,434,450,467,484,500,517,534,550,567,584,601,617,634,650,667,684,701,717,734,751,767,784,813,820,836,851,933,948,956,967,984,1001,1018]},{"start":[1570,543],"end":[583,513],"points":[[1569,543],[1567,542],[1562,541],[1544,535],[1517,527],[1480,518],[1424,507],[1350,492],[1283,479],[1202,468],[1109,462],[975,459],[937,457],[854,458],[820,459],[791,463],[770,468],[748,474],[726,483],[708,493],[695,500],[652,524],[631,537],[608,552],[580,571],[565,581],[558,586],[558,585],[558,582],[558,577],[564,567],[569,556],[577,541],[583,532],[587,524],[591,517],[594,512],[596,509],[597,508],[598,508],[598,507],[597,508],[596,508],[595,509],[592,510],[589,511],[587,512],[585,513],[583,513]],"dx":-987,"dy":-30,"length":1159.1206062652145,"timing":[0,9,25,42,58,75,92,108,125,142,159,175,192,209,226,242,259,275,292,309,325,342,359,375,392,409,426,489,496,509,526,542,559,576,592,609,626,643,659,679,695,856,864,876,893,909,926,943,960]},{"start":[1760,376],"end":[741,843],"points":[[1760,376],[1759,376],[1758,376],[1757,376],[1756,377],[1754,377],[1748,377],[1737,377],[1713,377],[1678,377],[1641,375],[1590,371],[1490,356],[1415,347],[1328,345],[1246,355],[1217,361],[1109,408],[1060,445],[1041,463],[963,549],[929,592],[898,634],[856,685],[830,717],[788,757],[749,789],[725,808],[705,824],[695,832],[693,837],[692,838],[692,839],[692,840],[693,840],[694,840],[696,840],[698,841],[703,842],[706,842],[710,842],[716,843],[723,843],[736,843],[740,843],[741,843]],"dx":-1019,"dy":467,"length":1317.9993103028423,"timing":[0,49,80,96,104,116,132,149,166,183,199,216,233,249,266,283,299,316,333,349,366,383,400,416,433,449,466,483,500,516,533,550,568,583,600,616,633,650,666,683,700,717,733,750,767,783]},{"start":[885,822],"end":[1071,142],"points":[[886,821],[887,820],[888,819],[889,817],[891,813],[894,808],[899,799],[909,783],[926,756],[941,728],[965,690],[999,636],[1032,566],[1058,499],[1087,422],[1112,355],[1122,315],[1133,269],[1138,244],[1140,223],[1142,204],[1142,194],[1142,189],[1141,184],[1140,180],[1139,180],[1138,180],[1135,180],[1128,179],[1119,177],[1106,175],[1094,172],[1090,170],[1088,168],[1087,165],[1086,161],[1084,157],[1083,153],[1081,149],[1081,146],[1081,145],[1080,145],[1079,143],[1078,142],[1076,142],[1075,142],[1074,142],[1073,142],[1071,142]],"dx":186,"dy":-680,"length":788.5691837787715,"timing":[0,16,23,36,53,69,86,103,119,136,152,169,186,202,220,236,253,269,286,303,319,336,353,369,386,403,439,453,469,486,503,520,536,553,570,586,603,620,636,653,670,686,703,728,752,768,783,791,807]},{"start":[86,708],"end":[648,711],"points":[[91,706],[101,702],[113,698],[141,688],[192,668],[236,655],[271,641],[296,633],[313,630],[330,629],[336,631],[342,634],[356,643],[372,651],[391,661],[416,672],[440,681],[462,691],[484,700],[505,708],[528,716],[536,719],[556,725],[565,728],[567,729],[569,729],[570,729],[573,729],[574,729],[580,729],[588,729],[607,729],[621,727],[631,725],[635,725],[641,724],[644,723],[645,723],[647,722],[648,722],[648,721],[648,720],[648,719],[649,717],[649,715],[649,713],[648,712],[648,711]],"dx":562,"dy":3,"length":603.4095079109936,"timing":[0,8,18,35,51,68,85,101,118,135,152,168,185,201,218,235,251,268,285,302,318,335,352,368,385,402,464,471,485,502,518,535,552,568,585,602,619,635,652,669,687,703,719,735,752,769,785,802]},{"start":[1105,195],"end":[1604,401],"points":[[1104,195],[1103,195],[1101,195],[1101,196],[1102,197],[1108,201],[1153,219],[1211,241],[1314,271],[1416,296],[1505,319],[1584,345],[1628,364],[1646,374],[1653,380],[1654,380],[1654,381],[1654,382],[1654,383],[1654,384],[1653,385],[1651,386],[1647,386],[1642,387],[1637,388],[1631,390],[1625,391],[1623,393],[1620,394],[1618,395],[1618,396],[1617,396],[1616,397],[1614,398],[1610,399],[1606,401],[1604,401]],"dx":499,"dy":206,"length":647.981254516532,"timing":[0,15,31,112,119,135,152,168,185,202,218,235,252,269,285,302,327,336,352,368,386,402,419,435,452,469,485,502,519,535,552,602,619,635,652,669,686]},{"start":[1675,758],"end":[941,650],"points":[[1675,757],[1675,755],[1673,750],[1670,741],[1665,727],[1658,714],[1643,688],[1612,655],[1576,635],[1526,619],[1482,612],[1428,607],[1353,607],[1266,607],[1167,618],[1101,630],[1054,639],[1023,646],[1001,650],[982,654],[973,656],[966,659],[960,660],[954,660],[952,661],[948,661],[941,660],[936,658],[936,657],[936,655],[936,654],[939,651],[940,651],[941,650]],"dx":-734,"dy":-108,"length":822.6310631728377,"timing":[0,8,25,42,58,75,92,108,125,142,159,176,192,209,225,242,259,275,292,309,326,342,359,375,392,442,459,475,577,592,609,626,642,659]},{"start":[713,176],"end":[1516,791],"points":[[719,180],[735,190],[770,210],[840,255],[935,319],[1025,385],[1101,455],[1173,529],[1239,595],[1292,653],[1339,703],[1353,720],[1361,730],[1362,732],[1363,733],[1365,733],[1366,734],[1375,739],[1390,744],[1418,753],[1439,761],[1461,769],[1482,776],[1498,781],[1511,784],[1516,788],[1519,790],[1520,790],[1519,791],[1518,791],[1517,791],[1516,791]],"dx":803,"dy":615,"length":1026.6064343778912,"timing":[0,7,18,35,51,68,85,102,118,135,152,168,185,202,218,303,318,335,352,369,385,402,419,435,452,469,485,503,607,652,669,686]},{"start":[265,769],"end":[1306,258],"points":[[266,767],[266,764],[268,758],[272,749],[280,735],[290,719],[309,699],[334,671],[383,628],[439,582],[534,511],[634,448],[781,364],[870,321],[939,294],[998,272],[1032,265],[1057,259],[1069,256],[1078,253],[1085,251],[1092,250],[1100,250],[1122,252],[1139,257],[1156,259],[1171,262],[1183,265],[1194,267],[1205,269],[1216,271],[1225,273],[1236,273],[1243,272],[1249,270],[1255,269],[1260,265],[1261,265],[1261,264],[1262,264],[1263,264],[1264,264],[1266,264],[1268,264],[1271,263],[1276,262],[1283,261],[1290,260],[1295,260],[1299,258],[1302,258],[1304,258],[1306,258]],"dx":1041,"dy":-511,"length":1215.6980577725399,"timing":[0,16,33,49,66,83,100,116,133,149,166,183,200,216,233,250,266,283,300,316,333,350,366,383,400,416,433,450,466,483,500,516,533,550,567,583,600,617,633,655,679,687,700,717,733,750,767,783,800,817,834,851,867]},{"start":[163,672],"end":[1021,417],"points":[[163,672],[165,672],[166,672],[167,672],[169,672],[171,672],[172,674],[176,683],[181,696],[190,712],[204,727],[214,737],[214,738],[216,737],[223,735],[239,728],[267,713],[312,695],[364,671],[437,642],[521,613],[604,583],[675,558],[734,535],[780,515],[835,495],[865,483],[886,474],[910,465],[923,460],[937,453],[951,446],[959,440],[968,436],[971,433],[974,431],[978,429],[981,429],[985,426],[987,426],[989,425],[990,425],[991,425],[993,425],[995,425],[999,423],[1001,423],[1003,422],[1006,420],[1011,419],[1015,418],[1019,417],[1021,417]],"dx":858,"dy":-255,"length":959.5525154023804,"timing":[0,17,68,83,100,117,133,150,167,184,200,217,337,353,367,384,400,417,434,450,467,484,500,517,534,550,567,584,600,617,634,651,667,684,701,717,734,751,767,784,929,944,952,968,984,1001,1018,1505,1518,1535,1552,1568,1585]},{"start":[997,198],"end":[1231,425],"points":[[998,198],[1002,203],[1006,209],[1012,227],[1014,243],[1012,263],[1000,285],[968,313],[921,340],[843,369],[796,387],[668,416],[577,435],[495,461],[446,490],[440,496],[442,497],[462,499],[512,503],[601,503],[652,503],[820,500],[924,496],[1000,494],[1076,494],[1126,493],[1150,488],[1167,481],[1172,477],[1173,474],[1176,471],[1179,468],[1185,465],[1192,460],[1195,457],[1197,452],[1198,447],[1200,438],[1204,435],[1208,433],[1211,433],[1220,428],[1224,426],[1228,426],[1229,426],[1230,425],[1231,425]],"dx":234,"dy":227,"length":1521.2923254464433,"timing":[0,8,24,41,57,74,91,107,124,141,157,174,191,207,224,241,257,274,291,307,324,341,358,374,391,408,424,441,458,474,491,508,524,541,558,574,591,608,624,641,658,675,691,708,758,775,792]},{"start":[1826,301],"end":[1666,842],"points":[[1825,302],[1823,302],[1814,306],[1802,313],[1782,327],[1754,351],[1724,379],[1705,410],[1688,463],[1686,502],[1691,540],[1698,569],[1709,598],[1719,623],[1726,642],[1728,661],[1728,679],[1720,703],[1709,728],[1693,751],[1680,762],[1668,770],[1661,773],[1656,775],[1654,775],[1654,776],[1654,777],[1653,781],[1653,788],[1653,799],[1654,809],[1654,813],[1656,822],[1657,823],[1657,825],[1657,826],[1657,828],[1659,830],[1661,834],[1662,836],[1665,839],[1666,841],[1666,842]],"dx":-160,"dy":541,"length":640.4988704385191,"timing":[0,12,29,45,62,79,95,112,129,146,162,179,196,212,229,246,262,279,296,313,329,346,362,379,396,416,429,446,462,479,496,513,529,546,657,697,746,763,779,796,813,829,846]},{"start":[1666,842],"end":[1721,333],"points":[[1666,841],[1665,841],[1661,836],[1654,827],[1645,809],[1632,782],[1615,735],[1601,668],[1605,609],[1622,569],[1680,496],[1709,461],[1736,424],[1752,406],[1762,399],[1770,393],[1772,391],[1774,388],[1775,385],[1775,381],[1775,375],[1775,370],[1775,367],[1769,362],[1761,361],[1753,359],[1741,356],[1735,355],[1730,353],[1727,352],[1726,351],[1725,349],[1725,347],[1724,345],[1723,342],[1723,341],[1723,340],[1723,338],[1722,337],[1721,334],[1721,333]],"dx":55,"dy":-509,"length":620.044081135282,"timing":[0,10,27,43,60,77,93,110,127,143,160,177,193,210,227,244,260,277,294,310,327,344,360,377,394,410,427,444,460,477,494,510,527,544,561,577,594,611,627,644,665]},{"start":[1142,608],"end":[512,833],"points":[[1143,608],[1145,608],[1145,607],[1146,606],[1149,604],[1149,601],[1149,598],[1149,590],[1143,579],[1133,576],[1113,574],[1085,573],[1052,577],[1003,589],[965,600],[858,646],[797,679],[755,700],[721,719],[675,747],[650,761],[627,773],[610,782],[595,789],[575,795],[557,805],[548,807],[539,811],[536,812],[536,813],[535,814],[534,815],[532,817],[531,819],[530,821],[527,822],[526,823],[523,826],[521,826],[521,828],[520,828],[519,828],[518,829],[516,829],[515,830],[514,830],[514,832],[513,832],[512,833]],"dx":-630,"dy":225,"length":732.2150421504099,"timing":[0,9,20,37,53,70,87,104,120,137,153,170,187,204,221,237,254,270,287,304,320,337,354,370,387,404,420,437,454,470,591,604,621,637,654,671,687,704,721,752,768,784,840,864,880,896,904,921,944]},{"start":[512,833],"end":[1384,453],"points":[[513,832],[516,831],[519,827],[526,822],[535,814],[554,798],[586,778],[602,769],[737,702],[809,671],[913,637],[1018,610],[1109,587],[1190,567],[1254,552],[1303,539],[1335,530],[1356,524],[1369,518],[1384,510],[1389,506],[1391,502],[1393,501],[1393,499],[1396,495],[1399,492],[1405,486],[1410,480],[1413,476],[1413,471],[1413,467],[1414,464],[1414,463],[1413,462],[1408,459],[1401,457],[1393,455],[1387,454],[1385,454],[1384,453]],"dx":872,"dy":-380,"length":1027.8769831880102,"timing":[0,12,29,46,62,79,96,112,129,146,162,179,196,212,229,246,263,279,296,313,329,346,363,379,396,413,429,446,463,479,496,513,529,546,563,580,596,613,629,646]},{"start":[1459,556],"end":[602,822],"points":[[1459,556],[1457,553],[1457,552],[1449,544],[1428,529],[1405,517],[1362,505],[1297,495],[1234,486],[1163,485],[1090,494],[1014,512],[942,539],[890,567],[855,590],[819,616],[791,641],[770,659],[738,687],[722,701],[705,717],[688,734],[675,746],[664,756],[654,766],[646,774],[640,781],[636,785],[635,786],[633,788],[630,790],[627,793],[622,799],[617,805],[613,810],[610,812],[609,814],[607,817],[607,818],[605,820],[604,821],[603,821],[602,822]],"dx":-857,"dy":266,"length":987.0930280298076,"timing":[0,153,166,183,200,216,233,250,266,283,300,316,333,350,366,383,400,416,433,450,466,483,500,517,533,550,567,583,600,617,633,650,667,683,700,717,734,750,767,783,800,817,840]},{"start":[602,822],"end":[498,259],"points":[[601,822],[602,820],[604,819],[610,813],[618,806],[629,796],[644,783],[658,770],[677,744],[688,724],[701,689],[710,654],[713,627],[710,596],[687,530],[661,465],[635,404],[617,370],[605,350],[593,333],[585,323],[575,314],[567,308],[562,303],[556,298],[551,294],[548,291],[546,290],[545,289],[544,288],[539,284],[536,280],[530,275],[524,270],[519,266],[514,263],[513,261],[512,261],[510,261],[509,261],[508,261],[507,261],[506,261],[505,261],[505,260],[504,260],[503,260],[502,259],[501,259],[500,259],[498,259]],"dx":-104,"dy":-563,"length":677.7943120864227,"timing":[0,104,116,133,149,166,183,199,216,233,249,266,283,299,316,333,350,366,383,399,416,433,450,466,483,500,516,534,608,616,633,650,666,683,700,716,733,872,883,900,917,933,950,967,983,1000,1017,1034,1050,1067,1117]},{"start":[498,259],"end":[839,786],"points":[[499,259],[506,260],[522,270],[543,283],[629,337],[680,382],[717,420],[761,476],[797,533],[824,583],[854,654],[865,679],[873,698],[877,706],[883,722],[884,725],[884,726],[884,728],[879,734],[872,744],[867,748],[862,754],[856,761],[850,768],[847,774],[843,778],[842,781],[840,783],[840,785],[839,785],[839,786]],"dx":341,"dy":527,"length":700.922533597481,"timing":[0,10,27,44,60,77,94,110,127,144,161,177,194,211,227,244,261,311,327,344,361,377,394,411,427,444,461,478,494,511,553]},{"start":[839,786],"end":[1794,189],"points":[[839,785],[840,784],[841,781],[844,776],[846,770],[850,759],[856,742],[864,719],[876,690],[889,634],[902,570],[935,486],[965,435],[1002,388],[1033,352],[1053,326],[1070,306],[1086,289],[1095,276],[1104,263],[1109,255],[1111,249],[1114,245],[1117,236],[1121,229],[1123,226],[1127,217],[1129,213],[1131,208],[1134,202],[1137,198],[1139,195],[1142,193],[1146,190],[1149,188],[1151,186],[1153,185],[1156,183],[1158,181],[1161,179],[1163,178],[1165,178],[1167,177],[1168,177],[1172,174],[1173,174],[1174,173],[1177,173],[1183,173],[1199,173],[1223,173],[1255,173],[1302,173],[1363,171],[1390,170],[1406,168],[1412,168],[1424,167],[1432,166],[1473,163],[1500,163],[1536,163],[1591,162],[1645,162],[1698,160],[1734,160],[1760,160],[1776,160],[1780,160],[1781,160],[1782,160],[1782,161],[1782,165],[1783,170],[1786,179],[1789,184],[1790,185],[1791,188],[1792,189],[1794,189]],"dx":955,"dy":-597,"length":1356.7374534635196,"timing":[0,16,29,42,58,75,92,108,125,142,158,175,192,208,225,242,258,275,292,309,325,342,359,375,392,409,425,442,459,475,492,509,525,542,559,575,592,609,625,642,659,676,692,709,726,742,759,776,792,809,826,842,859,876,892,909,926,943,959,976,993,1009,1026,1043,1059,1076,1093,1110,1126,1191,1232,1243,1259,1276,1293,1309,1326,1343,1359,1376]},{"start":[515,682],"end":[1804,551],"points":[[519,681],[528,679],[535,675],[567,665],[611,651],[691,635],[880,609],[1009,601],[1185,594],[1377,590],[1501,590],[1616,597],[1703,608],[1766,620],[1806,628],[1827,632],[1842,636],[1846,636],[1850,636],[1852,633],[1851,629],[1851,626],[1850,625],[1850,621],[1849,617],[1845,608],[1843,604],[1839,597],[1835,591],[1831,587],[1823,578],[1820,575],[1819,573],[1817,572],[1815,570],[1812,567],[1811,565],[1810,563],[1809,562],[1809,561],[1808,560],[1807,558],[1805,556],[1805,555],[1805,554],[1805,553],[1804,551]],"dx":1289,"dy":-131,"length":1445.4522280870428,"timing":[0,7,20,37,54,70,87,104,120,137,154,171,187,204,220,237,254,270,287,304,321,337,354,371,387,404,421,437,454,471,487,504,521,537,554,571,587,604,621,638,999,1007,1023,1111,1159,1183,1191]},{"start":[1727,141],"end":[934,575],"points":[[1725,141],[1720,144],[1718,145],[1707,154],[1691,167],[1667,186],[1612,226],[1558,264],[1493,307],[1415,351],[1330,397],[1266,436],[1202,474],[1144,504],[1109,525],[1087,535],[1071,539],[1051,543],[1038,545],[1020,545],[1010,545],[1002,545],[999,545],[996,547],[993,547],[992,547],[991,547],[989,548],[985,549],[974,553],[965,558],[958,562],[951,566],[946,570],[941,573],[937,575],[935,575],[934,575]],"dx":-793,"dy":434,"length":913.1796150129876,"timing":[0,7,21,38,54,71,88,104,121,138,155,171,188,205,221,238,255,271,288,305,321,338,355,372,388,408,424,438,455,471,489,505,522,538,555,572,588,605]},{"start":[1165,111],"end":[406,268],"points":[[1163,112],[1160,113],[1156,114],[1145,119],[1131,125],[1116,131],[1094,140],[1074,150],[1055,160],[1041,171],[1017,190],[1001,202],[985,213],[953,229],[920,243],[860,263],[792,282],[725,300],[658,315],[608,324],[559,329],[526,330],[496,331],[481,331],[469,331],[456,330],[445,328],[435,327],[429,324],[422,320],[418,315],[411,307],[406,296],[403,292],[403,284],[403,279],[404,277],[405,275],[405,274],[406,273],[406,272],[406,271],[406,270],[406,269],[406,268]],"dx":-759,"dy":157,"length":847.828202272015,"timing":[0,8,19,36,53,69,86,103,119,136,153,169,186,203,219,236,253,269,286,303,319,336,353,369,386,403,419,436,453,469,486,503,519,536,553,569,586,603,620,636,653,669,686,703,728]},{"start":[497,406],"end":[484,143],"points":[[497,405],[498,404],[498,403],[499,403],[500,403],[501,401],[504,400],[511,395],[517,391],[522,385],[525,376],[525,366],[525,357],[521,326],[511,290],[499,256],[489,230],[482,209],[477,196],[474,186],[473,176],[473,174],[473,173],[473,171],[473,170],[473,167],[473,161],[475,158],[476,156],[478,153],[478,152],[478,151],[480,150],[481,149],[482,147],[483,146],[484,144],[484,143]],"dx":-13,"dy":-263,"length":287.99375719821364,"timing":[0,17,72,88,134,150,167,184,200,217,234,250,267,284,301,317,334,350,367,384,400,417,434,450,467,484,500,517,534,550,568,584,600,617,634,650,667,684]},{"start":[504,499],"end":[1072,175],"points":[[505,498],[505,497],[505,496],[506,496],[507,495],[508,495],[511,493],[518,489],[527,483],[534,476],[543,465],[551,453],[557,444],[567,436],[583,424],[603,414],[658,394],[716,376],[781,357],[842,335],[901,310],[948,288],[976,275],[999,265],[1014,258],[1025,252],[1034,247],[1043,240],[1049,237],[1053,234],[1057,231],[1059,228],[1061,223],[1063,220],[1065,214],[1067,208],[1070,200],[1072,193],[1073,187],[1073,182],[1073,180],[1073,178],[1073,177],[1073,175],[1072,175]],"dx":568,"dy":-324,"length":683.7985402240522,"timing":[0,16,33,88,99,116,133,149,167,183,199,216,233,249,266,283,300,316,333,350,366,383,399,416,433,449,466,483,499,516,533,549,566,583,599,616,633,649,666,683,700,716,733,749,800]},{"start":[167,447],"end":[857,206],"points":[[170,445],[175,445],[183,445],[187,445],[193,445],[199,445],[206,446],[213,447],[226,450],[242,454],[256,457],[270,461],[285,464],[310,467],[368,470],[425,470],[504,460],[577,440],[618,425],[717,380],[784,342],[848,303],[893,276],[923,261],[932,255],[933,254],[933,253],[934,252],[934,251],[934,250],[932,247],[923,243],[918,240],[904,236],[892,233],[881,232],[871,228],[859,224],[854,220],[852,217],[851,216],[851,213],[853,210],[855,208],[855,207],[857,207],[857,206]],"dx":690,"dy":-241,"length":925.3077917144606,"timing":[0,17,34,50,67,84,100,117,134,150,167,184,200,217,234,250,267,284,300,317,334,350,367,384,400,417,441,457,481,489,517,534,550,567,583,600,617,634,650,667,683,700,717,733,753,800,818]},{"start":[1199,372],"end":[872,209],"points":[[1199,372],[1199,374],[1197,376],[1192,378],[1186,380],[1176,383],[1167,387],[1160,389],[1152,392],[1146,394],[1139,394],[1130,394],[1105,394],[1049,392],[974,383],[923,379],[888,376],[868,376],[862,375],[862,373],[862,370],[863,361],[863,350],[857,339],[854,335],[850,334],[845,334],[838,338],[827,347],[819,355],[806,369],[788,387],[750,421],[719,443],[685,464],[652,484],[634,495],[619,505],[606,512],[593,516],[582,518],[574,518],[562,518],[553,518],[549,518],[546,517],[544,514],[544,510],[544,502],[544,494],[547,485],[554,466],[566,437],[581,404],[605,369],[633,340],[674,305],[695,289],[715,276],[735,265],[752,257],[763,251],[770,246],[777,240],[781,237],[783,235],[789,231],[794,226],[802,222],[802,221],[804,221],[808,221],[815,221],[826,222],[835,222],[839,221],[844,218],[851,213],[855,210],[861,207],[865,205],[870,204],[875,203],[874,204],[873,207],[872,209]],"dx":-327,"dy":-163,"length":1252.859547301862,"timing":[0,17,34,50,67,84,100,117,134,150,167,184,200,217,233,250,267,284,300,325,334,350,367,383,400,417,433,450,467,483,500,517,534,550,567,583,600,617,633,650,667,683,700,717,734,750,767,783,800,817,833,850,867,883,900,917,933,951,967,983,1000,1017,1033,1050,1067,1083,1100,1117,1133,1150,1222,1233,1250,1267,1283,1300,1317,1333,1350,1367,1383,1400,1417,1494,1501,1510]},{"start":[154,449],"end":[348,210],"points":[[155,449],[156,447],[159,445],[163,444],[167,444],[175,443],[182,443],[205,443],[222,442],[238,440],[255,438],[274,434],[301,429],[337,422],[380,410],[421,393],[445,379],[461,363],[467,350],[467,329],[459,313],[448,294],[437,278],[425,265],[416,255],[411,249],[409,246],[407,240],[405,236],[402,231],[400,229],[396,226],[395,226],[391,225],[387,223],[381,222],[369,218],[357,213],[352,212],[350,211],[350,210],[349,210],[348,210]],"dx":194,"dy":-239,"length":538.5447874358946,"timing":[0,16,33,50,66,83,100,117,133,150,166,183,200,216,233,250,266,283,300,316,333,350,366,383,400,416,433,450,466,483,500,516,533,550,566,583,600,616,633,650,701,750,820]},{"start":[855,241],"end":[1192,489],"points":[[855,241],[855,240],[854,240],[852,240],[850,242],[847,244],[844,247],[842,249],[841,251],[839,253],[838,254],[837,255],[837,257],[836,260],[839,266],[847,275],[857,282],[874,296],[899,316],[942,355],[993,401],[1076,473],[1119,511],[1141,533],[1146,539],[1149,539],[1151,540],[1153,540],[1154,540],[1155,540],[1156,540],[1159,540],[1162,539],[1167,534],[1172,530],[1174,526],[1176,519],[1179,512],[1181,508],[1183,504],[1185,502],[1187,498],[1189,494],[1189,492],[1191,491],[1191,490],[1191,489],[1192,489]],"dx":337,"dy":248,"length":525.6654721248459,"timing":[0,23,67,83,100,117,133,150,167,183,200,217,233,250,267,283,300,317,333,350,367,383,400,417,433,450,467,483,500,516,533,550,567,583,600,617,633,650,667,683,700,717,733,750,767,783,912,950]},{"start":[405,477],"end":[198,180],"points":[[405,476],[406,475],[406,474],[408,472],[410,472],[412,472],[416,471],[419,471],[426,471],[431,471],[438,471],[446,471],[455,471],[467,469],[478,465],[487,455],[491,445],[491,427],[483,408],[468,386],[453,369],[435,354],[411,339],[389,327],[362,312],[327,293],[307,276],[286,257],[272,240],[264,227],[257,211],[255,206],[252,201],[251,199],[247,195],[242,192],[232,186],[229,185],[226,183],[221,182],[218,181],[214,181],[211,181],[210,180],[210,179],[209,179],[208,179],[207,179],[206,179],[205,179],[204,179],[203,179],[201,179],[200,179],[199,179],[198,179],[198,180]],"dx":-207,"dy":-297,"length":519.2431521686883,"timing":[0,17,34,50,67,84,100,117,134,150,167,184,200,217,234,250,267,284,300,317,334,350,367,384,400,417,434,450,467,484,500,517,534,550,567,584,600,617,634,650,667,684,700,717,734,750,769,817,867,1121,1209,1265,1281,1297,1313,1321,1334]},{"start":[1207,153],"end":[479,408],"points":[[1207,154],[1207,155],[1207,156],[1203,158],[1200,161],[1193,166],[1185,171],[1173,178],[1165,183],[1161,188],[1156,194],[1150,201],[1142,207],[1128,211],[1102,215],[1051,220],[985,225],[910,232],[833,243],[736,268],[689,291],[666,306],[644,323],[624,338],[605,351],[589,362],[570,373],[548,383],[529,390],[511,396],[495,403],[474,410],[462,414],[457,414],[457,415],[458,415],[460,414],[462,414],[465,413],[467,412],[472,411],[477,409],[479,408],[480,407],[481,407],[480,407],[480,408],[479,408]],"dx":-728,"dy":255,"length":844.4746865507444,"timing":[0,54,67,84,100,117,134,150,167,184,200,217,234,250,267,284,300,317,334,350,367,384,400,417,434,450,467,484,500,517,534,550,567,584,600,667,684,700,717,734,750,767,784,800,817,922,967,984]},{"start":[479,408],"end":[1066,162],"points":[[481,408],[482,407],[485,406],[489,405],[493,404],[499,402],[502,402],[509,401],[516,401],[530,401],[547,401],[572,401],[616,399],[675,390],[742,377],[818,355],[905,327],[1006,286],[1045,264],[1069,251],[1084,239],[1091,233],[1092,231],[1093,229],[1093,227],[1095,224],[1096,220],[1097,214],[1098,211],[1098,206],[1097,203],[1094,200],[1089,194],[1083,186],[1077,180],[1072,175],[1067,169],[1067,167],[1067,165],[1067,164],[1067,163],[1066,163],[1066,162]],"dx":587,"dy":-246,"length":729.2437206961496,"timing":[0,16,33,50,67,83,100,117,133,150,166,183,200,216,233,250,267,283,300,316,333,350,367,383,400,416,433,450,467,483,500,516,533,550,566,583,600,616,633,650,667,683,700]},{"start":[1225,473],"end":[213,283],"points":[[1224,473],[1221,473],[1215,472],[1198,465],[1178,457],[1146,445],[1095,426],[1023,401],[1002,393],[982,384],[953,372],[902,355],[836,339],[763,327],[695,323],[626,323],[540,323],[456,321],[388,318],[337,317],[314,316],[296,315],[286,314],[284,313],[283,313],[281,311],[278,308],[275,306],[273,305],[273,304],[273,303],[273,302],[273,301],[270,298],[269,296],[268,295],[267,294],[265,294],[261,293],[249,290],[232,287],[218,284],[214,283],[213,283]],"dx":-1012,"dy":-190,"length":1047.2326261485907,"timing":[0,6,19,36,52,70,86,103,119,136,153,168,186,201,219,236,252,268,287,304,319,335,352,369,385,402,418,437,456,471,485,501,518,534,551,567,585,600,618,636,655,669,684,701]},{"start":[1765,254],"end":[1746,754],"points":[[1764,255],[1758,259],[1750,263],[1736,268],[1719,275],[1697,284],[1672,293],[1648,302],[1629,308],[1609,316],[1589,329],[1574,349],[1572,370],[1584,387],[1607,406],[1642,431],[1694,469],[1739,509],[1767,551],[1774,585],[1772,618],[1764,665],[1759,708],[1757,729],[1755,739],[1754,742],[1754,743],[1752,750],[1752,752],[1750,752],[1749,752],[1746,754]],"dx":-19,"dy":500,"length":715.6170604414963,"timing":[0,16,32,49,66,82,99,115,132,149,166,182,199,216,232,249,265,282,299,316,332,349,365,382,399,416,461,483,500,600,617,633]},{"start":[590,817],"end":[1251,497],"points":[[591,817],[592,817],[594,815],[599,812],[609,805],[622,797],[628,793],[629,793],[632,791],[643,784],[669,768],[719,744],[777,719],[834,700],[905,681],[989,663],[1101,641],[1179,623],[1205,613],[1209,609],[1209,607],[1208,599],[1207,593],[1207,586],[1207,580],[1207,571],[1207,560],[1210,543],[1215,529],[1220,518],[1227,508],[1235,502],[1244,498],[1251,497]],"dx":661,"dy":-320,"length":790.8099087626517,"timing":[0,16,67,83,100,117,133,150,167,182,200,216,234,250,266,283,299,316,333,350,383,400,417,433,450,467,483,499,516,533,550,567,583,600]},{"start":[753,327],"end":[1495,185],"points":[[752,331],[748,346],[747,368],[744,396],[738,422],[730,447],[725,460],[725,461],[736,457],[761,438],[798,416],[856,395],[938,373],[1032,347],[1119,328],[1206,312],[1284,302],[1334,295],[1369,289],[1392,283],[1411,275],[1431,266],[1450,257],[1462,250],[1470,244],[1475,238],[1479,232],[1480,224],[1482,215],[1483,208],[1485,201],[1487,197],[1488,193],[1491,191],[1493,187],[1495,185]],"dx":742,"dy":-142,"length":983.368672698248,"timing":[0,17,34,51,67,83,100,118,150,167,183,200,217,234,250,267,283,300,317,334,351,367,383,400,417,434,450,467,484,501,517,534,551,567,584,601]},{"start":[1395,576],"end":[377,369],"points":[[1397,574],[1406,564],[1420,549],[1435,531],[1449,513],[1462,497],[1476,482],[1487,470],[1494,462],[1494,456],[1487,451],[1467,445],[1421,434],[1374,425],[1323,420],[1278,419],[1226,417],[1158,417],[1092,416],[1027,414],[958,412],[891,407],[824,401],[754,392],[653,384],[589,379],[541,374],[509,372],[484,367],[462,364],[444,361],[428,358],[414,356],[401,353],[393,351],[388,351],[384,350],[379,350],[373,350],[366,350],[360,350],[356,350],[352,352],[350,353],[348,354],[348,355],[348,356],[351,357],[355,359],[361,361],[366,363],[371,366],[375,369],[377,369]],"dx":-1018,"dy":-207,"length":1344.3065642410652,"timing":[0,16,33,51,66,83,100,117,134,150,166,184,200,217,233,250,267,283,300,317,334,351,367,384,400,417,434,450,466,484,500,517,535,552,567,583,600,617,634,651,666,684,701,717,735,751,767,816,835,850,868,884,901,916]},{"start":[1185,789],"end":[641,605],"points":[[1185,788],[1184,787],[1176,781],[1165,774],[1147,764],[1121,751],[1086,738],[1057,725],[1029,712],[1007,702],[986,692],[953,679],[931,670],[912,662],[892,655],[873,651],[857,647],[839,645],[821,642],[802,638],[782,635],[767,633],[752,631],[735,628],[726,627],[720,625],[714,624],[709,622],[702,619],[696,616],[688,614],[682,612],[677,612],[673,611],[671,610],[670,610],[669,610],[667,609],[666,609],[664,609],[662,609],[660,608],[658,607],[656,607],[655,606],[650,606],[643,605],[641,605]],"dx":-544,"dy":-184,"length":580.3005814191779,"timing":[0,17,33,50,66,83,100,117,133,150,167,183,200,217,233,250,267,283,299,316,334,350,367,383,400,417,433,450,467,483,500,516,534,550,567,600,617,634,651,667,684,700,717,733,750,767,783,800]},{"start":[641,605],"end":[324,284],"points":[[641,604],[640,603],[637,595],[629,575],[622,564],[614,552],[603,539],[593,524],[585,511],[578,498],[571,484],[564,472],[556,460],[545,448],[536,436],[524,419],[515,408],[505,397],[492,387],[475,376],[458,365],[440,356],[425,347],[410,338],[397,331],[386,325],[378,321],[372,316],[369,315],[367,313],[366,312],[365,312],[365,311],[364,311],[362,309],[358,307],[350,303],[342,298],[334,292],[327,287],[325,285],[324,284]],"dx":-317,"dy":-321,"length":464.1655917534946,"timing":[0,17,33,49,65,82,99,116,132,149,165,183,199,215,233,249,266,282,300,317,332,350,366,383,399,416,433,449,466,483,499,516,533,549,566,583,600,616,633,649,666,683]},{"start":[1615,183],"end":[411,476],"points":[[1614,183],[1609,186],[1599,190],[1586,196],[1567,208],[1552,218],[1535,229],[1514,241],[1486,252],[1451,266],[1414,279],[1374,295],[1327,312],[1264,334],[1190,356],[1110,376],[974,400],[892,417],[825,430],[775,439],[734,446],[705,451],[681,454],[657,458],[631,462],[607,467],[585,471],[562,474],[531,479],[512,482],[499,483],[490,484],[485,484],[482,484],[479,484],[476,484],[475,484],[473,484],[470,484],[467,483],[460,483],[458,482],[457,482],[456,482],[454,481],[451,481],[450,480],[449,480],[447,480],[442,479],[433,478],[422,477],[414,476],[411,476]],"dx":-1204,"dy":293,"length":1252.1605606914723,"timing":[0,16,33,50,66,83,99,116,133,150,167,183,200,216,233,250,266,282,300,316,333,349,366,383,399,417,433,449,466,483,499,516,532,550,567,582,600,616,633,650,667,683,700,716,733,750,766,783,799,817,833,850,866,882]},{"start":[516,124],"end":[1207,593],"points":[[516,125],[517,126],[522,130],[529,136],[540,147],[555,164],[576,188],[610,222],[651,260],[698,305],[778,386],[836,442],[892,492],[945,535],[990,570],[1032,601],[1080,628],[1131,649],[1171,659],[1200,665],[1222,667],[1238,668],[1252,668],[1256,668],[1257,668],[1257,667],[1257,664],[1256,655],[1253,645],[1248,635],[1243,627],[1240,623],[1237,619],[1232,613],[1226,608],[1220,604],[1214,601],[1211,599],[1210,598],[1210,596],[1209,594],[1207,594],[1207,593]],"dx":691,"dy":469,"length":1037.311343256872,"timing":[0,18,34,50,67,84,101,117,134,151,167,183,201,217,234,251,268,284,301,318,334,351,367,383,401,433,451,467,484,501,518,534,550,567,583,601,617,634,650,667,684,701,717]},{"start":[1046,295],"end":[1436,636],"points":[[1046,294],[1047,294],[1048,294],[1049,294],[1051,295],[1057,299],[1064,304],[1073,310],[1084,317],[1096,325],[1111,333],[1126,342],[1149,355],[1164,365],[1181,374],[1199,384],[1218,396],[1237,408],[1258,420],[1281,434],[1305,448],[1332,466],[1359,483],[1383,498],[1414,520],[1433,533],[1453,545],[1469,556],[1482,566],[1492,574],[1497,578],[1499,580],[1499,581],[1499,582],[1499,583],[1499,584],[1496,586],[1483,595],[1473,603],[1464,610],[1455,619],[1448,625],[1444,630],[1439,634],[1437,636],[1436,636]],"dx":390,"dy":341,"length":623.0149017038552,"timing":[0,50,417,434,450,467,483,499,516,533,550,566,583,599,617,633,650,666,683,700,716,734,750,767,784,800,816,833,850,866,883,900,999,1016,1033,1150,1167,1184,1200,1216,1233,1249,1266,1283,1300,1317]},{"start":[830,518],"end":[623,292],"points":[[830,518],[830,517],[830,516],[829,516],[828,515],[827,513],[823,510],[819,506],[816,502],[812,495],[809,486],[806,477],[801,465],[795,448],[784,425],[768,401],[750,378],[729,353],[713,328],[705,316],[700,307],[698,300],[697,297],[696,296],[695,296],[694,296],[692,296],[686,296],[678,296],[669,294],[659,293],[649,293],[642,293],[634,293],[628,293],[624,293],[623,292]],"dx":-207,"dy":-226,"length":336.50585697008296,"timing":[0,24,33,50,63,80,96,113,129,147,164,180,197,214,231,249,264,283,302,316,330,347,363,379,397,446,496,512,529,547,563,580,596,613,629,646,662]},{"start":[576,475],"end":[842,178],"points":[[576,475],[574,473],[574,472],[572,469],[569,467],[568,467],[567,464],[566,463],[565,461],[564,459],[564,456],[568,451],[577,444],[594,435],[616,424],[638,410],[665,391],[686,372],[706,350],[727,325],[756,281],[768,257],[774,245],[781,234],[789,224],[797,213],[802,206],[806,199],[810,195],[816,190],[823,186],[829,182],[833,180],[835,179],[839,178],[842,178]],"dx":266,"dy":-297,"length":427.1474749534441,"timing":[0,47,64,80,96,114,130,146,163,180,197,215,232,249,265,281,298,315,331,348,381,401,415,430,448,465,481,496,513,531,546,564,580,597,613,629]},{"start":[1002,130],"end":[127,470],"points":[[1001,130],[1000,130],[997,133],[988,139],[976,145],[959,152],[938,156],[911,162],[872,169],[826,178],[775,188],[727,201],[686,213],[633,231],[578,253],[543,267],[513,276],[478,285],[442,292],[403,299],[358,309],[318,316],[279,324],[251,330],[230,334],[214,337],[199,341],[187,344],[185,345],[184,345],[184,347],[184,351],[184,359],[184,368],[184,379],[184,392],[184,407],[183,421],[179,432],[175,443],[171,452],[163,458],[158,461],[150,463],[140,464],[133,465],[129,466],[127,467],[126,468],[126,469],[126,470],[127,470]],"dx":-875,"dy":340,"length":1009.680339754901,"timing":[0,6,20,38,55,71,88,106,122,138,154,171,188,208,225,240,255,272,288,304,321,338,355,372,388,405,421,438,453,469,486,503,521,537,555,571,588,604,621,637,653,673,687,704,722,737,753,770,786,841,857,862]},{"start":[909,212],"end":[295,236],"points":[[909,212],[908,212],[904,215],[894,217],[871,225],[847,232],[819,239],[785,250],[754,260],[722,272],[687,280],[647,286],[604,289],[556,290],[510,290],[462,290],[424,285],[383,282],[368,280],[352,277],[343,274],[340,273],[338,273],[337,271],[335,270],[331,268],[324,265],[317,260],[312,255],[308,250],[304,246],[302,243],[299,241],[298,239],[298,238],[297,237],[297,236],[295,236]],"dx":-614,"dy":24,"length":643.0132223026036,"timing":[0,47,65,81,99,115,132,148,165,182,198,215,231,249,265,282,298,320,332,347,363,380,397,414,431,447,464,481,497,514,530,547,564,580,596,613,631,716]},{"start":[354,295],"end":[501,474],"points":[[354,296],[354,299],[354,303],[354,308],[354,313],[356,318],[359,323],[361,328],[365,334],[370,340],[377,348],[385,356],[399,366],[418,378],[439,394],[459,410],[473,423],[484,435],[491,442],[494,448],[495,451],[495,452],[495,455],[495,457],[495,460],[495,463],[495,466],[496,468],[497,470],[500,472],[500,473],[501,474]],"dx":147,"dy":179,"length":242.90226924337603,"timing":[0,11,28,45,63,78,96,112,128,145,163,179,196,213,229,246,264,281,295,313,329,345,361,378,395,412,428,444,461,478,495,511]},{"start":[369,178],"end":[685,196],"points":[[369,179],[369,181],[369,185],[369,190],[370,197],[377,206],[386,216],[400,227],[423,243],[459,260],[525,280],[583,290],[630,293],[661,293],[680,291],[697,285],[708,279],[714,274],[717,267],[720,257],[721,252],[721,247],[720,243],[718,237],[714,233],[709,228],[704,222],[699,215],[693,209],[688,204],[687,200],[685,198],[685,196]],"dx":316,"dy":18,"length":484.2000940145176,"timing":[0,8,24,42,58,74,91,108,124,141,158,174,191,208,224,241,258,274,291,308,324,341,358,374,391,408,424,441,458,474,491,508,524]},{"start":[336,431],"end":[1097,241],"points":[[336,432],[338,434],[345,438],[351,442],[364,445],[382,453],[403,464],[430,481],[482,502],[523,508],[567,509],[614,503],[643,493],[662,479],[682,460],[717,419],[759,369],[832,307],[868,276],[885,264],[898,257],[916,253],[938,253],[961,255],[983,258],[1000,260],[1015,259],[1020,258],[1028,260],[1038,265],[1049,270],[1065,271],[1076,270],[1080,267],[1080,265],[1080,263],[1082,261],[1084,257],[1086,254],[1086,249],[1088,247],[1091,245],[1096,242],[1097,242],[1097,241]],"dx":761,"dy":-190,"length":896.326462878172,"timing":[0,16,33,50,66,83,100,116,133,150,166,183,200,216,233,250,266,283,300,316,333,350,366,383,400,416,433,450,466,483,500,516,533,550,566,583,633,650,666,683,700,716,733,749,766]},{"start":[362,303],"end":[735,405],"points":[[362,303],[364,306],[369,315],[376,323],[398,351],[428,386],[464,427],[502,462],[544,491],[604,509],[637,511],[659,504],[674,495],[687,486],[703,478],[717,470],[726,462],[727,458],[725,451],[720,450],[720,449],[720,448],[721,448],[721,447],[721,446],[718,443],[714,441],[712,438],[712,433],[713,428],[718,421],[724,415],[729,410],[734,407],[737,405],[738,405],[737,405],[736,405],[735,405]],"dx":373,"dy":102,"length":543.1663349292668,"timing":[0,64,72,83,99,116,132,149,166,182,199,216,232,249,266,282,299,316,332,349,366,396,404,416,432,449,466,482,499,516,532,549,566,582,599,616,712,749,766]},{"start":[1179,197],"end":[242,424],"points":[[1178,200],[1176,208],[1174,218],[1173,228],[1170,239],[1166,252],[1161,265],[1157,277],[1153,287],[1150,292],[1142,298],[1103,306],[1035,316],[934,320],[812,324],[680,338],[577,366],[514,376],[470,383],[447,385],[433,390],[430,393],[429,395],[424,398],[416,404],[408,408],[407,409],[405,411],[402,415],[391,423],[382,425],[373,426],[361,424],[347,417],[330,410],[319,409],[309,408],[301,408],[287,409],[261,412],[249,416],[245,418],[245,419],[245,420],[245,421],[244,421],[243,423],[242,424]],"dx":-937,"dy":227,"length":1036.7882315624734,"timing":[0,16,33,50,66,83,100,116,133,150,166,183,200,216,233,250,266,283,300,316,333,350,366,383,400,416,433,449,466,483,500,516,533,549,566,583,599,616,633,649,667,683,705,716,769,783,799,816]},{"start":[1076,602],"end":[140,446],"points":[[1076,602],[1074,602],[1072,603],[1067,605],[1068,605],[1064,604],[1052,602],[1008,592],[936,578],[873,570],[792,563],[672,549],[611,542],[561,536],[505,530],[460,522],[424,516],[391,511],[357,505],[320,497],[287,492],[248,485],[220,482],[198,478],[187,477],[180,475],[179,474],[176,474],[173,472],[168,471],[162,470],[158,469],[156,466],[154,465],[152,462],[148,457],[146,453],[143,450],[142,448],[141,447],[140,446]],"dx":-936,"dy":-156,"length":961.8412941445721,"timing":[0,90,99,116,132,324,332,349,366,382,400,415,432,449,465,482,499,516,532,549,565,582,599,615,632,649,665,682,699,715,732,749,766,783,799,815,832,848,865,882,899]},{"start":[1359,387],"end":[1410,566],"points":[[1360,387],[1356,386],[1352,384],[1345,382],[1334,380],[1318,380],[1314,383],[1308,390],[1306,398],[1304,413],[1304,435],[1306,452],[1312,467],[1317,482],[1326,498],[1336,514],[1342,524],[1353,537],[1357,542],[1360,546],[1364,550],[1364,551],[1365,552],[1367,553],[1371,554],[1376,556],[1382,558],[1388,561],[1393,562],[1397,563],[1403,565],[1406,566],[1409,566],[1410,566]],"dx":51,"dy":179,"length":284.6153785097336,"timing":[0,16,24,40,57,74,90,107,125,141,157,174,190,207,224,240,257,274,290,307,324,340,357,374,391,407,423,440,457,473,491,508,523,548]},{"start":[181,404],"end":[1004,646],"points":[[180,404],[179,404],[178,404],[178,403],[177,403],[177,402],[179,400],[180,400],[182,399],[187,398],[195,395],[202,394],[220,394],[241,394],[262,402],[311,414],[373,430],[448,452],[562,483],[589,491],[700,518],[760,536],[812,552],[848,564],[877,572],[895,578],[919,586],[932,590],[938,593],[942,596],[948,599],[950,602],[952,602],[952,604],[954,606],[958,610],[960,614],[963,618],[966,621],[970,625],[976,630],[985,635],[993,641],[1002,645],[1004,646]],"dx":823,"dy":242,"length":883.4480244450375,"timing":[0,31,87,103,117,167,197,205,217,234,251,267,284,301,317,334,352,368,385,400,417,434,451,468,484,500,517,534,550,567,584,600,617,634,650,667,684,700,717,735,750,767,784,800,817]},{"start":[1004,646],"end":[971,146],"points":[[1007,640],[1012,630],[1022,591],[1031,515],[1034,446],[1040,347],[1037,302],[1033,262],[1028,236],[1026,224],[1023,214],[1023,207],[1020,203],[1020,198],[1017,194],[1016,192],[1013,190],[1012,188],[1009,186],[1005,183],[1000,181],[997,181],[992,178],[991,176],[988,173],[984,170],[980,165],[979,161],[974,154],[973,151],[972,148],[971,146]],"dx":-33,"dy":-500,"length":522.6687318280237,"timing":[0,11,27,43,60,77,93,110,127,144,160,177,194,210,227,244,260,277,295,310,327,343,360,377,393,410,427,444,461,476,493,510]},{"start":[1040,294],"end":[323,547],"points":[[1040,292],[1041,290],[1041,288],[1042,286],[1042,285],[1043,283],[1044,282],[1043,282],[1040,282],[1038,282],[1012,288],[973,305],[937,322],[877,362],[831,396],[788,427],[744,458],[706,486],[671,508],[648,522],[614,538],[593,545],[573,549],[554,551],[536,551],[516,552],[496,552],[476,552],[456,552],[433,549],[418,547],[412,546],[408,544],[407,542],[404,542],[399,541],[393,540],[385,540],[379,540],[373,540],[366,540],[356,542],[347,543],[338,544],[328,546],[324,547],[323,547]],"dx":-717,"dy":253,"length":810.9439579110956,"timing":[0,16,33,50,66,83,100,246,253,266,283,300,317,333,349,366,383,399,416,433,449,466,484,499,516,533,549,566,583,599,616,633,649,666,683,699,716,732,749,766,783,799,816,832,849,866,882]},{"start":[144,426],"end":[394,630],"points":[[146,430],[156,446],[180,478],[208,516],[237,553],[266,586],[295,614],[316,632],[335,648],[356,662],[368,666],[374,666],[380,666],[383,666],[384,666],[385,666],[388,665],[388,663],[388,662],[389,660],[390,656],[391,653],[392,646],[392,642],[393,640],[394,638],[394,634],[394,633],[394,632],[394,631],[394,630]],"dx":250,"dy":204,"length":383.9363685854478,"timing":[0,8,24,41,58,74,91,108,124,141,158,174,191,208,224,289,317,336,341,358,374,391,407,424,441,458,474,490,507,524,541]},{"start":[394,630],"end":[930,138],"points":[[398,630],[404,629],[414,626],[468,605],[542,566],[640,501],[722,438],[784,380],[836,320],[874,275],[896,238],[899,221],[899,209],[898,200],[896,193],[895,187],[895,184],[894,180],[893,177],[893,174],[893,173],[893,172],[893,171],[893,170],[895,169],[896,168],[897,168],[900,166],[903,165],[904,164],[908,162],[909,162],[912,159],[915,158],[917,156],[920,154],[921,152],[924,150],[925,147],[927,145],[928,143],[928,142],[929,141],[929,139],[930,138]],"dx":536,"dy":-492,"length":766.3633678562902,"timing":[0,8,23,40,57,73,90,106,123,140,156,173,190,206,223,239,256,273,289,306,323,339,357,377,423,439,456,473,490,507,531,539,556,573,589,606,623,639,656,672,689,706,722,739,756]},{"start":[1142,538],"end":[460,432],"points":[[1136,538],[1103,536],[1017,534],[985,534],[908,533],[835,531],[739,530],[684,528],[640,522],[608,514],[586,509],[569,502],[557,498],[551,494],[545,490],[540,487],[533,484],[528,481],[522,477],[516,474],[514,472],[511,470],[506,466],[498,460],[492,457],[484,452],[476,448],[472,444],[468,440],[465,438],[464,437],[463,434],[462,434],[462,433],[461,433],[461,432],[460,432]],"dx":-682,"dy":-106,"length":703.1847143633336,"timing":[0,18,37,51,68,84,101,117,134,151,167,184,201,217,234,251,268,284,301,318,334,351,367,384,401,418,434,451,468,485,501,517,534,550,571,584,600]},{"start":[860,593],"end":[1380,257],"points":[[862,593],[873,591],[947,566],[1016,528],[1086,483],[1156,433],[1222,386],[1276,350],[1312,326],[1332,314],[1346,303],[1351,300],[1353,298],[1356,294],[1359,292],[1360,290],[1361,288],[1364,285],[1367,282],[1368,279],[1369,277],[1370,274],[1370,273],[1371,273],[1371,272],[1371,271],[1371,270],[1372,270],[1372,268],[1373,267],[1375,266],[1376,264],[1377,263],[1379,260],[1380,258],[1380,257]],"dx":520,"dy":-336,"length":628.5455786660616,"timing":[0,14,31,48,64,81,98,114,132,148,165,181,198,214,231,248,264,281,298,314,331,347,375,383,397,414,432,447,464,481,497,514,531,547,564,581]},{"start":[594,210],"end":[1030,345],"points":[[593,210],[593,211],[592,213],[592,215],[592,218],[597,229],[608,242],[626,258],[662,282],[691,298],[722,314],[755,328],[803,346],[864,369],[899,381],[926,386],[929,387],[940,387],[946,387],[951,385],[954,383],[959,380],[964,377],[968,375],[973,372],[979,370],[985,366],[990,365],[993,362],[1000,358],[1006,356],[1010,354],[1015,352],[1019,350],[1024,348],[1026,346],[1028,346],[1029,345],[1030,345]],"dx":436,"dy":135,"length":504.80618454015206,"timing":[0,13,30,46,63,80,96,113,130,146,163,180,196,213,230,251,263,280,296,313,329,346,363,380,396,413,429,446,463,479,496,512,529,546,562,581,596,612,629]},{"start":[1400,635],"end":[1362,154],"points":[[1401,632],[1403,625],[1409,602],[1415,557],[1416,502],[1416,450],[1416,409],[1416,373],[1416,339],[1414,311],[1413,279],[1410,264],[1408,252],[1405,241],[1404,232],[1403,223],[1401,211],[1399,203],[1396,196],[1392,189],[1389,184],[1388,182],[1386,179],[1386,178],[1383,175],[1380,170],[1378,168],[1376,166],[1373,164],[1372,161],[1369,160],[1367,157],[1364,155],[1363,154],[1362,154]],"dx":-38,"dy":-481,"length":495.5674414118588,"timing":[0,8,23,40,57,73,90,107,123,140,157,173,190,206,223,241,257,273,290,306,323,340,356,374,390,407,423,440,459,473,490,506,523,540,562]},{"start":[1206,435],"end":[1333,184],"points":[[1205,435],[1203,442],[1200,451],[1200,454],[1199,454],[1199,456],[1202,454],[1212,439],[1224,414],[1238,384],[1252,356],[1260,335],[1271,315],[1274,309],[1276,304],[1277,298],[1278,295],[1279,289],[1280,283],[1281,276],[1283,272],[1284,267],[1288,258],[1291,250],[1296,238],[1302,230],[1307,221],[1312,211],[1319,202],[1324,197],[1327,193],[1329,189],[1329,188],[1330,187],[1332,187],[1332,186],[1333,185],[1333,184]],"dx":127,"dy":-251,"length":330.62794563441236,"timing":[0,27,45,53,68,86,134,150,167,184,201,217,234,251,267,284,300,317,334,351,369,384,400,418,434,450,466,483,499,516,533,549,567,583,600,617,641,665]},{"start":[1333,184],"end":[1405,358],"points":[[1332,185],[1330,186],[1329,187],[1328,188],[1325,190],[1323,194],[1317,201],[1310,218],[1303,244],[1301,260],[1300,274],[1300,286],[1300,298],[1301,310],[1302,320],[1302,333],[1304,346],[1307,357],[1312,367],[1316,374],[1321,379],[1324,381],[1330,382],[1339,382],[1346,382],[1352,381],[1358,379],[1365,377],[1368,376],[1372,375],[1375,374],[1376,372],[1380,372],[1381,370],[1384,369],[1385,369],[1388,366],[1392,365],[1396,363],[1400,360],[1402,359],[1404,358],[1405,358]],"dx":72,"dy":174,"length":299.5601821468101,"timing":[0,15,23,34,51,68,85,101,118,134,151,168,184,201,218,234,251,268,284,301,318,334,351,367,384,401,418,434,451,467,484,501,517,534,551,567,584,601,617,635,651,667,697]},{"start":[467,154],"end":[1255,483],"points":[[468,154],[472,158],[491,166],[560,193],[625,221],[698,254],[768,285],[835,307],[891,322],[946,338],[968,344],[986,350],[1003,358],[1019,366],[1034,373],[1050,380],[1065,386],[1084,392],[1110,402],[1133,410],[1154,416],[1172,422],[1184,426],[1193,430],[1200,434],[1204,435],[1208,438],[1213,442],[1217,446],[1221,449],[1226,452],[1232,456],[1237,461],[1244,467],[1252,475],[1253,477],[1253,478],[1254,479],[1254,481],[1254,482],[1254,483],[1255,483]],"dx":788,"dy":329,"length":862.1983327706168,"timing":[0,15,31,49,65,81,98,114,132,154,164,181,198,214,231,248,264,281,298,314,331,347,364,381,398,415,431,447,464,481,498,514,531,547,564,581,597,614,630,647,668,682]},{"start":[582,274],"end":[1375,486],"points":[[584,277],[596,281],[624,292],[670,308],[720,327],[789,354],[866,382],[996,431],[1079,465],[1163,501],[1235,528],[1298,550],[1354,563],[1400,570],[1416,570],[1424,570],[1428,570],[1430,570],[1432,568],[1435,566],[1436,562],[1436,558],[1436,550],[1436,542],[1435,535],[1429,526],[1421,518],[1412,509],[1397,499],[1388,494],[1384,490],[1380,489],[1378,487],[1377,486],[1376,486],[1375,486]],"dx":793,"dy":212,"length":1015.4404508512177,"timing":[0,9,26,43,59,76,92,109,126,143,159,176,193,209,226,243,259,276,292,309,325,342,359,376,392,409,425,443,460,475,492,509,526,542,559,575]},{"start":[1375,486],"end":[844,149],"points":[[1374,486],[1372,486],[1371,486],[1368,486],[1365,486],[1363,486],[1361,486],[1360,486],[1359,486],[1358,486],[1357,486],[1356,486],[1355,486],[1353,486],[1350,486],[1332,482],[1310,474],[1277,458],[1243,439],[1200,415],[1148,387],[1061,343],[1024,324],[991,305],[964,285],[948,269],[934,252],[916,230],[911,222],[901,212],[889,198],[883,188],[877,181],[872,175],[868,168],[866,166],[865,163],[864,162],[864,161],[863,160],[861,159],[860,158],[859,157],[856,155],[853,154],[850,152],[848,150],[846,150],[845,149],[844,149]],"dx":-531,"dy":-337,"length":644.8855973994916,"timing":[0,11,27,44,61,77,94,111,134,148,161,178,194,210,227,244,260,278,294,311,327,344,360,377,394,410,428,446,460,477,494,510,527,545,560,577,594,610,634,643,660,677,694,710,727,743,760,777,793,810]},{"start":[886,283],"end":[500,194],"points":[[886,283],[884,283],[883,283],[882,283],[881,283],[880,284],[878,284],[874,285],[866,289],[849,295],[830,300],[801,306],[770,307],[735,307],[704,307],[669,303],[635,295],[595,284],[573,273],[557,263],[546,256],[534,246],[528,238],[520,228],[516,224],[513,219],[510,214],[508,210],[505,206],[502,201],[502,198],[500,195],[500,194]],"dx":-386,"dy":-89,"length":432.5850659524949,"timing":[0,130,148,156,167,184,210,218,234,251,267,284,301,317,334,351,367,384,401,417,434,451,467,484,500,517,534,551,567,586,600,617,633]},{"start":[880,478],"end":[1359,367],"points":[[884,478],[892,478],[916,478],[962,475],[1024,470],[1092,466],[1172,461],[1264,454],[1309,452],[1339,450],[1357,447],[1368,446],[1372,445],[1372,444],[1375,442],[1376,439],[1376,438],[1376,434],[1376,430],[1376,427],[1376,423],[1373,417],[1371,410],[1368,402],[1366,395],[1364,389],[1363,383],[1361,378],[1360,371],[1360,369],[1359,367]],"dx":479,"dy":-111,"length":572.0462160032392,"timing":[0,9,25,42,59,75,92,109,125,142,159,175,192,209,258,275,292,308,325,342,358,375,392,408,425,442,458,475,492,508,525]},{"start":[644,552],"end":[172,566],"points":[[646,552],[649,551],[652,550],[657,548],[664,546],[670,536],[676,519],[676,497],[671,461],[661,441],[644,422],[627,410],[606,402],[584,399],[558,399],[516,409],[479,424],[439,441],[408,458],[364,483],[332,506],[296,531],[269,553],[244,570],[226,582],[216,590],[205,596],[193,599],[184,602],[174,602],[160,602],[154,599],[152,596],[149,593],[148,590],[148,587],[148,584],[148,579],[156,574],[160,572],[165,570],[168,568],[169,568],[170,568],[170,567],[172,566]],"dx":-472,"dy":14,"length":756.8637400897004,"timing":[0,17,34,50,67,84,100,117,134,150,168,184,200,217,234,250,267,284,300,317,334,350,367,384,400,417,433,450,467,483,500,517,534,550,566,583,600,616,633,650,666,683,706,717,733,750]},{"start":[254,679],"end":[910,167],"points":[[254,678],[256,678],[260,674],[269,670],[277,666],[293,658],[314,644],[372,610],[431,574],[504,542],[576,499],[645,459],[704,421],[752,381],[773,358],[781,345],[782,326],[781,314],[777,303],[775,295],[773,290],[773,286],[772,278],[772,272],[772,269],[774,267],[779,262],[789,255],[802,246],[816,237],[832,226],[852,214],[877,199],[889,190],[897,183],[901,181],[903,178],[904,177],[905,175],[907,174],[908,172],[908,171],[908,170],[909,168],[910,168],[910,167]],"dx":656,"dy":-512,"length":880.3066037668184,"timing":[0,9,26,42,59,75,92,109,125,142,159,175,192,209,225,242,259,275,292,309,325,342,359,375,392,409,426,442,459,475,492,508,525,542,559,575,592,608,625,642,658,675,691,709,725,741]},{"start":[1777,770],"end":[396,652],"points":[[1776,770],[1775,769],[1766,766],[1745,757],[1714,742],[1671,723],[1609,698],[1548,672],[1482,645],[1405,614],[1329,585],[1247,558],[1148,534],[1065,525],[989,523],[904,526],[836,535],[775,550],[717,569],[669,587],[622,604],[570,622],[530,637],[498,650],[471,661],[451,667],[432,670],[412,673],[396,673],[382,673],[370,673],[365,673],[361,672],[359,670],[360,668],[364,666],[372,663],[379,660],[387,657],[394,654],[396,653],[396,652]],"dx":-1381,"dy":-118,"length":1528.4660227484453,"timing":[0,6,23,40,57,73,90,107,123,140,156,173,190,207,223,240,257,273,290,306,323,340,356,373,390,407,423,440,456,473,490,506,523,540,556,573,590,606,623,639,656,673]},{"start":[107,684],"end":[1023,738],"points":[[109,686],[115,687],[129,690],[146,691],[172,693],[199,693],[235,693],[278,689],[318,686],[359,680],[400,673],[447,664],[489,653],[526,642],[569,630],[609,620],[652,612],[702,606],[747,604],[792,605],[844,614],[887,626],[926,642],[964,661],[988,676],[1005,690],[1020,701],[1027,706],[1030,709],[1031,709],[1031,710],[1031,711],[1030,713],[1029,717],[1028,721],[1027,726],[1025,729],[1024,733],[1023,737],[1023,738]],"dx":916,"dy":54,"length":987.9916286210773,"timing":[0,17,33,50,66,83,100,116,133,150,166,183,200,216,233,250,266,283,300,316,333,350,366,383,400,416,433,450,466,483,500,516,533,549,566,583,600,616,633,649]},{"start":[1023,738],"end":[1730,167],"points":[[1023,737],[1023,736],[1023,732],[1023,725],[1026,720],[1029,715],[1034,710],[1037,707],[1041,704],[1044,701],[1048,697],[1053,691],[1063,680],[1078,666],[1101,645],[1139,613],[1184,577],[1240,535],[1311,486],[1378,444],[1444,402],[1510,357],[1558,321],[1596,289],[1633,262],[1658,243],[1677,228],[1692,213],[1698,204],[1701,199],[1701,195],[1699,192],[1697,189],[1696,187],[1696,186],[1700,184],[1709,182],[1718,178],[1725,174],[1729,170],[1730,168],[1730,167]],"dx":707,"dy":-571,"length":928.8708225481847,"timing":[0,8,25,42,58,75,92,108,125,142,158,175,192,208,225,242,258,275,292,308,325,342,358,375,391,408,425,442,458,475,491,508,525,541,591,608,625,641,658,675,692,700]},{"start":[750,280],"end":[156,403],"points":[[755,278],[765,274],[772,272],[779,271],[783,270],[787,270],[790,273],[794,277],[798,281],[802,286],[807,293],[812,300],[817,310],[820,316],[820,324],[819,332],[807,344],[782,356],[738,368],[668,376],[590,381],[506,381],[416,374],[348,370],[293,367],[251,364],[227,360],[212,358],[206,358],[206,359],[206,360],[206,365],[207,370],[208,376],[206,382],[201,387],[195,391],[186,395],[178,399],[169,401],[160,402],[155,403],[156,403]],"dx":-594,"dy":123,"length":812.2812232114052,"timing":[0,16,33,49,66,83,99,116,133,149,166,183,199,216,233,249,266,283,299,316,333,349,366,383,399,416,433,449,466,489,499,516,533,549,566,582,599,616,632,649,666,682,732]},{"start":[1655,355],"end":[673,846],"points":[[1654,355],[1654,356],[1648,358],[1637,364],[1617,372],[1588,382],[1545,395],[1502,406],[1459,413],[1406,419],[1362,421],[1316,423],[1259,425],[1208,432],[1160,446],[1109,466],[1069,488],[1030,514],[982,551],[935,591],[887,635],[828,687],[776,731],[732,764],[697,790],[678,803],[665,811],[656,814],[653,815],[654,815],[655,815],[657,817],[661,820],[665,826],[669,830],[672,833],[674,836],[676,839],[676,842],[674,844],[673,846]],"dx":-982,"dy":491,"length":1180.139071295023,"timing":[0,5,21,38,55,71,88,105,121,138,154,171,188,204,221,238,254,271,288,304,321,338,354,371,388,404,421,438,454,504,521,538,554,571,588,604,621,638,654,671,687]},{"start":[1652,160],"end":[1421,747],"points":[[1652,160],[1651,160],[1646,163],[1630,173],[1607,185],[1572,202],[1535,221],[1501,244],[1463,273],[1431,306],[1402,341],[1377,376],[1365,401],[1364,423],[1370,454],[1379,484],[1388,514],[1395,549],[1401,585],[1408,622],[1412,658],[1413,681],[1410,698],[1406,713],[1403,724],[1403,731],[1403,735],[1403,738],[1403,739],[1403,741],[1404,743],[1406,745],[1409,747],[1411,750],[1413,751],[1415,751],[1417,751],[1418,749],[1420,748],[1421,747]],"dx":-231,"dy":587,"length":754.0739364161038,"timing":[0,71,83,100,117,133,150,167,183,200,217,233,250,267,283,300,317,333,350,367,383,400,417,433,450,466,483,500,517,534,550,567,583,600,616,633,650,666,683,700]},{"start":[110,262],"end":[742,194],"points":[[110,262],[112,262],[118,262],[134,265],[156,272],[188,279],[232,288],[282,300],[340,314],[409,334],[467,354],[521,370],[572,383],[622,394],[656,398],[680,398],[700,391],[712,380],[719,366],[723,348],[723,331],[723,310],[723,286],[723,267],[725,251],[728,238],[729,231],[729,226],[729,220],[729,216],[729,212],[729,209],[729,207],[729,204],[730,202],[730,199],[732,198],[733,198],[733,197],[736,197],[738,196],[741,194],[742,194]],"dx":632,"dy":-68,"length":823.1029354693734,"timing":[0,32,49,65,82,99,115,132,149,165,182,199,215,232,249,265,282,298,315,332,349,365,382,399,415,432,448,465,482,498,515,532,548,565,582,598,615,673,683,698,715,732,748]},{"start":[1258,800],"end":[499,724],"points":[[1258,799],[1254,795],[1241,784],[1221,767],[1193,744],[1166,721],[1136,696],[1100,666],[1065,641],[1028,615],[982,589],[940,570],[900,560],[857,558],[817,559],[776,568],[730,579],[688,591],[647,605],[605,622],[573,638],[547,652],[526,664],[511,674],[503,681],[500,685],[499,687],[499,688],[500,691],[502,692],[504,693],[505,695],[507,696],[509,698],[510,699],[510,700],[510,701],[510,704],[510,708],[509,713],[505,718],[501,721],[499,724]],"dx":-759,"dy":-76,"length":911.444419970653,"timing":[0,12,28,45,62,78,95,112,128,145,161,178,195,211,228,245,261,278,295,311,328,345,361,378,395,412,428,445,495,511,528,545,561,578,595,611,628,645,661,678,695,711,728]},{"start":[372,363],"end":[151,792],"points":[[373,363],[375,365],[383,368],[404,371],[437,375],[487,381],[557,386],[623,391],[692,397],[766,405],[819,412],[859,418],[886,425],[894,433],[894,443],[881,457],[854,472],[812,489],[751,511],[688,534],[618,561],[536,590],[463,614],[397,635],[334,654],[287,665],[251,672],[220,678],[195,683],[177,688],[165,693],[159,696],[156,701],[156,709],[157,719],[159,731],[159,744],[159,754],[158,764],[155,774],[153,782],[152,788],[151,792]],"dx":-221,"dy":429,"length":1418.8779017192182,"timing":[0,16,32,54,71,88,104,121,138,154,171,187,204,221,238,254,271,287,304,321,338,354,371,387,404,421,437,454,471,487,504,521,537,554,571,587,604,621,637,654,671,687,699]},{"start":[591,862],"end":[756,286],"points":[[592,862],[593,862],[598,858],[616,846],[644,828],[682,802],[731,768],[778,731],[825,690],[878,646],[926,607],[970,571],[1014,536],[1039,507],[1050,483],[1051,453],[1041,426],[1022,405],[989,382],[956,365],[918,347],[877,330],[846,317],[820,307],[798,299],[785,296],[776,294],[767,294],[763,293],[761,292],[761,291],[760,291],[760,290],[758,289],[757,287],[756,286]],"dx":165,"dy":-576,"length":981.2815731358965,"timing":[0,2,18,34,51,68,84,101,118,134,151,168,184,201,218,235,251,267,284,301,318,334,351,368,384,401,418,434,451,467,532,540,551,567,584,601]},{"start":[291,147],"end":[631,761],"points":[[292,147],[293,148],[307,152],[340,164],[399,187],[465,213],[535,245],[614,287],[684,325],[753,360],[824,394],[877,417],[909,433],[927,446],[931,457],[930,469],[918,485],[900,504],[874,528],[834,562],[793,595],[753,631],[711,669],[684,696],[663,717],[647,733],[638,744],[633,750],[630,754],[630,757],[630,758],[631,760],[631,761]],"dx":340,"dy":614,"length":1148.9366775931762,"timing":[0,10,27,44,60,77,93,110,127,143,160,177,193,210,227,243,260,277,293,311,327,343,360,377,393,410,427,443,460,477,493,510,527]},{"start":[1450,738],"end":[332,324],"points":[[1450,738],[1445,736],[1428,730],[1393,716],[1336,689],[1249,651],[1157,613],[1044,568],[942,527],[848,485],[750,443],[668,410],[595,382],[525,358],[475,342],[437,330],[407,321],[384,318],[362,315],[343,315],[331,315],[325,317],[322,318],[322,319],[323,319],[325,320],[327,321],[328,321],[329,322],[331,322],[332,323],[332,324]],"dx":-1118,"dy":-414,"length":1223.2266664086653,"timing":[0,117,133,150,166,183,200,216,233,250,266,283,300,316,333,350,366,383,400,416,433,450,466,516,533,550,566,586,600,616,633,646]},{"start":[397,426],"end":[351,692],"points":[[398,426],[399,426],[406,426],[426,425],[466,423],[520,422],[586,420],[665,416],[732,414],[793,414],[846,422],[872,433],[883,447],[883,468],[872,492],[851,525],[819,565],[783,603],[742,641],[687,680],[633,711],[581,734],[523,752],[477,759],[443,762],[417,761],[402,757],[394,751],[391,744],[390,737],[389,729],[388,720],[387,714],[386,710],[385,706],[381,703],[376,701],[368,699],[362,697],[356,695],[350,693],[350,692],[351,692]],"dx":-46,"dy":266,"length":1206.0908109753198,"timing":[0,4,21,37,54,71,87,104,121,137,155,171,187,204,221,237,254,271,287,304,321,337,354,371,387,404,421,437,454,471,487,504,520,537,554,571,587,604,621,637,654,670,687]},{"start":[576,380],"end":[773,811],"points":[[577,380],[579,380],[589,382],[605,387],[624,394],[651,407],[681,430],[712,457],[744,489],[771,515],[796,542],[822,576],[840,605],[854,636],[862,661],[869,687],[873,711],[877,739],[877,759],[875,777],[869,790],[862,795],[852,795],[838,792],[826,788],[818,785],[816,784],[815,784],[814,784],[809,784],[803,787],[798,791],[793,797],[788,802],[784,805],[779,808],[776,809],[774,810],[773,811]],"dx":197,"dy":431,"length":655.7755268755162,"timing":[0,8,24,41,58,74,91,108,124,141,158,174,191,208,224,241,258,274,291,308,324,341,358,374,391,408,424,448,458,474,491,508,524,541,558,575,591,608,624]},{"start":[1249,250],"end":[199,227],"points":[[1249,250],[1248,250],[1245,256],[1237,264],[1226,277],[1210,292],[1190,309],[1169,327],[1147,345],[1127,362],[1102,379],[1060,400],[1013,416],[951,424],[888,424],[824,418],[754,404],[677,382],[608,359],[544,335],[484,312],[433,296],[386,283],[336,272],[295,264],[259,258],[225,252],[200,248],[176,245],[156,241],[144,238],[141,235],[140,234],[141,234],[142,233],[144,233],[150,231],[161,229],[175,228],[186,227],[195,227],[199,227]],"dx":-1050,"dy":-23,"length":1254.1406781002686,"timing":[0,17,33,50,66,83,100,116,133,150,166,183,200,216,233,250,266,283,300,316,333,350,366,383,399,416,433,450,466,483,500,516,533,560,567,583,600,616,633,649,666,683]},{"start":[199,227],"end":[409,510],"points":[[200,227],[205,228],[217,232],[244,240],[298,255],[358,275],[427,297],[510,320],[582,334],[650,341],[712,342],[741,344],[751,345],[753,348],[753,354],[746,366],[733,383],[714,401],[686,419],[650,438],[612,454],[576,467],[539,478],[509,487],[486,493],[466,498],[453,502],[441,504],[429,505],[422,506],[417,507],[413,509],[411,510],[409,510]],"dx":210,"dy":283,"length":964.1476834195525,"timing":[0,16,32,49,66,82,99,116,132,149,166,182,199,216,232,249,266,282,299,316,332,349,366,382,399,415,432,449,466,482,499,516,532,549]},{"start":[1658,368],"end":[1733,121],"points":[[1654,368],[1645,368],[1624,368],[1593,371],[1548,374],[1485,378],[1422,380],[1357,381],[1280,381],[1210,378],[1143,372],[1083,366],[1049,359],[1033,352],[1031,343],[1041,333],[1068,319],[1123,297],[1190,274],[1270,251],[1366,225],[1454,202],[1532,180],[1607,158],[1658,141],[1694,128],[1720,119],[1732,116],[1737,115],[1738,115],[1738,116],[1735,118],[1733,120],[1733,121]],"dx":75,"dy":-247,"length":1387.378595726001,"timing":[0,17,34,50,67,84,101,117,134,150,167,184,200,217,234,250,267,284,300,317,334,350,367,384,400,417,434,450,467,484,500,517,533,551]},{"start":[1733,121],"end":[1174,174],"points":[[1732,121],[1729,123],[1723,126],[1711,133],[1689,145],[1657,162],[1611,183],[1552,208],[1474,241],[1393,271],[1312,299],[1224,325],[1159,341],[1112,346],[1088,342],[1083,334],[1084,322],[1094,304],[1107,287],[1123,267],[1143,246],[1159,229],[1170,215],[1179,203],[1182,196],[1185,191],[1185,186],[1185,182],[1182,178],[1179,175],[1176,174],[1175,174],[1174,174]],"dx":-559,"dy":53,"length":898.2986840438574,"timing":[0,16,33,50,66,83,100,116,133,150,166,183,200,216,233,250,266,283,300,316,333,350,366,383,400,416,433,450,466,483,500,516,533]},{"start":[1651,242],"end":[902,700],"points":[[1651,243],[1650,243],[1647,245],[1639,247],[1619,249],[1591,252],[1552,257],[1495,266],[1439,275],[1378,284],[1311,293],[1251,303],[1197,319],[1146,346],[1108,377],[1076,411],[1051,448],[1031,487],[1011,526],[986,570],[963,606],[939,636],[913,665],[887,683],[860,696],[833,705],[819,711],[814,713],[814,714],[817,714],[829,714],[848,713],[865,710],[878,708],[886,705],[893,703],[898,701],[901,700],[902,700]],"dx":-749,"dy":458,"length":1119.1899637630406,"timing":[0,6,22,39,56,72,89,106,122,139,156,172,189,205,222,239,256,272,289,306,322,339,356,372,389,406,422,439,456,522,539,555,572,589,605,622,639,655,672]},{"start":[779,813],"end":[1747,461],"points":[[779,811],[779,809],[779,803],[781,794],[781,779],[783,759],[787,730],[796,704],[809,678],[831,652],[854,630],[887,605],[940,579],[998,559],[1061,542],[1144,530],[1223,523],[1306,518],[1400,517],[1484,517],[1561,518],[1630,518],[1678,516],[1711,514],[1736,509],[1751,505],[1757,500],[1760,496],[1760,493],[1758,491],[1754,490],[1750,488],[1748,485],[1747,479],[1747,472],[1747,465],[1747,461]],"dx":968,"dy":-352,"length":1178.4804645925137,"timing":[0,17,33,50,66,83,100,116,133,150,166,183,200,216,233,250,266,283,300,316,333,350,366,383,400,416,433,449,466,483,500,516,533,550,566,583,599]},{"start":[944,800],"end":[354,454],"points":[[941,799],[939,797],[938,792],[938,786],[943,775],[950,761],[959,741],[970,716],[980,688],[987,662],[991,637],[994,612],[990,592],[978,573],[953,553],[921,532],[879,510],[812,488],[739,475],[664,466],[588,458],[530,451],[481,445],[436,438],[408,435],[390,433],[377,433],[369,433],[363,435],[358,438],[356,441],[355,444],[356,447],[356,448],[356,450],[356,451],[354,453],[354,454]],"dx":-590,"dy":-346,"length":905.7743652276654,"timing":[0,17,33,50,66,83,100,116,133,150,166,183,199,216,233,249,266,283,299,316,333,349,366,383,399,416,433,450,466,483,499,516,533,549,566,583,599,616]},{"start":[1818,363],"end":[1530,815],"points":[[1818,363],[1817,363],[1809,362],[1789,359],[1760,357],[1722,357],[1669,360],[1615,366],[1558,374],[1487,380],[1421,383],[1356,383],[1288,382],[1239,380],[1209,379],[1195,381],[1192,385],[1193,392],[1204,408],[1219,432],[1243,469],[1274,518],[1301,561],[1323,593],[1343,622],[1360,647],[1378,670],[1395,694],[1409,713],[1423,731],[1435,749],[1443,761],[1449,772],[1456,782],[1464,790],[1473,797],[1484,803],[1492,808],[1499,810],[1506,811],[1512,811],[1518,811],[1522,811],[1524,811],[1525,812],[1527,813],[1528,814],[1529,815],[1530,815]],"dx":-288,"dy":452,"length":1192.1232561338343,"timing":[0,17,33,50,67,83,100,116,133,150,167,183,200,216,233,250,266,283,300,316,333,350,366,383,400,416,433,450,466,483,500,516,533,550,566,583,600,616,633,649,666,683,700,716,733,750,766,783,799]},{"start":[1432,530],"end":[1268,731],"points":[[1432,529],[1431,528],[1428,527],[1418,521],[1396,511],[1367,499],[1326,484],[1269,466],[1213,455],[1163,453],[1128,463],[1111,483],[1110,502],[1116,525],[1131,554],[1147,580],[1162,605],[1176,633],[1181,653],[1182,667],[1184,681],[1187,692],[1192,702],[1197,707],[1202,711],[1207,713],[1213,715],[1220,716],[1226,719],[1236,722],[1245,725],[1253,728],[1260,729],[1265,730],[1268,731]],"dx":-164,"dy":201,"length":665.557195059968,"timing":[0,21,35,51,67,84,101,117,134,151,167,184,201,217,234,251,267,284,301,317,334,351,367,384,401,417,434,451,467,484,501,517,534,551,566]},{"start":[144,216],"end":[1887,568],"points":[[145,216],[146,216],[152,217],[165,218],[186,221],[209,226],[236,234],[275,250],[322,269],[377,289],[455,315],[535,339],[618,359],[717,379],[812,398],[917,422],[1028,446],[1118,463],[1206,480],[1307,497],[1398,512],[1484,529],[1572,548],[1645,564],[1714,578],[1784,595],[1839,608],[1881,619],[1909,623],[1908,595],[1907,588],[1909,585],[1909,580],[1903,575],[1892,570],[1887,568]],"dx":1743,"dy":352,"length":1882.5984406975106,"timing":[0,1,17,33,50,67,83,100,117,133,150,167,183,200,217,233,250,267,283,300,317,333,350,367,383,400,417,433,450,533,550,567,600,617,633,642]},{"start":[399,443],"end":[964,368],"points":[[400,443],[401,443],[402,443],[403,443],[404,443],[408,442],[412,441],[419,438],[428,436],[435,434],[447,432],[457,428],[472,424],[486,420],[501,413],[512,407],[523,401],[527,395],[528,390],[528,386],[526,378],[523,372],[517,362],[513,356],[509,348],[508,345],[508,343],[513,342],[520,340],[538,340],[558,340],[593,342],[627,348],[676,358],[717,367],[768,380],[805,388],[848,398],[873,403],[897,406],[909,408],[920,409],[924,409],[926,409],[927,408],[927,407],[927,406],[927,405],[927,404],[927,403],[927,402],[928,401],[928,399],[930,398],[932,396],[935,394],[938,393],[940,391],[944,390],[945,389],[947,387],[948,386],[949,385],[951,383],[952,382],[953,381],[955,379],[956,377],[959,374],[960,373],[961,370],[963,370],[964,369],[964,368]],"dx":565,"dy":-75,"length":681.3506754356316,"timing":[0,8,18,54,75,82,89,96,103,109,116,123,130,137,144,151,158,165,172,179,187,193,200,207,214,221,227,234,241,248,255,262,269,276,283,290,297,304,311,318,325,332,339,345,353,376,386,392,396,401,408,415,422,429,436,443,450,457,463,471,478,485,492,498,505,512,519,526,533,540,547,554,561,570]},{"start":[1070,325],"end":[488,202],"points":[[1070,326],[1069,326],[1068,327],[1064,330],[1062,332],[1060,334],[1056,336],[1053,338],[1050,339],[1048,341],[1047,342],[1045,342],[1044,342],[1043,342],[1040,342],[1034,342],[1024,342],[1006,339],[989,336],[964,330],[944,326],[913,320],[887,316],[849,309],[819,303],[777,297],[746,290],[704,281],[676,274],[644,264],[624,259],[601,251],[588,248],[576,243],[568,240],[560,237],[552,234],[548,233],[543,231],[540,231],[538,231],[536,231],[534,231],[532,231],[530,230],[528,230],[525,230],[523,229],[521,229],[520,228],[519,227],[518,227],[517,226],[516,224],[514,222],[512,220],[510,218],[507,214],[504,212],[500,209],[497,206],[493,204],[491,202],[488,202]],"dx":-582,"dy":-123,"length":612.8674727926306,"timing":[0,5,12,19,25,32,39,46,53,60,67,74,120,126,130,137,144,151,157,164,171,178,185,192,199,206,213,220,227,234,241,248,254,261,268,275,282,289,296,303,310,317,324,331,338,345,352,359,366,373,380,387,394,401,407,414,421,428,435,442,449,456,463,470]},{"start":[488,202],"end":[875,339],"points":[[488,203],[488,204],[490,206],[492,209],[492,211],[493,213],[494,214],[495,214],[495,216],[497,218],[500,223],[504,227],[512,235],[519,242],[530,252],[540,260],[560,272],[579,281],[607,292],[631,299],[664,310],[689,317],[721,326],[742,330],[769,336],[787,340],[805,343],[818,346],[828,349],[838,351],[843,352],[847,354],[848,354],[849,354],[850,354],[851,354],[852,354],[852,353],[853,353],[854,353],[854,352],[856,351],[856,350],[858,349],[860,347],[862,346],[864,345],[867,343],[868,342],[871,342],[872,341],[874,340],[875,339]],"dx":387,"dy":137,"length":436.8366321589102,"timing":[0,4,11,18,25,32,39,46,53,60,67,74,80,87,94,101,108,115,122,129,136,143,150,157,164,171,178,185,192,199,205,212,219,282,290,300,304,310,367,376,379,386,393,400,407,414,421,428,435,442,449,455,462]},{"start":[875,339],"end":[553,559],"points":[[875,338],[874,338],[873,338],[872,337],[869,336],[868,335],[865,335],[864,335],[861,335],[856,335],[848,337],[836,339],[818,345],[804,350],[788,355],[771,362],[760,367],[748,374],[737,382],[724,391],[713,398],[696,410],[684,419],[666,431],[653,440],[638,450],[628,458],[617,466],[610,472],[603,478],[597,484],[592,491],[589,498],[587,504],[584,512],[583,517],[581,523],[580,527],[579,530],[578,533],[577,536],[576,538],[573,542],[570,544],[566,549],[562,552],[558,555],[556,558],[555,558],[553,559]],"dx":-322,"dy":220,"length":412.6364875852222,"timing":[0,3,10,17,24,31,38,45,52,59,66,73,80,87,94,101,107,114,121,128,135,142,149,156,163,170,177,184,191,198,205,212,219,225,232,239,246,253,260,267,274,281,288,295,302,309,316,323,330,337]},{"start":[823,270],"end":[1301,389],"points":[[823,270],[823,271],[820,274],[819,277],[817,278],[816,279],[815,280],[815,282],[814,282],[814,284],[813,286],[813,288],[813,289],[814,290],[815,293],[817,295],[820,298],[823,301],[826,302],[831,305],[836,306],[844,309],[855,311],[876,315],[899,320],[936,327],[965,334],[1006,342],[1036,349],[1077,358],[1103,362],[1129,367],[1158,373],[1179,376],[1197,380],[1208,382],[1220,385],[1228,386],[1237,389],[1243,390],[1251,390],[1257,391],[1264,392],[1269,392],[1274,392],[1276,392],[1279,392],[1280,392],[1281,392],[1283,392],[1285,392],[1287,392],[1290,392],[1292,392],[1294,391],[1297,391],[1299,390],[1300,390],[1301,389]],"dx":478,"dy":119,"length":528.641935278486,"timing":[0,94,103,110,116,123,130,137,144,151,158,166,172,179,186,193,199,206,213,220,227,234,241,248,255,262,269,276,283,290,297,304,311,318,325,331,338,345,352,359,366,373,380,387,394,401,408,415,422,429,436,442,449,456,463,470,477,484,491]},{"start":[1300,383],"end":[173,489],"points":[[1300,382],[1299,382],[1296,382],[1292,381],[1284,380],[1274,378],[1256,375],[1237,373],[1211,370],[1187,369],[1159,367],[1112,367],[1058,367],[1012,368],[957,369],[865,372],[801,374],[722,380],[667,385],[604,392],[557,399],[505,408],[468,415],[421,422],[389,429],[352,437],[332,441],[311,446],[301,449],[296,452],[294,454],[293,454],[292,456],[292,457],[292,458],[291,458],[290,459],[290,460],[289,460],[289,461],[288,462],[286,462],[280,466],[273,468],[263,472],[254,475],[244,478],[238,480],[234,482],[231,482],[228,483],[226,483],[224,483],[221,484],[219,484],[216,485],[213,485],[212,485],[209,485],[206,485],[204,485],[200,485],[197,485],[194,485],[191,486],[186,486],[184,486],[181,486],[178,487],[176,487],[174,488],[173,488],[173,489]],"dx":-1127,"dy":106,"length":1148.2015132395225,"timing":[0,122,130,137,142,149,156,163,170,177,184,191,197,204,211,218,225,232,239,246,253,260,267,274,281,288,295,302,308,315,323,330,336,344,350,357,364,371,384,386,392,399,406,413,420,427,434,441,448,455,462,468,475,482,489,496,503,510,517,524,531,538,545,552,559,566,572,580,586,593,600,607,614]},{"start":[172,489],"end":[873,572],"points":[[172,489],[173,489],[175,489],[178,489],[184,486],[189,486],[196,483],[199,482],[202,481],[204,480],[205,480],[207,478],[208,478],[212,477],[218,474],[228,472],[238,470],[259,467],[278,466],[308,464],[332,464],[355,466],[389,472],[412,478],[444,486],[467,494],[500,506],[522,515],[553,527],[575,537],[603,548],[623,554],[648,563],[668,570],[690,577],[710,582],[727,587],[748,591],[768,595],[781,597],[794,598],[803,599],[809,600],[816,601],[819,601],[821,601],[822,601],[823,601],[824,601],[824,600],[824,599],[824,598],[824,597],[825,596],[826,594],[828,593],[830,591],[833,589],[836,589],[840,587],[842,586],[844,585],[845,584],[847,583],[848,582],[849,582],[850,580],[851,580],[854,578],[856,577],[860,575],[862,574],[865,574],[867,573],[870,572],[871,572],[872,572],[873,572]],"dx":701,"dy":83,"length":739.0902926202973,"timing":[0,79,85,92,99,106,112,119,126,133,140,147,154,161,168,175,182,189,196,203,210,217,224,231,238,244,251,258,265,272,279,286,293,300,307,314,321,328,335,342,349,356,363,370,376,383,390,397,407,427,435,443,451,453,460,467,474,481,488,494,501,508,515,522,529,536,543,550,557,564,571,578,585,592,599,605,612,623]},{"start":[873,572],"end":[109,498],"points":[[873,571],[873,570],[872,570],[869,566],[868,564],[864,559],[863,557],[860,553],[858,550],[852,545],[843,539],[820,527],[794,517],[750,500],[712,486],[655,466],[604,450],[542,431],[492,417],[428,401],[372,389],[325,381],[270,373],[233,370],[193,368],[168,369],[148,371],[137,374],[129,379],[124,382],[120,386],[119,390],[117,394],[116,398],[114,403],[112,410],[111,414],[108,421],[107,426],[105,431],[104,435],[104,440],[104,444],[104,449],[105,453],[106,458],[107,460],[107,462],[107,464],[107,466],[107,467],[108,469],[108,470],[108,473],[108,475],[108,478],[108,479],[108,482],[108,484],[107,486],[107,490],[107,491],[107,494],[107,495],[108,498],[109,498]],"dx":-764,"dy":-74,"length":915.1332209993432,"timing":[0,6,12,19,25,32,39,46,53,60,67,74,81,88,95,102,109,116,123,129,136,143,150,157,164,171,178,185,192,199,206,213,220,227,234,241,248,255,262,269,275,282,289,296,303,310,317,324,331,338,346,352,359,366,373,380,387,393,400,407,414,421,428,435,442,449]},{"start":[1161,524],"end":[1379,238],"points":[[1161,524],[1160,524],[1158,523],[1154,521],[1147,517],[1140,514],[1129,508],[1118,502],[1098,490],[1080,479],[1057,467],[1017,445],[988,429],[946,406],[916,386],[883,363],[864,344],[852,324],[850,314],[855,305],[864,299],[884,293],[902,288],[930,283],[956,279],[987,275],[1012,273],[1044,270],[1067,270],[1096,269],[1116,269],[1137,269],[1148,268],[1159,267],[1166,266],[1171,265],[1175,263],[1177,263],[1181,262],[1183,262],[1184,262],[1185,262],[1187,261],[1188,261],[1190,260],[1192,259],[1196,259],[1200,258],[1205,257],[1209,256],[1215,255],[1219,255],[1222,254],[1227,253],[1229,252],[1232,250],[1235,250],[1239,248],[1242,247],[1247,246],[1251,244],[1256,243],[1258,242],[1261,241],[1264,240],[1268,239],[1269,238],[1271,238],[1273,238],[1274,237],[1276,237],[1278,236],[1280,235],[1281,235],[1281,234],[1282,234],[1283,234],[1284,234],[1288,234],[1292,233],[1303,233],[1311,233],[1320,233],[1332,234],[1340,234],[1350,235],[1357,236],[1365,237],[1371,238],[1376,238],[1378,238],[1379,238]],"dx":218,"dy":-286,"length":928.8685349120157,"timing":[0,107,111,118,125,132,139,146,153,160,167,174,181,188,195,201,208,215,222,229,236,243,250,257,264,271,278,285,292,299,305,312,319,326,333,340,347,354,361,368,375,382,389,396,403,410,417,424,431,438,444,452,458,465,472,479,486,493,500,507,514,521,528,535,542,549,556,563,569,576,583,590,597,605,611,638,641,646,653,660,667,674,681,688,695,701,708,715,722,729,736,745]},{"start":[1379,238],"end":[643,474],"points":[[1379,239],[1379,240],[1378,240],[1378,241],[1377,241],[1377,242],[1376,242],[1376,243],[1375,243],[1372,244],[1371,246],[1364,247],[1358,249],[1345,250],[1334,252],[1313,255],[1292,257],[1263,262],[1238,267],[1204,277],[1173,286],[1136,300],[1105,311],[1066,326],[1035,338],[988,357],[955,371],[908,389],[876,402],[844,414],[807,428],[784,438],[757,449],[740,458],[719,468],[706,476],[692,484],[686,488],[678,494],[676,495],[673,497],[673,498],[672,498],[671,498],[669,498],[668,498],[664,498],[662,498],[658,498],[655,495],[652,492],[649,489],[646,486],[644,483],[644,482],[644,481],[644,480],[644,478],[644,477],[643,474]],"dx":-736,"dy":236,"length":805.5008843104524,"timing":[0,12,18,25,32,39,46,56,59,66,73,80,87,94,101,108,115,122,129,136,143,150,157,164,170,177,184,191,198,205,212,219,226,233,240,247,254,261,268,275,282,289,295,352,358,365,372,379,386,393,400,407,414,422,428,438,442,448,455,462]},{"start":[393,456],"end":[1275,166],"points":[[393,456],[394,456],[395,456],[396,456],[400,454],[403,454],[405,453],[408,452],[411,452],[414,451],[417,450],[424,450],[429,449],[439,446],[448,444],[466,438],[482,434],[508,426],[532,420],[568,410],[600,401],[646,389],[682,378],[732,366],[774,355],[825,342],[864,330],[900,318],[949,301],[987,286],[1031,268],[1063,254],[1098,238],[1124,226],[1147,213],[1162,206],[1177,198],[1184,193],[1191,187],[1195,184],[1196,182],[1198,178],[1199,176],[1200,173],[1201,171],[1203,169],[1204,167],[1206,165],[1208,164],[1210,162],[1212,162],[1213,159],[1216,159],[1216,158],[1217,158],[1218,158],[1219,158],[1220,158],[1224,160],[1228,162],[1232,163],[1236,164],[1240,165],[1244,166],[1248,166],[1253,166],[1258,166],[1262,166],[1268,166],[1271,166],[1273,166],[1275,166]],"dx":882,"dy":-290,"length":948.3671508066153,"timing":[0,98,104,111,118,125,131,139,145,152,159,166,173,180,187,194,201,208,215,222,229,236,243,249,256,263,270,277,284,291,298,305,312,319,326,333,340,347,354,361,368,375,382,388,395,402,409,416,423,430,437,444,451,458,465,510,514,520,527,534,541,548,555,562,569,576,583,590,597,604,611,618]},{"start":[414,258],"end":[1156,396],"points":[[414,258],[416,258],[420,258],[429,258],[437,258],[448,258],[458,258],[474,259],[492,261],[518,264],[542,267],[586,275],[624,282],[672,291],[737,304],[789,313],[853,323],[904,332],[959,340],[997,346],[1046,354],[1080,358],[1124,367],[1152,373],[1187,380],[1208,386],[1226,390],[1240,394],[1246,395],[1248,397],[1248,398],[1248,401],[1249,404],[1249,406],[1250,408],[1250,409],[1250,410],[1249,410],[1248,410],[1246,411],[1243,412],[1239,412],[1236,412],[1232,412],[1227,412],[1223,411],[1216,410],[1212,409],[1203,407],[1197,406],[1189,405],[1184,404],[1179,404],[1176,403],[1173,402],[1169,402],[1166,400],[1164,399],[1162,398],[1160,398],[1158,398],[1156,396]],"dx":742,"dy":138,"length":958.055015666068,"timing":[0,209,216,223,230,237,244,251,258,265,272,279,285,292,299,306,313,320,327,334,341,348,355,362,369,376,383,390,397,404,455,473,480,487,494,501,508,533,536,543,549,556,563,570,577,584,591,598,605,612,619,626,633,640,647,654,660,667,674,681,689,695]},{"start":[733,482],"end":[1227,372],"points":[[733,481],[733,480],[732,476],[732,473],[730,468],[728,464],[728,458],[728,453],[727,448],[726,442],[725,438],[724,432],[724,429],[724,425],[725,422],[732,418],[744,411],[774,401],[803,394],[849,391],[888,390],[946,394],[988,398],[1044,406],[1082,412],[1132,420],[1167,424],[1194,429],[1223,431],[1236,434],[1247,434],[1250,434],[1252,434],[1252,433],[1251,432],[1250,430],[1248,426],[1248,422],[1244,418],[1244,414],[1242,411],[1241,409],[1240,406],[1239,403],[1236,399],[1235,396],[1233,391],[1232,389],[1230,386],[1229,384],[1228,382],[1228,380],[1228,378],[1227,376],[1227,375],[1227,374],[1227,373],[1227,372]],"dx":494,"dy":-110,"length":665.1944510028105,"timing":[0,5,12,19,25,32,39,46,53,60,67,74,81,88,95,102,109,116,123,129,136,143,150,157,164,171,178,185,192,199,206,213,220,294,298,303,310,317,324,331,338,345,352,359,366,373,380,387,393,401,407,414,421,428,435,442,449,456]},{"start":[1227,371],"end":[1160,540],"points":[[1227,371],[1226,371],[1224,371],[1222,371],[1218,372],[1216,373],[1210,374],[1204,375],[1197,377],[1183,381],[1166,386],[1152,389],[1135,394],[1122,396],[1110,398],[1094,402],[1081,404],[1064,408],[1051,412],[1032,418],[1023,422],[1012,428],[1007,432],[1004,436],[1002,438],[1002,441],[1002,442],[1004,444],[1007,446],[1012,450],[1017,452],[1023,454],[1032,457],[1040,460],[1050,463],[1057,466],[1068,471],[1078,475],[1088,481],[1098,485],[1111,490],[1120,494],[1132,499],[1140,503],[1148,507],[1154,510],[1160,514],[1163,517],[1166,519],[1168,522],[1170,524],[1171,526],[1172,528],[1172,529],[1172,530],[1172,531],[1172,532],[1172,533],[1172,534],[1171,534],[1171,535],[1170,536],[1169,536],[1169,537],[1168,537],[1167,538],[1164,538],[1163,538],[1160,539],[1160,540]],"dx":-67,"dy":169,"length":456.93718751041405,"timing":[0,99,105,112,119,126,133,139,146,153,160,167,174,181,188,195,202,209,216,223,230,237,244,251,257,264,271,278,285,292,299,306,313,320,327,334,341,348,355,362,368,376,382,389,396,403,410,417,424,431,438,445,452,459,466,475,481,488,495,501,508,515,522,569,578,586,591,598,605,625]},{"start":[1160,540],"end":[634,206],"points":[[1159,540],[1158,540],[1157,541],[1157,542],[1156,542],[1155,542],[1154,542],[1153,541],[1152,540],[1148,537],[1143,531],[1137,526],[1129,516],[1120,507],[1107,494],[1092,482],[1078,470],[1054,450],[1033,434],[1000,409],[973,386],[937,358],[911,338],[876,311],[853,294],[826,274],[809,262],[790,246],[776,235],[761,222],[752,212],[744,202],[739,197],[734,191],[732,189],[730,186],[728,186],[727,184],[726,184],[724,183],[723,183],[722,183],[721,183],[720,183],[719,185],[716,187],[713,189],[708,192],[702,194],[692,198],[684,200],[674,202],[667,204],[659,205],[650,206],[644,206],[640,206],[637,206],[635,206],[634,206]],"dx":-526,"dy":-334,"length":664.3202848219785,"timing":[0,12,19,26,48,112,122,124,130,137,144,151,158,165,171,178,185,192,199,206,213,220,227,234,241,248,255,262,269,275,282,289,296,303,310,317,324,331,338,345,356,380,388,394,400,407,414,421,428,435,442,449,456,463,470,477,485,491,498,505]},{"start":[634,206],"end":[508,482],"points":[[634,207],[634,208],[634,210],[634,215],[635,218],[636,221],[636,222],[636,223],[637,224],[638,225],[639,226],[639,228],[641,231],[643,236],[644,239],[646,243],[647,247],[647,250],[647,254],[644,257],[637,263],[629,270],[617,282],[608,288],[597,298],[592,304],[582,313],[577,320],[568,329],[561,338],[551,350],[542,362],[532,377],[524,388],[518,401],[515,410],[512,419],[511,428],[511,433],[510,438],[510,443],[508,449],[508,453],[507,457],[507,460],[506,465],[506,468],[506,472],[506,474],[506,476],[506,478],[506,479],[506,480],[507,480],[507,481],[507,482],[508,482]],"dx":-126,"dy":276,"length":332.2992212859795,"timing":[0,4,11,18,25,32,39,46,53,60,67,73,80,87,94,101,108,115,122,129,136,143,150,157,163,170,177,184,191,198,205,212,219,226,233,240,247,254,261,268,275,282,288,295,302,309,316,323,330,337,344,351,358,365,372,379,386]},{"start":[861,126],"end":[827,364],"points":[[861,127],[861,132],[861,138],[861,148],[863,154],[865,163],[868,170],[870,180],[872,189],[876,201],[879,210],[882,223],[884,230],[885,241],[886,249],[885,259],[883,269],[877,281],[869,302],[860,324],[852,342],[847,358],[841,375],[840,382],[838,389],[837,390],[837,391],[836,391],[836,390],[835,389],[835,388],[834,386],[832,385],[832,382],[831,380],[829,378],[828,375],[828,374],[828,371],[827,368],[827,366],[827,365],[827,364]],"dx":-34,"dy":238,"length":307.8783667222291,"timing":[0,6,13,20,27,34,41,48,55,62,69,76,83,89,96,103,110,117,124,131,138,145,152,159,166,173,180,246,252,262,264,270,277,284,291,298,305,312,319,326,333,340,347]},{"start":[160,274],"end":[1023,157],"points":[[160,274],[161,274],[162,274],[163,274],[164,274],[167,275],[168,276],[170,277],[170,278],[171,278],[173,278],[182,278],[194,279],[215,282],[252,283],[288,286],[340,290],[386,292],[461,295],[517,296],[596,296],[657,296],[750,296],[816,294],[900,293],[953,290],[1017,287],[1054,282],[1084,275],[1112,265],[1127,256],[1131,250],[1132,246],[1133,240],[1132,236],[1131,230],[1128,225],[1123,219],[1120,215],[1112,210],[1108,206],[1101,202],[1096,199],[1090,194],[1085,190],[1076,185],[1072,182],[1068,178],[1061,174],[1056,170],[1052,166],[1049,165],[1045,162],[1043,160],[1040,159],[1038,158],[1036,157],[1034,157],[1031,157],[1028,157],[1025,157],[1024,157],[1023,157]],"dx":863,"dy":-117,"length":1137.1914373595494,"timing":[0,85,93,99,104,111,118,125,151,152,160,166,173,180,187,194,201,208,215,222,229,236,243,250,257,263,270,277,284,291,298,305,312,319,326,333,340,347,354,361,368,375,382,389,395,402,409,416,423,430,437,444,451,458,465,472,479,486,493,500,507,513,520]},{"start":[848,590],"end":[37,153],"points":[[849,590],[851,588],[852,587],[853,586],[854,586],[854,585],[854,584],[854,583],[855,582],[855,580],[856,578],[856,577],[857,577],[858,576],[859,576],[860,575],[860,574],[862,574],[864,574],[866,573],[868,572],[870,570],[872,570],[874,567],[876,566],[877,563],[879,562],[881,559],[883,558],[884,556],[886,554],[888,552],[890,550],[891,549],[892,547],[893,546],[894,544],[894,542],[892,539],[888,534],[878,526],[868,518],[848,503],[829,491],[807,478],[773,458],[734,436],[702,420],[668,403],[616,378],[578,362],[527,340],[490,325],[442,304],[409,291],[366,274],[338,262],[308,247],[289,239],[271,231],[260,227],[253,224],[248,221],[244,219],[243,218],[241,218],[240,218],[239,217],[237,216],[236,214],[235,214],[232,213],[231,212],[229,210],[228,210],[224,208],[221,206],[217,202],[211,199],[204,196],[193,192],[182,187],[168,182],[158,179],[146,176],[128,171],[114,169],[94,165],[78,162],[60,158],[49,156],[39,154],[36,153],[35,153],[36,153],[37,153]],"dx":-811,"dy":-437,"length":1026.3429807704679,"timing":[0,5,12,19,83,91,101,108,115,122,129,139,143,150,159,164,171,177,184,191,198,205,212,219,226,233,240,247,254,261,268,275,281,288,295,302,309,316,323,330,337,344,351,358,365,372,379,386,393,400,406,413,420,427,434,441,448,455,462,469,476,483,490,497,504,511,518,525,532,539,545,553,559,566,573,580,587,594,601,608,615,622,629,636,643,650,656,663,670,677,684,691,698,705,727,732]},{"start":[267,455],"end":[856,305],"points":[[267,454],[267,452],[267,450],[267,449],[267,448],[267,446],[267,445],[267,442],[268,441],[268,439],[271,437],[273,435],[276,433],[277,431],[279,430],[279,429],[279,428],[279,427],[279,426],[278,425],[278,424],[278,423],[278,422],[282,419],[290,416],[298,412],[309,406],[320,402],[334,394],[356,385],[373,376],[399,364],[420,355],[450,344],[472,336],[504,326],[531,321],[568,315],[596,310],[634,307],[660,304],[691,300],[712,298],[734,293],[750,289],[762,286],[774,282],[782,279],[788,278],[792,278],[796,277],[799,277],[802,276],[805,275],[812,275],[816,275],[822,275],[826,275],[830,276],[833,277],[836,278],[837,278],[839,278],[840,278],[841,278],[841,279],[842,280],[842,281],[843,285],[844,289],[845,294],[848,297],[849,301],[850,302],[852,302],[853,304],[854,304],[855,305],[856,305]],"dx":589,"dy":-150,"length":661.3759534580751,"timing":[0,10,19,22,29,36,43,50,57,64,71,78,85,92,98,105,112,120,126,133,140,147,154,161,168,175,182,189,196,203,209,216,223,231,237,244,251,258,265,272,279,286,293,300,307,314,321,328,335,342,349,356,362,369,376,383,390,397,404,411,418,425,432,439,446,474,485,488,494,501,508,515,522,529,537,543,550,557,564]},{"start":[856,305],"end":[1067,498],"points":[[855,305],[854,305],[852,306],[850,306],[848,306],[847,307],[846,308],[845,308],[844,310],[844,311],[844,312],[844,317],[845,325],[852,341],[860,358],[876,380],[890,398],[909,422],[924,438],[941,454],[954,465],[969,477],[981,486],[996,494],[1007,501],[1021,507],[1030,511],[1039,514],[1045,515],[1048,515],[1051,515],[1052,515],[1052,514],[1052,513],[1052,512],[1052,511],[1052,510],[1052,509],[1052,508],[1052,506],[1053,505],[1055,502],[1056,501],[1057,500],[1058,499],[1060,498],[1062,498],[1063,498],[1064,498],[1065,498],[1066,498],[1067,498]],"dx":211,"dy":193,"length":346.93485367688737,"timing":[0,5,11,19,25,32,39,46,53,105,108,115,122,129,136,143,150,157,164,171,178,185,192,199,206,213,220,227,234,240,247,254,262,282,289,321,325,335,338,345,352,359,365,372,379,386,393,400,407,414,421,428]},{"start":[99,536],"end":[908,414],"points":[[99,536],[100,536],[100,535],[101,534],[101,532],[103,529],[103,520],[103,513],[102,498],[94,483],[86,473],[81,466],[80,466],[81,466],[82,466],[95,468],[119,474],[158,484],[191,489],[240,493],[284,493],[342,491],[386,490],[430,489],[494,489],[536,487],[586,486],[618,486],[656,483],[681,480],[708,475],[723,471],[742,466],[752,462],[761,458],[766,454],[768,453],[769,451],[770,450],[770,449],[770,446],[770,445],[770,442],[770,441],[771,439],[772,438],[774,437],[776,436],[779,435],[782,434],[784,434],[788,433],[790,432],[793,430],[795,429],[797,428],[800,427],[802,426],[805,426],[808,425],[815,425],[820,424],[826,424],[832,424],[839,424],[844,424],[851,423],[856,422],[864,422],[868,422],[876,420],[880,419],[884,418],[887,418],[890,418],[892,416],[893,415],[894,415],[895,415],[896,415],[897,415],[898,415],[899,415],[900,415],[901,415],[902,414],[903,414],[904,414],[906,414],[907,414],[908,414]],"dx":809,"dy":-122,"length":932.9684933879487,"timing":[0,74,84,86,93,99,106,113,120,127,134,141,238,269,274,280,287,294,301,308,315,322,329,336,343,349,356,363,370,377,384,391,398,405,412,419,426,433,440,447,454,461,468,475,482,489,495,502,509,516,523,530,537,544,551,558,565,572,579,586,593,600,606,613,620,627,634,641,648,655,662,669,676,683,690,697,704,711,732,738,750,754,760,766,774,780,787,794,801,812,829]},{"start":[1288,293],"end":[407,446],"points":[[1288,293],[1287,293],[1280,294],[1265,301],[1251,306],[1231,314],[1202,326],[1176,338],[1136,357],[1103,372],[1051,395],[1008,412],[937,436],[877,454],[809,472],[708,494],[645,506],[576,516],[538,522],[502,526],[484,528],[469,529],[464,529],[462,529],[460,529],[460,530],[459,530],[458,530],[454,531],[448,532],[442,533],[434,534],[430,534],[426,534],[424,533],[423,531],[423,530],[422,527],[422,524],[422,518],[422,514],[422,506],[422,502],[422,496],[422,491],[421,486],[420,480],[417,476],[415,470],[412,466],[409,461],[408,458],[406,454],[406,453],[406,451],[406,450],[406,448],[407,447],[407,446]],"dx":-881,"dy":153,"length":996.0413213232874,"timing":[0,217,226,233,239,246,253,260,267,274,281,288,295,302,309,316,323,330,337,344,351,358,365,371,378,385,429,434,441,448,455,462,469,476,483,489,496,503,510,517,524,531,538,545,552,559,566,573,580,587,594,600,607,614,621,628,635,642,649]},{"start":[407,446],"end":[880,240],"points":[[408,446],[409,444],[410,444],[412,442],[415,440],[417,438],[420,437],[424,436],[426,435],[430,433],[433,432],[440,429],[446,427],[463,421],[484,414],[521,402],[555,394],[604,382],[641,374],[692,366],[728,360],[776,351],[808,345],[848,336],[876,329],[900,321],[929,310],[947,302],[963,291],[971,286],[977,279],[980,275],[984,270],[984,267],[984,263],[984,261],[984,258],[984,255],[984,254],[984,252],[984,251],[984,250],[984,249],[984,247],[984,246],[984,245],[983,244],[982,244],[981,243],[978,242],[972,241],[966,240],[961,238],[956,237],[949,236],[942,235],[936,235],[927,235],[919,235],[911,237],[900,238],[892,239],[884,240],[882,240],[880,240]],"dx":473,"dy":-206,"length":741.9470378426939,"timing":[0,8,11,18,25,32,39,46,53,60,67,74,80,87,94,101,108,115,122,129,136,143,150,157,164,171,178,185,192,199,205,212,219,226,233,240,247,254,261,268,275,282,289,296,303,325,347,353,358,365,372,379,386,393,400,407,414,421,428,435,442,448,455,462,469]},{"start":[783,220],"end":[1235,585],"points":[[783,221],[783,222],[783,226],[781,234],[780,241],[780,250],[780,255],[780,262],[780,269],[783,277],[784,283],[787,291],[789,297],[792,303],[792,306],[794,308],[794,310],[794,311],[795,313],[796,315],[799,322],[803,330],[812,345],[822,357],[840,376],[855,390],[876,409],[893,422],[917,438],[936,450],[968,466],[995,477],[1030,493],[1056,505],[1092,518],[1116,526],[1145,536],[1161,542],[1175,547],[1182,551],[1187,554],[1192,558],[1194,560],[1197,563],[1198,565],[1200,566],[1200,567],[1200,568],[1201,569],[1202,570],[1204,571],[1205,573],[1208,575],[1208,576],[1210,577],[1212,578],[1213,579],[1216,579],[1218,581],[1221,582],[1224,583],[1228,584],[1231,584],[1233,585],[1234,585],[1235,585]],"dx":452,"dy":365,"length":628.6214638445718,"timing":[0,7,14,21,28,35,42,49,55,62,69,76,83,90,97,104,111,118,125,132,139,146,153,160,166,173,180,187,194,201,208,215,222,229,236,243,250,257,264,271,278,284,291,298,305,312,319,328,347,354,361,368,375,382,389,396,403,410,417,424,430,437,444,451,458,465]},{"start":[493,428],"end":[1013,249],"points":[[493,428],[494,428],[496,428],[500,428],[501,427],[507,426],[511,426],[515,424],[519,423],[524,422],[528,421],[535,419],[540,418],[552,417],[564,414],[588,411],[612,408],[649,402],[680,398],[724,390],[760,384],[804,375],[838,369],[867,364],[901,355],[924,348],[949,339],[966,331],[981,322],[991,316],[999,309],[1004,302],[1008,295],[1011,291],[1012,286],[1013,284],[1014,281],[1014,278],[1014,276],[1014,273],[1014,270],[1014,269],[1014,267],[1014,265],[1014,263],[1014,262],[1014,261],[1014,259],[1014,258],[1014,257],[1013,255],[1013,254],[1013,252],[1013,250],[1013,249]],"dx":520,"dy":-179,"length":589.0549653456843,"timing":[0,75,83,91,97,104,110,118,124,131,138,145,152,159,166,173,180,187,194,201,208,215,222,229,236,242,250,257,263,271,277,284,291,298,305,312,319,326,333,340,347,354,361,367,374,382,388,395,402,409,416,423,430,437,449]},{"start":[96,599],"end":[1464,560],"points":[[97,598],[100,598],[105,593],[112,587],[125,578],[138,567],[162,554],[186,542],[222,529],[251,522],[296,513],[334,508],[397,502],[460,494],[548,487],[616,482],[716,473],[786,468],[889,462],[961,461],[1052,458],[1116,457],[1191,455],[1241,453],[1292,452],[1344,450],[1378,449],[1413,446],[1432,446],[1448,444],[1454,444],[1457,444],[1459,444],[1460,444],[1462,444],[1464,444],[1465,445],[1466,445],[1467,446],[1468,448],[1470,451],[1474,454],[1480,460],[1484,464],[1490,469],[1493,471],[1497,475],[1499,478],[1500,482],[1500,486],[1500,493],[1500,497],[1500,502],[1498,506],[1496,510],[1494,514],[1492,518],[1491,521],[1490,524],[1489,529],[1488,532],[1488,535],[1488,537],[1486,538],[1485,541],[1482,544],[1480,546],[1476,550],[1474,553],[1471,555],[1468,557],[1466,558],[1465,559],[1464,560]],"dx":1368,"dy":-39,"length":1536.1373963626568,"timing":[0,4,11,18,25,32,39,46,53,59,66,73,80,87,94,101,108,115,122,129,136,143,150,157,164,171,178,184,191,198,205,212,219,226,233,240,261,268,275,282,289,296,303,310,317,324,330,337,344,351,358,365,372,379,386,393,400,407,414,421,428,435,441,448,455,462,469,476,483,490,497,504,511,518]},{"start":[1448,566],"end":[1359,186],"points":[[1447,566],[1446,566],[1445,566],[1444,565],[1442,565],[1440,562],[1440,560],[1440,553],[1440,546],[1440,533],[1440,522],[1441,507],[1442,494],[1444,478],[1445,464],[1448,444],[1448,428],[1448,405],[1447,389],[1444,365],[1439,346],[1432,323],[1425,306],[1416,284],[1408,266],[1399,249],[1389,229],[1384,218],[1379,206],[1377,198],[1376,193],[1376,190],[1376,186],[1376,185],[1376,183],[1376,182],[1376,181],[1375,181],[1373,181],[1370,183],[1368,183],[1366,185],[1364,186],[1362,186],[1360,186],[1359,186]],"dx":-89,"dy":-380,"length":422.9285123537492,"timing":[0,8,11,17,24,31,38,45,52,59,66,73,79,86,93,100,107,114,121,128,135,142,149,156,163,170,177,184,191,198,205,211,218,225,232,239,248,354,364,372,377,384,390,397,404,412]},{"start":[536,488],"end":[241,550],"points":[[536,489],[537,489],[537,490],[540,491],[541,492],[542,493],[543,494],[544,494],[545,495],[546,495],[547,495],[547,496],[546,496],[544,496],[540,495],[535,494],[526,494],[518,494],[504,495],[492,497],[473,499],[458,501],[436,502],[417,504],[398,505],[368,506],[340,508],[320,509],[300,511],[276,514],[264,514],[251,516],[244,518],[240,519],[236,520],[235,522],[234,522],[233,524],[232,524],[232,525],[232,526],[232,527],[232,528],[232,530],[233,531],[234,534],[235,537],[236,540],[237,542],[239,546],[240,547],[240,548],[241,550]],"dx":-295,"dy":62,"length":362.4446005577924,"timing":[0,8,13,20,27,33,41,48,55,67,73,76,191,195,202,209,216,223,230,236,243,250,257,264,271,278,285,292,299,306,313,320,327,334,341,347,355,361,372,378,466,473,480,486,493,500,507,514,521,528,535,542,549]},{"start":[211,595],"end":[859,480],"points":[[211,596],[210,596],[209,597],[208,598],[209,598],[210,598],[212,597],[220,594],[231,589],[253,579],[274,570],[312,554],[346,542],[382,530],[437,517],[484,510],[544,504],[588,502],[646,502],[684,502],[732,504],[762,506],[797,508],[821,510],[844,511],[853,511],[864,511],[868,511],[872,511],[872,510],[873,510],[873,509],[873,507],[873,505],[873,502],[872,498],[869,494],[868,492],[866,490],[864,487],[863,486],[861,483],[860,482],[859,481],[859,480]],"dx":648,"dy":-115,"length":720.2290435528954,"timing":[0,5,11,31,78,79,86,93,100,107,114,121,128,135,142,149,155,162,169,176,183,190,197,204,211,218,225,232,239,246,253,335,343,350,357,364,371,378,385,392,399,406,413,420,427]},{"start":[863,418],"end":[689,137],"points":[[862,418],[861,417],[859,414],[853,406],[848,398],[841,388],[835,380],[826,370],[819,362],[810,350],[802,340],[791,324],[783,311],[769,290],[760,274],[746,251],[736,233],[724,211],[716,198],[708,182],[702,171],[698,164],[694,157],[692,152],[691,150],[691,149],[691,148],[691,147],[691,146],[691,144],[690,142],[690,140],[690,138],[690,137],[689,137]],"dx":-174,"dy":-281,"length":333.0692381379313,"timing":[0,7,14,21,28,35,42,48,55,62,69,76,83,90,97,104,111,118,125,132,139,146,153,159,166,173,180,208,229,236,243,250,257,264,268]},{"start":[1076,202],"end":[1196,567],"points":[[1076,204],[1076,206],[1076,211],[1074,219],[1072,225],[1070,231],[1067,236],[1062,242],[1057,246],[1050,252],[1045,254],[1037,256],[1032,257],[1024,258],[1018,258],[1013,258],[1007,258],[1001,257],[996,256],[992,255],[984,255],[978,254],[971,254],[968,254],[966,254],[965,254],[965,255],[965,256],[966,259],[971,267],[976,275],[983,286],[996,303],[1008,318],[1022,339],[1034,357],[1049,383],[1061,405],[1080,434],[1093,455],[1105,474],[1121,497],[1136,518],[1144,529],[1153,539],[1160,546],[1164,552],[1168,554],[1171,558],[1172,559],[1173,561],[1174,561],[1175,561],[1176,562],[1179,563],[1183,564],[1188,566],[1191,566],[1193,567],[1194,567],[1195,567],[1196,567]],"dx":120,"dy":365,"length":540.2412256722022,"timing":[0,3,10,17,24,31,38,45,52,58,65,72,79,86,93,100,107,114,121,128,135,142,149,155,163,184,217,218,225,232,239,246,253,260,267,274,281,288,295,302,308,315,322,329,336,343,350,357,364,371,378,385,431,433,440,447,454,461,468,475,482,489]},{"start":[312,325],"end":[976,525],"points":[[313,325],[315,325],[318,326],[325,326],[331,326],[336,326],[344,326],[348,326],[356,326],[360,326],[368,324],[375,324],[386,322],[395,319],[408,316],[416,314],[425,310],[434,308],[440,307],[443,307],[446,306],[449,306],[456,307],[465,310],[482,314],[499,318],[521,322],[540,326],[558,331],[584,337],[604,343],[636,352],[665,361],[712,374],[750,386],[812,403],[855,416],[908,432],[943,444],[984,458],[1009,468],[1036,480],[1052,489],[1062,494],[1068,500],[1071,503],[1072,506],[1072,507],[1072,508],[1072,509],[1072,510],[1071,510],[1070,510],[1068,510],[1066,511],[1064,511],[1062,511],[1058,512],[1053,513],[1045,515],[1038,516],[1028,518],[1020,518],[1012,520],[1006,520],[1000,521],[998,521],[994,521],[992,522],[988,522],[987,522],[984,522],[982,523],[980,524],[978,524],[978,525],[977,525],[976,525]],"dx":664,"dy":200,"length":900.5150348535366,"timing":[0,3,10,17,24,31,38,45,52,59,66,73,80,87,94,101,107,114,121,128,135,142,149,156,163,170,177,184,191,198,205,212,218,225,232,239,246,253,260,267,274,281,288,295,302,309,316,324,330,350,357,364,371,378,385,392,399,406,413,420,427,434,441,448,455,462,469,475,482,489,496,503,510,517,524,531,538,545]},{"start":[936,238],"end":[343,366],"points":[[936,239],[935,240],[934,242],[933,245],[932,247],[931,251],[929,254],[927,258],[925,262],[920,267],[915,272],[904,278],[892,281],[878,283],[852,286],[830,286],[796,283],[771,281],[736,277],[708,274],[672,274],[642,274],[600,274],[568,276],[527,280],[499,285],[472,289],[442,296],[422,301],[402,306],[392,310],[381,313],[375,315],[368,320],[363,322],[360,326],[359,329],[357,333],[357,336],[356,341],[356,343],[354,346],[352,350],[351,353],[348,358],[347,360],[345,362],[344,364],[344,366],[343,366]],"dx":-593,"dy":128,"length":651.2983216615349,"timing":[0,5,11,17,24,31,38,45,52,59,66,73,80,87,94,101,107,114,121,128,135,142,149,156,163,170,177,184,191,198,205,212,219,226,233,240,247,253,260,267,274,281,288,295,302,309,316,323,330,339]},{"start":[343,366],"end":[780,164],"points":[[344,366],[345,366],[349,364],[356,359],[369,350],[380,344],[396,334],[408,326],[427,314],[444,306],[470,292],[494,280],[522,268],[560,253],[600,242],[625,235],[659,226],[680,222],[699,218],[722,212],[740,208],[751,206],[760,202],[767,200],[771,198],[773,197],[776,196],[776,195],[776,194],[777,194],[777,193],[777,192],[777,190],[778,189],[778,188],[779,186],[779,184],[780,182],[780,178],[780,176],[780,174],[780,172],[780,170],[780,168],[780,166],[780,165],[780,164]],"dx":437,"dy":-202,"length":502.3318911664522,"timing":[0,4,11,18,25,32,39,46,53,60,67,74,81,88,94,101,108,115,122,129,136,143,150,157,164,171,178,185,192,214,219,226,233,240,247,254,261,268,275,282,289,296,303,310,317,327,333]},{"start":[110,595],"end":[345,254],"points":[[110,595],[111,595],[112,595],[114,594],[116,592],[118,590],[122,588],[125,586],[130,582],[136,578],[143,574],[152,570],[162,566],[176,562],[190,556],[207,550],[225,544],[240,539],[262,534],[283,527],[299,523],[322,518],[341,513],[357,508],[376,504],[393,498],[414,492],[432,486],[450,479],[468,474],[482,468],[496,462],[509,454],[520,446],[526,440],[529,434],[533,427],[534,420],[534,413],[534,409],[532,403],[526,396],[518,390],[508,382],[495,374],[481,364],[465,353],[448,342],[432,332],[417,323],[402,314],[388,306],[374,297],[364,291],[354,286],[348,282],[342,279],[337,277],[335,275],[332,274],[330,272],[329,270],[328,270],[328,269],[328,268],[328,267],[328,266],[328,265],[328,263],[328,262],[328,261],[328,260],[328,259],[329,259],[331,258],[332,258],[335,256],[338,256],[340,254],[342,254],[344,254],[345,254]],"dx":235,"dy":-341,"length":761.8938434127552,"timing":[0,25,29,35,42,49,56,63,70,76,83,90,97,104,111,118,125,132,139,146,153,160,167,174,180,188,195,201,208,216,222,229,236,243,250,257,264,271,278,285,292,299,306,313,319,326,333,340,347,355,361,368,375,382,389,396,403,410,417,424,431,438,445,452,459,466,472,480,487,523,529,540,545,551,556,563,570,577,583,590,597,607]},{"start":[659,348],"end":[1310,253],"points":[[658,348],[657,349],[657,350],[657,352],[657,354],[657,357],[657,358],[657,359],[659,361],[664,361],[677,363],[691,365],[714,365],[740,365],[771,362],[800,357],[826,350],[852,344],[878,336],[906,329],[936,322],[961,317],[990,311],[1017,306],[1039,304],[1057,302],[1077,299],[1093,297],[1108,294],[1126,290],[1139,290],[1153,288],[1166,287],[1178,286],[1191,286],[1204,284],[1216,283],[1228,282],[1240,279],[1249,278],[1256,278],[1265,278],[1271,277],[1276,275],[1278,275],[1281,275],[1282,275],[1283,274],[1284,273],[1287,271],[1291,268],[1295,266],[1299,263],[1302,260],[1306,258],[1308,256],[1309,254],[1310,254],[1310,253]],"dx":651,"dy":-95,"length":683.4806333875755,"timing":[0,7,14,21,28,35,42,49,57,63,70,77,84,91,97,104,111,118,125,132,139,146,153,160,167,174,181,188,195,202,209,215,223,229,236,243,250,257,264,271,278,285,292,299,306,313,320,327,398,403,410,417,424,431,438,445,452,459,480]},{"start":[1310,253],"end":[768,681],"points":[[1309,253],[1308,253],[1304,253],[1301,254],[1296,256],[1292,257],[1288,258],[1282,260],[1277,262],[1272,264],[1268,266],[1264,268],[1260,271],[1255,274],[1248,278],[1240,283],[1232,288],[1217,294],[1200,303],[1179,314],[1155,326],[1132,336],[1108,349],[1088,361],[1060,378],[1035,394],[1004,417],[976,438],[948,462],[924,482],[900,505],[884,523],[866,543],[854,558],[843,572],[835,582],[829,593],[824,602],[819,611],[814,619],[808,627],[805,634],[801,642],[797,647],[793,653],[791,657],[787,662],[784,666],[782,668],[780,670],[778,672],[778,674],[776,675],[775,675],[774,678],[773,678],[772,679],[771,681],[769,681],[768,681]],"dx":-542,"dy":428,"length":708.5713400921189,"timing":[0,2,9,16,23,30,37,44,51,58,65,72,79,86,92,99,106,113,120,127,134,141,148,155,162,169,176,183,189,197,203,210,217,224,231,238,245,252,259,266,273,280,287,294,301,308,314,321,328,335,342,349,356,363,370,377,384,394,470,476]},{"start":[767,682],"end":[668,298],"points":[[767,682],[766,682],[765,682],[764,679],[764,676],[761,672],[760,666],[760,661],[758,653],[757,646],[756,636],[754,626],[753,611],[751,595],[748,578],[742,558],[732,538],[723,516],[714,499],[704,484],[696,469],[689,458],[681,445],[676,434],[672,422],[666,411],[662,401],[660,392],[658,383],[656,376],[654,370],[654,364],[653,358],[652,354],[652,350],[652,347],[652,344],[652,342],[652,340],[652,336],[653,333],[654,330],[655,326],[657,322],[659,318],[660,316],[662,312],[664,307],[666,305],[666,302],[666,300],[668,299],[668,298]],"dx":-99,"dy":-384,"length":414.63949578380596,"timing":[0,86,104,111,118,125,132,138,145,152,159,166,173,180,187,194,201,208,215,222,229,236,243,250,256,263,270,277,284,291,298,305,312,319,326,333,340,348,354,361,368,375,382,389,395,403,410,417,423,430,437,444,453]},{"start":[1235,157],"end":[148,165],"points":[[1234,157],[1233,157],[1231,158],[1227,161],[1223,164],[1217,168],[1212,171],[1208,175],[1203,178],[1198,182],[1195,186],[1189,188],[1185,190],[1179,194],[1169,198],[1158,202],[1137,207],[1107,214],[1080,218],[1040,222],[992,227],[939,233],[887,235],[833,239],[777,242],[720,246],[664,250],[612,256],[552,262],[496,267],[446,271],[406,273],[379,273],[357,273],[335,273],[315,272],[300,267],[287,263],[276,260],[267,256],[258,253],[249,250],[241,247],[234,243],[226,242],[218,239],[210,237],[204,234],[198,232],[192,230],[188,227],[185,226],[181,222],[180,220],[176,217],[174,214],[172,211],[171,207],[168,202],[168,197],[165,191],[163,184],[160,179],[158,174],[155,171],[153,170],[152,166],[150,166],[148,165]],"dx":-1087,"dy":8,"length":1150.5043358655817,"timing":[0,5,12,19,26,33,40,47,54,61,68,75,82,89,95,102,109,116,123,130,137,144,151,158,165,172,179,186,193,200,207,214,220,227,234,241,248,255,262,269,276,283,290,297,304,311,318,325,331,338,345,352,359,366,373,380,387,394,401,408,415,422,429,436,443,450,457,464,471]},{"start":[1254,692],"end":[1458,481],"points":[[1253,692],[1252,692],[1251,692],[1249,692],[1249,691],[1247,691],[1245,690],[1242,686],[1238,684],[1233,681],[1225,675],[1215,671],[1204,663],[1192,656],[1176,648],[1160,640],[1135,629],[1117,616],[1095,602],[1068,586],[1040,567],[1013,549],[986,526],[957,503],[931,482],[910,461],[892,441],[879,425],[876,410],[876,399],[886,389],[907,378],[930,370],[952,366],[979,362],[1001,362],[1025,362],[1048,362],[1078,367],[1109,372],[1141,378],[1176,386],[1204,392],[1235,400],[1260,405],[1288,410],[1313,414],[1334,416],[1353,417],[1369,417],[1380,418],[1389,418],[1398,418],[1404,418],[1409,418],[1415,420],[1419,421],[1424,422],[1427,423],[1431,424],[1434,426],[1437,428],[1440,431],[1444,434],[1447,438],[1449,442],[1453,448],[1456,454],[1459,458],[1460,463],[1462,466],[1462,468],[1462,470],[1462,471],[1462,472],[1462,474],[1462,475],[1462,476],[1462,477],[1461,478],[1460,478],[1459,479],[1458,481]],"dx":204,"dy":-211,"length":1131.918729074104,"timing":[0,7,14,25,28,34,41,48,55,62,69,76,83,90,97,104,111,118,125,131,138,145,152,159,166,173,180,187,194,201,208,215,222,229,236,243,250,257,263,270,277,284,291,298,305,312,319,326,333,340,347,354,361,368,375,382,389,396,402,409,416,423,430,437,444,451,458,465,472,479,486,493,500,507,514,522,532,537,542,548,556,562,570]},{"start":[1386,446],"end":[208,501],"points":[[1386,446],[1385,446],[1384,446],[1380,446],[1376,447],[1370,449],[1363,449],[1353,450],[1343,453],[1325,454],[1306,455],[1283,456],[1254,456],[1224,456],[1189,456],[1158,456],[1116,456],[1073,456],[1028,456],[982,456],[940,457],[899,460],[860,463],[832,466],[792,473],[765,475],[728,482],[698,488],[678,494],[662,498],[650,503],[644,509],[638,513],[636,514],[635,517],[634,518],[632,521],[632,522],[631,524],[630,528],[628,532],[627,536],[624,542],[623,548],[620,552],[617,558],[613,562],[607,567],[601,570],[591,574],[580,576],[566,578],[551,578],[530,578],[510,578],[484,578],[460,578],[436,573],[405,566],[384,560],[356,551],[333,542],[311,535],[290,529],[272,524],[256,518],[243,515],[232,512],[224,510],[218,508],[216,507],[214,506],[213,506],[213,505],[212,504],[211,504],[211,502],[209,502],[208,502],[208,501]],"dx":-1178,"dy":55,"length":1237.694543364228,"timing":[0,92,97,104,111,118,125,132,139,146,152,159,166,173,180,187,194,201,208,215,222,229,236,243,250,257,263,270,277,284,291,298,305,313,320,328,333,340,347,354,361,368,375,382,389,395,403,409,416,423,430,437,444,451,458,465,472,479,486,493,500,507,513,520,527,534,541,548,555,562,569,576,583,630,636,639,647,653,660,667]},{"start":[1060,593],"end":[497,191],"points":[[1059,593],[1058,593],[1055,591],[1051,590],[1044,588],[1039,586],[1031,583],[1023,579],[1011,574],[995,565],[975,553],[952,538],[922,518],[885,495],[853,476],[809,448],[762,417],[721,389],[674,354],[646,329],[620,304],[599,279],[587,263],[578,251],[570,241],[566,235],[564,230],[563,228],[563,226],[562,224],[562,221],[562,219],[562,217],[560,214],[558,210],[555,208],[552,205],[549,202],[547,199],[544,197],[541,195],[540,194],[536,194],[534,193],[532,192],[528,192],[525,191],[521,191],[516,191],[513,191],[510,191],[506,191],[502,191],[500,191],[499,191],[498,191],[497,191]],"dx":-563,"dy":-402,"length":710.7293921129171,"timing":[0,5,12,19,26,33,40,47,53,61,67,74,81,88,95,102,109,116,123,130,137,144,151,158,164,172,179,185,193,200,207,213,220,228,234,241,248,255,262,269,276,283,290,297,304,311,317,324,331,338,345,352,359,366,373,380,387]},{"start":[736,380],"end":[171,652],"points":[[736,382],[735,382],[734,383],[726,384],[716,384],[703,384],[688,386],[668,386],[644,390],[620,393],[592,399],[565,407],[528,418],[504,427],[472,439],[440,453],[409,468],[376,485],[347,498],[317,513],[290,526],[267,535],[243,547],[223,555],[205,564],[188,570],[174,578],[161,582],[151,588],[143,592],[136,596],[131,600],[128,602],[126,603],[124,604],[124,606],[124,607],[124,608],[124,609],[124,610],[124,611],[124,613],[124,615],[124,617],[124,620],[124,622],[124,626],[124,629],[125,632],[127,634],[128,638],[131,640],[133,643],[136,645],[140,647],[144,649],[146,650],[149,650],[153,651],[158,651],[160,652],[162,652],[164,652],[167,652],[168,652],[169,652],[171,652]],"dx":-565,"dy":272,"length":740.6771490847348,"timing":[0,11,13,19,27,33,40,47,54,61,68,75,82,89,96,103,110,117,124,131,138,144,151,158,165,172,179,186,193,200,207,214,221,228,235,242,263,275,282,287,293,303,319,325,332,339,347,353,360,367,374,381,387,394,401,408,415,422,429,436,444,450,457,464,471,478,485]},{"start":[171,652],"end":[1376,246],"points":[[172,652],[172,651],[174,650],[174,649],[178,646],[183,640],[189,636],[201,630],[216,621],[232,611],[248,602],[268,594],[288,585],[308,578],[332,570],[360,559],[389,552],[428,542],[473,530],[519,518],[572,503],[629,489],[691,471],[744,458],[807,442],[868,422],[930,406],[991,389],[1048,374],[1099,362],[1144,353],[1184,345],[1224,338],[1256,334],[1285,329],[1303,326],[1333,320],[1352,316],[1368,311],[1383,306],[1393,303],[1401,301],[1409,297],[1416,294],[1420,292],[1424,289],[1428,286],[1430,284],[1430,282],[1432,282],[1432,279],[1432,278],[1432,277],[1430,276],[1426,274],[1421,271],[1416,268],[1411,264],[1403,262],[1397,258],[1392,256],[1386,253],[1381,250],[1379,250],[1377,247],[1376,247],[1376,246]],"dx":1205,"dy":-406,"length":1394.542328760638,"timing":[0,5,10,17,24,31,38,45,52,59,66,73,79,86,93,100,107,114,121,128,135,142,149,156,163,170,177,184,191,198,204,211,218,225,232,239,246,253,260,267,274,281,288,295,302,309,316,323,329,336,344,356,406,413,420,427,434,441,447,454,461,468,476,482,489,510,519]},{"start":[869,422],"end":[164,270],"points":[[868,422],[866,422],[864,422],[861,422],[858,422],[853,422],[848,422],[842,422],[834,421],[825,420],[815,418],[805,418],[795,417],[784,416],[773,414],[763,412],[757,412],[748,410],[740,409],[733,408],[726,406],[716,402],[704,398],[690,394],[672,390],[656,385],[636,380],[615,375],[591,366],[567,358],[537,351],[510,345],[478,338],[456,334],[423,329],[397,326],[370,322],[344,318],[322,316],[302,314],[286,311],[272,309],[261,307],[252,306],[245,304],[239,303],[235,302],[231,300],[228,299],[224,298],[222,298],[219,296],[217,296],[216,294],[214,294],[212,293],[209,292],[208,291],[206,289],[204,289],[202,287],[199,286],[197,285],[193,283],[192,282],[189,281],[188,280],[186,278],[182,276],[179,276],[176,274],[173,274],[170,273],[168,273],[166,272],[164,272],[164,270]],"dx":-705,"dy":-152,"length":729.0357652607148,"timing":[0,9,16,22,29,36,42,50,56,63,70,77,84,91,98,105,112,119,126,133,140,147,154,160,167,174,181,188,195,202,209,216,223,230,237,244,251,258,265,272,278,286,292,299,306,313,320,327,334,341,348,355,362,369,376,383,390,397,404,411,418,425,432,438,445,452,459,466,473,480,487,494,501,508,515,522,529]},{"start":[1060,666],"end":[336,376],"points":[[1059,666],[1056,666],[1052,663],[1042,658],[1028,649],[1009,637],[985,623],[952,608],[920,594],[882,577],[836,560],[792,543],[747,528],[699,514],[658,502],[612,488],[564,474],[520,459],[482,447],[452,435],[427,424],[407,416],[392,408],[378,402],[368,397],[360,393],[352,390],[348,387],[346,384],[343,382],[340,380],[339,378],[338,378],[337,376],[336,376]],"dx":-724,"dy":-290,"length":784.0257276174974,"timing":[0,5,12,18,26,32,39,46,53,60,67,74,81,88,95,102,109,116,123,129,136,143,150,157,164,171,178,185,192,199,206,213,220,227,239]},{"start":[336,376],"end":[769,264],"points":[[337,376],[339,376],[344,376],[354,376],[365,376],[379,378],[396,380],[415,382],[438,386],[464,390],[492,395],[524,401],[552,405],[586,410],[616,414],[649,418],[684,420],[724,420],[762,420],[790,420],[818,414],[832,407],[844,399],[849,393],[852,389],[852,383],[852,376],[852,370],[850,361],[844,352],[837,342],[828,331],[820,322],[813,315],[808,310],[802,306],[796,302],[793,298],[791,297],[788,296],[786,294],[784,293],[784,291],[780,290],[780,289],[778,287],[776,286],[775,282],[772,278],[772,277],[771,274],[771,270],[769,267],[769,266],[769,264]],"dx":433,"dy":-112,"length":688.1818617757691,"timing":[0,4,11,18,25,32,39,46,53,60,67,74,80,87,94,101,108,115,122,129,136,143,150,157,164,171,178,185,192,199,205,212,219,226,233,240,247,254,261,268,275,282,289,296,303,310,317,324,332,337,344,351,358,365,373]},{"start":[661,198],"end":[840,650],"points":[[663,198],[663,199],[664,199],[665,201],[668,205],[670,210],[673,215],[677,222],[682,230],[686,238],[692,247],[699,262],[704,274],[712,297],[719,313],[726,336],[736,361],[746,385],[757,410],[768,432],[779,450],[788,470],[796,486],[802,501],[808,516],[812,528],[817,541],[821,552],[824,564],[826,575],[827,584],[828,593],[829,599],[830,606],[830,610],[830,614],[830,617],[830,620],[830,622],[830,625],[831,626],[831,627],[831,629],[832,630],[832,632],[832,633],[832,634],[833,634],[833,636],[835,639],[835,641],[836,643],[837,646],[838,646],[839,648],[840,649],[840,650]],"dx":179,"dy":452,"length":492.7606678509402,"timing":[0,12,13,20,27,33,40,47,54,61,68,75,82,89,96,103,110,117,124,131,137,144,151,158,165,172,179,186,193,200,207,214,221,228,235,242,249,256,263,270,276,283,290,320,355,360,367,374,381,388,395,401,408,415,423,430,436]},{"start":[320,177],"end":[1260,351],"points":[[322,177],[327,177],[335,178],[344,181],[355,182],[368,183],[384,186],[404,187],[423,190],[444,192],[465,193],[485,194],[503,195],[519,196],[532,196],[543,196],[557,196],[570,196],[582,196],[600,196],[618,196],[641,197],[668,199],[696,201],[729,205],[756,209],[792,214],[835,219],[877,224],[922,230],[965,239],[1004,248],[1044,256],[1072,265],[1094,270],[1120,279],[1141,287],[1156,294],[1172,303],[1186,312],[1196,319],[1204,326],[1212,332],[1217,338],[1221,344],[1228,347],[1231,351],[1236,354],[1240,357],[1244,358],[1245,359],[1247,360],[1248,360],[1249,360],[1251,360],[1252,360],[1253,360],[1255,360],[1256,360],[1258,360],[1260,359],[1260,358],[1261,357],[1261,355],[1261,354],[1261,352],[1260,351]],"dx":940,"dy":174,"length":982.811333239423,"timing":[0,7,14,21,28,35,41,48,55,62,69,76,83,90,97,104,111,118,125,132,139,146,153,160,166,173,180,187,194,201,208,215,222,229,236,243,250,257,264,271,278,284,291,298,305,312,319,326,333,340,347,354,361,368,375,382,389,396,403,410,422,432,453,461,479,486,496]},{"start":[1253,364],"end":[531,618],"points":[[1252,364],[1250,364],[1244,364],[1240,366],[1231,367],[1216,368],[1195,372],[1168,376],[1136,380],[1104,383],[1057,390],[1010,394],[970,401],[925,407],[882,416],[842,426],[806,438],[769,453],[738,468],[710,484],[686,498],[668,512],[652,525],[640,535],[630,545],[620,555],[613,562],[608,568],[604,572],[600,575],[596,578],[594,580],[592,582],[588,585],[586,586],[585,588],[584,589],[582,590],[580,590],[580,592],[576,594],[575,594],[575,595],[572,596],[569,597],[567,598],[564,600],[560,602],[556,603],[552,605],[548,608],[544,610],[540,612],[536,614],[535,614],[532,616],[531,618]],"dx":-722,"dy":254,"length":788.2575999928025,"timing":[0,4,11,17,24,31,38,45,52,59,66,73,80,87,94,101,108,115,121,129,135,142,149,156,163,170,177,184,191,198,205,212,219,226,234,240,247,254,261,268,275,282,289,295,302,309,316,323,330,337,344,351,358,365,372,379,386]},{"start":[1076,410],"end":[1187,691],"points":[[1075,410],[1072,410],[1068,411],[1062,412],[1056,413],[1048,413],[1039,414],[1031,416],[1020,418],[1006,421],[989,423],[973,424],[956,426],[939,430],[923,432],[905,435],[892,439],[880,442],[871,447],[866,451],[864,457],[864,461],[864,466],[866,471],[876,476],[891,482],[905,490],[924,497],[944,504],[963,512],[984,520],[1006,531],[1025,541],[1044,551],[1060,562],[1073,574],[1087,586],[1098,597],[1106,608],[1116,618],[1122,629],[1129,638],[1135,647],[1138,654],[1143,661],[1146,666],[1148,672],[1151,675],[1152,678],[1154,679],[1154,680],[1156,680],[1156,681],[1160,683],[1161,683],[1164,686],[1168,687],[1174,689],[1177,689],[1181,690],[1184,690],[1186,690],[1187,691]],"dx":111,"dy":281,"length":640.4051948977898,"timing":[0,5,12,19,26,33,40,47,54,61,68,75,82,88,95,102,109,116,123,130,137,144,151,158,165,172,179,186,193,200,206,213,220,227,234,241,248,255,262,269,276,283,290,297,304,311,318,325,331,339,348,353,360,368,373,380,387,394,401,408,415,422,429]},{"start":[944,159],"end":[1213,625],"points":[[944,159],[944,161],[940,164],[938,170],[934,175],[930,182],[924,190],[919,198],[912,206],[906,214],[897,224],[890,234],[883,243],[877,253],[871,260],[867,268],[864,274],[863,278],[863,284],[863,290],[863,295],[864,302],[872,310],[880,321],[892,331],[906,341],[927,353],[947,365],[972,380],[1002,396],[1032,414],[1059,433],[1087,452],[1108,468],[1128,485],[1147,501],[1161,515],[1172,529],[1180,539],[1187,551],[1192,560],[1196,568],[1199,576],[1199,582],[1201,589],[1203,593],[1203,598],[1204,601],[1204,603],[1205,606],[1206,609],[1207,611],[1208,612],[1208,613],[1208,614],[1208,616],[1210,616],[1210,618],[1210,619],[1210,620],[1210,621],[1212,623],[1212,625],[1213,625]],"dx":269,"dy":466,"length":664.1813941190946,"timing":[0,35,42,48,55,62,69,76,83,90,97,104,111,118,125,132,139,146,153,160,167,173,180,187,194,201,208,215,222,229,236,243,250,257,264,271,278,285,292,298,305,312,319,326,333,340,347,354,361,368,375,382,389,396,404,427,431,438,444,451,459,466,486,548]},{"start":[760,191],"end":[147,482],"points":[[759,193],[757,194],[756,198],[752,202],[748,210],[740,218],[730,227],[716,238],[704,250],[684,264],[663,280],[639,297],[613,312],[589,327],[568,342],[543,354],[517,368],[494,379],[469,390],[448,398],[427,404],[409,409],[389,415],[372,421],[356,426],[340,430],[325,434],[311,438],[297,442],[285,445],[274,447],[262,450],[250,452],[240,454],[230,455],[220,456],[212,458],[204,459],[199,459],[196,460],[192,461],[191,461],[189,462],[188,462],[187,462],[185,462],[184,463],[181,465],[177,467],[174,468],[170,470],[165,472],[163,474],[158,477],[156,478],[152,480],[150,480],[148,482],[147,482]],"dx":-613,"dy":291,"length":692.6438504541394,"timing":[0,3,10,17,24,31,38,45,51,59,65,72,79,86,93,100,107,114,121,128,135,142,149,156,163,170,177,183,190,197,204,211,218,225,232,239,246,253,260,267,274,281,288,298,316,322,330,337,343,350,357,364,371,378,385,392,399,406,413]},{"start":[741,293],"end":[1309,487],"points":[[740,293],[740,294],[740,296],[740,297],[740,298],[741,300],[747,303],[752,306],[763,310],[776,314],[793,318],[816,323],[844,331],[876,341],[908,350],[951,362],[1001,376],[1049,390],[1092,404],[1136,418],[1174,434],[1206,450],[1236,462],[1258,475],[1276,486],[1288,495],[1296,502],[1302,509],[1306,512],[1308,516],[1309,518],[1311,518],[1312,518],[1312,517],[1313,516],[1313,513],[1313,510],[1313,507],[1312,503],[1311,500],[1311,496],[1311,494],[1311,491],[1309,489],[1309,488],[1309,487]],"dx":568,"dy":194,"length":657.9861860329756,"timing":[0,17,25,32,38,45,52,59,65,72,79,86,93,100,107,114,121,128,135,142,149,156,163,170,177,184,190,197,204,211,218,295,306,311,316,323,330,337,343,350,357,364,371,378,385,392]},{"start":[650,274],"end":[1440,417],"points":[[652,274],[656,275],[659,276],[664,278],[672,279],[680,282],[690,283],[702,286],[714,288],[725,290],[737,291],[749,294],[760,294],[768,295],[780,296],[789,296],[796,298],[803,298],[809,298],[816,299],[823,300],[832,302],[840,303],[850,304],[862,306],[877,306],[892,308],[910,310],[933,312],[957,313],[982,315],[1011,318],[1049,320],[1081,323],[1117,329],[1154,334],[1188,339],[1223,346],[1254,354],[1280,362],[1305,369],[1324,374],[1347,381],[1363,387],[1377,391],[1390,396],[1400,399],[1408,402],[1415,404],[1419,406],[1423,407],[1425,408],[1427,409],[1428,410],[1432,411],[1432,413],[1434,413],[1436,414],[1437,414],[1437,415],[1438,415],[1439,415],[1439,416],[1440,416],[1440,417]],"dx":790,"dy":143,"length":809.6968444944342,"timing":[0,7,14,21,27,34,41,48,55,62,69,76,83,90,97,104,111,118,125,132,138,145,152,159,166,173,180,187,194,201,208,215,222,229,236,243,250,257,263,270,277,284,291,298,305,312,319,326,333,340,347,354,361,368,375,382,389,396,403,410,417,424,430,438,445]},{"start":[1197,625],"end":[269,653],"points":[[1195,625],[1193,625],[1192,624],[1189,623],[1185,620],[1182,618],[1178,614],[1170,610],[1163,606],[1151,600],[1140,593],[1124,585],[1106,575],[1085,564],[1057,551],[1022,536],[988,520],[960,510],[924,497],[894,486],[855,474],[816,466],[781,458],[748,454],[718,452],[695,452],[668,452],[645,454],[621,458],[599,466],[572,475],[546,486],[520,500],[492,514],[465,529],[436,545],[407,561],[384,574],[359,586],[336,598],[320,608],[305,617],[296,622],[286,627],[280,631],[277,634],[275,637],[275,639],[275,641],[275,642],[275,644],[275,646],[275,647],[275,648],[275,649],[275,650],[273,650],[273,651],[272,651],[271,651],[269,653]],"dx":-928,"dy":28,"length":1022.1002211186927,"timing":[0,7,22,30,37,43,50,57,64,71,78,85,92,99,106,112,119,126,133,140,147,154,161,168,175,182,189,196,203,210,217,224,230,238,244,251,258,265,272,279,286,293,300,307,314,321,328,335,342,349,356,378,400,405,412,418,425,432,439,461,468]},{"start":[535,650],"end":[744,284],"points":[[537,649],[539,648],[544,646],[548,643],[553,639],[559,637],[567,633],[574,627],[582,622],[592,617],[600,611],[610,605],[619,597],[628,590],[637,582],[646,574],[656,567],[664,558],[672,549],[682,538],[693,526],[702,514],[709,498],[717,483],[723,469],[727,454],[729,443],[731,430],[732,420],[732,410],[732,400],[732,391],[732,382],[731,373],[729,364],[729,357],[729,347],[729,342],[729,334],[729,330],[729,326],[731,322],[731,318],[732,315],[734,311],[735,309],[736,306],[736,302],[738,298],[738,297],[740,294],[740,291],[741,289],[742,287],[742,286],[744,286],[744,284]],"dx":209,"dy":-366,"length":456.68290566292274,"timing":[0,7,13,20,27,34,41,48,55,62,69,76,83,90,97,104,111,117,124,131,138,145,152,159,166,173,180,187,194,201,208,215,222,229,236,243,249,256,263,270,277,284,291,298,305,312,319,326,333,340,348,354,361,368,375,382,389]},{"start":[717,522],"end":[162,328],"points":[[718,523],[719,523],[720,523],[720,524],[722,524],[722,525],[723,525],[723,526],[724,526],[724,527],[725,527],[726,527],[728,527],[728,529],[724,529],[720,529],[711,527],[698,521],[678,512],[654,501],[627,486],[596,473],[568,462],[533,449],[494,434],[465,426],[436,416],[400,410],[371,403],[344,398],[313,393],[295,390],[270,386],[249,383],[229,381],[211,379],[197,376],[185,373],[175,370],[169,366],[165,362],[164,358],[162,355],[162,351],[162,346],[162,342],[162,339],[162,335],[162,334],[163,332],[163,331],[163,330],[163,328],[162,328]],"dx":-555,"dy":-194,"length":644.4750885081284,"timing":[0,7,13,22,29,38,44,63,69,78,100,106,111,118,204,208,215,222,229,236,243,250,257,263,270,277,284,291,298,305,312,319,326,333,340,347,354,361,368,374,381,388,395,402,409,416,423,430,437,444,451,458,483,506]},{"start":[1099,642],"end":[873,225],"points":[[1097,642],[1097,643],[1096,643],[1095,643],[1093,643],[1090,643],[1085,641],[1080,636],[1071,630],[1057,618],[1043,604],[1025,582],[1007,556],[978,519],[954,484],[928,450],[905,420],[887,394],[868,365],[853,338],[843,313],[839,292],[836,274],[836,259],[836,245],[836,234],[836,226],[839,218],[842,213],[844,209],[844,206],[846,205],[846,203],[848,202],[849,202],[850,202],[851,202],[852,203],[853,203],[855,203],[856,205],[859,206],[862,209],[864,212],[867,216],[868,218],[870,220],[872,222],[872,224],[872,225],[873,225]],"dx":-226,"dy":-417,"length":577.2160051090864,"timing":[0,97,160,167,174,181,188,194,201,208,215,222,229,236,243,250,257,264,271,278,285,292,298,305,312,319,326,333,340,347,354,361,369,381,421,428,431,437,445,452,458,465,472,479,486,493,500,507,514,523,546]},{"start":[873,225],"end":[1225,592],"points":[[872,226],[870,227],[868,227],[868,229],[864,230],[862,233],[860,236],[856,240],[853,244],[849,251],[845,259],[841,267],[837,282],[835,299],[834,318],[834,336],[834,358],[844,372],[857,382],[878,393],[906,402],[933,410],[969,421],[1004,431],[1032,444],[1064,455],[1089,466],[1111,478],[1130,489],[1146,500],[1160,510],[1172,520],[1181,530],[1190,542],[1196,552],[1202,561],[1207,570],[1211,575],[1214,581],[1218,585],[1220,589],[1222,590],[1224,592],[1225,592]],"dx":352,"dy":367,"length":616.5830409843453,"timing":[0,6,13,19,27,33,40,47,53,60,67,74,81,88,95,102,109,116,123,130,137,144,151,158,165,171,178,185,192,199,206,213,220,227,234,241,248,255,262,269,276,283,290,363]},{"start":[1276,238],"end":[462,302],"points":[[1275,238],[1271,238],[1265,239],[1260,242],[1252,245],[1240,250],[1226,255],[1210,265],[1192,274],[1172,283],[1144,297],[1114,310],[1081,322],[1048,334],[1009,348],[960,360],[908,371],[860,376],[816,378],[775,378],[742,378],[710,370],[687,362],[663,355],[640,348],[621,342],[602,337],[581,330],[563,324],[545,318],[532,314],[518,310],[506,308],[494,306],[483,303],[473,302],[464,302],[454,302],[447,302],[440,302],[435,300],[433,300],[432,300],[432,299],[433,299],[434,299],[435,299],[437,299],[439,299],[441,299],[444,299],[446,299],[448,299],[451,299],[453,300],[456,300],[458,301],[459,302],[460,302],[462,302]],"dx":-814,"dy":64,"length":912.0663242991717,"timing":[0,5,12,19,26,33,40,47,54,61,68,75,82,88,95,102,109,116,123,130,137,144,151,158,165,172,179,186,193,200,207,214,221,228,234,241,248,255,262,269,276,283,290,315,375,381,388,395,402,408,415,422,429,436,443,450,458,464,471,478]},{"start":[188,209],"end":[992,626],"points":[[189,209],[190,209],[195,209],[202,209],[212,210],[225,214],[244,220],[264,227],[292,236],[324,248],[359,262],[405,281],[452,302],[503,323],[547,345],[606,374],[649,398],[696,427],[742,454],[783,482],[820,506],[848,526],[872,546],[889,563],[900,577],[912,590],[920,604],[927,616],[931,625],[933,634],[935,639],[936,643],[936,650],[939,653],[940,657],[943,660],[944,662],[946,663],[946,664],[948,664],[950,662],[955,657],[959,652],[964,647],[968,642],[973,638],[979,634],[982,631],[985,629],[988,629],[990,626],[991,626],[992,626]],"dx":804,"dy":417,"length":972.653961938209,"timing":[0,2,9,16,22,29,36,43,50,57,64,71,78,85,92,99,106,113,120,126,133,140,147,154,161,168,175,182,189,196,203,210,217,224,231,238,245,252,259,307,315,322,328,335,342,349,356,363,370,377,384,391,398]},{"start":[893,534],"end":[195,331],"points":[[893,533],[888,533],[881,530],[875,527],[866,523],[855,519],[844,514],[832,509],[819,502],[803,495],[788,489],[776,482],[762,476],[748,470],[739,465],[729,458],[719,452],[707,443],[693,434],[675,426],[656,414],[632,405],[604,396],[578,387],[556,382],[528,378],[504,375],[480,374],[457,373],[437,373],[416,373],[396,373],[373,373],[355,373],[336,373],[317,373],[304,373],[289,373],[280,372],[272,370],[264,368],[260,367],[256,365],[253,363],[251,362],[248,361],[246,359],[244,358],[242,356],[240,354],[238,352],[235,350],[232,348],[229,345],[225,343],[222,341],[218,338],[214,337],[211,335],[208,335],[205,334],[204,333],[202,333],[199,331],[198,331],[196,331],[195,331]],"dx":-698,"dy":-203,"length":745.4480160385091,"timing":[0,7,13,20,27,34,41,48,55,62,69,76,83,90,97,104,111,118,125,131,138,145,152,159,166,173,180,187,194,201,208,215,222,229,236,243,250,256,263,270,278,284,291,298,305,312,319,326,333,340,347,354,361,367,374,382,389,396,402,409,416,423,430,437,444,451,458]},{"start":[418,503],"end":[1104,619],"points":[[419,503],[420,502],[431,495],[444,486],[460,478],[476,466],[492,454],[514,440],[532,429],[556,412],[576,400],[597,388],[616,376],[631,366],[644,358],[652,354],[657,350],[660,347],[662,346],[664,346],[665,346],[668,346],[674,346],[678,346],[688,348],[696,352],[707,358],[717,364],[733,372],[751,383],[770,397],[794,412],[820,431],[848,452],[875,471],[908,494],[935,515],[964,538],[989,556],[1012,571],[1030,582],[1048,593],[1064,602],[1076,610],[1084,612],[1088,615],[1092,617],[1093,617],[1093,618],[1095,618],[1097,618],[1099,618],[1100,618],[1101,618],[1103,619],[1104,619]],"dx":686,"dy":116,"length":815.9066939647835,"timing":[0,1,9,15,22,29,36,43,50,57,64,70,77,84,91,98,105,113,120,126,134,140,148,154,161,168,175,182,189,196,203,209,216,223,230,237,244,251,258,265,272,279,286,293,300,307,314,322,361,370,378,383,390,398,404,411]},{"start":[657,363],"end":[182,793],"points":[[657,364],[656,364],[653,366],[645,371],[635,377],[622,385],[605,398],[585,414],[561,438],[537,463],[511,494],[492,519],[465,555],[442,585],[417,617],[394,645],[373,666],[353,683],[333,697],[319,706],[304,715],[292,722],[282,729],[272,735],[262,741],[253,746],[246,751],[241,755],[238,758],[236,761],[234,764],[232,767],[230,769],[226,771],[221,774],[214,778],[208,782],[202,786],[196,791],[192,795],[188,799],[186,802],[184,804],[184,803],[184,802],[184,798],[183,796],[182,794],[182,793]],"dx":-475,"dy":430,"length":665.007420325716,"timing":[0,6,13,20,27,34,41,48,55,62,69,76,83,90,97,104,111,117,124,131,138,145,152,159,166,173,180,187,194,201,208,215,222,229,236,243,249,256,263,270,277,284,291,326,333,340,347,354,360]},{"start":[182,793],"end":[617,381],"points":[[182,792],[183,792],[186,790],[193,787],[204,781],[221,772],[239,761],[264,744],[291,722],[316,701],[342,677],[373,648],[398,621],[422,595],[443,568],[462,542],[479,515],[492,494],[505,473],[518,452],[527,436],[537,420],[545,405],[552,396],[557,390],[559,387],[561,385],[562,383],[563,383],[564,383],[564,382],[567,382],[570,381],[574,379],[577,378],[579,378],[580,378],[581,378],[581,379],[583,380],[585,382],[589,384],[593,384],[597,384],[601,384],[605,384],[608,383],[610,383],[612,382],[614,382],[616,381],[617,381]],"dx":435,"dy":-412,"length":627.2895689898427,"timing":[0,4,10,17,24,31,38,45,52,59,66,73,80,87,94,101,107,114,121,128,135,142,149,156,163,170,177,184,191,236,239,246,253,260,267,274,281,327,331,337,344,351,357,364,371,378,385,392,399,406,413,420]},{"start":[619,379],"end":[1527,409],"points":[[620,379],[621,380],[626,381],[636,382],[654,384],[671,384],[697,384],[730,383],[764,381],[806,376],[848,370],[896,361],[940,350],[981,339],[1028,325],[1070,311],[1110,297],[1150,284],[1180,272],[1212,257],[1231,246],[1251,232],[1264,218],[1273,207],[1277,198],[1280,189],[1280,180],[1279,172],[1276,166],[1272,159],[1267,153],[1261,147],[1256,141],[1251,137],[1246,132],[1242,128],[1239,124],[1236,121],[1234,119],[1233,118],[1233,119],[1234,121],[1237,131],[1245,147],[1256,167],[1268,189],[1281,212],[1295,236],[1309,258],[1325,282],[1339,302],[1355,321],[1372,340],[1391,359],[1406,372],[1428,389],[1448,402],[1467,414],[1484,424],[1499,433],[1511,440],[1521,446],[1527,448],[1530,450],[1532,450],[1532,449],[1531,443],[1530,439],[1529,438],[1529,433],[1528,427],[1527,422],[1526,416],[1526,412],[1526,410],[1526,409],[1527,409]],"dx":908,"dy":30,"length":1300.8478115496207,"timing":[0,2,9,16,23,30,37,44,50,57,64,71,78,85,92,99,106,113,120,127,134,141,148,155,162,169,176,182,189,196,203,210,217,224,231,238,245,252,259,266,290,293,300,307,314,321,328,335,342,349,356,363,370,377,384,391,398,405,412,419,425,432,439,446,453,536,554,561,564,571,578,585,592,599,606,613,654]},{"start":[1175,124],"end":[914,598],"points":[[1175,125],[1174,126],[1173,128],[1173,130],[1173,131],[1173,133],[1173,134],[1172,136],[1172,138],[1172,140],[1172,143],[1172,145],[1172,149],[1172,152],[1173,156],[1174,160],[1174,165],[1174,168],[1174,172],[1174,175],[1174,178],[1173,180],[1172,181],[1171,182],[1169,184],[1168,185],[1168,186],[1168,187],[1167,188],[1167,189],[1167,192],[1166,196],[1164,201],[1159,210],[1151,222],[1138,237],[1122,254],[1099,275],[1076,296],[1059,313],[1046,329],[1036,343],[1029,356],[1022,370],[1015,382],[1007,396],[999,411],[992,424],[984,439],[977,452],[969,465],[962,475],[956,482],[949,489],[944,494],[939,499],[935,503],[931,506],[928,509],[925,512],[922,515],[920,518],[919,520],[918,522],[918,524],[917,526],[916,527],[916,529],[916,532],[916,535],[916,538],[915,543],[914,548],[914,554],[914,561],[914,568],[914,576],[914,584],[914,590],[914,595],[914,597],[914,598]],"dx":-261,"dy":474,"length":565.4328961026449,"timing":[0,7,14,21,28,35,42,49,56,63,70,77,83,90,97,104,111,118,125,132,139,146,153,160,167,174,182,189,195,202,209,215,222,229,236,243,250,257,264,271,278,285,292,299,306,313,320,327,334,340,347,354,361,368,375,382,389,396,403,410,417,424,431,438,445,452,459,465,472,479,486,493,500,507,514,521,528,535,542,549,556,563]},{"start":[914,598],"end":[123,475],"points":[[914,597],[914,596],[913,596],[912,594],[909,591],[901,587],[888,583],[868,578],[839,574],[805,570],[763,567],[720,564],[677,562],[625,560],[579,558],[526,555],[475,551],[418,545],[367,540],[318,533],[274,525],[241,517],[203,506],[172,494],[143,482],[114,471],[90,462],[72,455],[54,448],[41,442],[32,438],[28,436],[28,435],[29,435],[30,435],[33,436],[34,437],[37,438],[40,441],[44,445],[49,450],[55,455],[62,461],[69,466],[77,470],[85,473],[93,475],[99,476],[105,477],[111,477],[114,477],[116,477],[117,476],[119,476],[119,475],[120,475],[121,475],[122,475],[123,475]],"dx":-791,"dy":-123,"length":1021.2199027779734,"timing":[0,6,9,16,23,30,37,44,51,57,64,71,78,85,92,99,106,113,120,127,134,141,148,155,162,169,176,182,189,196,203,210,217,251,260,267,273,280,287,294,301,308,314,321,328,335,342,349,356,363,370,377,384,391,398,405,412,423,432]},{"start":[1793,642],"end":[472,448],"points":[[1793,642],[1792,642],[1792,643],[1788,643],[1778,644],[1759,644],[1735,644],[1703,643],[1659,641],[1608,636],[1551,629],[1484,620],[1417,611],[1343,600],[1271,589],[1198,579],[1120,568],[1046,558],[979,549],[917,541],[861,535],[810,529],[771,527],[739,525],[714,524],[693,524],[680,523],[670,523],[664,523],[662,523],[662,522],[663,522],[666,522],[670,522],[674,523],[676,523],[677,524],[676,524],[675,524],[674,524],[670,522],[665,519],[658,514],[649,508],[639,502],[625,495],[610,488],[594,481],[576,473],[560,467],[540,460],[519,454],[503,449],[492,448],[485,448],[483,448],[482,448],[481,448],[480,448],[479,448],[478,448],[476,448],[474,448],[472,448]],"dx":-1321,"dy":-194,"length":1377.937073085146,"timing":[0,178,181,187,194,201,208,215,222,229,236,243,250,257,264,270,277,284,291,298,305,312,319,326,333,340,347,354,361,368,398,402,409,416,423,430,437,472,479,486,493,500,507,513,520,527,534,541,548,555,562,569,576,583,590,597,604,612,620,625,631,638,645,652]},{"start":[471,447],"end":[494,786],"points":[[471,447],[471,448],[473,449],[478,455],[487,464],[501,476],[516,490],[537,506],[557,523],[579,541],[595,556],[608,571],[617,586],[622,601],[624,614],[624,631],[624,648],[623,669],[621,690],[619,712],[616,736],[612,758],[607,781],[602,797],[597,811],[592,821],[586,828],[580,830],[573,832],[567,832],[559,832],[552,831],[546,828],[541,825],[537,822],[533,818],[529,815],[525,812],[522,809],[519,807],[516,805],[513,804],[511,802],[509,800],[507,799],[506,798],[504,798],[503,797],[502,796],[500,794],[499,793],[497,791],[495,789],[495,788],[495,787],[494,787],[494,786]],"dx":23,"dy":339,"length":562.8908852420375,"timing":[0,152,160,167,173,180,187,194,201,208,215,222,229,236,243,250,257,264,270,277,284,291,298,305,312,319,326,333,340,347,354,361,368,375,382,388,395,402,409,416,423,430,437,444,451,458,465,472,479,486,493,500,507,513,520,527,534]},{"start":[1654,540],"end":[647,284],"points":[[1654,540],[1652,540],[1650,541],[1648,541],[1644,542],[1639,543],[1633,545],[1625,546],[1614,549],[1601,551],[1588,554],[1573,557],[1562,559],[1549,562],[1538,564],[1529,565],[1522,566],[1516,567],[1513,568],[1511,568],[1510,568],[1508,568],[1506,568],[1503,568],[1499,568],[1493,568],[1485,567],[1473,566],[1458,565],[1440,562],[1417,559],[1396,554],[1369,547],[1333,536],[1296,524],[1253,509],[1204,492],[1154,474],[1096,454],[1036,435],[974,416],[910,398],[850,382],[798,369],[747,357],[699,348],[664,341],[635,337],[614,333],[599,331],[585,327],[576,324],[570,322],[567,321],[566,320],[567,320],[567,319],[569,318],[572,317],[576,316],[579,316],[581,315],[583,314],[585,314],[587,314],[590,313],[594,312],[599,310],[605,308],[611,306],[618,303],[625,300],[631,298],[636,294],[640,291],[643,288],[645,286],[646,284],[647,284]],"dx":-1007,"dy":-256,"length":1217.809262217579,"timing":[0,14,20,27,34,41,48,55,62,69,76,83,90,97,104,111,118,125,132,138,145,152,159,166,173,180,187,194,201,208,215,222,229,236,243,250,257,263,270,277,284,291,298,305,312,319,326,333,340,347,354,361,368,375,382,407,409,416,423,430,437,444,451,458,465,472,479,486,493,500,507,514,520,527,534,541,548,555,562]},{"start":[1417,588],"end":[1129,617],"points":[[1417,589],[1417,590],[1416,590],[1412,588],[1408,587],[1406,586],[1402,586],[1396,585],[1391,585],[1385,585],[1377,585],[1368,585],[1355,585],[1343,586],[1327,587],[1305,589],[1285,590],[1261,592],[1237,595],[1215,599],[1195,604],[1179,608],[1166,612],[1157,615],[1150,617],[1144,617],[1140,618],[1138,618],[1135,618],[1133,618],[1131,618],[1130,618],[1130,617],[1129,617]],"dx":-288,"dy":29,"length":294.3327044501401,"timing":[0,12,75,93,100,104,111,118,124,131,138,145,152,159,166,173,180,187,194,201,208,215,222,229,236,243,249,256,263,270,277,284,291,357]},{"start":[1002,175],"end":[124,344],"points":[[1001,175],[1000,176],[1000,177],[1000,178],[999,180],[998,182],[997,184],[995,187],[992,190],[989,195],[984,200],[978,207],[972,213],[965,219],[956,227],[946,237],[936,246],[925,256],[915,267],[905,278],[895,290],[884,300],[874,310],[860,321],[845,331],[825,344],[802,356],[774,369],[745,380],[716,390],[682,397],[653,401],[618,402],[576,403],[532,402],[491,398],[451,393],[407,388],[366,384],[328,381],[295,381],[262,380],[237,380],[214,379],[197,378],[183,377],[174,375],[170,374],[168,372],[167,371],[167,370],[167,366],[167,362],[167,358],[168,355],[169,352],[171,350],[172,349],[172,348],[171,348],[170,348],[165,350],[160,351],[155,351],[150,351],[146,351],[143,351],[141,351],[139,350],[138,350],[136,349],[134,348],[130,346],[127,345],[125,344],[124,344]],"dx":-878,"dy":169,"length":992.2965587372796,"timing":[0,21,28,35,42,49,56,63,69,76,83,90,97,104,111,118,125,132,139,146,153,160,167,174,181,188,195,201,208,215,222,229,236,243,250,257,264,271,278,285,292,299,306,313,319,326,333,340,347,354,361,368,375,382,389,396,403,410,417,460,465,472,479,486,493,500,507,514,521,528,535,542,549,556,563,569]},{"start":[325,614],"end":[1001,123],"points":[[326,614],[327,614],[328,614],[329,613],[330,612],[331,612],[332,611],[333,611],[333,610],[334,610],[335,610],[337,610],[343,610],[354,610],[368,609],[384,607],[406,605],[430,600],[454,594],[487,583],[520,570],[549,557],[585,540],[615,524],[644,506],[672,488],[697,467],[718,448],[741,424],[764,397],[786,370],[804,346],[821,322],[835,301],[846,283],[853,269],[859,258],[864,248],[867,240],[869,235],[870,230],[871,226],[873,223],[874,220],[875,217],[877,214],[878,212],[880,209],[882,207],[884,205],[886,204],[887,202],[889,202],[891,201],[893,201],[896,201],[900,200],[904,200],[909,199],[914,197],[920,195],[926,192],[931,189],[937,185],[944,182],[950,178],[958,173],[965,168],[972,163],[980,157],[986,151],[992,144],[996,138],[998,133],[1000,128],[1001,125],[1001,123]],"dx":676,"dy":-491,"length":883.5166833341277,"timing":[0,7,14,21,28,35,42,49,56,88,93,97,104,111,118,125,132,139,146,153,160,167,174,181,188,194,201,208,215,222,229,236,243,250,257,264,271,278,285,292,299,306,313,319,326,333,340,347,354,361,368,375,382,389,396,403,410,417,424,431,438,445,451,458,465,472,479,486,493,500,507,514,521,528,535,542,549]},{"start":[950,422],"end":[1270,722],"points":[[950,423],[950,425],[949,427],[948,429],[947,430],[947,432],[946,433],[945,435],[944,436],[944,438],[943,439],[943,440],[942,440],[942,441],[941,441],[941,442],[941,443],[940,443],[940,444],[939,444],[938,445],[938,446],[938,449],[942,455],[947,461],[955,472],[965,482],[981,498],[1000,514],[1021,532],[1045,552],[1072,574],[1094,590],[1117,609],[1136,627],[1152,643],[1164,657],[1175,672],[1182,685],[1190,700],[1197,712],[1202,721],[1207,729],[1210,735],[1212,738],[1213,740],[1214,740],[1215,741],[1216,741],[1217,741],[1219,740],[1221,739],[1224,739],[1227,738],[1231,738],[1234,737],[1238,736],[1243,736],[1248,735],[1254,733],[1258,731],[1262,729],[1264,727],[1267,725],[1268,724],[1270,723],[1270,722]],"dx":320,"dy":300,"length":500.3376266686759,"timing":[0,7,14,21,28,35,42,48,55,62,69,79,83,90,97,104,111,118,125,132,139,166,182,189,194,201,208,215,222,229,236,243,250,257,264,271,278,285,292,298,305,312,319,326,333,340,347,354,410,416,423,430,437,444,451,458,465,472,479,486,493,500,507,514,521,528,535]},{"start":[1270,723],"end":[1783,334],"points":[[1270,724],[1270,725],[1270,727],[1270,728],[1270,729],[1270,730],[1270,731],[1271,731],[1281,724],[1293,716],[1299,713],[1314,705],[1334,692],[1358,678],[1381,664],[1410,646],[1436,630],[1461,611],[1485,592],[1508,573],[1532,552],[1551,536],[1573,518],[1593,501],[1611,486],[1629,471],[1646,457],[1659,446],[1677,433],[1693,422],[1708,413],[1723,406],[1737,398],[1748,393],[1757,388],[1763,384],[1767,381],[1771,379],[1773,377],[1776,376],[1778,374],[1780,372],[1782,370],[1785,367],[1786,364],[1788,362],[1789,359],[1790,357],[1790,356],[1790,355],[1790,354],[1789,353],[1788,351],[1786,348],[1785,344],[1784,341],[1784,339],[1784,338],[1784,336],[1783,335],[1783,334]],"dx":513,"dy":-389,"length":676.6392310188529,"timing":[0,7,14,21,28,34,41,186,204,211,215,222,229,236,243,250,257,264,271,278,285,291,298,305,312,319,326,333,340,347,354,361,368,375,382,389,396,403,410,416,423,430,437,444,451,458,465,472,479,573,578,583,590,597,604,611,618,625,632,639,642]},{"start":[1779,307],"end":[1228,837],"points":[[1778,307],[1778,308],[1777,309],[1774,311],[1770,315],[1764,320],[1758,326],[1749,334],[1739,343],[1727,353],[1712,364],[1696,375],[1679,387],[1662,399],[1643,411],[1625,421],[1612,427],[1597,434],[1582,441],[1571,446],[1562,449],[1555,451],[1549,453],[1541,456],[1532,460],[1522,466],[1507,474],[1493,484],[1474,498],[1457,512],[1436,531],[1414,552],[1393,570],[1373,589],[1351,608],[1325,630],[1300,652],[1275,675],[1253,696],[1233,717],[1214,737],[1198,754],[1184,770],[1173,782],[1164,793],[1158,801],[1156,807],[1154,811],[1154,814],[1154,817],[1155,818],[1155,819],[1157,820],[1157,821],[1159,822],[1160,822],[1161,823],[1162,824],[1163,825],[1164,826],[1165,827],[1166,828],[1167,829],[1168,829],[1169,829],[1170,830],[1171,830],[1175,831],[1180,831],[1185,831],[1190,831],[1196,831],[1202,831],[1206,831],[1211,832],[1216,832],[1220,834],[1223,835],[1226,836],[1227,837],[1228,837]],"dx":-551,"dy":530,"length":899.1724360167314,"timing":[0,7,14,21,28,35,42,49,56,63,69,76,83,90,97,104,111,118,125,132,139,146,153,160,167,174,181,188,194,201,208,215,222,229,236,243,250,257,264,271,278,285,292,299,306,313,319,326,333,340,347,354,361,368,375,382,389,396,403,410,417,424,431,438,445,451,458,465,472,479,486,493,500,507,514,521,528,535,542,549,551]},{"start":[1229,837],"end":[1671,853],"points":[[1229,837],[1228,837],[1227,837],[1227,838],[1226,838],[1225,838],[1224,838],[1222,838],[1219,836],[1215,833],[1211,831],[1206,827],[1201,823],[1196,819],[1190,814],[1184,809],[1178,804],[1173,799],[1170,795],[1168,790],[1168,784],[1170,777],[1175,770],[1184,764],[1197,760],[1211,759],[1231,759],[1255,763],[1275,769],[1302,776],[1333,784],[1365,794],[1396,804],[1426,814],[1453,824],[1475,832],[1498,840],[1520,849],[1537,857],[1554,864],[1566,870],[1579,877],[1592,885],[1603,891],[1613,896],[1622,900],[1629,902],[1635,903],[1638,903],[1640,903],[1641,903],[1642,903],[1642,902],[1642,901],[1644,899],[1644,897],[1646,894],[1647,891],[1649,887],[1651,883],[1653,879],[1655,874],[1657,870],[1659,866],[1660,862],[1662,860],[1664,858],[1666,857],[1668,855],[1669,854],[1670,853],[1671,853]],"dx":442,"dy":16,"length":659.2308222138977,"timing":[0,11,20,44,49,70,90,97,104,111,118,125,132,139,146,153,160,167,174,181,188,195,202,208,215,223,229,236,243,250,257,264,271,278,285,292,299,306,313,320,327,333,340,347,354,361,368,375,382,389,398,409,410,417,424,431,438,445,452,458,465,472,479,486,493,500,507,514,521,528,535,542]},{"start":[1671,852],"end":[1413,683],"points":[[1670,852],[1669,852],[1664,852],[1658,852],[1648,850],[1637,848],[1622,845],[1605,841],[1586,836],[1564,829],[1536,820],[1507,812],[1479,804],[1444,795],[1421,789],[1390,781],[1359,772],[1330,764],[1304,756],[1278,748],[1255,740],[1236,735],[1220,730],[1209,726],[1202,723],[1201,721],[1201,720],[1201,717],[1202,714],[1204,710],[1207,706],[1210,704],[1215,703],[1220,702],[1227,702],[1235,702],[1244,702],[1254,704],[1265,706],[1279,708],[1293,710],[1306,712],[1322,712],[1338,712],[1353,712],[1366,711],[1380,709],[1390,707],[1399,703],[1407,700],[1412,696],[1415,694],[1417,691],[1418,689],[1418,688],[1419,687],[1418,687],[1417,687],[1417,686],[1416,685],[1415,685],[1414,684],[1413,683]],"dx":-258,"dy":-169,"length":735.0312586710886,"timing":[0,7,14,21,28,35,42,49,56,62,69,76,83,90,97,104,111,118,125,132,139,146,153,160,167,174,181,187,194,201,208,215,222,229,236,243,250,257,264,271,278,285,292,299,306,312,319,326,333,340,347,354,361,368,375,382,461,467,472,479,486,493,500]},{"start":[1414,682],"end":[947,633],"points":[[1414,682],[1413,682],[1413,683],[1412,683],[1410,684],[1408,684],[1406,685],[1403,686],[1398,686],[1390,688],[1383,688],[1374,688],[1364,688],[1355,688],[1347,688],[1338,687],[1330,686],[1323,686],[1316,684],[1312,683],[1308,681],[1306,681],[1304,680],[1303,679],[1301,678],[1299,677],[1294,676],[1289,674],[1281,672],[1270,670],[1255,668],[1240,665],[1224,663],[1203,660],[1180,657],[1153,653],[1130,650],[1104,647],[1079,645],[1056,643],[1032,642],[1016,641],[1000,641],[989,640],[980,640],[973,639],[969,638],[966,638],[965,637],[964,637],[963,637],[963,636],[961,636],[959,635],[956,634],[953,634],[950,633],[948,633],[947,633]],"dx":-467,"dy":-49,"length":475.96422272884377,"timing":[0,7,14,21,28,35,42,49,56,62,69,76,83,90,97,104,111,118,125,132,139,146,153,160,167,174,180,187,194,201,208,215,222,229,236,243,250,257,264,271,278,285,292,299,306,312,319,326,333,340,364,372,389,396,403,410,417,424,431]},{"start":[1703,431],"end":[949,171],"points":[[1702,431],[1702,432],[1701,432],[1700,433],[1699,433],[1698,433],[1698,434],[1696,434],[1689,436],[1675,437],[1657,438],[1637,438],[1607,438],[1582,438],[1551,438],[1512,437],[1474,435],[1426,430],[1381,425],[1330,417],[1279,406],[1228,393],[1179,377],[1136,361],[1096,344],[1062,328],[1036,315],[1012,301],[993,287],[980,275],[968,262],[959,251],[954,243],[951,233],[949,226],[948,218],[947,211],[947,204],[947,197],[947,191],[948,186],[948,181],[949,177],[949,175],[949,173],[949,172],[949,171]],"dx":-754,"dy":-260,"length":871.813360041245,"timing":[0,6,13,20,27,81,86,90,96,103,110,117,124,131,138,145,152,159,166,173,180,187,194,201,208,215,221,228,235,242,249,256,263,270,277,284,291,298,305,312,319,326,333,340,346,353,360]},{"start":[1192,271],"end":[639,398],"points":[[1192,271],[1191,272],[1189,275],[1187,280],[1184,285],[1182,291],[1180,298],[1179,306],[1178,316],[1178,325],[1178,335],[1178,345],[1179,353],[1180,361],[1182,368],[1184,374],[1187,377],[1190,380],[1193,382],[1196,384],[1198,385],[1200,386],[1200,387],[1199,387],[1196,389],[1190,391],[1180,396],[1165,401],[1145,408],[1122,413],[1095,419],[1065,424],[1031,430],[998,435],[956,439],[917,441],[883,441],[845,441],[816,439],[787,436],[765,432],[742,425],[726,419],[712,412],[700,405],[691,399],[684,393],[677,388],[673,382],[670,378],[667,373],[666,369],[665,365],[664,363],[664,362],[663,362],[663,363],[661,365],[658,368],[655,371],[652,374],[650,376],[648,378],[647,381],[645,384],[644,387],[642,391],[640,395],[639,397],[639,398]],"dx":-553,"dy":127,"length":744.4601603276346,"timing":[0,7,14,21,28,35,42,49,56,63,70,76,83,90,97,104,111,118,125,132,139,146,177,182,188,194,201,208,215,222,229,236,243,250,257,264,271,278,285,292,299,306,313,320,326,333,340,347,354,361,368,375,382,389,398,425,431,438,445,451,458,465,472,479,486,493,500,507,514,521]},{"start":[639,398],"end":[366,205],"points":[[640,398],[643,398],[648,398],[653,398],[660,398],[668,398],[674,396],[676,393],[675,387],[666,377],[650,364],[627,350],[598,335],[561,319],[521,304],[481,290],[435,276],[389,263],[339,249],[298,239],[260,229],[232,221],[212,215],[195,210],[187,208],[185,207],[185,206],[186,205],[191,205],[198,204],[207,203],[222,203],[236,203],[250,203],[266,204],[280,205],[292,205],[304,205],[314,205],[323,205],[332,205],[339,205],[345,205],[351,205],[356,205],[360,205],[363,205],[365,205],[366,205]],"dx":-273,"dy":-193,"length":753.1825960680382,"timing":[0,89,96,102,109,116,123,130,137,144,151,158,165,172,179,186,193,200,207,214,220,227,234,241,248,255,263,283,290,297,304,311,318,325,332,339,345,352,359,366,373,380,387,394,401,408,415,422,429]},{"start":[366,205],"end":[1096,480],"points":[[366,206],[366,207],[365,207],[365,208],[371,214],[381,224],[392,234],[410,248],[435,263],[464,279],[495,292],[534,306],[571,318],[616,331],[664,344],[715,357],[765,370],[825,387],[880,403],[938,421],[986,438],[1034,455],[1073,469],[1104,482],[1135,494],[1154,501],[1166,504],[1173,507],[1175,508],[1174,508],[1174,507],[1171,506],[1165,504],[1158,501],[1149,497],[1139,493],[1129,489],[1117,486],[1109,483],[1102,481],[1098,481],[1097,480],[1096,480]],"dx":730,"dy":275,"length":958.4616687209183,"timing":[0,6,111,181,190,197,203,210,217,224,231,238,245,252,259,266,273,280,287,294,301,307,314,321,328,335,342,349,356,388,391,398,405,412,419,426,432,439,446,453,460,467,474]},{"start":[1096,480],"end":[194,693],"points":[[1097,480],[1098,480],[1099,480],[1098,480],[1090,482],[1076,487],[1056,493],[1023,501],[986,511],[935,525],[880,540],[821,555],[761,570],[694,586],[627,600],[553,616],[487,632],[428,647],[370,662],[321,674],[282,683],[247,689],[222,691],[202,692],[189,692],[181,692],[175,689],[173,688],[173,686],[174,685],[176,684],[179,681],[184,679],[189,676],[193,674],[196,673],[197,672],[197,673],[196,676],[195,680],[195,684],[195,688],[194,691],[194,693]],"dx":-902,"dy":213,"length":1006.2711260043953,"timing":[0,60,68,98,105,112,119,126,133,140,147,154,161,168,175,182,189,196,202,209,216,223,230,237,244,251,258,265,272,279,286,293,300,307,314,321,327,411,418,425,432,439,446,452]},{"start":[1530,265],"end":[650,177],"points":[[1530,266],[1530,267],[1529,267],[1529,268],[1529,269],[1528,270],[1528,271],[1527,271],[1525,273],[1523,275],[1521,277],[1520,279],[1518,281],[1516,282],[1515,283],[1513,285],[1510,287],[1504,291],[1493,298],[1476,308],[1455,321],[1431,336],[1403,354],[1377,373],[1351,394],[1324,417],[1306,435],[1291,449],[1284,458],[1282,462],[1281,464],[1281,465],[1280,463],[1280,458],[1278,451],[1276,443],[1272,432],[1266,421],[1257,409],[1243,394],[1224,378],[1200,361],[1175,344],[1141,324],[1103,304],[1072,289],[1030,269],[984,250],[939,231],[899,215],[863,200],[831,187],[805,176],[782,166],[766,157],[752,149],[743,142],[736,138],[732,135],[729,132],[727,130],[725,128],[724,128],[723,130],[722,134],[720,138],[717,143],[715,147],[712,151],[709,154],[706,157],[703,160],[698,163],[693,166],[686,169],[678,172],[670,174],[662,176],[656,177],[653,177],[651,177],[650,177]],"dx":-880,"dy":-88,"length":1087.480447411262,"timing":[0,20,23,30,37,96,101,106,113,120,127,134,141,148,155,162,169,176,183,190,197,204,211,218,224,231,238,245,252,259,266,273,301,308,315,322,329,336,343,349,356,363,370,377,384,391,398,405,412,419,426,433,440,447,454,461,468,475,481,488,495,502,544,551,558,565,572,579,586,593,599,606,613,620,627,634,641,648,655,662,669,676]},{"start":[771,114],"end":[1047,396],"points":[[771,114],[769,115],[768,116],[768,117],[768,118],[768,120],[768,122],[768,125],[769,128],[770,131],[771,134],[772,138],[773,141],[774,144],[775,146],[775,148],[776,150],[776,151],[777,154],[779,160],[781,169],[786,181],[791,194],[798,208],[805,221],[816,237],[830,254],[846,272],[860,286],[876,300],[894,316],[909,325],[926,335],[943,343],[959,349],[975,355],[991,362],[1004,367],[1015,372],[1026,377],[1033,382],[1039,386],[1043,390],[1045,393],[1047,394],[1047,396]],"dx":276,"dy":282,"length":421.82471779595164,"timing":[0,21,28,35,42,49,55,62,69,76,83,90,97,104,111,118,125,175,180,187,194,201,208,215,222,229,236,243,250,257,264,271,278,285,292,299,306,312,319,326,333,340,347,354,361,368]},{"start":[549,610],"end":[1624,466],"points":[[549,610],[549,611],[550,611],[553,611],[555,611],[557,611],[560,609],[564,607],[568,605],[573,601],[578,598],[583,596],[586,593],[589,592],[592,591],[596,590],[600,590],[606,590],[614,593],[624,596],[641,601],[660,605],[686,608],[718,611],[756,613],[795,613],[843,609],[886,605],[937,599],[985,593],[1030,587],[1074,579],[1124,568],[1170,556],[1216,545],[1266,532],[1319,520],[1363,511],[1413,502],[1452,497],[1495,491],[1528,486],[1555,481],[1576,476],[1591,473],[1602,470],[1607,468],[1610,466],[1611,466],[1612,466],[1613,466],[1614,467],[1615,467],[1617,468],[1618,468],[1620,468],[1621,468],[1623,467],[1624,467],[1624,466]],"dx":1075,"dy":-144,"length":1101.027465194967,"timing":[0,21,55,73,81,84,91,97,104,111,118,125,132,139,146,153,160,167,174,181,188,195,202,209,216,222,229,236,243,250,257,264,271,278,285,292,299,306,313,320,327,334,341,347,354,361,368,375,382,481,486,493,500,507,514,521,528,535,542,549]},{"start":[1624,466],"end":[1673,205],"points":[[1623,466],[1622,466],[1621,466],[1620,466],[1619,466],[1618,466],[1616,465],[1613,465],[1608,463],[1601,460],[1594,455],[1588,449],[1585,442],[1583,434],[1583,423],[1584,411],[1588,397],[1594,382],[1600,367],[1606,352],[1611,336],[1616,320],[1621,302],[1624,286],[1626,270],[1628,251],[1629,236],[1630,221],[1632,211],[1634,202],[1636,196],[1639,193],[1641,191],[1643,191],[1645,190],[1648,190],[1650,190],[1653,191],[1656,193],[1659,194],[1662,195],[1664,196],[1666,197],[1668,197],[1669,198],[1670,198],[1670,199],[1670,200],[1671,200],[1672,202],[1673,204],[1673,205]],"dx":49,"dy":-261,"length":348.5375917776996,"timing":[0,8,18,34,41,48,54,61,68,75,82,89,96,103,110,117,124,131,138,145,152,159,166,173,180,186,193,200,207,214,221,228,235,242,249,256,263,270,277,284,291,298,305,311,318,325,332,362,367,374,381,388]},{"start":[682,707],"end":[1744,229],"points":[[683,707],[683,706],[685,705],[688,704],[690,702],[693,700],[695,699],[698,697],[701,695],[706,692],[711,689],[720,685],[733,678],[749,671],[770,663],[797,652],[829,638],[863,622],[902,604],[941,586],[979,568],[1022,547],[1064,526],[1104,506],[1149,481],[1195,457],[1241,433],[1296,405],[1335,384],[1388,358],[1437,334],[1481,314],[1524,295],[1560,279],[1595,264],[1627,252],[1655,242],[1679,233],[1699,226],[1719,219],[1736,212],[1750,207],[1762,202],[1771,197],[1779,193],[1785,189],[1789,186],[1793,184],[1796,183],[1799,181],[1801,180],[1803,180],[1804,179],[1804,180],[1804,181],[1803,183],[1802,184],[1801,187],[1799,190],[1796,193],[1794,197],[1789,201],[1783,206],[1777,211],[1769,216],[1762,220],[1755,224],[1749,227],[1746,228],[1745,229],[1744,229]],"dx":1062,"dy":-478,"length":1322.8214205941106,"timing":[0,5,12,19,25,32,39,46,53,60,67,74,81,88,95,102,109,116,123,130,137,144,150,157,164,171,178,185,192,199,206,213,220,227,234,241,248,255,262,269,275,282,289,296,303,310,317,324,331,338,345,352,359,425,428,435,442,449,456,463,470,477,484,491,498,505,512,519,525,532,539]},{"start":[1744,229],"end":[79,332],"points":[[1744,230],[1743,230],[1741,232],[1737,234],[1733,236],[1728,240],[1723,243],[1717,248],[1711,253],[1706,256],[1701,260],[1698,262],[1695,264],[1692,266],[1688,269],[1682,273],[1672,279],[1662,284],[1645,292],[1625,301],[1602,312],[1575,324],[1547,336],[1511,351],[1470,365],[1427,378],[1379,390],[1318,399],[1255,405],[1187,407],[1115,408],[1041,407],[957,403],[873,397],[788,390],[711,382],[626,374],[546,369],[468,368],[395,368],[333,370],[277,373],[234,377],[192,380],[154,382],[122,384],[98,384],[81,384],[67,384],[56,383],[50,382],[47,381],[47,380],[48,380],[48,379],[51,378],[55,377],[58,376],[60,375],[60,374],[61,374],[61,373],[61,372],[61,371],[61,369],[61,367],[61,365],[62,362],[63,359],[65,356],[68,352],[71,348],[75,344],[77,340],[78,337],[79,335],[79,333],[79,332]],"dx":-1665,"dy":103,"length":1802.169807374014,"timing":[0,5,12,19,26,33,40,47,54,61,68,74,81,88,95,102,109,116,123,130,137,144,151,158,165,172,179,186,193,199,206,213,220,227,234,241,248,255,262,269,276,283,290,297,304,311,318,325,331,338,345,352,362,371,373,380,387,394,401,408,415,441,446,450,456,463,470,477,484,491,498,505,512,519,526,533,540,547]},{"start":[1768,511],"end":[1069,419],"points":[[1767,511],[1765,511],[1753,511],[1734,511],[1706,510],[1676,510],[1638,509],[1590,509],[1544,507],[1492,506],[1439,504],[1381,503],[1328,502],[1277,500],[1230,498],[1193,497],[1164,496],[1135,495],[1110,493],[1090,490],[1076,487],[1063,484],[1056,481],[1053,478],[1051,476],[1051,474],[1051,471],[1052,467],[1053,463],[1055,459],[1057,456],[1058,452],[1058,450],[1058,448],[1058,446],[1059,444],[1059,442],[1059,440],[1059,438],[1059,435],[1059,432],[1059,430],[1059,428],[1059,427],[1060,426],[1061,425],[1062,425],[1062,424],[1064,424],[1066,422],[1067,422],[1068,421],[1069,421],[1069,420],[1069,419]],"dx":-699,"dy":-92,"length":785.673659787827,"timing":[0,3,10,17,24,31,38,45,52,58,65,72,79,86,93,100,107,114,121,128,135,142,149,156,163,170,177,183,190,197,204,211,218,225,232,239,246,253,260,267,274,281,288,295,303,313,318,322,329,336,343,350,357,364,394]},{"start":[1070,419],"end":[1835,260],"points":[[1069,419],[1066,419],[1064,419],[1063,419],[1061,419],[1059,419],[1056,419],[1054,419],[1053,419],[1052,419],[1054,419],[1062,419],[1075,417],[1094,414],[1120,409],[1145,405],[1177,400],[1211,394],[1244,388],[1282,380],[1311,374],[1352,366],[1395,357],[1439,348],[1480,339],[1520,330],[1562,321],[1598,314],[1631,308],[1665,303],[1696,299],[1721,296],[1748,294],[1768,293],[1785,293],[1799,292],[1809,292],[1817,292],[1822,292],[1824,292],[1826,291],[1829,291],[1832,291],[1837,291],[1842,291],[1848,291],[1853,291],[1858,291],[1861,290],[1864,289],[1865,289],[1865,288],[1865,287],[1865,285],[1865,283],[1863,280],[1861,277],[1860,275],[1858,273],[1856,270],[1853,268],[1850,267],[1848,265],[1845,264],[1843,263],[1840,262],[1838,261],[1836,260],[1835,260]],"dx":765,"dy":-159,"length":887.8528602098642,"timing":[0,18,25,29,36,43,50,57,64,71,92,99,106,113,120,126,133,140,147,154,161,168,175,182,189,196,203,210,217,224,231,238,244,251,258,265,272,279,286,293,300,307,314,321,328,335,342,349,356,363,369,382,397,404,411,418,425,432,439,446,453,460,467,474,481,488,494,501,508]},{"start":[1487,397],"end":[697,841],"points":[[1486,397],[1486,398],[1480,400],[1471,405],[1456,412],[1437,419],[1414,427],[1388,437],[1359,448],[1326,460],[1294,474],[1259,488],[1223,505],[1185,524],[1151,544],[1116,565],[1082,587],[1053,607],[1024,627],[992,649],[964,669],[932,691],[905,712],[877,731],[850,749],[823,766],[799,780],[782,791],[764,799],[748,806],[735,811],[725,814],[714,816],[701,819],[691,821],[682,823],[671,825],[663,826],[654,829],[646,831],[640,834],[635,836],[633,838],[631,840],[631,841],[630,843],[630,844],[630,846],[630,848],[631,850],[631,851],[631,853],[632,855],[632,856],[633,857],[634,857],[635,857],[636,857],[637,857],[641,857],[645,856],[650,855],[657,853],[665,851],[672,849],[679,847],[685,845],[690,843],[693,842],[695,841],[697,841]],"dx":-790,"dy":444,"length":1056.1406279396358,"timing":[0,4,11,18,25,32,39,46,53,60,66,73,80,87,94,101,108,115,122,129,136,143,150,157,164,171,178,185,191,198,205,212,219,226,233,240,247,254,261,268,275,282,289,296,305,323,330,337,344,351,358,365,372,379,386,399,403,408,414,421,428,435,442,448,455,462,469,476,483,490,497]},{"start":[697,841],"end":[313,501],"points":[[697,842],[696,842],[696,843],[695,844],[695,843],[695,842],[695,841],[696,836],[699,831],[702,824],[706,816],[711,807],[716,797],[720,789],[725,779],[731,770],[736,762],[742,755],[748,745],[755,733],[761,722],[764,713],[765,703],[763,694],[757,685],[746,677],[732,670],[714,664],[696,660],[676,656],[653,652],[632,649],[609,644],[582,639],[553,632],[527,625],[500,617],[470,609],[446,601],[422,595],[403,589],[388,584],[373,579],[364,576],[356,570],[351,566],[348,563],[347,559],[346,556],[345,554],[345,551],[345,547],[346,543],[347,539],[350,535],[352,531],[354,526],[356,522],[357,518],[357,515],[357,513],[357,511],[357,510],[357,509],[356,509],[355,508],[353,507],[352,506],[349,506],[346,505],[342,505],[337,505],[332,504],[328,503],[325,503],[321,502],[318,501],[316,501],[314,501],[313,501]],"dx":-384,"dy":-340,"length":715.8885641038705,"timing":[0,6,13,20,67,71,75,82,89,96,103,110,117,124,131,138,145,152,159,166,173,180,187,194,201,207,214,221,228,235,242,249,256,263,270,277,284,291,298,305,312,319,326,333,339,346,353,360,367,374,381,388,395,402,409,416,423,430,437,444,450,457,464,472,478,489,506,513,520,527,534,541,548,555,562,569,575,582,589,596]},{"start":[1798,364],"end":[258,573],"points":[[1798,366],[1797,368],[1796,371],[1794,374],[1790,378],[1783,382],[1776,386],[1765,390],[1753,394],[1741,398],[1724,403],[1708,408],[1692,413],[1670,419],[1650,425],[1627,430],[1604,436],[1584,441],[1564,445],[1548,450],[1532,453],[1521,456],[1511,458],[1502,460],[1493,461],[1483,462],[1471,463],[1455,464],[1431,464],[1402,465],[1368,466],[1334,467],[1291,468],[1242,470],[1197,473],[1142,481],[1088,489],[1031,499],[979,508],[925,518],[868,529],[809,539],[748,549],[687,558],[625,568],[564,577],[507,584],[452,592],[406,598],[362,604],[330,607],[305,608],[287,608],[272,608],[260,606],[251,605],[243,604],[237,604],[233,603],[232,602],[231,602],[232,601],[234,600],[237,598],[240,597],[242,595],[244,594],[245,593],[245,592],[246,592],[246,591],[247,590],[249,588],[252,586],[254,583],[256,580],[258,577],[258,575],[258,573]],"dx":-1540,"dy":209,"length":1640.1808630616263,"timing":[0,7,14,21,28,34,41,48,55,62,69,76,83,90,97,104,111,118,125,132,139,146,153,159,166,173,180,187,194,201,208,215,222,229,236,243,250,257,264,271,278,284,291,298,305,312,319,326,333,340,347,354,361,368,375,382,389,396,402,409,416,437,444,451,458,465,472,479,486,493,500,507,514,521,527,534,541,548,555]},{"start":[1393,745],"end":[1157,466],"points":[[1392,745],[1391,745],[1389,744],[1384,741],[1376,738],[1367,734],[1358,731],[1346,728],[1334,724],[1320,720],[1306,716],[1291,712],[1274,707],[1259,704],[1241,700],[1224,696],[1208,692],[1193,688],[1182,683],[1173,678],[1167,671],[1164,663],[1162,654],[1162,641],[1162,629],[1163,612],[1164,598],[1166,584],[1167,570],[1168,557],[1168,544],[1168,534],[1168,524],[1168,515],[1168,508],[1168,501],[1168,495],[1166,490],[1165,485],[1163,481],[1162,478],[1161,476],[1161,475],[1161,474],[1160,474],[1160,473],[1160,472],[1159,471],[1158,469],[1158,468],[1157,466]],"dx":-236,"dy":-279,"length":448.43084386876126,"timing":[0,6,12,19,26,33,40,47,53,60,67,74,81,88,95,102,109,116,123,130,137,144,151,158,165,171,178,185,192,199,206,213,220,227,234,241,248,255,262,269,276,283,290,296,392,396,401,408,415,421,428]},{"start":[1157,466],"end":[1339,675],"points":[[1156,466],[1156,467],[1155,468],[1153,469],[1151,471],[1149,473],[1148,475],[1146,476],[1146,477],[1145,477],[1145,478],[1145,479],[1145,480],[1146,484],[1150,490],[1156,498],[1165,509],[1174,520],[1184,530],[1196,543],[1206,555],[1217,567],[1229,580],[1239,593],[1249,606],[1256,617],[1264,627],[1270,634],[1276,642],[1281,649],[1285,654],[1289,658],[1293,662],[1295,664],[1296,666],[1297,666],[1298,666],[1299,666],[1300,666],[1303,668],[1308,669],[1313,670],[1319,672],[1325,673],[1330,674],[1334,674],[1337,675],[1339,675]],"dx":182,"dy":209,"length":304.6863834345958,"timing":[0,9,13,20,27,34,41,48,55,62,88,94,96,103,110,117,124,131,138,145,152,159,166,173,180,187,194,201,207,214,221,228,235,242,249,325,365,372,375,381,388,395,402,409,416,423,430,437]},{"start":[894,734],"end":[1412,308],"points":[[893,734],[892,734],[891,733],[890,732],[889,730],[888,727],[887,725],[887,723],[886,721],[885,720],[885,718],[884,716],[883,714],[883,712],[882,710],[882,709],[882,706],[882,704],[882,699],[885,692],[892,683],[901,671],[912,658],[926,642],[940,627],[957,609],[974,591],[988,576],[1008,558],[1029,538],[1053,516],[1077,496],[1102,475],[1125,455],[1154,430],[1178,407],[1202,384],[1223,365],[1242,349],[1261,334],[1280,322],[1296,315],[1310,309],[1323,305],[1333,302],[1341,300],[1347,300],[1354,299],[1360,299],[1365,300],[1371,302],[1376,304],[1382,305],[1386,307],[1389,308],[1392,308],[1394,309],[1396,309],[1396,310],[1397,310],[1398,310],[1399,310],[1400,310],[1402,310],[1403,310],[1405,310],[1406,310],[1408,310],[1409,310],[1411,310],[1411,309],[1412,309],[1412,308]],"dx":518,"dy":-426,"length":729.9448453507575,"timing":[0,20,41,48,55,62,69,76,83,89,96,103,110,117,124,131,138,145,152,159,166,173,180,187,194,201,208,215,221,228,235,242,249,256,263,270,277,284,291,298,305,312,319,326,333,340,347,353,360,367,374,381,388,395,402,409,416,423,435,438,517,522,528,534,541,548,555,562,569,576,583,590,617]},{"start":[796,620],"end":[1733,379],"points":[[796,620],[796,619],[797,619],[797,618],[798,618],[798,616],[799,615],[800,612],[800,610],[800,607],[800,605],[800,603],[800,602],[800,601],[800,600],[800,599],[802,597],[808,594],[817,589],[835,583],[861,572],[891,563],[931,552],[973,540],[1023,526],[1072,513],[1128,499],[1184,487],[1245,475],[1302,464],[1362,451],[1418,438],[1472,425],[1524,410],[1570,397],[1611,383],[1643,372],[1674,361],[1694,353],[1711,346],[1727,340],[1737,337],[1744,334],[1749,332],[1750,332],[1751,332],[1752,332],[1754,333],[1757,335],[1761,335],[1763,336],[1763,337],[1763,338],[1762,339],[1760,344],[1757,349],[1754,356],[1749,362],[1744,368],[1740,372],[1737,376],[1735,378],[1733,379]],"dx":937,"dy":-241,"length":1080.4561979270472,"timing":[0,81,83,92,97,103,110,117,124,131,138,145,152,159,166,187,194,201,208,215,222,228,235,242,249,256,263,270,277,284,291,298,305,312,319,326,333,340,347,354,360,367,374,381,388,482,486,492,499,506,513,554,557,562,569,576,583,590,597,603,610,617,624]},{"start":[542,469],"end":[1655,441],"points":[[542,470],[548,480],[551,484],[555,488],[559,493],[564,500],[569,506],[574,512],[579,520],[585,526],[593,535],[604,546],[615,556],[629,566],[646,574],[666,578],[689,579],[717,579],[748,575],[787,566],[827,556],[872,544],[915,533],[965,523],[1011,515],[1055,507],[1099,500],[1142,493],[1192,485],[1238,478],[1283,472],[1327,467],[1375,463],[1415,460],[1451,457],[1485,455],[1515,455],[1545,453],[1568,453],[1587,453],[1602,453],[1615,453],[1626,453],[1635,453],[1642,453],[1646,453],[1649,453],[1651,454],[1652,454],[1652,453],[1652,452],[1653,451],[1653,450],[1654,448],[1654,446],[1655,443],[1655,442],[1655,441]],"dx":1113,"dy":-28,"length":1181.1548234013044,"timing":[0,21,28,35,42,49,56,63,70,77,83,90,97,104,111,118,125,132,139,146,153,160,167,174,181,188,195,202,208,215,222,229,236,243,250,257,264,271,278,285,292,299,306,313,320,327,333,340,347,426,432,438,445,451,458,465,472,479]},{"start":[398,687],"end":[1125,167],"points":[[399,687],[400,687],[401,687],[402,687],[403,687],[404,687],[405,687],[407,687],[409,686],[410,686],[410,685],[411,685],[414,683],[421,677],[436,663],[455,647],[485,621],[519,594],[549,571],[595,536],[639,506],[683,478],[734,446],[780,419],[824,392],[860,371],[896,349],[929,327],[956,306],[978,288],[996,272],[1014,255],[1029,242],[1042,231],[1051,222],[1059,215],[1062,211],[1064,209],[1064,208],[1065,208],[1065,207],[1065,206],[1067,204],[1069,201],[1072,197],[1075,193],[1078,189],[1079,186],[1081,184],[1082,182],[1082,181],[1083,181],[1084,181],[1085,180],[1091,179],[1097,178],[1104,176],[1110,174],[1116,172],[1121,169],[1123,168],[1125,168],[1125,167]],"dx":727,"dy":-520,"length":905.0188824228677,"timing":[0,17,25,32,38,42,49,56,63,70,164,167,174,181,188,195,202,209,215,222,229,236,243,250,257,264,271,278,285,292,299,306,313,320,327,334,340,347,354,361,393,397,403,410,417,424,431,438,445,452,459,465,495,500,507,514,521,528,535,542,549,556,558]},{"start":[791,220],"end":[200,441],"points":[[791,220],[790,220],[789,220],[788,220],[788,221],[787,221],[785,221],[784,222],[783,222],[782,222],[781,223],[777,224],[772,226],[765,230],[757,233],[752,237],[747,242],[739,247],[728,254],[714,261],[696,268],[676,274],[654,282],[627,291],[604,299],[581,308],[559,318],[535,329],[511,340],[490,351],[471,360],[453,370],[433,382],[415,391],[397,400],[380,408],[362,415],[344,422],[330,427],[315,432],[302,435],[293,437],[285,438],[278,438],[272,437],[265,436],[257,434],[249,433],[239,433],[231,433],[223,434],[216,435],[210,438],[205,440],[202,441],[201,441],[200,441]],"dx":-591,"dy":221,"length":642.0846404126645,"timing":[0,68,76,83,87,90,97,104,111,142,146,153,160,166,173,180,187,194,201,208,215,222,229,236,243,250,257,264,271,278,285,291,298,305,312,319,326,333,340,347,354,361,368,375,382,389,396,403,410,416,423,430,437,444,451,458,465]},{"start":[178,469],"end":[607,178],"points":[[178,469],[179,469],[180,469],[180,468],[181,468],[183,468],[184,467],[187,466],[189,465],[192,465],[197,464],[203,463],[210,462],[220,460],[230,458],[241,457],[254,456],[270,454],[287,451],[305,449],[328,445],[359,441],[385,437],[417,431],[451,421],[485,409],[511,397],[535,383],[551,369],[559,358],[564,347],[565,334],[565,324],[564,312],[562,302],[559,291],[556,282],[554,273],[552,264],[551,258],[550,253],[550,250],[549,247],[549,244],[548,241],[548,239],[548,236],[548,233],[549,229],[551,225],[554,219],[557,214],[561,209],[565,204],[569,200],[574,196],[579,193],[585,190],[589,188],[592,186],[595,184],[597,183],[599,182],[601,181],[602,180],[604,180],[605,179],[606,179],[606,178],[607,178]],"dx":429,"dy":-291,"length":619.2416265046238,"timing":[0,39,47,51,56,62,69,76,83,90,97,104,111,118,125,132,139,146,153,160,167,174,181,187,194,201,208,215,222,229,236,243,250,257,264,271,278,285,292,299,306,312,319,326,333,340,347,354,361,368,375,382,389,396,403,410,417,424,431,437,444,451,458,465,472,479,486,495,500,502]},{"start":[1103,610],"end":[1390,682],"points":[[1103,611],[1102,611],[1101,611],[1101,610],[1099,609],[1096,607],[1091,603],[1086,600],[1082,597],[1078,594],[1076,591],[1074,590],[1073,589],[1073,587],[1072,585],[1072,581],[1072,578],[1072,575],[1075,571],[1082,569],[1093,568],[1112,570],[1135,576],[1167,584],[1205,593],[1241,600],[1275,605],[1314,612],[1351,618],[1385,625],[1418,633],[1442,640],[1465,647],[1481,654],[1493,660],[1501,666],[1505,670],[1507,674],[1508,678],[1508,681],[1506,686],[1502,690],[1497,695],[1490,699],[1484,701],[1475,704],[1466,707],[1458,709],[1451,709],[1447,709],[1444,709],[1442,708],[1441,706],[1438,703],[1436,700],[1432,696],[1428,691],[1423,688],[1419,685],[1414,682],[1410,681],[1407,680],[1404,680],[1402,680],[1401,679],[1399,679],[1398,679],[1397,679],[1395,679],[1394,680],[1393,681],[1390,682]],"dx":287,"dy":72,"length":655.2459756653259,"timing":[0,55,81,84,91,98,105,112,118,125,132,139,146,153,160,167,174,181,188,195,202,209,216,223,230,237,243,251,257,264,271,278,285,292,299,306,313,320,327,334,341,348,355,362,368,375,382,389,396,403,410,417,424,431,438,445,452,459,466,473,480,487,493,500,507,514,521,528,549,556,563,570]},{"start":[1338,690],"end":[1587,202],"points":[[1337,690],[1335,690],[1330,688],[1325,686],[1315,683],[1303,679],[1291,675],[1273,670],[1256,664],[1236,657],[1220,652],[1206,649],[1193,647],[1184,645],[1179,645],[1175,645],[1171,643],[1169,642],[1166,641],[1164,638],[1163,635],[1163,631],[1165,626],[1171,618],[1181,608],[1196,595],[1217,577],[1242,559],[1267,541],[1291,523],[1318,500],[1338,482],[1356,463],[1370,445],[1385,425],[1398,406],[1408,390],[1417,373],[1425,358],[1433,344],[1440,331],[1445,321],[1451,313],[1455,308],[1458,304],[1460,302],[1463,301],[1464,300],[1465,299],[1467,299],[1468,299],[1469,298],[1472,297],[1475,296],[1480,295],[1486,293],[1491,290],[1497,286],[1503,282],[1510,277],[1517,272],[1524,266],[1533,259],[1541,252],[1548,246],[1556,239],[1561,234],[1566,230],[1569,227],[1571,224],[1573,221],[1574,219],[1575,217],[1577,215],[1578,212],[1579,210],[1582,208],[1583,206],[1585,204],[1586,203],[1587,202]],"dx":249,"dy":-488,"length":804.7616772066391,"timing":[0,8,16,21,28,35,42,49,56,63,70,77,84,91,98,104,112,118,125,132,139,146,153,160,167,174,181,188,195,202,209,216,223,229,236,243,250,257,264,271,278,285,292,299,306,313,320,327,334,341,347,354,361,368,375,382,389,396,403,410,417,424,431,438,445,452,459,466,473,479,486,493,500,507,514,521,528,535,542,549,556]},{"start":[1588,184],"end":[939,263],"points":[[1588,185],[1588,186],[1587,187],[1586,190],[1586,193],[1584,197],[1582,201],[1577,206],[1571,212],[1564,217],[1553,223],[1540,230],[1525,237],[1506,244],[1483,252],[1457,260],[1429,270],[1402,279],[1368,291],[1336,303],[1300,318],[1262,335],[1225,351],[1190,366],[1146,382],[1103,397],[1058,412],[1011,424],[978,432],[936,439],[898,441],[870,440],[850,435],[837,426],[830,415],[828,404],[828,393],[828,381],[829,369],[833,357],[838,348],[845,339],[854,331],[865,322],[876,315],[888,307],[899,300],[909,293],[918,286],[926,279],[932,273],[936,269],[938,266],[938,265],[938,264],[939,264],[939,263]],"dx":-649,"dy":79,"length":1028.4544912924828,"timing":[0,4,8,15,22,29,36,43,50,57,63,70,77,84,91,98,105,112,119,126,133,140,147,154,161,168,175,182,188,195,202,209,216,223,230,237,244,251,258,265,272,279,286,293,300,307,313,320,327,334,341,348,355,362,369,479,482]},{"start":[563,454],"end":[1044,815],"points":[[563,454],[564,454],[564,455],[565,455],[566,457],[569,460],[574,463],[579,467],[586,470],[592,473],[598,475],[606,476],[615,478],[623,479],[632,479],[640,479],[648,479],[654,478],[662,476],[667,474],[672,473],[676,472],[680,471],[684,471],[692,472],[702,477],[717,485],[732,494],[749,505],[767,518],[787,532],[804,548],[819,563],[835,581],[850,601],[867,624],[884,650],[900,674],[918,701],[933,725],[948,746],[962,766],[974,781],[982,791],[988,797],[991,801],[993,803],[994,804],[994,803],[995,803],[995,802],[996,800],[997,798],[998,797],[999,795],[1000,794],[1000,793],[1001,793],[1001,794],[1002,794],[1004,795],[1007,798],[1010,800],[1016,803],[1022,807],[1029,810],[1035,812],[1040,813],[1043,815],[1044,815]],"dx":481,"dy":361,"length":657.4171891926709,"timing":[0,34,40,43,49,56,63,70,77,84,90,97,104,111,118,125,132,139,146,153,160,167,174,181,188,195,202,209,215,222,229,236,243,250,257,264,271,278,285,292,299,306,313,320,327,334,340,347,419,425,431,438,445,452,459,465,478,556,564,570,577,584,591,597,604,611,618,625,632,635]},{"start":[1694,532],"end":[523,572],"points":[[1694,531],[1694,530],[1694,529],[1695,529],[1696,528],[1696,529],[1695,530],[1691,532],[1686,536],[1679,541],[1668,546],[1657,551],[1638,557],[1618,561],[1594,565],[1567,569],[1532,571],[1489,573],[1447,574],[1395,574],[1345,574],[1286,577],[1234,585],[1188,600],[1144,619],[1112,637],[1090,652],[1075,664],[1065,671],[1060,674],[1058,676],[1057,676],[1058,676],[1060,676],[1064,674],[1068,671],[1071,669],[1072,667],[1071,663],[1066,659],[1055,654],[1040,649],[1019,645],[994,641],[964,639],[937,637],[909,636],[870,636],[836,636],[796,635],[758,635],[717,635],[683,635],[651,634],[621,632],[597,628],[578,623],[563,619],[550,614],[539,609],[531,605],[525,601],[519,598],[516,595],[515,594],[514,593],[514,592],[514,591],[515,589],[516,586],[518,584],[520,581],[521,578],[522,575],[522,573],[523,572]],"dx":-1171,"dy":40,"length":1292.653028797824,"timing":[0,6,13,21,27,92,97,104,111,118,125,132,138,145,152,159,166,173,180,187,194,201,208,215,222,229,236,243,250,256,263,270,292,298,305,312,319,326,333,340,347,354,361,368,375,382,388,395,402,409,416,423,430,437,444,451,458,465,472,479,486,493,500,506,513,520,528,534,541,548,555,562,569,576,583,590]},{"start":[1069,344],"end":[785,388],"points":[[1070,344],[1072,346],[1075,351],[1078,357],[1081,364],[1082,372],[1082,377],[1081,383],[1078,390],[1074,399],[1069,406],[1065,415],[1062,422],[1060,430],[1059,437],[1059,444],[1058,451],[1057,457],[1056,461],[1054,465],[1052,466],[1051,467],[1050,468],[1048,469],[1045,469],[1039,471],[1028,471],[1014,471],[994,471],[969,471],[945,471],[918,471],[889,471],[862,471],[837,471],[812,471],[789,469],[769,465],[750,458],[737,451],[725,444],[715,436],[708,429],[703,423],[700,418],[698,413],[698,410],[700,406],[703,402],[708,398],[713,394],[720,391],[726,387],[732,384],[738,382],[741,380],[743,379],[745,379],[746,378],[747,378],[748,378],[749,378],[751,377],[753,377],[754,377],[756,377],[759,378],[763,379],[768,380],[772,382],[776,384],[779,385],[782,387],[784,387],[784,388],[785,388]],"dx":-284,"dy":44,"length":612.1985609681841,"timing":[0,7,14,21,28,35,42,49,56,63,70,77,84,91,98,105,111,118,125,132,139,146,153,160,167,174,181,188,195,202,209,216,223,230,237,243,250,257,264,271,278,285,292,299,305,312,319,326,333,340,347,354,361,368,375,382,389,396,403,410,417,423,430,437,444,451,458,465,472,479,486,493,500,507,514,517]},{"start":[785,388],"end":[426,571],"points":[[785,389],[785,390],[785,391],[786,392],[786,393],[787,395],[787,396],[788,398],[789,399],[789,401],[790,403],[791,404],[791,406],[792,408],[792,410],[793,412],[793,414],[793,415],[793,417],[794,419],[794,422],[792,424],[789,427],[784,430],[775,434],[764,438],[749,443],[733,448],[716,454],[699,461],[677,469],[654,478],[635,485],[612,494],[590,503],[571,510],[547,520],[525,528],[505,535],[486,541],[466,547],[449,552],[433,557],[416,562],[402,565],[387,569],[377,571],[368,572],[361,573],[356,574],[354,574],[355,574],[356,574],[358,574],[362,575],[367,575],[374,575],[382,575],[390,575],[398,575],[406,574],[413,573],[419,572],[422,572],[424,571],[426,571]],"dx":-359,"dy":183,"length":575.6224052839174,"timing":[0,21,28,35,42,49,56,63,69,76,83,90,97,104,111,118,125,132,139,146,153,160,167,174,181,188,194,201,208,215,222,229,236,243,250,257,264,271,278,285,292,299,306,313,320,326,333,340,347,354,361,491,495,500,507,514,521,528,535,542,549,556,563,569,576,583]},{"start":[191,664],"end":[411,266],"points":[[192,664],[193,664],[194,663],[195,663],[198,662],[203,660],[210,658],[219,656],[230,652],[241,648],[253,643],[268,637],[281,632],[296,625],[310,619],[326,613],[340,606],[356,599],[372,591],[390,582],[408,572],[429,559],[451,543],[469,526],[486,508],[500,489],[510,471],[518,452],[522,440],[525,433],[527,431],[528,431],[528,432],[529,433],[533,440],[539,449],[548,459],[559,471],[573,483],[585,491],[600,502],[617,512],[639,523],[662,534],[686,543],[710,549],[731,552],[747,553],[757,553],[762,552],[764,550],[764,547],[764,542],[760,535],[753,527],[744,518],[730,508],[714,497],[694,483],[672,468],[649,451],[622,432],[594,413],[564,391],[535,371],[503,347],[474,329],[448,312],[430,299],[414,288],[404,281],[398,277],[396,274],[395,273],[395,272],[396,272],[396,271],[397,271],[398,271],[399,270],[400,270],[401,269],[403,268],[406,267],[409,266],[411,266]],"dx":220,"dy":-398,"length":1189.321769728657,"timing":[0,36,42,48,55,62,69,76,83,90,97,104,111,118,125,131,138,145,152,159,166,173,180,187,194,201,208,215,222,229,236,243,266,270,277,284,291,298,305,312,319,326,333,340,347,354,361,368,375,381,388,395,402,409,416,423,430,437,444,451,458,465,472,479,486,493,500,506,513,520,527,534,541,548,555,636,652,659,666,673,680,687,694,701,708,710]},{"start":[1097,656],"end":[1273,804],"points":[[1097,656],[1097,657],[1098,659],[1099,661],[1101,665],[1104,668],[1106,672],[1108,676],[1111,679],[1113,681],[1114,683],[1115,684],[1116,685],[1117,685],[1117,686],[1120,687],[1126,689],[1133,691],[1142,693],[1151,695],[1160,696],[1169,699],[1178,702],[1186,705],[1194,709],[1202,714],[1211,720],[1217,726],[1222,732],[1226,737],[1229,743],[1232,748],[1234,752],[1235,756],[1236,759],[1237,761],[1237,762],[1237,763],[1237,765],[1239,767],[1239,768],[1241,770],[1241,771],[1243,773],[1244,775],[1245,776],[1246,777],[1247,778],[1248,779],[1249,780],[1250,781],[1251,782],[1253,784],[1256,787],[1258,790],[1261,793],[1264,796],[1267,799],[1269,801],[1271,802],[1272,803],[1273,803],[1273,804]],"dx":176,"dy":148,"length":245.97623335337812,"timing":[0,21,28,35,42,49,56,63,70,76,83,90,97,190,195,201,208,215,222,229,236,243,250,257,264,271,278,285,292,299,306,313,320,327,334,340,347,354,361,368,375,382,389,396,403,410,417,424,431,438,445,451,458,465,472,479,486,493,500,507,514,521,541]},{"start":[1274,805],"end":[1328,831],"points":[[1275,806],[1276,806],[1278,806],[1283,807],[1291,807],[1300,809],[1310,810],[1322,811],[1334,812],[1346,813],[1355,813],[1362,813],[1368,813],[1371,813],[1373,813],[1374,813],[1374,814],[1373,814],[1372,815],[1371,816],[1368,817],[1366,818],[1363,819],[1360,820],[1358,820],[1355,820],[1353,821],[1351,821],[1350,822],[1348,822],[1346,823],[1344,823],[1342,824],[1340,825],[1339,825],[1337,826],[1335,827],[1333,828],[1331,829],[1329,830],[1328,830],[1328,831]],"dx":54,"dy":26,"length":151.58337677100587,"timing":[0,4,10,17,24,31,38,45,52,58,65,72,79,86,93,100,179,197,204,211,218,225,232,239,246,253,260,267,274,281,288,295,302,309,315,322,329,336,343,350,357,364]},{"start":[528,677],"end":[799,278],"points":[[528,678],[528,677],[529,677],[533,675],[540,669],[552,661],[564,653],[582,640],[599,627],[620,609],[640,590],[655,574],[674,552],[690,531],[703,513],[716,494],[727,474],[736,456],[745,435],[752,415],[757,395],[761,374],[765,354],[768,340],[770,323],[772,311],[774,302],[776,295],[778,290],[780,286],[782,283],[785,280],[788,278],[790,276],[792,275],[794,274],[796,273],[797,273],[798,273],[799,272],[799,273],[799,274],[799,276],[799,277],[799,278]],"dx":271,"dy":-399,"length":515.7504479601165,"timing":[0,121,122,129,136,143,150,157,164,171,178,185,192,199,206,213,220,227,234,241,247,254,261,268,275,282,289,296,303,310,317,324,331,338,345,352,359,366,372,379,471,477,484,491,497]},{"start":[799,278],"end":[1329,510],"points":[[799,279],[799,280],[799,281],[799,283],[800,285],[800,287],[801,290],[801,293],[801,297],[802,300],[802,304],[803,309],[803,314],[803,319],[804,323],[804,328],[804,333],[804,338],[804,342],[804,347],[805,352],[806,357],[808,362],[812,367],[818,372],[825,378],[837,384],[850,389],[861,393],[879,398],[898,403],[918,408],[944,415],[971,421],[1003,429],[1036,437],[1074,447],[1109,456],[1148,465],[1179,472],[1212,480],[1245,488],[1270,493],[1294,498],[1315,502],[1332,505],[1345,507],[1355,509],[1365,510],[1372,511],[1375,511],[1376,511],[1376,512],[1376,513],[1375,515],[1375,517],[1374,520],[1373,523],[1372,525],[1371,527],[1370,527],[1369,527],[1367,527],[1364,526],[1360,525],[1357,524],[1353,523],[1350,522],[1348,521],[1345,520],[1342,520],[1340,519],[1338,518],[1336,517],[1335,516],[1333,515],[1332,514],[1331,512],[1329,511],[1329,510]],"dx":530,"dy":232,"length":739.9986062251396,"timing":[0,7,11,18,25,32,39,46,53,60,67,74,81,88,95,102,109,116,123,130,136,143,150,157,164,171,178,185,192,199,206,213,220,227,234,241,248,255,261,268,275,282,289,296,303,310,317,324,331,338,345,352,456,463,470,477,484,491,498,505,568,574,581,588,595,602,609,616,623,630,636,643,650,657,664,671,678,685,692,704]},{"start":[1329,510],"end":[1770,644],"points":[[1328,510],[1328,511],[1327,511],[1327,512],[1326,512],[1325,513],[1324,513],[1323,514],[1321,515],[1317,516],[1309,516],[1298,516],[1282,515],[1262,512],[1236,507],[1208,500],[1183,491],[1161,481],[1147,471],[1138,456],[1136,439],[1139,421],[1149,399],[1164,380],[1179,366],[1199,353],[1221,343],[1247,336],[1272,332],[1300,331],[1329,331],[1356,336],[1388,345],[1424,358],[1458,373],[1495,392],[1525,409],[1559,430],[1588,449],[1621,471],[1649,491],[1676,512],[1696,530],[1713,547],[1728,563],[1739,574],[1748,584],[1755,591],[1760,597],[1764,601],[1766,605],[1768,607],[1768,608],[1768,609],[1767,609],[1767,610],[1767,611],[1767,615],[1766,619],[1765,623],[1764,628],[1763,632],[1762,636],[1761,638],[1761,640],[1761,641],[1761,642],[1761,643],[1761,644],[1762,644],[1762,645],[1763,645],[1764,645],[1765,645],[1766,645],[1767,645],[1768,645],[1769,644],[1770,644]],"dx":441,"dy":134,"length":1048.674088118655,"timing":[0,7,14,19,25,32,39,46,53,59,66,73,80,87,94,101,108,115,122,129,136,143,150,157,164,171,178,184,191,198,205,212,219,226,233,240,247,254,261,268,275,282,289,296,303,309,316,323,330,337,344,351,358,365,440,443,448,455,462,469,476,483,490,497,504,511,518,525,535,561,566,573,580,587,600,607,622,629,743]},{"start":[1000,185],"end":[304,767],"points":[[1000,186],[1000,187],[1000,190],[1000,196],[1000,204],[1002,214],[1004,225],[1007,240],[1009,253],[1013,271],[1015,287],[1017,305],[1018,324],[1018,341],[1018,356],[1018,373],[1016,388],[1013,404],[1009,416],[1006,427],[1001,437],[997,447],[993,454],[990,461],[988,468],[986,474],[984,480],[983,487],[980,494],[977,501],[972,508],[965,513],[953,520],[934,527],[911,534],[880,542],[853,549],[820,558],[778,570],[736,584],[698,598],[655,614],[615,628],[577,640],[536,653],[503,662],[466,672],[434,681],[405,687],[376,694],[352,700],[329,707],[311,713],[300,718],[292,722],[289,723],[289,724],[290,724],[291,724],[292,724],[293,724],[293,725],[294,725],[294,726],[295,727],[295,730],[296,734],[297,738],[297,743],[298,747],[298,751],[299,754],[300,757],[300,760],[301,762],[302,764],[302,765],[303,767],[304,767]],"dx":-696,"dy":582,"length":1101.9042707959618,"timing":[0,7,14,21,28,35,42,49,56,63,69,76,83,90,97,104,111,118,125,132,139,146,153,160,167,174,181,188,194,201,208,215,222,229,236,243,250,257,264,271,278,285,292,299,306,313,319,326,333,340,347,354,361,368,375,382,394,413,421,427,434,439,445,451,458,465,472,479,486,493,500,507,514,521,528,535,542,549,556]},{"start":[1732,666],"end":[1013,193],"points":[[1732,666],[1731,666],[1729,668],[1726,669],[1725,669],[1723,669],[1720,670],[1717,670],[1715,670],[1713,670],[1712,670],[1711,670],[1711,669],[1710,668],[1709,668],[1705,666],[1697,663],[1682,659],[1666,653],[1643,645],[1619,635],[1591,623],[1560,608],[1525,589],[1488,569],[1448,546],[1409,523],[1375,503],[1331,476],[1288,447],[1253,422],[1218,396],[1191,375],[1170,358],[1155,342],[1144,330],[1139,321],[1138,312],[1137,306],[1137,301],[1139,298],[1140,294],[1143,291],[1146,288],[1149,286],[1151,284],[1152,283],[1153,283],[1153,282],[1153,281],[1153,280],[1152,280],[1151,280],[1149,279],[1144,278],[1138,276],[1129,273],[1118,269],[1106,263],[1092,257],[1079,250],[1066,243],[1056,237],[1047,231],[1040,225],[1035,220],[1030,216],[1027,211],[1023,206],[1020,202],[1017,198],[1015,195],[1013,193]],"dx":-719,"dy":-473,"length":916.0971023556043,"timing":[0,69,87,95,97,104,111,118,125,132,139,146,168,176,181,188,195,202,208,215,222,229,236,243,250,257,264,271,278,285,292,299,306,313,320,327,333,340,347,354,361,368,375,382,389,396,403,410,417,424,479,490,494,500,507,514,521,528,535,542,549,556,563,570,577,583,590,597,604,611,618,625,632]},{"start":[668,435],"end":[546,745],"points":[[667,435],[666,435],[665,436],[665,437],[662,439],[659,442],[653,447],[645,453],[636,462],[627,472],[617,487],[607,504],[599,519],[588,540],[577,562],[566,585],[555,606],[545,625],[534,646],[525,662],[515,679],[508,692],[501,704],[495,713],[491,720],[489,726],[488,730],[488,732],[488,734],[488,736],[488,737],[488,738],[489,738],[489,739],[489,740],[490,740],[490,741],[492,742],[497,743],[503,745],[510,746],[516,746],[523,747],[530,747],[536,747],[541,746],[544,745],[546,745]],"dx":-122,"dy":310,"length":418.8149718840057,"timing":[0,21,169,173,180,187,194,201,208,215,222,229,236,243,250,257,264,271,278,285,292,299,305,312,319,326,333,340,347,354,364,419,430,431,443,511,514,521,528,535,542,549,555,562,569,576,583,590]},{"start":[546,744],"end":[949,407],"points":[[546,744],[547,744],[547,743],[549,742],[552,739],[558,735],[564,730],[578,720],[593,709],[611,694],[632,676],[654,657],[674,640],[700,619],[721,602],[746,582],[770,563],[792,544],[817,522],[839,502],[855,488],[875,472],[891,461],[902,454],[911,449],[918,447],[921,446],[922,446],[923,446],[923,447],[924,447],[925,447],[926,447],[927,447],[928,447],[930,447],[931,446],[932,446],[932,445],[933,444],[933,441],[934,439],[935,436],[935,433],[935,430],[936,427],[937,423],[939,420],[941,416],[944,412],[947,409],[948,408],[949,407]],"dx":403,"dy":-337,"length":537.6082841090748,"timing":[0,150,153,160,167,174,181,188,195,202,209,215,222,229,236,243,250,257,264,271,278,285,292,299,306,313,320,327,366,369,381,396,403,410,417,424,431,438,445,452,459,465,472,479,486,493,500,507,514,521,528,535,542]},{"start":[1808,442],"end":[395,647],"points":[[1808,442],[1807,442],[1807,443],[1806,443],[1805,444],[1803,444],[1798,446],[1792,447],[1784,449],[1773,450],[1758,451],[1745,452],[1728,454],[1711,456],[1694,458],[1676,461],[1655,464],[1639,467],[1622,471],[1608,475],[1595,478],[1587,480],[1582,481],[1577,482],[1571,482],[1562,482],[1547,482],[1524,482],[1497,482],[1470,482],[1434,483],[1394,485],[1349,487],[1299,488],[1249,490],[1204,491],[1145,494],[1083,497],[1021,501],[962,505],[896,509],[833,514],[774,521],[723,528],[674,538],[624,549],[586,558],[553,566],[526,572],[500,578],[481,582],[463,586],[449,589],[440,591],[433,592],[430,592],[429,592],[429,593],[428,593],[428,594],[428,595],[428,596],[428,598],[429,600],[429,602],[429,605],[428,607],[427,610],[424,613],[421,616],[417,618],[415,621],[413,623],[411,625],[410,626],[409,627],[408,628],[408,629],[407,629],[407,630],[406,630],[405,631],[404,632],[402,634],[401,636],[400,638],[398,641],[397,644],[396,645],[395,647]],"dx":-1413,"dy":205,"length":1463.6042135832977,"timing":[0,33,38,42,49,56,63,70,76,83,90,97,104,111,118,125,132,139,146,153,160,167,174,181,188,195,201,208,215,222,229,236,243,250,257,264,271,278,285,292,299,306,313,320,327,333,340,347,354,361,368,375,382,389,396,403,410,417,425,431,438,445,452,458,465,472,479,486,493,500,507,514,521,528,535,542,549,557,567,572,577,583,590,597,604,611,618,625,632,639]},{"start":[1474,517],"end":[750,401],"points":[[1473,517],[1473,518],[1472,518],[1472,520],[1472,521],[1471,521],[1470,521],[1469,521],[1468,521],[1467,521],[1465,521],[1463,521],[1460,521],[1458,522],[1455,522],[1450,523],[1445,524],[1437,525],[1423,526],[1408,527],[1388,527],[1369,527],[1343,527],[1317,525],[1290,522],[1263,517],[1231,510],[1201,499],[1170,486],[1138,472],[1110,460],[1081,448],[1049,437],[1019,429],[996,423],[972,418],[944,414],[924,411],[902,407],[887,406],[872,405],[859,404],[849,404],[842,404],[836,405],[832,405],[830,405],[828,406],[827,406],[827,407],[826,407],[826,408],[825,409],[824,410],[823,413],[821,416],[820,419],[819,422],[817,425],[814,427],[812,428],[808,430],[803,431],[800,432],[794,432],[790,432],[787,433],[783,433],[780,433],[777,432],[776,431],[774,429],[772,427],[769,424],[765,419],[761,414],[756,408],[752,404],[750,401]],"dx":-724,"dy":-116,"length":775.4512359355334,"timing":[0,5,11,18,25,32,74,83,87,94,101,108,115,122,129,136,143,150,157,164,171,178,185,192,199,205,212,219,226,233,240,247,254,261,268,275,282,289,296,303,310,317,324,330,337,344,351,358,365,372,380,386,393,400,407,414,421,428,435,442,449,456,462,470,476,483,490,497,504,511,518,525,532,539,546,553,560,567,574]},{"start":[1086,788],"end":[145,814],"points":[[1085,788],[1085,789],[1084,790],[1082,792],[1077,794],[1071,796],[1064,798],[1055,799],[1045,799],[1034,799],[1023,798],[1011,795],[1000,791],[990,785],[983,780],[976,773],[971,766],[968,758],[967,750],[966,741],[966,731],[968,722],[970,713],[971,703],[971,694],[966,686],[958,677],[945,670],[930,664],[910,658],[890,655],[866,652],[842,649],[812,647],[778,645],[738,643],[694,642],[649,642],[607,642],[568,644],[527,649],[488,655],[450,663],[417,673],[386,684],[357,696],[331,707],[311,716],[292,724],[278,730],[269,734],[261,737],[255,741],[250,743],[245,746],[242,748],[238,749],[236,750],[234,751],[233,753],[232,753],[231,754],[230,756],[230,757],[229,757],[229,758],[227,759],[224,760],[220,762],[212,764],[201,768],[190,773],[177,780],[167,786],[158,795],[152,804],[147,811],[145,814]],"dx":-941,"dy":26,"length":1084.7923813722725,"timing":[0,8,14,21,28,34,41,48,55,62,69,76,83,90,97,104,111,118,125,132,139,146,153,159,166,173,180,187,194,201,208,215,222,229,236,243,250,257,264,271,278,284,291,298,305,312,319,326,333,340,347,354,361,368,375,382,389,396,403,409,416,423,430,437,444,451,458,465,472,479,486,493,500,507,514,521,528,535]},{"start":[175,804],"end":[311,273],"points":[[176,804],[177,805],[179,806],[181,806],[185,807],[191,807],[199,807],[208,805],[217,802],[229,798],[242,793],[261,785],[282,778],[301,771],[328,761],[353,752],[380,743],[406,733],[430,724],[452,716],[473,709],[496,701],[515,694],[535,686],[549,681],[564,674],[575,667],[580,661],[581,656],[580,650],[575,643],[569,637],[560,628],[548,618],[535,605],[520,589],[506,574],[487,553],[467,530],[444,506],[424,483],[398,457],[379,436],[356,412],[340,393],[326,377],[316,365],[306,353],[299,344],[294,338],[288,330],[284,325],[281,321],[280,318],[279,317],[279,316],[279,315],[279,314],[280,314],[281,312],[283,309],[286,306],[289,302],[293,299],[295,296],[298,293],[300,290],[302,288],[302,286],[304,284],[304,283],[304,282],[304,281],[305,281],[305,280],[306,279],[307,277],[308,276],[310,274],[311,273]],"dx":136,"dy":-531,"length":951.6610342532966,"timing":[0,21,28,35,41,48,55,62,69,76,83,90,97,104,111,118,125,132,139,146,153,160,166,173,180,187,194,201,208,215,222,229,236,243,250,257,264,271,278,285,291,298,305,312,319,326,333,340,347,354,361,368,375,382,389,396,407,414,416,423,430,437,444,451,458,465,472,479,486,493,500,507,532,538,542,548,555,562,569,573]},{"start":[1021,683],"end":[584,364],"points":[[1021,684],[1021,685],[1020,685],[1020,686],[1019,688],[1018,689],[1017,690],[1015,691],[1013,692],[1010,693],[1007,694],[1003,695],[1000,695],[999,695],[998,695],[998,694],[998,691],[998,684],[1000,672],[1002,660],[1002,647],[1000,635],[995,624],[989,616],[983,609],[978,606],[976,606],[976,607],[975,608],[975,611],[975,612],[977,614],[980,615],[986,616],[994,618],[1003,618],[1012,619],[1022,619],[1033,619],[1045,618],[1055,616],[1062,614],[1066,612],[1067,610],[1068,608],[1067,606],[1063,602],[1057,597],[1048,592],[1037,587],[1023,580],[1008,572],[990,562],[966,549],[941,534],[910,518],[879,501],[848,485],[814,466],[783,451],[757,438],[728,424],[702,412],[674,399],[651,389],[630,380],[614,374],[600,370],[591,367],[585,365],[584,365],[584,364]],"dx":-437,"dy":-319,"length":776.3206776468774,"timing":[0,6,8,15,22,29,36,43,50,57,64,71,78,85,92,99,106,113,119,126,133,140,147,154,161,168,175,196,203,210,217,224,231,238,244,251,258,265,272,279,286,293,300,307,314,321,328,335,342,349,356,362,369,376,383,390,397,404,411,418,425,432,439,446,453,460,467,474,481,488,494,528]},{"start":[1418,329],"end":[548,558],"points":[[1418,329],[1418,331],[1417,334],[1415,337],[1413,340],[1411,344],[1408,347],[1405,351],[1402,355],[1399,358],[1395,362],[1391,366],[1388,370],[1386,373],[1384,375],[1383,377],[1382,378],[1381,379],[1380,379],[1377,381],[1372,383],[1364,386],[1351,390],[1330,395],[1309,401],[1284,407],[1252,416],[1218,425],[1173,439],[1128,453],[1083,468],[1031,485],[981,501],[931,516],[873,533],[823,546],[768,559],[718,570],[675,580],[637,588],[612,591],[592,593],[577,593],[568,593],[561,591],[555,589],[552,586],[551,582],[551,576],[551,570],[552,564],[555,558],[557,552],[559,548],[561,544],[561,541],[562,539],[562,537],[562,538],[561,538],[561,539],[560,541],[558,543],[558,544],[557,545],[556,546],[556,547],[556,548],[555,548],[554,550],[553,552],[552,553],[550,555],[549,556],[548,558]],"dx":-870,"dy":229,"length":1002.5230344348237,"timing":[0,7,14,21,28,35,42,49,56,63,70,77,84,91,98,105,111,118,125,132,139,146,153,160,167,174,181,188,195,202,209,216,223,230,236,243,251,257,264,271,278,285,292,299,306,313,320,327,334,341,348,355,361,368,375,382,389,396,475,481,486,493,500,507,514,521,528,614,618,625,632,639,646,653,659]},{"start":[204,447],"end":[1274,755],"points":[[205,448],[205,449],[206,450],[207,450],[208,451],[209,452],[211,452],[212,452],[214,452],[219,451],[227,448],[240,445],[253,440],[269,435],[288,429],[307,423],[326,418],[346,414],[367,411],[389,408],[407,406],[422,404],[435,402],[445,401],[457,401],[469,401],[483,402],[498,404],[514,406],[530,410],[549,413],[570,418],[594,425],[620,433],[642,441],[671,454],[700,467],[736,485],[767,501],[805,521],[840,541],[877,562],[913,583],[950,604],[982,623],[1019,645],[1048,662],[1078,680],[1109,698],[1131,711],[1156,724],[1173,733],[1188,741],[1202,749],[1213,756],[1223,762],[1231,767],[1238,772],[1245,777],[1251,782],[1257,786],[1262,788],[1265,790],[1268,791],[1271,792],[1273,792],[1276,792],[1278,792],[1282,792],[1287,792],[1290,792],[1294,791],[1296,790],[1297,790],[1298,789],[1298,788],[1298,787],[1298,785],[1298,783],[1297,780],[1295,777],[1294,774],[1292,771],[1290,768],[1287,765],[1285,761],[1283,759],[1282,758],[1281,757],[1280,757],[1279,757],[1278,756],[1277,756],[1276,756],[1275,756],[1275,755],[1274,755]],"dx":1070,"dy":308,"length":1245.7870113887484,"timing":[0,7,14,21,28,35,41,48,55,62,69,76,83,90,97,104,111,118,125,132,139,146,153,160,167,173,180,187,194,201,208,215,222,229,236,243,250,257,264,271,278,285,292,298,305,312,319,326,333,340,347,354,361,368,375,382,389,396,403,410,417,424,430,437,444,451,458,465,472,479,486,493,500,507,514,521,528,535,542,548,555,562,569,576,583,590,597,604,611,618,625,632,639,646,653,660,671]},{"start":[931,525],"end":[828,826],"points":[[932,525],[932,526],[930,530],[927,539],[924,551],[921,563],[917,575],[914,591],[911,604],[908,621],[904,640],[901,658],[897,675],[893,692],[888,707],[883,722],[877,737],[871,752],[865,766],[860,779],[855,789],[851,800],[846,808],[843,817],[841,824],[839,828],[838,831],[836,832],[836,833],[835,833],[834,833],[834,832],[833,832],[832,831],[831,831],[831,830],[830,830],[830,829],[829,828],[828,827],[828,826]],"dx":-103,"dy":301,"length":338.1159343279812,"timing":[0,82,88,95,102,109,116,123,130,137,144,151,158,165,172,179,186,192,199,206,213,220,227,234,241,248,255,262,269,276,305,310,317,324,334,338,348,352,359,366,373]},{"start":[1437,634],"end":[402,214],"points":[[1437,635],[1436,635],[1435,636],[1434,637],[1434,638],[1433,638],[1432,639],[1431,640],[1429,641],[1428,642],[1426,644],[1423,645],[1421,646],[1417,647],[1414,648],[1410,649],[1407,649],[1404,649],[1402,650],[1400,650],[1398,650],[1395,649],[1392,649],[1388,647],[1383,646],[1375,645],[1364,644],[1349,643],[1331,643],[1307,643],[1284,643],[1252,643],[1220,643],[1187,643],[1145,642],[1105,641],[1060,637],[1017,634],[970,629],[926,624],[881,618],[836,610],[792,601],[751,591],[708,578],[669,565],[631,549],[598,534],[572,519],[543,501],[521,485],[504,469],[489,452],[476,436],[467,421],[458,403],[452,386],[446,366],[441,347],[437,327],[433,310],[430,296],[427,283],[425,272],[423,264],[422,261],[422,258],[422,257],[421,255],[421,253],[420,252],[420,251],[420,249],[419,248],[419,246],[418,243],[418,241],[418,237],[417,234],[416,231],[415,229],[414,227],[414,225],[412,222],[411,221],[410,219],[408,217],[406,216],[404,215],[403,214],[402,214]],"dx":-1035,"dy":-420,"length":1256.8957155911996,"timing":[0,7,13,20,27,34,41,48,55,62,69,76,83,90,97,104,111,118,125,132,139,146,153,159,166,173,180,187,194,201,208,215,222,229,236,243,250,257,264,271,278,284,291,298,305,312,319,326,333,340,347,354,361,368,375,382,388,395,402,409,416,423,430,437,444,451,458,465,472,479,486,493,500,507,514,521,527,534,541,548,555,562,569,576,583,590,597,604,611,618,627]},{"start":[717,445],"end":[1717,560],"points":[[718,446],[720,449],[722,452],[725,456],[727,459],[728,461],[728,462],[728,463],[729,464],[729,465],[730,466],[730,467],[731,467],[731,468],[732,468],[733,468],[733,469],[736,470],[741,472],[748,474],[758,475],[773,477],[790,480],[811,483],[836,487],[863,492],[899,498],[938,505],[982,516],[1026,527],[1075,539],[1126,552],[1176,565],[1227,578],[1277,588],[1325,597],[1367,602],[1407,606],[1440,607],[1469,608],[1500,608],[1525,608],[1550,608],[1576,609],[1602,610],[1622,611],[1641,612],[1655,612],[1667,612],[1676,612],[1683,612],[1687,612],[1690,612],[1691,611],[1692,611],[1693,610],[1694,609],[1696,608],[1697,606],[1699,603],[1701,598],[1703,592],[1704,586],[1705,579],[1705,572],[1705,566],[1705,560],[1705,557],[1706,556],[1707,556],[1708,556],[1709,555],[1710,555],[1712,555],[1713,556],[1715,558],[1717,559],[1717,560]],"dx":1000,"dy":115,"length":1077.2801620158373,"timing":[0,7,14,21,28,35,42,49,56,63,70,93,98,109,111,120,125,132,139,146,153,160,167,174,181,188,195,202,209,216,223,230,236,243,250,257,264,271,278,285,292,299,306,313,320,327,334,341,348,355,361,368,375,389,396,403,410,417,424,431,438,445,452,459,466,473,480,486,493,500,507,514,521,528,535,542,549,550]},{"start":[827,676],"end":[118,284],"points":[[827,675],[828,675],[829,670],[830,664],[831,658],[832,652],[832,645],[832,637],[831,630],[830,622],[828,615],[827,610],[826,608],[826,607],[825,606],[824,605],[818,604],[808,602],[792,600],[772,596],[749,591],[720,584],[689,574],[657,561],[620,543],[580,522],[548,504],[497,475],[445,447],[398,420],[346,391],[294,365],[255,346],[214,329],[186,319],[166,313],[151,307],[140,303],[132,299],[126,295],[122,292],[120,290],[119,288],[119,287],[119,286],[119,285],[119,284],[118,284]],"dx":-709,"dy":-392,"length":856.315544521533,"timing":[0,2,8,15,22,29,36,43,50,57,64,71,78,85,92,113,120,126,133,140,147,154,161,168,175,182,189,196,203,210,217,224,231,238,245,251,258,265,272,279,286,293,300,307,314,321,380,426]},{"start":[1564,650],"end":[1721,745],"points":[[1563,650],[1562,650],[1561,650],[1561,651],[1559,651],[1556,651],[1550,651],[1543,651],[1534,651],[1524,651],[1512,650],[1497,649],[1483,647],[1463,644],[1443,639],[1421,634],[1397,627],[1377,622],[1350,615],[1329,609],[1306,605],[1285,602],[1268,599],[1252,599],[1239,598],[1228,597],[1218,597],[1211,597],[1206,598],[1204,599],[1203,599],[1202,601],[1202,602],[1203,604],[1205,606],[1208,608],[1211,611],[1215,613],[1218,614],[1221,616],[1223,617],[1225,618],[1226,618],[1227,618],[1227,619],[1229,620],[1233,623],[1239,627],[1247,632],[1258,639],[1272,646],[1288,654],[1306,661],[1326,667],[1349,674],[1373,681],[1396,686],[1418,691],[1440,694],[1459,698],[1480,702],[1496,706],[1513,709],[1528,713],[1542,716],[1555,719],[1565,722],[1574,725],[1582,727],[1589,728],[1594,729],[1596,729],[1597,730],[1598,730],[1599,731],[1602,732],[1607,735],[1612,737],[1618,739],[1625,741],[1633,742],[1640,743],[1648,743],[1654,743],[1660,743],[1666,743],[1672,743],[1679,744],[1685,744],[1692,744],[1697,745],[1704,745],[1709,745],[1715,745],[1719,745],[1721,745]],"dx":157,"dy":95,"length":918.2556713493,"timing":[0,7,16,21,28,35,42,48,55,62,69,76,83,90,97,104,111,118,125,132,139,146,153,160,167,174,180,187,194,201,208,215,222,229,236,243,250,257,264,271,278,285,297,303,306,312,319,326,333,340,347,354,361,368,375,382,389,396,403,410,417,424,430,437,444,451,458,465,472,479,486,493,500,507,514,521,528,535,542,549,555,562,569,576,583,590,597,604,611,618,625,632,639,646,653,660]},{"start":[1791,197],"end":[1176,525],"points":[[1790,197],[1789,197],[1789,198],[1786,199],[1779,203],[1768,209],[1750,219],[1728,233],[1704,248],[1671,268],[1647,284],[1613,306],[1575,330],[1540,353],[1501,378],[1468,400],[1435,420],[1405,437],[1376,452],[1349,466],[1324,477],[1300,489],[1277,499],[1258,509],[1242,518],[1229,527],[1220,535],[1218,540],[1217,541],[1217,542],[1218,542],[1219,542],[1220,542],[1221,542],[1222,542],[1222,541],[1221,541],[1220,541],[1219,541],[1217,541],[1214,540],[1208,537],[1203,534],[1196,530],[1188,527],[1183,525],[1180,525],[1178,525],[1176,525]],"dx":-615,"dy":328,"length":727.9968860275355,"timing":[0,20,49,54,61,68,75,82,89,96,103,110,117,124,131,138,145,152,159,165,172,179,186,193,200,207,214,221,228,235,242,251,262,277,311,369,419,424,429,436,443,450,457,464,471,478,485,492,499]},{"start":[325,248],"end":[849,735],"points":[[325,249],[330,251],[338,256],[352,262],[369,270],[394,281],[424,296],[454,311],[492,332],[539,360],[583,386],[624,411],[662,436],[699,464],[728,489],[753,514],[770,533],[785,556],[796,579],[805,603],[811,626],[815,647],[818,664],[819,678],[819,689],[819,698],[819,702],[819,703],[820,703],[821,703],[822,704],[823,704],[824,704],[827,705],[831,706],[834,707],[836,708],[837,708],[838,708],[838,709],[839,711],[841,716],[843,720],[846,725],[847,729],[848,733],[849,735]],"dx":524,"dy":487,"length":761.0493412731468,"timing":[0,7,14,21,28,34,41,48,55,62,69,76,83,90,97,104,111,118,125,132,139,146,153,159,166,173,180,187,220,226,233,237,243,250,257,264,271,278,308,312,319,326,333,340,347,354,361]},{"start":[561,676],"end":[1575,307],"points":[[562,675],[564,674],[571,670],[582,666],[600,659],[624,651],[656,639],[694,624],[734,610],[774,595],[818,577],[865,559],[907,542],[952,525],[1003,506],[1052,486],[1103,466],[1145,449],[1197,431],[1241,416],[1283,404],[1320,394],[1358,385],[1391,377],[1419,370],[1443,365],[1468,359],[1487,354],[1502,351],[1516,347],[1524,345],[1532,342],[1540,339],[1546,336],[1551,333],[1554,331],[1557,330],[1559,328],[1559,327],[1560,327],[1561,326],[1563,325],[1566,322],[1569,319],[1572,315],[1574,311],[1575,309],[1575,307]],"dx":1014,"dy":-369,"length":1085.899397895876,"timing":[0,5,12,19,26,33,40,47,54,61,68,75,82,89,96,103,110,117,124,130,137,144,151,158,165,172,179,186,193,200,207,214,221,228,235,242,249,255,262,305,311,318,325,332,339,346,353,360]},{"start":[1086,468],"end":[1690,296],"points":[[1086,468],[1086,469],[1086,470],[1086,471],[1085,473],[1084,476],[1083,478],[1083,480],[1083,482],[1083,484],[1083,485],[1083,487],[1083,489],[1083,491],[1083,493],[1083,495],[1082,497],[1081,500],[1080,502],[1079,505],[1079,507],[1079,509],[1081,512],[1087,514],[1099,516],[1120,517],[1150,514],[1181,511],[1220,505],[1258,499],[1303,491],[1348,481],[1396,470],[1443,458],[1487,445],[1529,432],[1569,419],[1606,406],[1638,394],[1666,382],[1688,371],[1706,361],[1720,352],[1731,343],[1740,334],[1745,327],[1746,321],[1747,317],[1747,314],[1747,312],[1745,310],[1744,310],[1743,310],[1743,309],[1742,309],[1742,308],[1741,306],[1738,304],[1734,301],[1731,298],[1728,296],[1724,295],[1720,293],[1717,293],[1714,292],[1711,292],[1708,292],[1705,292],[1700,293],[1696,294],[1693,295],[1691,296],[1690,296]],"dx":604,"dy":-172,"length":828.5683583757951,"timing":[0,32,38,42,49,56,63,70,77,84,91,97,104,111,118,125,132,139,146,153,160,167,174,181,188,195,202,209,216,223,229,236,243,250,257,264,271,278,285,292,299,306,313,320,327,334,341,348,354,361,368,375,382,394,455,459,466,473,479,486,493,500,507,514,521,528,535,542,549,556,563,570,577]},{"start":[941,192],"end":[546,308],"points":[[941,194],[941,197],[942,202],[942,208],[942,215],[942,223],[941,232],[939,242],[937,251],[934,261],[931,271],[928,282],[923,293],[921,302],[918,309],[917,315],[916,319],[916,322],[915,324],[914,327],[911,331],[906,336],[898,343],[889,351],[878,361],[867,372],[855,386],[845,400],[834,417],[822,439],[812,462],[803,483],[794,508],[789,525],[783,542],[779,556],[777,563],[775,568],[774,570],[774,571],[774,570],[774,567],[772,559],[768,546],[760,529],[750,512],[738,496],[721,478],[706,463],[686,444],[665,427],[643,408],[622,392],[606,378],[590,364],[575,350],[564,338],[557,330],[553,324],[551,320],[550,316],[548,314],[548,311],[547,310],[547,309],[546,308]],"dx":-395,"dy":116,"length":780.0180130532194,"timing":[0,7,14,20,27,34,41,48,55,62,69,76,83,90,97,104,111,118,125,132,139,145,152,159,166,173,180,187,194,201,208,215,222,229,236,243,250,257,264,271,301,305,312,319,326,333,340,347,354,361,368,375,382,389,395,402,409,416,423,430,437,444,451,458,465,472]},{"start":[792,126],"end":[1393,145],"points":[[792,127],[791,128],[790,129],[788,131],[787,132],[785,135],[782,137],[779,140],[777,141],[774,143],[772,145],[769,148],[767,150],[767,151],[766,151],[766,152],[766,153],[766,154],[767,159],[769,162],[774,167],[780,172],[786,178],[796,185],[809,192],[822,195],[841,199],[861,200],[882,201],[910,201],[937,199],[970,196],[1009,192],[1048,187],[1089,182],[1130,178],[1172,172],[1206,167],[1242,162],[1280,156],[1309,151],[1338,146],[1361,142],[1381,139],[1396,137],[1411,135],[1419,134],[1424,133],[1425,133],[1425,132],[1425,133],[1424,133],[1424,134],[1423,134],[1422,134],[1421,135],[1420,135],[1418,136],[1414,138],[1410,139],[1406,141],[1402,142],[1398,144],[1395,145],[1393,145]],"dx":601,"dy":19,"length":757.2827785468282,"timing":[0,7,14,21,28,35,42,49,56,63,70,77,84,91,125,158,161,167,174,181,188,195,202,209,216,223,229,236,243,250,257,264,271,278,285,292,299,306,313,320,327,334,341,348,354,361,368,375,382,405,413,423,426,432,562,573,578,584,591,598,604,611,618,625,632]},{"start":[1754,580],"end":[1044,265],"points":[[1753,580],[1753,581],[1752,581],[1750,583],[1747,585],[1742,588],[1735,591],[1727,594],[1719,598],[1710,603],[1700,608],[1693,611],[1686,615],[1678,618],[1671,622],[1660,625],[1646,628],[1626,630],[1605,632],[1578,633],[1546,633],[1510,633],[1474,629],[1440,625],[1401,618],[1364,607],[1337,596],[1306,580],[1275,560],[1249,539],[1226,517],[1206,495],[1182,470],[1163,449],[1146,430],[1133,414],[1122,399],[1114,384],[1109,371],[1105,358],[1104,349],[1103,342],[1103,337],[1103,333],[1103,330],[1103,327],[1103,325],[1101,322],[1099,319],[1096,316],[1092,314],[1089,312],[1086,312],[1084,311],[1082,310],[1081,310],[1081,309],[1080,309],[1079,308],[1077,307],[1074,303],[1071,300],[1068,295],[1062,289],[1057,282],[1052,275],[1048,270],[1045,267],[1044,266],[1044,265]],"dx":-710,"dy":-315,"length":892.4756564390516,"timing":[0,4,11,18,25,32,39,46,53,60,67,74,81,88,95,101,108,115,122,129,136,143,150,157,164,171,178,185,192,199,206,213,220,226,233,240,247,254,261,268,275,282,289,296,303,310,317,324,331,338,345,351,358,365,372,379,386,393,400,407,414,421,428,435,442,449,456,463,469,476]},{"start":[1446,508],"end":[334,608],"points":[[1446,508],[1447,508],[1448,508],[1449,509],[1452,510],[1455,512],[1456,512],[1456,513],[1455,513],[1448,514],[1428,520],[1404,527],[1376,534],[1349,541],[1318,551],[1291,560],[1254,570],[1214,578],[1172,584],[1127,589],[1076,594],[1025,599],[968,603],[917,607],[866,611],[803,617],[755,621],[707,626],[665,632],[627,637],[598,640],[569,642],[548,643],[530,643],[516,641],[506,639],[498,636],[494,633],[492,630],[491,628],[491,625],[491,623],[491,620],[491,618],[491,616],[490,614],[489,613],[487,612],[485,611],[481,610],[476,609],[468,609],[458,609],[447,609],[432,609],[417,609],[400,609],[384,609],[370,609],[358,609],[348,609],[340,608],[337,608],[335,608],[334,608]],"dx":-1112,"dy":100,"length":1165.532220847031,"timing":[0,82,86,91,97,104,111,198,202,209,216,222,229,236,243,250,257,264,271,278,285,292,299,306,313,320,327,334,341,347,354,361,368,375,382,389,396,403,410,417,424,431,438,445,452,459,466,472,479,486,493,500,507,514,521,528,535,542,549,556,563,570,577,584,591]},{"start":[334,608],"end":[1742,419],"points":[[333,608],[334,608],[335,608],[337,608],[338,608],[340,607],[344,607],[350,607],[360,607],[374,608],[393,611],[419,614],[448,618],[478,622],[511,627],[553,633],[595,640],[643,650],[684,657],[722,666],[747,673],[770,681],[785,687],[796,694],[805,702],[811,709],[817,718],[821,727],[823,735],[824,742],[823,746],[822,750],[821,752],[820,753],[818,755],[817,756],[815,757],[814,758],[814,759],[814,760],[814,761],[814,762],[817,764],[822,764],[830,764],[842,764],[859,762],[878,758],[903,753],[933,747],[968,738],[1006,729],[1053,717],[1104,704],[1162,687],[1222,669],[1288,647],[1356,623],[1421,598],[1489,571],[1552,543],[1602,517],[1657,488],[1702,463],[1744,438],[1778,417],[1804,400],[1822,387],[1835,376],[1844,368],[1849,363],[1851,360],[1852,359],[1851,359],[1850,359],[1849,359],[1846,359],[1842,360],[1839,361],[1837,362],[1836,362],[1835,362],[1834,363],[1832,363],[1828,365],[1823,368],[1817,373],[1810,379],[1801,386],[1793,393],[1784,399],[1775,406],[1766,411],[1758,416],[1751,418],[1746,419],[1743,419],[1742,419]],"dx":1408,"dy":-189,"length":1810.7942564307032,"timing":[0,49,57,65,70,77,84,91,98,105,112,119,126,133,140,147,154,161,168,175,181,188,195,202,209,216,223,230,237,244,251,258,265,272,279,286,293,299,306,313,320,327,334,341,348,355,362,369,376,383,390,397,404,411,418,425,431,438,445,452,459,466,473,480,487,494,501,508,515,522,529,536,543,556,560,563,570,577,584,591,598,662,668,675,682,688,695,702,709,716,723,730,737,744,751,758,765,772]},{"start":[895,813],"end":[1339,158],"points":[[895,813],[896,813],[896,812],[897,809],[898,804],[899,795],[899,786],[899,776],[898,763],[895,748],[891,733],[884,717],[877,704],[869,691],[861,681],[853,673],[845,666],[835,660],[826,655],[817,650],[809,645],[805,640],[805,634],[808,625],[817,613],[828,601],[839,590],[854,577],[877,560],[900,544],[926,527],[957,509],[989,490],[1023,469],[1057,449],[1092,426],[1125,403],[1157,376],[1183,354],[1208,329],[1227,308],[1244,287],[1257,266],[1266,251],[1272,239],[1277,225],[1280,213],[1283,203],[1286,193],[1288,186],[1291,180],[1293,175],[1295,171],[1298,167],[1301,164],[1303,160],[1306,158],[1308,155],[1309,154],[1310,154],[1310,153],[1311,152],[1311,151],[1312,151],[1313,150],[1314,149],[1315,147],[1316,146],[1318,145],[1319,145],[1320,145],[1321,144],[1323,144],[1325,145],[1328,147],[1331,149],[1334,152],[1336,155],[1338,157],[1338,158],[1339,158]],"dx":444,"dy":-655,"length":975.1380374907407,"timing":[0,53,55,62,69,76,83,90,97,104,111,118,125,132,138,145,152,159,166,173,180,187,194,201,208,215,222,229,236,243,250,257,263,270,277,284,291,298,305,312,319,326,333,340,347,354,361,368,375,382,388,395,402,409,416,423,430,437,444,451,458,465,473,479,486,493,500,506,513,520,527,534,541,548,555,562,569,576,583,590,597]},{"start":[1280,274],"end":[587,485],"points":[[1280,275],[1280,276],[1279,276],[1279,277],[1278,277],[1278,278],[1277,279],[1276,279],[1275,280],[1274,281],[1273,282],[1271,283],[1269,284],[1267,286],[1265,287],[1260,291],[1252,296],[1242,302],[1227,310],[1210,317],[1187,325],[1159,334],[1128,344],[1095,354],[1057,364],[1024,371],[990,377],[952,383],[918,387],[885,391],[851,394],[823,395],[794,396],[766,396],[742,396],[721,396],[702,396],[688,396],[678,397],[670,398],[664,399],[660,400],[656,401],[653,402],[650,403],[647,404],[644,405],[641,408],[637,411],[634,414],[630,419],[627,424],[624,429],[622,434],[619,439],[617,443],[615,447],[612,452],[609,457],[605,462],[601,467],[597,472],[593,477],[591,480],[590,481],[588,483],[588,484],[587,485]],"dx":-693,"dy":211,"length":759.8996927363053,"timing":[0,11,15,22,30,34,41,48,55,62,69,76,83,90,97,104,111,118,125,132,138,145,152,159,166,173,180,187,194,201,208,215,222,229,236,243,250,257,263,270,277,284,291,298,305,312,319,326,333,340,347,354,361,368,375,382,389,395,402,409,416,423,430,437,444,451,458,465]},{"start":[583,462],"end":[1380,149],"points":[[583,462],[584,462],[584,463],[588,466],[596,472],[606,479],[621,485],[635,489],[654,492],[678,494],[703,494],[732,492],[761,488],[799,482],[838,474],[873,465],[911,452],[947,437],[980,420],[1018,399],[1052,379],[1084,359],[1117,338],[1146,319],[1174,301],[1193,288],[1217,273],[1234,261],[1251,250],[1267,239],[1278,232],[1286,226],[1291,221],[1293,218],[1293,215],[1293,213],[1291,212],[1289,209],[1287,208],[1285,206],[1284,206],[1284,205],[1284,204],[1285,203],[1288,199],[1291,196],[1294,193],[1297,190],[1301,187],[1307,184],[1315,181],[1324,179],[1335,177],[1347,174],[1361,172],[1372,170],[1381,166],[1387,162],[1391,158],[1393,155],[1394,153],[1394,151],[1393,151],[1392,151],[1390,151],[1389,151],[1386,150],[1384,150],[1382,150],[1380,149]],"dx":797,"dy":-313,"length":951.8209350779072,"timing":[0,156,160,167,174,181,188,195,202,209,216,223,230,236,243,250,257,264,271,278,285,292,299,306,313,320,327,334,341,348,355,361,368,375,382,389,396,403,410,417,424,431,438,445,452,459,466,473,480,486,493,500,507,514,521,528,535,542,549,556,563,570,646,653,661,667,674,681,688,695]},{"start":[660,263],"end":[168,276],"points":[[660,263],[660,264],[661,264],[662,265],[663,267],[666,270],[668,273],[671,277],[674,280],[677,284],[679,287],[682,291],[685,295],[689,301],[693,307],[697,313],[701,319],[703,324],[704,328],[705,331],[705,334],[704,336],[701,338],[694,339],[682,341],[662,342],[638,342],[607,342],[578,340],[544,338],[510,335],[472,332],[438,330],[398,326],[364,323],[331,319],[296,316],[266,312],[240,309],[217,306],[203,305],[189,303],[182,301],[176,298],[172,295],[170,292],[169,290],[168,288],[168,286],[168,283],[168,282],[168,280],[168,279],[168,278],[168,277],[168,276]],"dx":-492,"dy":13,"length":644.9796872140976,"timing":[0,38,42,48,55,62,69,76,83,90,97,104,111,118,125,132,139,145,152,159,166,173,180,187,194,201,208,215,222,229,236,243,250,257,263,270,277,284,291,298,305,312,319,326,333,340,347,354,361,368,375,382,393,409,422,472]},{"start":[108,731],"end":[705,602],"points":[[109,731],[110,731],[111,731],[112,731],[113,731],[115,730],[117,729],[119,729],[120,728],[122,727],[124,727],[126,725],[128,724],[129,723],[130,723],[130,722],[131,722],[132,721],[136,719],[144,717],[156,714],[172,711],[199,706],[224,701],[256,696],[290,690],[324,684],[362,677],[399,671],[438,665],[476,660],[509,657],[538,654],[572,651],[598,649],[626,646],[649,645],[666,643],[682,641],[692,639],[699,638],[701,637],[701,636],[700,635],[699,633],[699,630],[699,627],[699,623],[699,619],[700,615],[701,611],[702,608],[703,605],[704,603],[705,603],[705,602]],"dx":597,"dy":-129,"length":640.5698029966846,"timing":[0,33,43,48,52,59,66,73,80,87,94,101,108,115,122,129,136,143,150,157,164,170,177,184,191,198,205,212,219,226,233,240,247,254,261,268,275,282,289,295,302,309,444,462,469,476,483,490,497,504,511,518,525,532,538,547]},{"start":[705,602],"end":[660,169],"points":[[705,603],[706,603],[706,604],[707,604],[708,604],[708,603],[709,603],[709,602],[710,601],[711,600],[712,599],[714,597],[715,594],[717,591],[720,584],[723,577],[726,568],[729,557],[732,546],[736,529],[738,514],[739,495],[739,480],[734,460],[729,441],[722,422],[715,404],[707,385],[700,367],[692,349],[685,333],[678,319],[671,304],[666,291],[662,279],[657,267],[653,256],[648,247],[645,240],[643,235],[641,231],[640,227],[639,224],[639,222],[639,219],[638,216],[638,214],[638,212],[638,209],[638,208],[638,206],[639,204],[640,203],[641,201],[644,197],[646,194],[650,190],[653,185],[655,181],[658,176],[659,173],[660,171],[660,169]],"dx":-45,"dy":-433,"length":472.28397891080095,"timing":[0,8,9,15,62,101,106,113,120,127,133,140,147,154,161,168,175,182,189,196,203,210,217,224,231,238,245,252,258,265,272,279,286,293,300,307,314,321,328,335,342,349,356,363,370,377,383,390,397,404,411,418,425,432,439,446,453,460,467,474,481,488,495]},{"start":[662,169],"end":[311,464],"points":[[662,169],[662,170],[662,171],[662,172],[661,174],[661,176],[661,178],[660,181],[660,185],[660,190],[660,195],[660,201],[661,207],[663,212],[664,218],[665,223],[667,228],[668,232],[669,236],[670,239],[671,242],[671,245],[671,250],[671,256],[671,262],[668,269],[663,275],[657,282],[649,287],[640,293],[627,298],[613,303],[598,308],[580,314],[563,319],[542,327],[520,335],[500,343],[483,351],[462,362],[441,374],[425,386],[406,399],[392,410],[380,419],[370,425],[363,429],[356,433],[351,436],[347,438],[344,441],[342,442],[340,443],[340,444],[339,444],[338,445],[337,445],[337,446],[335,448],[333,450],[331,452],[328,454],[325,456],[322,458],[320,459],[318,461],[316,462],[315,462],[314,462],[313,463],[312,464],[311,464]],"dx":-351,"dy":295,"length":515.7792612146217,"timing":[0,8,16,21,28,35,42,49,55,62,69,76,83,90,97,104,111,118,125,132,139,146,153,160,167,173,180,187,194,201,208,215,222,229,236,243,250,257,264,271,278,285,292,299,305,312,319,326,333,340,347,354,361,369,375,386,391,396,403,410,417,424,430,437,444,451,458,465,472,479,486,492]},{"start":[364,196],"end":[1251,459],"points":[[364,196],[364,198],[366,198],[367,198],[369,198],[370,200],[372,201],[372,203],[376,205],[378,206],[380,209],[384,212],[388,214],[393,218],[400,222],[409,228],[418,234],[432,242],[447,248],[467,257],[484,266],[504,277],[523,285],[543,296],[567,307],[592,316],[616,327],[644,337],[668,346],[693,354],[724,362],[751,369],[778,375],[808,380],[856,389],[881,393],[905,400],[929,404],[951,408],[971,415],[987,419],[1004,423],[1020,430],[1037,434],[1051,438],[1065,442],[1079,446],[1091,450],[1102,454],[1114,457],[1123,461],[1132,464],[1143,466],[1169,474],[1182,478],[1187,478],[1188,479],[1190,479],[1192,479],[1195,479],[1196,479],[1202,478],[1206,478],[1214,477],[1219,474],[1227,473],[1232,471],[1237,470],[1240,468],[1244,466],[1248,466],[1249,463],[1251,461],[1251,459]],"dx":887,"dy":263,"length":952.6862608061973,"timing":[0,137,144,152,160,168,176,184,192,201,209,216,226,233,241,249,258,266,274,283,291,299,308,316,324,333,341,349,358,366,374,383,391,400,408,416,424,433,442,449,458,466,474,483,491,499,508,516,524,533,541,549,560,582,592,600,608,616,696,716,724,733,741,749,758,766,774,783,791,799,808,816,945,1114]},{"start":[1056,174],"end":[633,357],"points":[[1054,174],[1053,176],[1052,176],[1049,176],[1047,177],[1044,178],[1043,178],[1042,179],[1040,179],[1040,181],[1038,181],[1036,182],[1035,182],[1033,183],[1031,184],[1028,186],[1024,187],[1020,189],[1013,192],[1004,195],[997,198],[986,202],[976,206],[948,216],[934,222],[915,229],[896,235],[874,242],[847,249],[819,258],[791,267],[757,278],[731,284],[703,294],[681,300],[661,311],[644,318],[635,323],[628,330],[624,333],[620,338],[617,342],[616,345],[615,346],[615,347],[615,348],[615,350],[615,352],[618,353],[619,353],[620,354],[621,354],[622,354],[624,354],[626,354],[628,355],[630,355],[631,357],[632,357],[633,357]],"dx":-423,"dy":183,"length":505.47692011107466,"timing":[0,8,16,25,40,58,66,75,83,91,100,108,116,126,133,141,150,158,166,175,183,191,200,208,216,225,233,241,250,258,266,275,283,291,300,308,316,325,333,341,350,358,366,375,383,391,399,448,474,488,496,504,512,520,528,550,558,567,575,616]},{"start":[1329,606],"end":[455,471],"points":[[1329,605],[1328,602],[1325,601],[1322,599],[1320,597],[1318,595],[1318,594],[1317,594],[1317,592],[1317,588],[1317,587],[1316,585],[1316,580],[1316,578],[1316,574],[1316,567],[1314,562],[1312,555],[1311,549],[1309,540],[1304,531],[1300,519],[1292,510],[1284,498],[1274,488],[1260,478],[1243,466],[1223,456],[1200,447],[1179,436],[1154,427],[1129,420],[1105,414],[1081,410],[1056,407],[1032,402],[1008,401],[982,398],[958,396],[925,396],[896,398],[863,400],[828,402],[788,408],[752,413],[721,418],[685,422],[624,434],[598,439],[573,446],[554,450],[532,454],[516,458],[502,462],[493,464],[484,466],[480,467],[476,469],[473,469],[471,469],[468,470],[467,470],[464,470],[462,470],[460,471],[458,471],[456,471],[455,471]],"dx":-874,"dy":-135,"length":981.1643099137635,"timing":[0,7,15,23,31,53,62,71,176,183,191,199,207,215,223,231,239,247,255,263,271,280,287,295,303,312,320,328,337,345,353,361,370,378,387,395,403,412,420,428,436,445,453,462,470,479,487,495,504,512,520,528,537,545,553,562,570,578,587,595,603,612,620,628,637,645,653,768]},{"start":[1027,400.5],"end":[266,367],"points":[[1027,400.5],[1024.5,398],[1020.5,395.5],[1015.5,394],[1011.5,391.5],[1009,389],[1002.5,380],[994.5,371],[988,361.5],[975,348.5],[957,332],[949,325.5],[948,324],[936,313.5],[923,303],[890.5,285],[861,274.5],[812.5,269.5],[767,270.5],[733.5,277],[665.5,303],[611,325],[555,343.5],[478.5,357.5],[411,364],[347,368],[318.5,368],[299,367],[285,363],[275.5,359],[272,357.5],[268,354],[269,351],[268,351],[266.5,351],[266.5,350],[265.5,350],[265.5,352.5],[265.5,355],[265.5,359],[265.5,361.5],[265.5,364],[265.5,367]],"dx":[-761,-33.5],"dy":[-761,-33.5],"length":847.7435824635796,"timing":[66,80,96,116,130,147,163,180,197,214,230,246,263,280,297,313,330,346,365,380,395,413,430,447,463,480,496,514,529,547,563,579,597,675,698,713,781,797,812,829,846,864,888]},{"start":[561.5,296.5],"end":[358,117],"points":[[561.5,296.5],[591.5,290],[606,287.5],[641,281],[672,275.5],[719,268],[747.5,260],[755.5,255],[749,253.5],[717.5,252.5],[677.5,252.5],[668,253.5],[667,253.5],[664.5,252.5],[655,247],[638.5,235.5],[604.5,210.5],[567,190],[507,168],[469.5,156],[417.5,145.5],[370.5,138],[356,136.5],[343,134],[340.5,131.5],[340.5,130],[343,126],[343,123.5],[343,122],[343,121],[344.5,118.5],[345.5,117],[347,117],[351,117],[353.5,117],[357.5,117]],"dx":[-203.5,-179.5],"dy":[-203.5,-179.5],"length":669.7933247439374,"timing":[15,32,49,66,82,98,115,131,149,165,182,199,246,265,282,298,316,333,348,366,383,400,416,432,448,465,510,532,567,591,615,632,649,664,682,699]},{"start":[362.5,127.5],"end":[1380,781],"points":[[362.5,127.5],[362.5,128.5],[362.5,131.5],[362.5,134],[364,136.5],[365,138],[365,139],[366.5,139],[369,140.5],[374.5,143],[381,147],[388.5,149.5],[413.5,153.5],[444.5,156],[492.5,161],[512,165],[566.5,179.5],[651,227.5],[711,277],[795.5,349.5],[837,383.5],[960.5,479.5],[1014,521],[1072.5,568],[1123,612],[1167,655],[1192,678.5],[1207.5,694],[1218,707],[1222,717.5],[1227,739.5],[1229.5,746],[1237.5,756.5],[1250.5,771],[1266,780],[1270,780],[1272.5,780],[1275,780],[1283,786.5],[1289.5,791.5],[1296,794],[1299.5,795.5],[1303.5,795.5],[1312.5,791.5],[1318,790],[1328.5,790],[1336,790],[1342.5,790],[1346.5,790],[1351.5,790],[1359.5,790],[1367.5,790],[1372.5,787.5],[1375,786.5],[1377.5,783.5],[1379,782.5],[1380,781]],"dx":[1017.5,653.5],"dy":[1017.5,653.5],"length":1274.2481758022743,"timing":[6,22,42,56,72,88,145,160,172,189,205,223,238,255,271,288,306,322,338,356,371,389,405,422,438,456,472,487,505,522,547,555,572,589,605,622,638,655,672,689,705,722,738,755,772,789,806,824,838,855,872,888,904,923,938,955,972]},{"start":[1380,780],"end":[702,614],"points":[[1380,780],[1380,778.5],[1379,778.5],[1379,777],[1377.5,777],[1376.5,776],[1373.5,774.5],[1370,770.5],[1358,764],[1325.5,750],[1281.5,737],[1217.5,722.5],[1134.5,708.5],[1067,698],[941,681],[864,674.5],[824,670.5],[779.5,665.5],[755,657.5],[752.5,655],[753.5,655],[755,652.5],[755,650],[751,646],[746,642],[736.5,637],[717,627.5],[701.5,618.5],[700.5,617.5],[701.5,616],[701.5,614.5],[701.5,613.5]],"dx":[-678,-166],"dy":[-678,-166],"length":721.8503853634818,"timing":[32,123,138,146,197,209,226,242,259,276,292,308,325,343,359,376,392,409,425,443,459,476,492,510,526,543,558,576,593,609,625,723]},{"start":[765,592.5],"end":[1619,580],"points":[[765,592.5],[766.5,592.5],[769,588.5],[779.5,579.5],[795,568],[817,556],[844.5,551],[940.5,551],[1022.5,562.5],[1093,573],[1194,588.5],[1299.5,601.5],[1425.5,612],[1529.5,613.5],[1624.5,614.5],[1696,616],[1706,621],[1698.5,621],[1688,618.5],[1676,616],[1664.5,613],[1643.5,612],[1630.5,612],[1621.5,612],[1617.5,612],[1617.5,610.5],[1615,609.5],[1611,605.5],[1606,601.5],[1606,600],[1606,599],[1607,595],[1608.5,592.5],[1611,588.5],[1613.5,586],[1615,584.5],[1616.5,582],[1619,580.5],[1619,579.5]],"dx":[854,-12.5],"dy":[854,-12.5],"length":1091.5224735365375,"timing":[195,203,216,233,249,266,282,298,316,333,349,366,383,400,417,433,516,532,550,566,583,599,617,634,649,696,716,733,749,766,783,800,816,832,849,866,883,899,915]},{"start":[1611,582],"end":[1286,22],"points":[[1611,582],[1610,582],[1607,582],[1603.5,582],[1597,583.5],[1589,583.5],[1586.5,584.5],[1582.5,584.5],[1581,584.5],[1580,584.5],[1577.5,584.5],[1571,584.5],[1565.5,583.5],[1552.5,580.5],[1539.5,577],[1533,571.5],[1522.5,561],[1494,519.5],[1465.5,478],[1443.5,444],[1418.5,404],[1385,350.5],[1351,280.5],[1335.5,232.5],[1321,183],[1310.5,149],[1305.5,120.5],[1312,88],[1318.5,71],[1321,60.5],[1322.5,47.5],[1322.5,36],[1321,28],[1318.5,24],[1317,23],[1314.5,20.5],[1313.5,19],[1312,17.5],[1310.5,17.5],[1308,17.5],[1299,17.5],[1294,19],[1288.5,20.5],[1287.5,21.5],[1286,21.5]],"dx":[-325,-560],"dy":[-325,-560],"length":727.6377468528751,"timing":[4,20,37,55,71,88,104,120,138,154,171,186,204,220,238,253,270,288,304,321,337,354,370,387,404,422,437,453,470,487,504,520,537,554,618,638,654,670,687,704,720,737,755,771,787]},{"start":[1256,51.5],"end":[854,126],"points":[[1256,51.5],[1245.5,64.5],[1242,71],[1217,99.5],[1197.5,120.5],[1156,153],[1138,166],[1118.5,177.5],[1104,186.5],[1095,193],[1085.5,199.5],[1078,207.5],[1071.5,218],[1071.5,223],[1074,223],[1076.5,220.5],[1078,215],[1076.5,210],[1053,202],[1026,202],[994.5,201],[935,201],[879,199.5],[797,193],[753,184],[721.5,172.5],[715,167],[714,159.5],[723,153],[725.5,151.5],[728,151.5],[731,151.5],[745,154],[755.5,155.5],[768.5,155.5],[777.5,155.5],[782.5,155.5],[784,155.5],[786.5,155.5],[794.5,155.5],[807.5,154],[819,150],[829.5,145],[841,138.5],[844,136],[851.5,129.5],[854,126.5],[854,125.5]],"dx":[-402,74.5],"dy":[-402,74.5],"length":800.990610498714,"timing":[15,33,49,65,82,99,115,132,149,165,182,198,215,232,249,266,282,298,315,332,348,365,382,398,415,432,449,466,482,499,515,532,549,564,582,598,616,632,648,665,682,699,716,732,748,766,782,816]},{"start":[815,151.5],"end":[1412,790],"points":[[815,151.5],[811.5,154],[808.5,155.5],[806,156.5],[805,158],[803.5,158],[802,159],[801,160.5],[798.5,162],[795.5,163],[793,164.5],[788,167],[785,168.5],[784,169.5],[784,171],[785,172],[788,174.5],[794.5,182.5],[814,198],[859.5,230.5],[942.5,294.5],[1032,362],[1131,437.5],[1204,490.5],[1317,570],[1370,610],[1391,628.5],[1399,640],[1399,646.5],[1396,648],[1392.5,649],[1386,650.5],[1382,654.5],[1380.5,655.5],[1379.5,661],[1379.5,671.5],[1379.5,683],[1379.5,688],[1379.5,693.5],[1379.5,696],[1380.5,702.5],[1383,714],[1386,729.5],[1388.5,746.5],[1391,757],[1392,765],[1395,772.5],[1400,783],[1405,789.5],[1408,793.5],[1409,793.5],[1409,791],[1410.5,789.5],[1411.5,789.5]],"dx":[597,638.5],"dy":[597,638.5],"length":990.6597711015852,"timing":[3,18,36,52,71,86,102,118,134,152,168,185,201,218,236,251,268,285,302,318,336,352,371,385,401,419,435,452,468,485,501,518,535,551,568,585,602,618,636,652,668,687,703,718,736,752,770,786,802,818,934,951,968,1052]},{"start":[1411.5,787],"end":[1534,732],"points":[[1411.5,787],[1411.5,783],[1409,780.5],[1404,770],[1396,759.5],[1384.5,746.5],[1352,715.5],[1330,697],[1284.5,661],[1223,610],[1183,577.5],[1136,540],[1044,466],[984,429.5],[963,417.5],[962,410],[972.5,407],[979,406],[985,406],[1020.5,423],[1051.5,438.5],[1120.5,472],[1196,502],[1281.5,528],[1346.5,546.5],[1397.5,564.5],[1441.5,586.5],[1482,621.5],[1496,645],[1498.5,660.5],[1498.5,670],[1498.5,693],[1505,714],[1510.5,725.5],[1515.5,736],[1517,737.5],[1521,737.5],[1523.5,738.5],[1527.5,742.5],[1530,746.5],[1532.5,749],[1534,749],[1534,745],[1534,740],[1534,737.5],[1534,736],[1534,734.5],[1534,733.5],[1534,732]],"dx":[122.5,-55],"dy":[122.5,-55],"length":1325.3623326782374,"timing":[17,33,50,67,83,101,116,132,150,167,184,200,215,233,249,267,284,300,318,337,350,366,383,401,417,433,449,466,484,500,517,533,550,567,585,601,616,634,650,668,684,798,818,834,851,866,886,901,916]},{"start":[1532.5,729.5],"end":[1171,331],"points":[[1532.5,729.5],[1531,728],[1518,715],[1505,706],[1496,698.5],[1467.5,679],[1445.5,664.5],[1429.5,654],[1403.5,637],[1379,625.5],[1372.5,623],[1372.5,621.5],[1371,621.5],[1370,619],[1367.5,616.5],[1348,591.5],[1335,577.5],[1311.5,551.5],[1292,530.5],[1273.5,508.5],[1250.5,478.5],[1232,452.5],[1218,433],[1214,424],[1214,419],[1214,415],[1214,409.5],[1212.5,407],[1211.5,402],[1210,399],[1210,395.5],[1210,389],[1208.5,379.5],[1203.5,369.5],[1188,350],[1177.5,342],[1173.5,337],[1171,335.5],[1171,333],[1171,331.5],[1171,330.5]],"dx":[-361.5,-398.5],"dy":[-361.5,-398.5],"length":558.2939636118049,"timing":[11,29,45,61,80,95,112,128,145,161,178,201,212,228,245,261,278,294,312,331,348,362,378,397,412,428,444,462,481,494,511,528,546,563,577,594,611,628,645,693,734]},{"start":[1162,331.5],"end":[83,7],"points":[[1162,331.5],[1159,331.5],[1152.5,331.5],[1138.5,329],[1123,326.5],[1110,324],[1103.5,322.5],[1095.5,321],[1091.5,320],[1089,320],[1086.5,318.5],[1082.5,318.5],[1068,317.5],[1061.5,316],[1056.5,314.5],[1046,312],[1029,308],[982.5,298],[915,282],[825,264],[746,247],[683.5,233],[491,186],[419.5,166.5],[337.5,143],[276.5,119.5],[237.5,96.5],[229.5,83.5],[229.5,74],[224.5,65],[216.5,58.5],[190.5,47],[170,37.5],[151.5,31],[134.5,24.5],[116.5,17],[92,9],[89,6.5],[90.5,5],[89,5],[88,5],[86.5,5],[85.5,5],[84,5],[84,6.5],[82.5,6.5]],"dx":[-1079,-324.5],"dy":[-1079,-324.5],"length":1152.4792089426835,"timing":[10,26,43,61,77,92,111,128,143,160,177,193,211,227,243,260,277,294,309,326,342,361,376,394,409,427,444,460,476,493,511,526,544,559,577,593,609,627,644,724,794,810,826,843,898,910]},{"start":[73.5,18],"end":[787,434],"points":[[73.5,18],[79,22],[90.5,28.5],[116.5,41.5],[132,50.5],[150.5,62.5],[199.5,100],[241.5,138],[324.5,213],[372.5,256],[467.5,339.5],[514.5,377],[550.5,404],[583,423.5],[614.5,436.5],[628.5,439.5],[640.5,439.5],[650.5,438],[663.5,435.5],[675.5,435.5],[693.5,436.5],[714.5,442],[732.5,446],[738,446],[743,446],[751,444.5],[760,440.5],[778,436.5],[783.5,434],[784.5,434],[784.5,433],[786,433],[786,434],[787,434]],"dx":[713.5,416],"dy":[713.5,416],"length":865.6032872706678,"timing":[274,292,307,324,339,356,374,389,407,423,441,456,472,491,509,523,540,556,574,590,606,623,642,656,674,690,707,724,741,757,773,821,847,912]},{"start":[778,444.5],"end":[258,142],"points":[[778,444.5],[777,446],[770.5,449.5],[767.5,453.5],[766.5,457.5],[765,458.5],[765,457.5],[765,455],[764,448.5],[761,436.5],[751,410.5],[731.5,388.5],[699,367.5],[682,357.5],[621,327.5],[549.5,293.5],[481.5,261],[433.5,236.5],[368.5,201.5],[293,161],[267,146.5],[245,133.5],[236,126],[233.5,123.5],[234.5,123.5],[234.5,122],[236,122],[237,122],[242.5,128.5],[247.5,133.5],[251.5,137.5],[254,139],[256.5,141.5],[258,141.5]],"dx":[-520,-302.5],"dy":[-520,-302.5],"length":698.9070900418914,"timing":[4,22,38,55,72,88,194,205,222,238,257,271,288,308,322,338,354,371,389,405,421,438,455,473,490,540,554,686,705,721,740,756,771,789]},{"start":[338.5,185.5],"end":[651,463],"points":[[338.5,185.5],[347.5,189.5],[351.5,192],[364.5,198.5],[380,207.5],[385.5,211.5],[395.5,217],[405,220.5],[408.5,222],[412.5,224.5],[420.5,228.5],[434.5,235],[464.5,248],[519,270],[538.5,278],[564.5,292],[584,307.5],[609,336.5],[623,356],[648,400],[652,417],[652,423.5],[646.5,434],[645.5,448],[646.5,456],[648,460],[650.5,462.5]],"dx":[312.5,277.5],"dy":[312.5,277.5],"length":453.8739603160394,"timing":[10,27,44,60,76,94,110,127,143,160,176,193,210,227,243,260,278,293,310,326,343,362,378,393,410,426,444]},{"start":[661,449.5],"end":[1025,300],"points":[[661,449.5],[663.5,448],[666,445.5],[667.5,444],[667.5,443],[668.5,443],[670,440.5],[671,437.5],[674,432.5],[676.5,430],[677.5,427.5],[679,426],[679,424.5],[680.5,423.5],[690.5,417],[709,408],[729.5,398.5],[776.5,383],[828.5,367.5],[883,354.5],[932.5,344],[946.5,340],[983,328.5],[1002.5,318],[1021,305],[1024.5,301],[1024.5,300]],"dx":[364,-149.5],"dy":[364,-149.5],"length":403.5107829985193,"timing":[11,28,44,75,84,94,111,128,144,160,177,195,212,227,244,260,278,295,312,328,344,360,381,394,410,427,596]},{"start":[991,323],"end":[337,76],"points":[[991,323],[984.5,328.5],[979,332.5],[971.5,341.5],[969,346.5],[966,350.5],[966,351.5],[962.5,354.5],[962.5,355.5],[959.5,357],[956,358],[952,361],[946.5,363.5],[937.5,366],[914,368.5],[880.5,367.5],[840,361],[788,345],[725.5,315.5],[680,285.5],[628,246.5],[604.5,228],[567,202],[497,163],[446,141],[420,129.5],[387.5,116.5],[351,101],[341,98],[339.5,94.5],[341,93],[342,91.5],[343.5,90.5],[343.5,89],[343.5,88],[343.5,86.5],[343.5,84],[341,82.5],[339.5,82.5],[338,81.5],[338,78.5],[337,77.5],[337,76]],"dx":[-654,-247],"dy":[-654,-247],"length":765.7005091380192,"timing":[2,18,34,52,68,85,101,118,135,152,168,185,202,218,235,251,268,285,302,317,335,351,369,385,401,418,434,451,468,484,501,517,535,670,737,752,769,785,805,822,836,852,871]},{"start":[387.5,112.5],"end":[463,115],"points":[[387.5,112.5],[415,130.5],[424,137],[461.5,162],[476,171],[508.5,191.5],[573.5,236],[602,256.5],[629.5,277.5],[676,314],[694.5,327],[711,337],[724,346.5],[733.5,353],[732,353],[721.5,346.5],[719,345],[715,343.5],[714,341],[708.5,334.5],[702,327],[680,304.5],[646,275],[574.5,220],[555,207],[522.5,182.5],[496.5,158],[487.5,145],[486.5,135.5],[486.5,132],[487.5,129],[486.5,128],[482.5,126.5],[473.5,121.5],[469.5,120],[463,117.5],[463,116],[463,115]],"dx":[75.5,2.5],"dy":[75.5,2.5],"length":792.1047935199686,"timing":[8,25,41,58,75,90,107,124,141,158,175,191,208,225,249,274,292,308,325,340,357,376,391,418,424,442,459,474,491,507,525,549,576,592,607,626,642,680]},{"start":[495.5,146],"end":[648,313],"points":[[495.5,146],[504.5,152.5],[509.5,155],[516,159],[520,160.5],[521.5,161.5],[524,163],[530.5,165.5],[541,168],[548.5,169.5],[550,169.5],[551,169.5],[552.5,169.5],[561.5,173.5],[576,180],[604.5,198],[617.5,212.5],[637,245],[647.5,269.5],[655,290.5],[656.5,297],[655,299.5],[654,299.5],[654,298],[652.5,298],[650,295.5],[648.5,294],[647.5,294],[647.5,295.5],[646,295.5],[646,297],[646,298],[646,299.5],[646,300.5],[646,303],[646,306],[646,307],[647.5,311],[647.5,312.5]],"dx":[152.5,167],"dy":[152.5,167],"length":269.01305026884614,"timing":[9,25,43,58,75,92,110,125,142,159,176,230,242,259,276,292,309,325,343,359,375,392,448,465,476,493,509,560,576,598,680,745,817,828,843,859,875,893,1007]},{"start":[647.5,316],"end":[515,224],"points":[[647.5,316],[647.5,317.5],[646,317.5],[646,319],[646,320],[644.5,321.5],[643.5,321.5],[641,321.5],[633,317.5],[618.5,308.5],[596.5,291.5],[581,274.5],[569.5,259],[560,243.5],[555,237],[551,233],[550,230.5],[546,230.5],[540.5,229],[535.5,228],[526.5,226.5],[520,225],[516,225],[514.5,225],[514.5,224]],"dx":[-132.5,-92],"dy":[-132.5,-92],"length":179.06478899040877,"timing":[42,71,80,94,117,132,245,258,275,291,308,324,342,361,374,392,408,424,441,458,475,492,507,524,541]},{"start":[514.5,235.5],"end":[308,787],"points":[[514.5,235.5],[514.5,237],[514.5,238],[516,239.5],[516,240.5],[516,242],[516,243.5],[516,244.5],[517.5,246],[517.5,250],[516,255],[512,265.5],[498,290],[482,316],[457.5,359],[438,399.5],[422.5,430.5],[357.5,551.5],[339,581.5],[313,627],[302.5,645],[295,659.5],[284.5,682.5],[284.5,685],[288.5,686.5],[293.5,689],[302.5,701],[305.5,710],[308,720.5],[308,725.5],[308,730.5],[309,736],[309,740],[309,747.5],[309,756.5],[308,768.5],[308,773.5],[308,775],[308,776],[308,777.5],[308,780],[308,785.5],[308,786.5]],"dx":[-206.5,551.5],"dy":[-206.5,551.5],"length":621.2693716296524,"timing":[24,60,89,106,113,123,141,231,255,273,290,307,323,341,357,375,393,406,424,439,458,473,490,507,524,539,557,573,589,607,623,641,656,675,691,707,722,743,759,775,790,805,823]},{"start":[423.5,686.5],"end":[734,204],"points":[[423.5,686.5],[434,674.5],[444.5,665.5],[482,633],[500,619],[526,596.5],[545.5,581],[565,564],[569,556.5],[569,552.5],[569,544.5],[573,539.5],[578,535.5],[582,533],[584.5,530.5],[591,525],[623.5,495.5],[634,483.5],[656,460],[679.5,429],[696.5,399],[701.5,387.5],[716,336.5],[718.5,317],[721,305.5],[726.5,293.5],[729,288.5],[733,280.5],[738,266.5],[739.5,260],[739.5,254.5],[740.5,236.5],[740.5,226],[739.5,219.5],[738,213],[736.5,212],[734,208],[734,205.5],[734,204]],"dx":[310.5,-482.5],"dy":[310.5,-482.5],"length":606.904934907826,"timing":[4,21,38,55,72,87,104,120,138,154,170,189,205,222,237,256,280,289,305,321,339,354,371,388,403,421,437,454,471,487,504,521,538,555,572,587,604,620,655]},{"start":[733,205.5],"end":[478,96],"points":[[733,205.5],[733,208],[731.5,209],[730,212],[729,214.5],[729,217],[729,218],[727.5,218],[727.5,219.5],[726.5,219.5],[714.5,223.5],[694,218],[668,206.5],[645.5,193.5],[532.5,133.5],[495,113],[462.5,91],[453.5,79],[458.5,70],[463.5,66],[467.5,63.5],[470,63.5],[471.5,63.5],[475.5,67.5],[480.5,71.5],[485.5,76.5],[488.5,80.5],[489.5,84.5],[489.5,85.5],[488.5,85.5],[487,87],[482,91],[479,94.5],[478,96]],"dx":[-255,-109.5],"dy":[-255,-109.5],"length":401.67073914518187,"timing":[52,64,80,97,114,131,147,191,215,288,313,332,347,366,380,398,414,431,448,464,480,497,545,565,581,598,613,631,647,695,715,731,748,764]},{"start":[479,100],"end":[838,464],"points":[[479,100],[480.5,101],[483,103.5],[484.5,105],[485.5,107.5],[488.5,111.5],[491,114],[492,116.5],[493.5,119.5],[493.5,122],[493.5,123],[493.5,124.5],[493.5,126],[493.5,128.5],[495,133.5],[496,140],[509,168.5],[534,206.5],[560,237.5],[614.5,288],[675.5,330],[714.5,353],[771.5,383],[787,392],[812,409],[821,422],[826,435],[830,448],[832.5,454.5],[834,458.5],[835.5,458.5],[835.5,460],[836.5,460],[836.5,461],[836.5,462.5],[838,463.5]],"dx":[359,364],"dy":[359,364],"length":531.8886960374406,"timing":[0,17,34,51,67,84,101,117,134,151,167,190,200,217,234,251,267,285,301,317,334,350,367,385,401,417,435,450,467,483,501,517,538,551,567,584]},{"start":[834,450.5],"end":[1682,669],"points":[[834,450.5],[832.5,447],[830,432.5],[826,423.5],[819.5,411.5],[814.5,404],[803,389.5],[780.5,365],[771.5,354.5],[760,340],[752,332.5],[734,322],[725,316.5],[725,315.5],[725,314],[736.5,309],[756,307.5],[797.5,309],[822,313],[910.5,333.5],[964,350.5],[1023.5,374],[1096.5,405],[1191.5,446.5],[1320,500],[1428,543],[1510,574],[1562,595],[1631,622],[1658,636.5],[1668.5,643],[1676.5,652],[1676.5,657.5],[1677.5,658.5],[1680,661],[1680,663.5],[1681.5,663.5],[1681.5,665],[1681.5,666.5],[1681.5,667.5],[1681.5,669]],"dx":[848,218.5],"dy":[848,218.5],"length":1220.6345954834683,"timing":[12,30,47,63,80,96,114,130,146,162,180,196,213,247,263,280,295,313,330,347,363,379,397,413,430,445,463,479,496,513,530,545,563,593,614,629,647,666,704,730,760]},{"start":[1606,639],"end":[1195,587],"points":[[1606,639],[1560.5,622],[1529.5,610.5],[1419,571.5],[1360.5,548],[1300.5,520.5],[1238,489.5],[1186,463.5],[1107,427],[1039,398.5],[992.5,381.5],[964,372.5],[935,361],[928.5,358],[930,358],[934,358],[936.5,359.5],[940.5,366],[958.5,385.5],[991,420.5],[1018.5,448],[1086,519.5],[1122.5,553],[1145.5,572.5],[1171.5,591],[1186,598.5],[1195,602.5],[1196.5,602.5],[1197.5,602.5],[1197.5,601],[1197.5,597.5],[1196.5,592],[1195,587]],"dx":[-411,-52],"dy":[-411,-52],"length":1117.9323529683554,"timing":[16,33,50,66,83,98,116,133,148,166,182,199,216,233,250,266,283,299,316,333,349,366,383,400,415,432,450,466,569,647,667,683,700]},{"start":[1184.5,583],"end":[583,248],"points":[[1184.5,583],[1178,580.5],[1173,578],[1147,565],[1127.5,555.5],[1109.5,548],[1091,540],[1069,532.5],[1062.5,529.5],[1056,526],[1052,524.5],[1044.5,519.5],[1032.5,514],[1010.5,502.5],[982,487],[961,475],[937.5,462],[854.5,415],[793.5,381.5],[754.5,360.5],[710,334.5],[694.5,325.5],[658,299.5],[608.5,267],[593,259],[585.5,255.5],[585.5,254],[584,251.5],[582.5,249],[582.5,247.5]],"dx":[-601.5,-335],"dy":[-601.5,-335],"length":692.8633092513684,"timing":[9,25,42,59,76,92,109,126,142,158,175,192,209,226,242,259,276,293,308,325,345,360,376,392,409,427,569,593,611,665]},{"start":[595.5,275],"end":[1507,404],"points":[[595.5,275],[599.5,280],[602,284],[608.5,293],[608.5,294.5],[608.5,295.5],[610,298],[611.5,302],[611.5,304.5],[611.5,306],[611.5,307],[612.5,307],[615,308.5],[620.5,312.5],[654,326.5],[681.5,337],[738.5,359],[770,373.5],[916.5,437],[994.5,466],[1078,485.5],[1144,495.5],[1180.5,497],[1227.5,495.5],[1241.5,494.5],[1286,486.5],[1332.5,482.5],[1357.5,481.5],[1383.5,479],[1391,476],[1394,473.5],[1396.5,468.5],[1397.5,466],[1401.5,463],[1408,459.5],[1413,456.5],[1429,447.5],[1440.5,438.5],[1452,428],[1457.5,423],[1462.5,419],[1466.5,416.5],[1469,416.5],[1475.5,415],[1481,415],[1487.5,412.5],[1492.5,410],[1496.5,407],[1501.5,406],[1504,404.5],[1505.5,404.5],[1505.5,403.5],[1507,403.5]],"dx":[911.5,129],"dy":[911.5,129],"length":994.9519138165655,"timing":[16,34,48,66,83,98,116,133,149,166,229,237,249,266,282,300,317,333,350,366,382,400,417,432,449,466,482,499,515,532,549,568,583,600,616,632,649,666,683,700,717,733,749,766,784,800,816,832,849,866,884,930,947]},{"start":[1461,437],"end":[1318,783],"points":[[1461,437],[1447,442.5],[1436.5,445],[1425,446],[1413,447.5],[1400,447.5],[1376.5,447.5],[1361,447.5],[1352,447.5],[1347,447.5],[1344,447.5],[1337.5,447.5],[1330,447.5],[1311.5,446],[1287,443.5],[1270,442],[1257,443.5],[1249.5,446],[1237.5,454],[1232.5,463],[1231,491.5],[1235,508.5],[1248,567],[1250.5,581.5],[1258.5,625.5],[1262,647.5],[1265,663],[1270,684],[1276.5,707.5],[1283,729.5],[1288,745],[1292,753],[1296,757],[1297.5,758],[1298.5,759.5],[1300,760.5],[1304,763],[1305,766],[1306.5,766],[1309,767],[1313,771],[1315.5,776],[1317,781.5],[1318,782.5]],"dx":[-143,346],"dy":[-143,346],"length":577.5054855905356,"timing":[10,27,43,60,77,93,109,126,143,159,177,192,209,229,243,259,276,293,310,326,343,359,378,397,409,425,443,459,476,493,509,526,543,573,592,611,625,643,660,678,693,710,726,743]},{"start":[1310.5,775],"end":[909,502],"points":[[1310.5,775],[1305,771],[1302.5,769.5],[1291,760.5],[1285.5,756.5],[1280.5,751.5],[1277.5,749],[1270,742.5],[1264.5,740],[1261,736],[1251.5,725.5],[1238.5,708.5],[1237.5,702],[1237.5,693],[1235,684],[1231,675],[1214,654],[1197,636],[1120.5,577.5],[1041,538.5],[976,515],[908.5,499],[887.5,496.5],[885,496.5],[880,496.5],[880,495.5],[881,495.5],[884,495.5],[887.5,496.5],[895.5,499],[904.5,502],[908.5,502]],"dx":[-401.5,-273],"dy":[-401.5,-273],"length":567.9814967844551,"timing":[7,25,40,57,73,90,107,123,141,157,174,190,208,224,241,257,274,291,307,324,340,359,373,390,407,575,665,690,708,725,740,757]},{"start":[904.5,509.5],"end":[1319,793],"points":[[904.5,509.5],[904.5,511],[903.5,512],[900.5,512],[898,515],[895.5,516],[891.5,520],[889,522.5],[885,524],[882.5,525],[877.5,526.5],[873.5,529],[868,534.5],[868,538],[870.5,540.5],[874.5,546],[890,561.5],[906,574.5],[945,607],[1002,648.5],[1069.5,694],[1107.5,716],[1150,738.5],[1233.5,761.5],[1255.5,764.5],[1271,764.5],[1273.5,764.5],[1273.5,765.5],[1275,767],[1276.5,767],[1276.5,768],[1277.5,768],[1286.5,776],[1293,781],[1301,786.5],[1307.5,790.5],[1311.5,791.5],[1314,791.5],[1316.5,791.5],[1318,791.5],[1318,793],[1319,793]],"dx":[414.5,283.5],"dy":[414.5,283.5],"length":581.5712109590615,"timing":[13,31,52,65,80,97,114,130,147,164,181,197,215,230,246,263,281,297,314,331,348,362,380,397,415,429,447,478,497,515,530,580,597,614,631,646,664,681,696,718,730,800]},{"start":[1306,771],"end":[1370,403],"points":[[1306,771],[1294.5,754],[1290.5,746],[1286.5,739.5],[1282.5,733],[1279,725],[1269.5,709.5],[1263,696.5],[1254,682.5],[1241,664],[1229.5,647],[1227,642],[1227,638],[1227,633],[1227,627.5],[1227,616],[1230.5,581],[1236,548.5],[1246.5,516],[1255.5,500.5],[1285.5,475.5],[1303.5,465],[1308.5,464],[1330.5,455],[1338.5,451],[1341,447],[1342.5,444.5],[1346.5,442],[1354,435.5],[1355.5,434],[1362,423.5],[1364.5,421],[1367,418.5],[1369.5,413],[1371,409],[1371,406.5],[1369.5,404],[1369.5,402.5]],"dx":[64,-368],"dy":[64,-368],"length":456.50967268017996,"timing":[15,32,49,64,81,99,114,132,148,165,182,198,214,231,248,264,281,296,314,331,348,364,383,398,415,431,447,464,483,512,531,547,563,581,598,615,631,679]},{"start":[1359.5,438],"end":[559,551],"points":[[1359.5,438],[1355.5,441.5],[1349,447],[1345,449.5],[1341,453.5],[1338.5,454.5],[1338.5,456],[1337,457],[1336,457],[1333.5,458.5],[1330.5,461],[1329.5,461],[1329.5,462.5],[1328,462.5],[1323,463.5],[1312.5,466.5],[1295.5,471.5],[1258,482],[1206,496],[1131.5,508],[1009.5,523.5],[957.5,528.5],[913.5,534],[769,547],[715.5,551],[645.5,560],[622,564],[615.5,565],[614.5,565],[614.5,566.5],[613,566.5],[613,565],[611.5,562.5],[609,560],[608,558.5],[608,557.5],[606.5,556],[601.5,553.5],[589.5,552],[571.5,551],[559.5,551],[558.5,551]],"dx":[-800.5,113],"dy":[-800.5,113],"length":828.885913141936,"timing":[8,25,42,58,75,91,108,125,141,159,175,191,207,225,241,258,274,293,310,325,342,358,378,391,408,425,442,459,476,496,525,574,591,610,625,641,684,709,725,742,759,776]},{"start":[597.5,552],"end":[1315,660],"points":[[597.5,552],[611.5,549.5],[635,547],[657,544],[672.5,541.5],[691,540.5],[701.5,539],[740.5,532.5],[763.5,527.5],[792.5,522],[819.5,515.5],[838,511.5],[867.5,505],[919.5,498.5],[949.5,496],[979.5,495],[990,495],[1005.5,498.5],[1026.5,510.5],[1056,527.5],[1079.5,541.5],[1133,578],[1150,589.5],[1186,614.5],[1235.5,639],[1256.5,647],[1264,649.5],[1265.5,651],[1266.5,651],[1269.5,651],[1272,652],[1279.5,654.5],[1285,656],[1287.5,657.5],[1290,657.5],[1292.5,657.5],[1298,657.5],[1302,657.5],[1308.5,660],[1312,660],[1313.5,660],[1315,660]],"dx":[717.5,108],"dy":[717.5,108],"length":766.9223891039229,"timing":[7,24,43,58,73,90,107,124,140,157,174,189,207,223,241,257,274,290,307,324,339,358,375,391,407,424,441,457,482,508,524,542,558,575,590,607,624,640,658,673,725,741]},{"start":[968.75,820.316650390625],"end":[388,102],"points":[[968.75,820.316650390625],[892.183349609375,759.3833618164062],[818.75,703.1333618164062],[760.933349609375,653.1333618164062],[700,576.566650390625],[684.3833618164062,528.1333618164062],[668.75,482.8166809082031],[659.3833618164062,450],[656.25,426.5666809082031],[648.433349609375,406.25],[639.066650390625,376.5666809082031],[631.25,353.1333312988281],[603.1333618164062,312.5],[567.183349609375,284.3833312988281],[506.25,246.88333129882812],[440.6333312988281,214.06666564941406],[412.5,193.75],[375,165.63333129882812],[367.1833190917969,150],[359.3833312988281,142.18333435058594],[354.6833190917969,132.81666564941406],[354.6833190917969,129.68333435058594],[354.6833190917969,125],[354.6833190917969,104.68333435058594],[354.6833190917969,101.56666564941406],[354.6833190917969,96.88333129882812],[359.3833312988281,96.88333129882812],[364.0666809082031,96.88333129882812],[367.1833190917969,96.88333129882812],[371.8833312988281,96.88333129882812],[375,96.88333129882812],[379.6833190917969,96.88333129882812],[382.8166809082031,96.88333129882812],[387.5,96.88333129882812],[392.1833190917969,92.18333435058594],[395.3166809082031,92.18333435058594],[392.1833190917969,92.18333435058594],[392.1833190917969,96.88333129882812],[387.5,96.88333129882812],[387.5,101.56666564941406]],"dx":[-580.75,-718.316650390625],"dy":[-580.75,-718.316650390625],"length":1055.0964218743147,"timing":[539,544,560,576,592,609,627,642,659,676,693,710,726,743,762,778,792,809,826,844,859,1663,1675,1693,1709,1725,1978,1992,2010,2026,2056,2078,2100,2126,2234,2449,3036,3127,3142,3159]},{"start":[812,76],"end":[424,609],"points":[[812,76],[778,105],[767,115],[641,240],[579,315],[542,360],[498,410],[449,465],[437,479],[435,486],[435,487],[433,491],[428,497],[420,508],[414,518],[406,532],[399,547],[388,568],[379,583],[373,594],[375,608],[381,609],[397,610],[408,609],[416,609],[420,609],[424,609]],"dx":[-388,533],"dy":[-388,533],"length":746.8438667727529,"timing":[2591,2608,2624,2641,2658,2674,2692,2708,2725,2741,2758,2775,2791,2807,2824,2841,2858,2875,2891,2913,2941,2956,2976,2991,3013,3024,3040]},{"start":[471,557],"end":[894,500],"points":[[471,557],[472,557],[473,554],[475,552],[476,547],[476,543],[476,541],[475,541],[475,540],[475,539],[476,539],[476,538],[477,538],[479,539],[498,547],[533,553],[594,552],[653,540],[706,521],[740,505],[781,483],[832,456],[844,450],[844,449],[844,450],[844,453],[844,454],[844,456],[844,458],[844,460],[844,465],[852,482],[863,496],[869,500],[874,502],[880,504],[885,504],[887,504],[888,504],[889,504],[891,502],[892,502],[893,501],[894,501],[894,500]],"dx":[423,-57],"dy":[423,-57],"length":503.95576472989325,"timing":[13,30,47,62,80,97,113,130,159,177,184,196,228,237,263,280,297,312,330,346,363,380,396,413,452,480,497,522,547,564,580,597,613,630,646,663,680,696,717,805,813,830,846,864,893]},{"start":[896,500],"end":[864,75],"points":[[896,500],[897,497],[898,497],[915,498],[918,498],[918,497],[909,463],[904,437],[896,376],[892,355],[892,354],[892,353],[902,345],[909,341],[911,340],[914,339],[922,333],[933,322],[941,311],[949,292],[950,272],[944,244],[932,231],[918,219],[901,206],[890,180],[894,169],[894,168],[896,166],[897,163],[900,155],[900,145],[897,134],[893,125],[888,116],[885,111],[876,89],[871,81],[867,77],[866,76],[866,75],[864,75]],"dx":[-32,-425],"dy":[-32,-425],"length":510.0942156333758,"timing":[321,356,441,472,489,2210,2239,2255,2273,2289,2306,2399,2439,2456,2473,2489,2506,2523,2539,2556,2572,2589,2606,2622,2640,2691,2723,2739,2755,2773,2789,2806,2823,2839,2855,2872,2889,2906,2923,2939,3005,3042]},{"start":[875,176],"end":[58,165],"points":[[875,176],[875,191],[872,211],[872,221],[871,233],[870,242],[868,247],[868,249],[867,249],[866,250],[863,254],[858,259],[849,264],[842,267],[819,272],[771,280],[663,293],[571,299],[498,299],[405,294],[305,277],[279,267],[268,256],[274,243],[278,239],[278,236],[277,236],[275,234],[273,234],[268,232],[262,230],[243,225],[213,219],[179,211],[138,200],[113,194],[88,186],[78,181],[65,176],[65,174],[66,174],[66,173],[65,172],[62,171],[60,171],[58,169],[58,168],[58,167],[58,165]],"dx":[-817,-11],"dy":[-817,-11],"length":952.8637336331929,"timing":[8,24,42,58,75,92,108,170,179,192,209,225,242,259,275,291,308,325,342,358,375,392,408,430,442,458,475,492,508,526,542,558,575,592,608,625,641,658,675,696,708,725,742,759,775,791,808,831,892]},{"start":[416,692],"end":[1363,190],"points":[[416,692],[422,681],[432,664],[439,655],[444,649],[452,638],[457,632],[462,624],[470,615],[477,610],[480,607],[482,607],[480,607],[480,608],[480,610],[501,619],[530,620],[588,616],[621,608],[677,593],[791,541],[876,497],[938,463],[1024,416],[1119,365],[1160,342],[1184,324],[1193,313],[1195,308],[1197,308],[1198,308],[1203,304],[1229,292],[1238,287],[1258,276],[1281,256],[1298,239],[1320,214],[1327,207],[1336,200],[1344,196],[1344,195],[1345,195],[1346,195],[1354,194],[1357,192],[1359,192],[1360,191],[1363,191],[1363,190]],"dx":[947,-502],"dy":[947,-502],"length":1121.6007064655887,"timing":[16,33,50,66,82,99,116,133,151,166,183,200,229,236,249,266,282,298,317,333,349,366,383,399,416,433,449,466,482,519,532,550,566,582,600,616,632,656,666,683,699,716,767,783,799,816,833,850,866,918]},{"start":[892,219],"end":[1611,219],"points":[[892,219],[891,219],[890,219],[888,219],[887,219],[884,219],[881,221],[878,221],[877,222],[878,223],[912,231],[948,235],[981,238],[1051,240],[1180,245],[1202,247],[1285,249],[1355,251],[1420,251],[1480,247],[1508,243],[1528,239],[1536,235],[1540,234],[1547,232],[1555,231],[1569,228],[1577,227],[1579,227],[1580,227],[1586,226],[1597,226],[1608,225],[1611,223],[1611,222],[1611,221],[1611,219]],"dx":[719,0],"dy":[719,0],"length":759.3259430025937,"timing":[52,97,112,128,134,155,166,182,199,225,264,282,298,316,332,349,365,381,398,415,432,449,466,482,498,515,533,549,572,582,598,615,632,649,674,698,782]},{"start":[720,445],"end":[1227,582],"points":[[720,445],[720,444],[722,444],[723,443],[729,442],[744,440],[771,440],[796,443],[818,451],[848,464],[876,478],[921,500],[978,526],[1056,555],[1089,565],[1131,577],[1151,582],[1170,584],[1173,586],[1173,584],[1173,583],[1174,583],[1179,582],[1184,581],[1200,579],[1204,579],[1205,579],[1209,579],[1213,579],[1217,581],[1221,582],[1225,582],[1227,582]],"dx":[507,137],"dy":[507,137],"length":540.5817074010599,"timing":[34,48,64,231,248,265,284,298,315,332,349,366,381,398,415,430,450,464,482,501,539,637,664,682,698,714,731,748,765,781,798,815,831]},{"start":[1161,544],"end":[716,504],"points":[[1161,544],[1134,532],[1076,510],[1045,497],[1009,482],[974,465],[942,451],[906,432],[884,422],[872,415],[868,414],[866,414],[846,414],[810,414],[759,414],[720,414],[664,422],[656,428],[656,434],[656,443],[656,451],[656,457],[660,463],[662,465],[666,470],[671,475],[675,479],[678,483],[684,487],[689,489],[697,493],[699,493],[701,495],[702,496],[706,499],[710,501],[714,502],[716,504]],"dx":[-445,-40],"dy":[-445,-40],"length":642.8668205865333,"timing":[6,24,40,56,73,90,107,123,140,157,173,253,273,289,306,323,340,357,373,390,407,423,440,457,474,491,507,523,540,556,573,590,606,623,640,657,673,690]},{"start":[1063,523],"end":[291,686],"points":[[1063,523],[1046,518],[1040,517],[1036,514],[1027,511],[1020,510],[1010,508],[996,504],[985,501],[973,498],[970,498],[970,497],[968,497],[946,497],[893,497],[830,497],[700,497],[667,498],[631,502],[544,517],[520,524],[496,545],[488,561],[483,571],[475,587],[461,602],[438,618],[413,627],[387,635],[370,640],[355,647],[349,650],[347,652],[345,654],[344,656],[340,657],[332,661],[326,665],[318,670],[310,676],[309,679],[308,679],[306,679],[304,680],[300,682],[297,683],[292,686],[291,686]],"dx":[-772,163],"dy":[-772,163],"length":843.0182523162509,"timing":[2,19,36,52,68,86,103,119,136,153,169,186,231,252,269,286,317,320,335,352,369,386,403,419,436,453,468,486,503,520,535,552,569,586,602,619,636,653,669,686,703,720,738,769,786,803,820,836]},{"start":[982,150],"end":[842,729],"points":[[982,150],[977,153],[974,155],[969,159],[961,164],[946,177],[936,186],[934,190],[933,190],[931,191],[920,200],[908,216],[901,239],[897,296],[901,346],[907,395],[909,426],[909,475],[905,528],[900,553],[896,568],[888,598],[882,624],[877,645],[871,662],[868,673],[864,684],[860,698],[858,702],[857,705],[856,706],[855,707],[853,708],[851,711],[848,715],[847,719],[845,721],[845,723],[844,723],[843,725],[842,728],[842,729]],"dx":[-140,579],"dy":[-140,579],"length":628.1070040640328,"timing":[6,22,39,56,72,89,105,134,214,224,256,272,289,306,322,339,355,372,389,405,422,439,455,472,489,506,523,539,555,573,589,605,621,639,656,673,689,706,730,756,773,789]},{"start":[844,646],"end":[1129,528],"points":[[844,646],[836,620],[834,612],[826,584],[822,565],[821,545],[817,521],[814,511],[814,507],[814,504],[814,502],[814,500],[815,500],[817,500],[823,502],[835,503],[854,504],[884,502],[929,499],[966,499],[999,499],[1018,499],[1040,503],[1051,506],[1060,506],[1066,507],[1083,508],[1091,509],[1098,511],[1100,511],[1109,516],[1112,517],[1118,521],[1126,526],[1127,528],[1129,528]],"dx":[285,-118],"dy":[285,-118],"length":471.8973600922469,"timing":[6,23,40,57,73,89,106,123,139,157,173,189,215,241,257,273,289,307,323,339,356,374,390,405,431,440,456,472,489,506,523,540,557,574,590,606]},{"start":[1001,648],"end":[1443,540],"points":[[1001,648],[1000,648],[1000,647],[999,646],[996,643],[992,638],[986,633],[980,629],[980,628],[986,624],[995,619],[1019,607],[1048,591],[1084,566],[1114,550],[1158,531],[1222,518],[1261,513],[1300,511],[1378,511],[1412,514],[1450,520],[1472,522],[1491,525],[1498,525],[1498,526],[1490,535],[1477,543],[1472,546],[1470,546],[1469,546],[1466,543],[1461,542],[1451,540],[1444,540],[1443,540]],"dx":[442,-108],"dy":[442,-108],"length":640.5810874523207,"timing":[108,127,133,150,167,183,200,216,233,249,267,283,299,316,334,350,366,383,400,417,433,449,466,483,500,662,700,717,734,750,797,817,833,849,866,882]},{"start":[1442,539],"end":[75,210],"points":[[1442,539],[1440,539],[1438,538],[1434,537],[1433,535],[1431,535],[1430,535],[1427,534],[1409,530],[1381,525],[1326,517],[1234,504],[1099,488],[969,478],[766,460],[614,432],[463,387],[395,357],[367,340],[342,323],[322,309],[294,293],[269,282],[240,269],[216,258],[199,249],[177,239],[149,228],[148,227],[151,227],[153,226],[155,226],[153,226],[152,226],[131,223],[96,218],[87,215],[83,215],[77,214],[75,211],[75,210]],"dx":[-1367,-329],"dy":[-1367,-329],"length":1439.725511237895,"timing":[74,81,90,106,165,176,189,206,223,240,256,273,290,307,339,356,373,390,406,422,440,456,473,489,506,523,539,556,573,590,607,623,673,718,756,773,790,806,822,840,889]},{"start":[433,243],"end":[1331,278],"points":[[433,243],[485,246],[512,248],[620,254],[678,259],[769,269],[823,276],[871,285],[898,292],[938,305],[955,313],[949,315],[929,318],[896,319],[892,321],[894,321],[905,322],[919,322],[953,322],[999,321],[1049,319],[1087,319],[1158,315],[1187,314],[1248,306],[1263,304],[1270,302],[1275,301],[1275,300],[1276,300],[1287,297],[1300,293],[1309,291],[1323,284],[1330,280],[1330,279],[1331,279],[1331,278]],"dx":[898,35],"dy":[898,35],"length":1040.3519561492462,"timing":[14,31,48,65,81,98,115,132,148,164,182,199,215,232,248,264,282,298,315,331,348,365,382,398,435,448,464,482,498,515,531,549,565,581,598,615,643,687]},{"start":[1278,284],"end":[1237,489],"points":[[1278,284],[1268,285],[1265,287],[1245,291],[1235,294],[1224,296],[1219,297],[1213,298],[1205,300],[1194,304],[1188,305],[1180,307],[1167,310],[1148,315],[1129,320],[1106,332],[1095,350],[1095,384],[1107,410],[1121,428],[1132,439],[1146,448],[1175,465],[1177,466],[1192,471],[1199,474],[1214,475],[1218,475],[1220,475],[1223,475],[1223,476],[1224,476],[1225,478],[1227,479],[1229,482],[1232,484],[1236,488],[1237,489]],"dx":[-41,205],"dy":[-41,205],"length":422.5116359595705,"timing":[2,19,36,53,69,86,102,119,136,153,169,185,202,219,235,252,269,286,302,319,336,352,369,386,402,419,435,452,468,485,507,530,552,569,586,602,619,635]},{"start":[1229,488],"end":[1098,132],"points":[[1229,488],[1227,487],[1224,487],[1223,487],[1220,485],[1211,484],[1190,482],[1176,480],[1155,479],[1129,476],[1101,471],[1082,461],[1085,439],[1095,409],[1103,377],[1111,303],[1111,281],[1110,246],[1102,208],[1091,169],[1088,155],[1088,151],[1088,150],[1089,149],[1093,143],[1095,141],[1097,137],[1097,136],[1097,134],[1098,132]],"dx":[-131,-356],"dy":[-131,-356],"length":489.3353267549985,"timing":[5,21,116,125,138,155,171,188,204,221,237,254,271,287,305,321,337,354,371,387,404,421,437,543,571,587,619,672,698,737]},{"start":[1069,159],"end":[1516,598],"points":[[1069,159],[1067,163],[1063,167],[1059,172],[1052,181],[1050,186],[1046,194],[1045,197],[1043,198],[1043,199],[1039,203],[1037,204],[1030,210],[1028,211],[1026,215],[1030,220],[1039,228],[1047,236],[1060,247],[1113,284],[1171,318],[1273,376],[1377,438],[1513,513],[1552,528],[1576,537],[1578,536],[1572,531],[1570,529],[1568,529],[1566,531],[1565,533],[1562,536],[1559,540],[1549,553],[1540,563],[1531,575],[1522,589],[1518,597],[1516,597],[1516,598]],"dx":[447,439],"dy":[447,439],"length":814.9049968553516,"timing":[0,15,32,49,66,83,99,115,133,149,166,183,199,216,233,249,266,282,300,316,332,349,366,382,399,416,433,449,466,523,549,566,583,599,616,633,650,666,682,706,716]},{"start":[1514,598],"end":[1581,234],"points":[[1514,598],[1512,598],[1506,594],[1494,589],[1483,584],[1470,577],[1460,572],[1420,551],[1384,533],[1345,511],[1303,480],[1276,433],[1276,416],[1298,378],[1316,363],[1346,347],[1377,336],[1412,328],[1450,323],[1471,319],[1484,315],[1493,310],[1507,299],[1532,282],[1546,272],[1562,263],[1577,254],[1584,248],[1583,246],[1580,242],[1579,242],[1579,241],[1579,239],[1577,238],[1577,237],[1580,237],[1581,235],[1581,234]],"dx":[67,-364],"dy":[67,-364],"length":698.6061391259608,"timing":[81,91,108,125,141,159,175,190,208,225,241,259,275,297,308,324,342,358,374,391,408,424,442,458,474,492,508,525,542,558,575,592,608,625,677,691,708,775]},{"start":[1580,235],"end":[1069,69],"points":[[1580,235],[1579,235],[1575,237],[1571,239],[1564,243],[1557,247],[1546,254],[1544,258],[1541,260],[1538,261],[1536,264],[1525,273],[1514,281],[1499,289],[1465,296],[1428,296],[1384,290],[1337,276],[1290,257],[1207,212],[1163,181],[1118,150],[1081,120],[1053,92],[1056,78],[1065,73],[1066,72],[1068,70],[1069,70],[1069,69]],"dx":[-511,-166],"dy":[-511,-166],"length":635.5932986375701,"timing":[17,33,50,66,83,100,117,133,149,167,183,199,216,233,252,267,283,300,316,333,350,366,383,400,416,433,449,475,499,663]},{"start":[1052,83],"end":[1597,734],"points":[[1052,83],[1046,91],[1036,101],[1031,109],[1025,116],[1020,122],[1017,125],[1016,126],[1014,127],[1012,129],[999,136],[973,155],[961,169],[947,196],[947,218],[964,246],[982,266],[1016,295],[1084,343],[1126,374],[1229,458],[1274,497],[1343,559],[1415,623],[1448,647],[1460,656],[1464,659],[1464,660],[1482,672],[1491,678],[1506,689],[1516,698],[1519,702],[1521,703],[1522,703],[1524,703],[1534,707],[1550,715],[1559,720],[1563,724],[1565,725],[1567,727],[1571,727],[1573,728],[1577,729],[1581,730],[1585,732],[1589,733],[1594,734],[1597,734]],"dx":[545,651],"dy":[545,651],"length":1017.8868156342289,"timing":[8,25,43,58,76,92,108,156,165,175,193,209,225,242,260,275,294,308,328,342,358,375,392,410,425,441,458,484,524,541,559,574,591,607,678,709,724,741,758,775,791,808,825,842,858,875,892,908,925,941]},{"start":[1583,729],"end":[699,728],"points":[[1583,729],[1580,728],[1577,727],[1568,724],[1559,720],[1544,715],[1530,707],[1511,698],[1511,697],[1511,695],[1509,694],[1508,693],[1500,685],[1482,669],[1448,646],[1417,630],[1352,609],[1284,598],[1218,598],[1167,606],[1148,611],[1121,620],[1070,646],[1050,661],[1028,677],[1011,686],[979,703],[930,725],[891,741],[868,749],[849,755],[809,767],[792,773],[777,778],[763,784],[747,786],[718,789],[712,789],[693,786],[679,782],[676,778],[677,777],[677,776],[679,776],[680,773],[681,769],[684,763],[686,758],[689,752],[692,747],[694,741],[694,738],[695,734],[697,732],[699,728]],"dx":[-884,-1],"dy":[-884,-1],"length":1042.5735284377595,"timing":[12,31,46,63,80,96,113,129,146,167,182,197,212,230,245,263,280,297,313,329,346,363,379,396,413,430,446,462,480,497,513,529,546,563,580,597,613,630,646,663,680,696,783,796,813,829,846,862,879,897,913,929,946,963,980]},{"start":[699,726],"end":[742,555],"points":[[699,726],[701,726],[703,722],[706,720],[708,717],[712,713],[719,706],[724,691],[730,674],[733,660],[736,635],[736,608],[736,591],[736,578],[736,573],[738,565],[738,564],[740,564],[740,563],[741,560],[742,556],[742,555]],"dx":[43,-171],"dy":[43,-171],"length":185.1075045945195,"timing":[126,134,149,166,183,200,216,233,254,268,283,299,316,337,350,367,383,455,466,483,499,516]},{"start":[743,555],"end":[385,704],"points":[[743,555],[743,553],[745,553],[745,552],[746,551],[747,549],[751,540],[753,533],[753,531],[753,530],[754,530],[754,529],[756,523],[756,517],[755,516],[736,512],[716,513],[702,517],[676,527],[633,548],[610,564],[577,588],[550,612],[521,637],[507,647],[477,666],[452,681],[442,689],[435,691],[433,692],[431,692],[429,694],[425,695],[421,695],[420,696],[418,696],[414,696],[412,696],[403,698],[400,699],[399,699],[396,700],[395,700],[388,703],[386,704],[385,704]],"dx":[-358,149],"dy":[-358,149],"length":472.4199426218565,"timing":[34,64,72,83,100,116,133,150,166,184,202,217,233,253,265,283,300,317,334,351,366,382,400,417,433,450,466,484,501,517,533,549,567,583,599,617,633,652,666,682,734,750,766,783,800,816]},{"start":[417,681],"end":[1155,387],"points":[[417,681],[431,666],[455,648],[460,643],[478,626],[502,605],[533,577],[553,558],[561,551],[565,548],[573,542],[583,536],[596,530],[620,519],[656,504],[721,482],[777,469],[843,457],[885,449],[934,436],[972,425],[1010,409],[1038,397],[1054,391],[1058,389],[1059,389],[1062,389],[1069,389],[1081,387],[1084,387],[1089,387],[1093,387],[1103,387],[1115,388],[1129,388],[1147,388],[1154,388],[1155,387]],"dx":[738,-294],"dy":[738,-294],"length":817.6879932938484,"timing":[12,30,53,63,80,97,114,130,147,164,180,197,213,230,247,263,280,296,314,330,346,364,380,397,414,451,480,497,513,530,546,563,580,597,614,630,647,663]},{"start":[1154,388],"end":[825,193],"points":[[1154,388],[1151,389],[1149,392],[1147,395],[1146,395],[1144,396],[1125,402],[1102,404],[1081,401],[1063,393],[1020,367],[972,336],[937,311],[869,268],[798,226],[780,210],[776,200],[778,194],[781,193],[782,193],[783,193],[794,192],[796,190],[800,190],[802,190],[803,190],[804,190],[809,190],[816,192],[822,193],[825,193]],"dx":[-329,-195],"dy":[-329,-195],"length":500.45759433412576,"timing":[77,92,109,125,204,223,259,275,292,309,325,342,359,376,392,409,425,442,458,482,526,559,575,592,609,625,642,658,675,692,708]},{"start":[824,198],"end":[518,657],"points":[[824,198],[824,200],[824,201],[822,202],[822,203],[822,206],[821,209],[820,216],[818,220],[817,225],[816,231],[816,238],[808,263],[799,284],[781,320],[752,368],[729,407],[690,475],[673,500],[642,544],[621,570],[606,589],[597,601],[592,606],[586,611],[579,615],[571,622],[567,624],[561,628],[551,635],[545,639],[536,644],[526,650],[522,654],[521,654],[519,656],[518,657]],"dx":[-306,459],"dy":[-306,459],"length":565.4328123843112,"timing":[15,72,97,104,115,131,148,165,181,197,215,232,248,265,281,298,315,332,348,366,382,398,415,431,449,465,492,500,515,532,548,565,582,599,615,657,698]},{"start":[338,757],"end":[1365,57],"points":[[338,757],[351,746],[375,728],[407,704],[439,679],[470,653],[493,635],[514,615],[544,589],[575,562],[598,542],[601,540],[602,540],[623,536],[661,523],[745,483],[806,450],[845,428],[922,380],[996,333],[1068,289],[1125,251],[1166,223],[1187,207],[1218,185],[1234,176],[1252,164],[1268,151],[1285,138],[1299,125],[1311,116],[1324,105],[1330,98],[1330,96],[1331,95],[1334,92],[1341,86],[1344,82],[1344,81],[1346,78],[1347,78],[1348,76],[1351,73],[1354,70],[1355,69],[1355,68],[1357,66],[1360,63],[1365,59],[1365,57]],"dx":[1027,-700],"dy":[1027,-700],"length":1254.7067601340675,"timing":[3,20,37,53,70,87,103,119,137,153,170,186,245,270,287,303,320,337,354,370,386,403,420,435,453,470,486,503,519,536,553,570,586,603,620,637,654,670,688,703,719,736,753,770,786,803,820,837,857,869]},{"start":[1334,83],"end":[699,44],"points":[[1334,83],[1318,99],[1308,109],[1287,134],[1274,152],[1266,168],[1264,172],[1259,178],[1249,187],[1233,205],[1221,218],[1217,225],[1216,225],[1213,226],[1192,235],[1177,241],[1130,251],[1036,257],[995,254],[940,233],[924,222],[898,196],[865,146],[852,122],[843,105],[841,101],[839,100],[832,99],[814,96],[803,95],[780,91],[770,88],[762,83],[757,81],[750,77],[742,73],[725,66],[718,64],[710,60],[698,55],[696,52],[694,51],[696,51],[698,48],[699,47],[699,45],[699,44]],"dx":[-635,-39],"dy":[-635,-39],"length":805.2544682781478,"timing":[10,27,42,60,77,94,110,126,144,160,177,194,243,260,277,293,310,326,343,360,377,393,410,427,444,461,476,493,510,527,543,559,577,593,610,627,643,660,677,693,710,727,743,759,777,793,860]},{"start":[698,51],"end":[1482,226],"points":[[698,51],[698,53],[697,58],[697,61],[693,74],[689,86],[685,97],[683,105],[679,113],[672,125],[668,131],[664,143],[660,161],[664,182],[675,196],[708,218],[742,226],[780,229],[890,231],[944,233],[1048,234],[1124,234],[1205,233],[1243,230],[1283,227],[1322,225],[1351,223],[1371,222],[1379,221],[1386,220],[1392,220],[1408,218],[1418,218],[1426,218],[1434,220],[1442,220],[1448,221],[1451,221],[1452,221],[1470,223],[1478,225],[1482,226]],"dx":[784,175],"dy":[784,175],"length":972.8351641641685,"timing":[3,19,37,53,70,87,103,120,137,153,170,187,203,220,236,253,270,287,305,320,337,353,376,387,402,420,437,453,470,486,503,520,537,553,570,586,603,620,663,704,720,737]},{"start":[1386,256],"end":[808,174],"points":[[1386,256],[1370,257],[1364,258],[1338,262],[1326,265],[1312,268],[1295,270],[1276,273],[1248,277],[1228,279],[1209,283],[1187,286],[1166,287],[1143,290],[1133,290],[1120,290],[1102,288],[1070,283],[1018,275],[980,268],[931,255],[911,247],[894,238],[873,226],[860,217],[849,208],[845,205],[843,204],[843,202],[841,201],[837,199],[834,197],[833,196],[832,195],[830,195],[828,191],[816,182],[812,179],[808,176],[808,175],[808,174]],"dx":[-578,-82],"dy":[-578,-82],"length":611.9649890189959,"timing":[2,19,36,52,69,85,102,119,136,151,169,186,202,219,236,252,268,285,302,319,338,352,369,385,402,419,436,452,469,485,502,519,535,562,569,585,602,618,635,667,769]},{"start":[799,182],"end":[235,287],"points":[[799,182],[793,186],[793,187],[789,188],[789,189],[786,191],[781,193],[777,197],[772,201],[771,202],[769,202],[769,204],[763,206],[747,214],[730,221],[685,237],[650,249],[615,262],[564,282],[496,300],[460,305],[443,306],[381,304],[355,300],[336,297],[317,296],[304,296],[288,295],[282,295],[275,293],[269,292],[257,291],[241,288],[236,287],[235,287]],"dx":[-564,105],"dy":[-564,105],"length":592.4048231011111,"timing":[8,25,42,58,74,91,108,124,141,157,196,208,225,242,258,274,291,307,324,341,358,379,407,424,441,458,475,491,507,524,541,558,574,591,607]},{"start":[238,288],"end":[1468,703],"points":[[238,288],[239,289],[245,291],[252,292],[258,293],[265,295],[271,295],[279,296],[288,296],[296,297],[305,299],[315,301],[325,302],[367,309],[456,323],[516,334],[569,343],[657,361],[707,371],[924,432],[1007,462],[1097,497],[1159,523],[1244,560],[1287,581],[1309,592],[1324,604],[1336,616],[1342,625],[1354,643],[1366,657],[1379,673],[1393,690],[1416,714],[1431,733],[1440,743],[1448,752],[1450,755],[1450,753],[1453,748],[1455,743],[1458,738],[1462,731],[1467,717],[1467,712],[1468,705],[1468,704],[1468,703]],"dx":[1230,415],"dy":[1230,415],"length":1391.9303716956426,"timing":[21,38,55,71,88,104,121,138,154,171,187,204,221,237,254,271,287,305,321,338,354,371,387,404,421,438,454,471,487,504,521,537,555,571,588,604,621,638,688,721,739,754,771,788,803,820,838,854]},{"start":[1423,696],"end":[318,476],"points":[[1423,696],[1410,695],[1406,694],[1385,690],[1367,686],[1333,678],[1299,670],[1280,664],[1210,645],[1123,619],[1043,592],[998,575],[937,549],[889,527],[861,515],[831,504],[818,501],[794,497],[755,495],[712,493],[678,496],[638,501],[588,509],[534,515],[474,519],[443,519],[426,519],[419,519],[417,519],[411,518],[405,515],[394,511],[381,505],[358,495],[352,491],[345,488],[344,487],[342,487],[331,482],[320,479],[318,478],[318,476]],"dx":[-1105,-220],"dy":[-1105,-220],"length":1150.3303866054941,"timing":[1,19,35,52,69,84,103,119,135,152,168,185,202,219,235,252,269,285,302,318,336,352,368,385,402,419,435,452,468,486,502,519,536,552,568,585,601,631,669,686,702,769]},{"start":[366,482],"end":[1077,221],"points":[[366,482],[380,482],[397,482],[415,483],[437,483],[480,484],[511,484],[522,484],[541,485],[576,487],[595,487],[615,487],[639,485],[673,483],[723,474],[817,446],[890,424],[939,410],[1007,393],[1064,375],[1116,354],[1146,339],[1167,327],[1180,318],[1187,310],[1187,307],[1185,305],[1182,301],[1178,296],[1176,292],[1173,289],[1166,283],[1156,275],[1142,267],[1127,259],[1114,253],[1104,246],[1095,241],[1087,233],[1085,231],[1083,228],[1082,225],[1078,223],[1077,223],[1077,221]],"dx":[711,-261],"dy":[711,-261],"length":999.7694245679108,"timing":[14,30,47,64,81,100,114,130,148,164,180,197,214,231,247,264,281,298,314,331,348,364,380,397,414,431,447,464,481,508,514,530,548,564,580,598,614,631,647,664,681,697,714,744,764]},{"start":[1070,224],"end":[1320,826],"points":[[1070,224],[1068,225],[1066,225],[1064,227],[1057,231],[1051,234],[1044,238],[1039,242],[1031,246],[1023,249],[1003,255],[990,260],[973,267],[960,276],[949,284],[943,297],[942,302],[945,320],[964,353],[1014,410],[1052,448],[1086,480],[1131,526],[1196,592],[1220,619],[1244,650],[1260,674],[1268,685],[1272,693],[1276,700],[1282,709],[1286,714],[1295,731],[1298,744],[1298,745],[1299,752],[1302,767],[1303,776],[1305,787],[1308,796],[1311,804],[1312,809],[1314,814],[1316,817],[1317,821],[1318,824],[1320,826]],"dx":[250,602],"dy":[250,602],"length":815.7931257007174,"timing":[3,19,36,53,69,86,102,119,136,152,169,186,203,220,235,253,270,286,302,320,336,353,369,386,403,419,436,452,469,486,502,519,536,560,570,587,602,619,635,652,669,686,701,719,736,753,769]},{"start":[1281,771],"end":[705,368],"points":[[1281,771],[1269,755],[1249,735],[1235,720],[1216,703],[1191,684],[1156,655],[1135,640],[1103,615],[1087,603],[1074,596],[1057,589],[1030,580],[1013,575],[980,566],[946,553],[907,536],[857,508],[826,490],[800,473],[789,466],[779,458],[772,453],[770,450],[768,447],[764,443],[753,428],[741,415],[727,400],[714,390],[706,382],[706,381],[706,380],[706,377],[706,373],[706,372],[705,372],[705,371],[705,368]],"dx":[-576,-403],"dy":[-576,-403],"length":721.1050402478271,"timing":[13,31,48,64,80,97,114,130,147,164,181,197,213,231,247,263,280,297,314,330,347,363,380,397,413,430,447,464,480,497,514,530,549,581,597,613,630,661,697]},{"start":[705,367],"end":[861,718],"points":[[705,367],[706,367],[707,367],[714,373],[725,386],[740,408],[749,426],[766,463],[789,506],[811,540],[835,573],[849,595],[862,620],[870,642],[872,659],[874,662],[874,667],[874,673],[874,680],[874,685],[874,689],[874,692],[874,695],[874,699],[872,703],[871,705],[871,706],[867,710],[863,714],[862,716],[861,718]],"dx":[156,351],"dy":[156,351],"length":404.66626650492867,"timing":[154,162,235,273,289,306,322,339,356,373,390,406,423,439,466,473,489,506,523,539,556,573,590,605,623,639,674,707,722,739,756]},{"start":[862,716],"end":[1401,77],"points":[[862,716],[868,711],[883,698],[910,669],[952,617],[997,549],[1027,508],[1062,464],[1136,376],[1210,301],[1260,256],[1278,238],[1304,210],[1318,196],[1327,183],[1332,175],[1336,168],[1341,157],[1345,149],[1354,131],[1358,123],[1360,119],[1360,118],[1361,117],[1362,116],[1366,110],[1371,104],[1373,101],[1375,99],[1377,97],[1380,95],[1383,92],[1386,90],[1387,88],[1391,86],[1399,79],[1400,78],[1401,77]],"dx":[539,-639],"dy":[539,-639],"length":841.3748355146748,"timing":[265,281,298,315,332,348,368,381,398,415,432,447,465,482,497,514,531,548,564,581,598,615,631,654,665,682,698,714,732,773,798,814,831,848,864,881,898,914]},{"start":[1400,78],"end":[872,518],"points":[[1400,78],[1399,78],[1397,79],[1395,79],[1393,80],[1392,80],[1391,80],[1388,82],[1375,84],[1371,86],[1323,103],[1285,121],[1250,141],[1215,166],[1180,196],[1124,247],[1083,281],[1014,330],[959,369],[923,394],[892,414],[856,434],[837,442],[830,444],[824,446],[823,446],[823,447],[823,452],[823,469],[825,482],[832,500],[841,517],[846,524],[850,528],[851,529],[852,529],[854,529],[855,529],[858,527],[863,525],[867,522],[868,521],[869,521],[869,520],[872,518]],"dx":[-528,440],"dy":[-528,440],"length":806.6606952122636,"timing":[128,136,145,161,183,195,212,228,244,262,278,294,311,328,345,361,378,395,411,428,445,461,478,495,512,528,578,611,628,645,661,678,695,711,728,797,848,861,878,895,911,928,945,961,978]},{"start":[873,517],"end":[977,309],"points":[[873,517],[878,512],[884,505],[890,498],[898,479],[908,457],[927,418],[941,386],[953,360],[960,340],[967,327],[975,313],[977,310],[977,309]],"dx":[104,-208],"dy":[104,-208],"length":233.92245118110668,"timing":[261,277,293,310,327,343,361,377,394,410,427,444,460,477]},{"start":[972,313],"end":[1332,171],"points":[[972,313],[969,317],[967,319],[964,321],[963,322],[962,322],[962,323],[960,323],[958,326],[956,327],[955,327],[954,328],[954,330],[952,330],[956,327],[976,312],[994,296],[1008,282],[1033,258],[1063,231],[1094,206],[1114,193],[1150,170],[1222,139],[1241,132],[1274,123],[1296,117],[1300,115],[1300,117],[1302,122],[1309,127],[1318,135],[1328,144],[1332,148],[1333,150],[1333,152],[1333,156],[1333,158],[1333,162],[1333,166],[1332,171]],"dx":[360,-142],"dy":[360,-142],"length":514.9949427370619,"timing":[13,29,46,62,79,102,117,129,146,162,211,222,236,278,296,312,329,345,363,379,395,412,429,452,466,479,496,513,593,612,629,645,662,679,696,713,729,746,762,779,796]},{"start":[1312,181],"end":[183,287],"points":[[1312,181],[1309,183],[1284,185],[1220,192],[1188,194],[1078,201],[959,206],[820,210],[717,218],[635,228],[592,237],[536,253],[521,259],[513,262],[497,268],[474,274],[436,278],[393,280],[356,281],[317,284],[283,284],[256,284],[241,284],[235,283],[235,281],[233,281],[232,281],[220,283],[207,284],[196,285],[185,287],[183,287]],"dx":[-1129,106],"dy":[-1129,106],"length":1141.059725666733,"timing":[248,260,277,293,309,326,342,360,376,392,409,426,443,459,476,493,509,525,542,559,576,599,613,626,648,755,776,792,809,825,842,860]},{"start":[198,287],"end":[1013,680],"points":[[198,287],[203,287],[211,287],[215,285],[220,285],[226,284],[227,284],[232,283],[241,281],[246,281],[249,280],[250,280],[253,280],[272,280],[300,283],[359,292],[405,300],[463,313],[496,324],[571,354],[628,383],[679,408],[756,448],[826,491],[849,508],[873,527],[888,547],[894,554],[900,566],[905,576],[912,591],[917,606],[922,625],[931,645],[936,656],[946,675],[952,687],[953,691],[953,692],[955,692],[959,690],[968,687],[977,684],[986,683],[992,683],[996,683],[998,683],[1000,683],[1005,683],[1012,680],[1013,680]],"dx":[815,393],"dy":[815,393],"length":980.4244390279023,"timing":[10,25,43,60,77,94,110,127,143,160,176,213,226,243,260,277,292,310,327,343,360,377,393,410,427,444,460,476,494,510,527,543,560,577,594,610,626,643,660,677,693,710,727,744,760,776,794,810,826,844,860]},{"start":[1014,679],"end":[754,134],"points":[[1014,679],[1014,677],[1017,671],[1018,670],[1020,666],[1020,658],[1018,652],[1013,639],[1003,615],[987,580],[960,515],[934,455],[900,381],[875,336],[836,271],[793,202],[780,180],[771,162],[769,154],[767,151],[767,150],[766,149],[763,145],[761,142],[760,140],[757,138],[757,137],[756,136],[754,136],[754,134]],"dx":[-260,-545],"dy":[-260,-545],"length":613.9324089497163,"timing":[162,171,187,204,220,237,254,271,287,304,321,337,354,371,388,404,420,438,454,470,592,604,620,638,654,670,724,754,771,855]},{"start":[756,136],"end":[1135,823],"points":[[756,136],[756,137],[757,137],[758,140],[761,142],[765,147],[778,166],[793,190],[806,219],[821,260],[836,316],[850,370],[876,455],[902,513],[935,570],[954,602],[980,640],[992,657],[999,666],[1010,683],[1019,695],[1040,715],[1048,723],[1075,750],[1087,761],[1112,779],[1129,795],[1134,800],[1135,801],[1135,802],[1135,804],[1136,810],[1136,813],[1136,815],[1136,819],[1135,823]],"dx":[379,687],"dy":[379,687],"length":804.340808719812,"timing":[78,198,206,216,234,250,267,282,300,316,333,349,366,384,400,416,433,450,466,482,500,521,532,550,568,582,599,617,634,670,694,733,750,766,782,799]},{"start":[1135,822],"end":[550,668],"points":[[1135,822],[1129,815],[1120,808],[1104,798],[1079,789],[1056,782],[992,765],[962,758],[902,748],[865,741],[802,739],[772,739],[758,740],[742,741],[720,741],[702,737],[679,730],[650,719],[624,710],[566,688],[525,672],[494,661],[484,655],[482,653],[484,653],[485,653],[486,651],[489,651],[492,651],[494,651],[498,651],[501,651],[502,651],[506,653],[520,658],[536,664],[543,667],[549,668],[550,668]],"dx":[-585,-154],"dy":[-585,-154],"length":757.5083249393983,"timing":[244,269,284,301,317,333,351,367,384,400,417,434,451,467,484,501,517,534,550,572,584,600,617,634,651,667,718,734,751,767,783,801,864,884,899,917,933,951,966]},{"start":[553,668],"end":[723,315],"points":[[553,668],[554,668],[567,662],[573,658],[579,651],[588,642],[611,593],[621,562],[633,515],[649,468],[673,399],[684,369],[693,352],[698,345],[699,345],[699,343],[702,342],[706,337],[707,336],[710,334],[711,332],[715,326],[719,323],[721,319],[723,316],[723,315]],"dx":[170,-353],"dy":[170,-353],"length":403.29095559702256,"timing":[201,218,235,251,268,284,305,318,333,350,368,384,400,417,456,479,501,518,534,552,567,584,602,618,634,768]},{"start":[721,323],"end":[134,773],"points":[[721,323],[721,324],[721,325],[721,326],[720,328],[712,337],[698,355],[673,381],[650,407],[581,481],[530,532],[487,571],[443,602],[399,631],[359,649],[326,663],[296,673],[253,692],[244,696],[226,703],[205,711],[195,715],[186,719],[184,720],[183,721],[179,725],[175,732],[173,736],[169,744],[165,749],[164,751],[158,755],[156,758],[155,758],[155,759],[152,760],[147,766],[143,768],[136,772],[134,773]],"dx":[-587,450],"dy":[-587,450],"length":757.3211766759362,"timing":[6,24,41,181,264,291,307,324,340,356,374,390,406,423,439,457,472,495,507,524,539,557,574,591,606,623,641,657,674,690,706,724,740,757,774,790,807,824,841,857]},{"start":[164,757],"end":[878,321],"points":[[164,757],[171,750],[174,749],[184,741],[191,736],[195,733],[197,732],[197,731],[200,731],[206,725],[242,702],[258,691],[271,682],[279,677],[294,667],[320,650],[356,628],[400,603],[481,565],[512,552],[559,534],[596,520],[651,495],[684,478],[724,459],[741,448],[746,446],[754,439],[759,435],[767,428],[777,417],[786,405],[789,400],[790,395],[794,390],[798,385],[808,373],[815,365],[819,361],[825,356],[833,351],[841,346],[849,342],[854,338],[859,335],[860,333],[864,331],[869,327],[876,323],[878,321]],"dx":[714,-436],"dy":[714,-436],"length":848.9225147419987,"timing":[4,20,38,54,70,88,105,121,138,155,171,188,205,221,238,255,271,288,305,321,338,355,371,388,405,422,438,454,471,488,505,522,538,555,571,588,604,621,638,655,671,688,705,720,738,755,772,788,804,821]},{"start":[863,340],"end":[1305,586],"points":[[863,340],[860,342],[859,343],[856,347],[854,349],[850,355],[848,356],[847,356],[847,357],[845,358],[841,361],[833,368],[824,375],[821,378],[821,379],[821,381],[822,382],[825,386],[833,396],[856,422],[911,466],[982,513],[1072,563],[1127,585],[1209,605],[1287,609],[1310,609],[1319,605],[1319,604],[1318,602],[1316,600],[1314,598],[1311,595],[1310,592],[1309,590],[1306,586],[1305,586]],"dx":[442,246],"dy":[442,246],"length":652.4030103984365,"timing":[17,33,49,66,82,100,116,133,149,166,182,199,216,233,250,272,283,300,316,332,348,366,383,400,415,432,450,466,483,498,551,583,598,615,633,650,666]},{"start":[1303,585],"end":[1405,839],"points":[[1303,585],[1301,585],[1299,583],[1298,583],[1296,583],[1294,582],[1292,581],[1288,579],[1283,578],[1280,578],[1281,578],[1285,583],[1302,603],[1322,629],[1345,657],[1362,681],[1380,711],[1396,739],[1411,773],[1422,798],[1428,815],[1433,825],[1440,839],[1441,846],[1441,850],[1441,854],[1441,858],[1440,858],[1439,858],[1437,858],[1436,858],[1435,858],[1432,858],[1431,858],[1429,858],[1427,855],[1422,851],[1412,845],[1407,842],[1407,841],[1406,841],[1406,839],[1405,839]],"dx":[102,254],"dy":[102,254],"length":397.1150378184913,"timing":[139,154,172,189,206,222,239,255,272,289,325,339,355,372,389,406,421,439,456,473,489,505,522,539,556,572,589,606,622,638,657,672,689,705,722,739,754,772,789,805,823,845,872]},{"start":[1242,760],"end":[1492,820],"points":[[1242,760],[1241,760],[1240,760],[1237,757],[1234,757],[1230,755],[1224,752],[1204,748],[1154,735],[1134,730],[1110,725],[1103,724],[1104,724],[1112,726],[1126,733],[1147,740],[1171,748],[1208,761],[1252,773],[1285,777],[1290,778],[1312,779],[1316,779],[1332,779],[1350,781],[1364,782],[1381,785],[1395,787],[1407,791],[1416,792],[1425,795],[1436,799],[1438,800],[1441,801],[1443,803],[1447,804],[1449,805],[1450,805],[1451,805],[1453,805],[1454,807],[1456,808],[1458,808],[1458,809],[1462,811],[1464,812],[1473,816],[1482,820],[1492,824],[1493,825],[1493,824],[1493,822],[1492,821],[1492,820]],"dx":[250,60],"dy":[250,60],"length":558.7138472793011,"timing":[94,101,115,132,148,164,182,199,216,232,249,266,282,298,315,332,349,365,382,413,418,440,448,465,481,499,516,531,548,565,581,599,614,632,647,665,682,699,734,762,782,798,819,832,848,866,882,899,915,932,951,965,981,998]},{"start":[1485,818],"end":[327,427],"points":[[1485,818],[1466,813],[1443,809],[1408,800],[1352,787],[1248,759],[1134,717],[1009,664],[918,625],[769,562],[689,532],[647,518],[622,511],[614,510],[611,510],[609,510],[598,511],[568,510],[553,508],[523,500],[493,491],[472,483],[453,476],[425,465],[412,458],[398,453],[376,444],[347,435],[333,430],[328,428],[328,427],[327,427]],"dx":[-1158,-391],"dy":[-1158,-391],"length":1228.4821842228032,"timing":[213,254,270,288,304,321,337,354,371,388,404,420,438,453,471,486,504,519,538,554,570,587,605,621,637,654,670,687,704,720,736,806]},{"start":[751,346],"end":[856,511],"points":[[751,346],[753,341],[754,339],[755,338],[755,337],[756,337],[756,337],[756,337],[756,338],[756,338],[756,340],[758,343],[760,347],[765,353],[770,360],[777,368],[782,377],[789,385],[796,395],[812,416],[819,423],[825,430],[829,436],[833,443],[837,448],[840,452],[843,457],[843,459],[845,462],[846,464],[847,467],[848,468],[848,469],[848,470],[849,471],[849,472],[849,472],[849,473],[849,473],[849,474],[849,474],[849,475],[849,477],[850,481],[850,482],[850,484],[850,486],[850,488],[851,491],[851,493],[851,494],[852,497],[852,499],[853,500],[853,502],[853,503],[854,505],[854,506],[854,507],[855,507],[855,508],[855,509],[855,509],[856,510],[856,510],[856,511],[856,511],[856,511]],"dx":[105,165],"dy":[105,165],"length":218.65989937898644,"timing":[1.100000023841858,9.699999988079071,18,26.600000023841858,34.80000001192093,43,61.69999998807907,65.19999998807907,70.19999998807907,1369.8999999761581,1378.699999988079,1385.5,1393.800000011921,1402.1000000238419,1410.199999988079,1417.8999999761581,1426.199999988079,1434.6000000238419,1443.1000000238419,1473.300000011921,1476.199999988079,1484.6000000238419,1492.8999999761581,1501.199999988079,1509.6000000238419,1518.800000011921,1526.300000011921,1534.5,1542.800000011921,1551.1000000238419,1559.5,1567.800000011921,1576.199999988079,1584.5,1592.8999999761581,1601.199999988079,1609.6000000238419,1617.800000011921,1626.1000000238419,1634.6000000238419,1642.800000011921,1651.1000000238419,1659.5,1667.800000011921,1676.1000000238419,1684.5,1692.800000011921,1701.199999988079,1709.5,1717.800000011921,1726.199999988079,1734.6000000238419,1742.8999999761581,1751.199999988079,1759.6000000238419,1767.8999999761581,1776.199999988079,1784.5,1792.800000011921,1801.199999988079,1809.6000000238419,1817.8999999761581,1826.199999988079,1834.6000000238419,1842.800000011921,1851.199999988079,1859.6000000238419,1884.6000000238419]},{"start":[855,511],"end":[384,40],"points":[[855,511],[854,511],[849,508],[839,504],[832,502],[811,494],[794,486],[774,476],[752,463],[708,435],[644,380],[612,348],[583,315],[551,273],[539,254],[514,216],[480,149],[475,137],[468,123],[463,115],[459,109],[452,96],[446,87],[443,83],[441,79],[440,79],[438,78],[435,75],[431,72],[427,68],[423,65],[416,60],[410,55],[405,50],[395,44],[393,43],[390,42],[388,41],[386,40],[385,40],[385,40],[384,40]],"dx":[-471,-471],"dy":[-471,-471],"length":686.1786317333887,"timing":[260.5,273.5,282.80000001192093,290.7000000476837,298.4000000357628,306.7000000476837,315.2000000476837,323.4000000357628,331.80000001192093,340.10000002384186,348.4000000357628,356.7000000476837,365.9000000357628,373.4000000357628,381.30000001192093,390,398.80000001192093,406.7000000476837,415.2000000476837,423.4000000357628,431.60000002384186,440,448.4000000357628,456.80000001192093,465.10000002384186,696.4000000357628,707.8000000119209,715.9000000357628,724,731.9000000357628,740.1000000238419,748.4000000357628,756.7000000476837,765,773.4000000357628,784.7000000476837,790,799.5,807.1000000238419,815.1000000238419,824.1000000238419,848.8000000119209]},{"start":[1044,63],"end":[670,749],"points":[[1044,63],[1011,93],[968,139],[946,164],[883,247],[866,275],[826,337],[789,397],[755,462],[728,518],[718,542],[711,562],[697,599],[686,629],[679,651],[677,658],[673,674],[670,686],[668,695],[667,703],[665,710],[664,716],[664,718],[664,722],[663,726],[663,728],[662,729],[662,730],[662,730],[662,730],[662,730],[661,731],[661,731],[661,731],[661,731],[661,732],[661,732],[661,732],[661,732],[661,733],[661,733],[661,733],[662,734],[662,735],[663,736],[664,737],[665,738],[665,740],[666,742],[667,743],[667,744],[668,746],[669,747],[669,748],[670,749],[670,749]],"dx":[-374,686],"dy":[-374,686],"length":803.5248069509797,"timing":[273.7000000476837,287.7000000476837,296.80000001192093,304,312.30000001192093,320.7000000476837,329,337.4000000357628,345.7000000476837,354,362.30000001192093,370.60000002384186,379.10000002384186,387.4000000357628,395.7000000476837,404,412.30000001192093,420.7000000476837,429.10000002384186,437.30000001192093,445.7000000476837,454,462.30000001192093,470.80000001192093,479.10000002384186,487.30000001192093,496,503.7000000476837,512.4000000357628,520.6000000238419,529.1000000238419,537.4000000357628,545.7000000476837,554,562.3000000119209,570.7000000476837,579,590.8000000119209,672.8000000119209,687.4000000357628,704,712.4000000357628,720.6000000238419,729,737.5,745.7000000476837,754,762.4000000357628,771,779,787.4000000357628,795.6000000238419,804,812.4000000357628,820.6000000238419,836.7000000476837]},{"start":[670,748],"end":[979,404],"points":[[670,748],[670,745],[673,737],[678,727],[686,713],[696,695],[708,676],[722,657],[737,637],[754,616],[769,598],[776,589],[803,560],[827,535],[842,521],[855,508],[866,499],[877,490],[882,487],[890,482],[897,477],[899,476],[909,470],[910,470],[917,466],[920,465],[924,463],[928,462],[933,461],[936,459],[941,458],[945,456],[948,455],[952,454],[953,453],[956,452],[958,451],[960,450],[962,449],[963,447],[964,446],[965,444],[966,442],[966,441],[968,439],[968,436],[969,435],[970,433],[971,431],[972,428],[972,427],[973,425],[973,423],[974,421],[974,420],[974,418],[975,416],[975,415],[976,413],[976,411],[977,409],[977,408],[978,407],[978,406],[978,406],[979,405],[979,404],[979,404],[979,404]],"dx":[309,-344],"dy":[309,-344],"length":479.4103119783496,"timing":[272.5,280.9000000357628,289.19999998807907,297.5,305.9000000357628,314.19999998807907,322.5,331,339.30000001192093,347.5,355.9000000357628,364.19999998807907,372.5,380.80000001192093,389.19999998807907,397.60000002384186,405.9000000357628,414.30000001192093,422.5,430.80000001192093,439.19999998807907,447.5,455.9000000357628,464.19999998807907,472.5,480.80000001192093,489.10000002384186,497.5,505.80000001192093,514.1000000238419,522.5,530.8000000119209,539.1999999880791,547.5,555.9000000357628,564.1999999880791,572.5,581,589.1999999880791,597.6000000238419,605.9000000357628,614.4000000357628,622.5,630.9000000357628,639.1999999880791,647.5,655.9000000357628,664.1999999880791,672.5,680.8000000119209,689.1999999880791,697.5,705.9000000357628,714.1000000238419,722.6000000238419,730.9000000357628,739.1999999880791,747.6000000238419,755.9000000357628,764.1000000238419,772.5,780.8000000119209,789.1999999880791,797.5,805.8000000119209,814.1000000238419,822.5,830.9000000357628,847.6000000238419]},{"start":[979,404],"end":[739,759],"points":[[979,404],[976,407],[972,411],[969,416],[959,427],[947,440],[934,457],[905,495],[883,524],[872,541],[850,572],[841,585],[825,610],[798,651],[792,661],[780,680],[770,694],[766,701],[759,713],[753,723],[749,731],[745,738],[744,741],[742,746],[741,749],[740,752],[739,754],[739,757],[739,758],[739,758],[739,759],[739,759],[739,759],[739,759]],"dx":[-240,355],"dy":[-240,355],"length":430.8078351804304,"timing":[246.60000002384186,259.30000001192093,267.60000002384186,275.80000001192093,284.10000002384186,292.5,300.69999998807907,309.10000002384186,317.30000001192093,325.80000001192093,334.19999998807907,342.5,350.89999997615814,359.10000002384186,367.5,375.69999998807907,384,393.30000001192093,400.89999997615814,410.10000002384186,417.60000002384186,425.89999997615814,434.80000001192093,442.69999998807907,451.39999997615814,459.30000001192093,467.5,475.89999997615814,485.19999998807907,492.60000002384186,501.60000002384186,509.10000002384186,517.8000000119209,607.1999999880791]},{"start":[739,759],"end":[429,425],"points":[[739,759],[739,758],[739,758],[738,758],[738,758],[738,757],[738,757],[738,757],[737,757],[737,757],[737,757],[737,757],[736,757],[736,757],[736,757],[736,757],[735,757],[735,757],[734,757],[732,757],[730,756],[726,755],[716,750],[708,745],[700,740],[689,732],[678,724],[665,715],[641,697],[625,685],[608,672],[591,657],[573,640],[553,621],[534,600],[517,580],[501,559],[494,550],[481,530],[470,513],[459,497],[456,491],[448,479],[443,470],[439,462],[436,455],[433,449],[432,443],[431,441],[430,436],[430,433],[430,431],[430,428],[430,427],[430,427],[429,427],[429,426],[429,426],[429,425],[429,425],[429,425]],"dx":[-310,-334],"dy":[-310,-334],"length":470.84110241295,"timing":[78.59999996423721,84.59999996423721,92.80000001192093,101.5,109,117.39999997615814,126.30000001192093,134.5,142.80000001192093,156.89999997615814,175.89999997615814,183.39999997615814,197.89999997615814,217.19999998807907,225.80000001192093,234,242.39999997615814,250.69999998807907,259.0999999642372,267.30000001192093,275.69999998807907,284.0999999642372,292.39999997615814,301,309.19999998807907,317.39999997615814,325.69999998807907,334,342.39999997615814,350.69999998807907,359.5,367.89999997615814,375.89999997615814,384.0999999642372,392.30000001192093,400.69999998807907,409,417.30000001192093,425.5999999642372,434,442.30000001192093,450.69999998807907,458.89999997615814,467.30000001192093,475.69999998807907,484,492.30000001192093,500.5999999642372,509,517.3999999761581,525.6999999880791,534.0999999642372,542.3999999761581,550.8000000119209,559,631.3000000119209,638.3000000119209,646.1999999880791,654.3999999761581,661.5999999642372,670.1999999880791]},{"start":[429,425],"end":[1272,150],"points":[[429,425],[434,423],[445,418],[460,412],[495,399],[532,386],[613,353],[645,340],[755,296],[833,265],[872,252],[950,223],[1025,199],[1094,176],[1121,169],[1174,155],[1190,151],[1222,144],[1232,142],[1250,139],[1255,138],[1264,137],[1270,136],[1275,136],[1276,136],[1276,136],[1276,136],[1276,137],[1276,138],[1276,139],[1276,140],[1276,140],[1275,141],[1274,142],[1274,142],[1273,143],[1273,143],[1273,144],[1272,144],[1272,145],[1272,145],[1272,145],[1272,145],[1272,146],[1272,146],[1272,147],[1272,148],[1272,148],[1272,149],[1272,150]],"dx":[843,-275],"dy":[843,-275],"length":913.2803687351401,"timing":[212.80000001192093,221.80000001192093,231.19999998807907,238.5,249.30000001192093,255.19999998807907,263.69999998807907,271.69999998807907,280.0999999642372,288.39999997615814,296.80000001192093,305.0999999642372,313.5,321.80000001192093,330.0999999642372,338.39999997615814,346.80000001192093,355.0999999642372,363.39999997615814,371.80000001192093,380.19999998807907,388.5,396.80000001192093,405.30000001192093,413.39999997615814,421.89999997615814,431.30000001192093,438.89999997615814,446.69999998807907,455.0999999642372,463.5,471.80000001192093,480.0999999642372,488.39999997615814,496.80000001192093,505.0999999642372,513.3999999761581,521.6999999880791,530.3000000119209,538.3000000119209,546.8000000119209,555,563.3000000119209,571.6999999880791,580,588.3999999761581,596.6999999880791,605,613.5,638.3999999761581]},{"start":[30,718],"end":[1573,840],"points":[[30,718],[210,706],[407,687],[533,663],[610,639],[636,624],[640,611],[629,599],[626,599],[623,599],[619,600],[621,600],[622,600],[629,600],[647,596],[675,589],[711,578],[761,561],[812,542],[858,525],[901,508],[936,492],[968,479],[990,471],[1004,466],[1010,463],[1010,462],[1010,462],[1010,463],[1010,464],[1013,472],[1018,484],[1028,501],[1045,521],[1071,545],[1108,572],[1154,600],[1216,637],[1269,667],[1312,688],[1346,703],[1370,714],[1383,720],[1390,724],[1392,726],[1393,726],[1395,727],[1402,731],[1415,738],[1431,747],[1450,759],[1473,774],[1497,791],[1514,803],[1529,813],[1545,825],[1559,833],[1569,839],[1573,841],[1573,840]],"dx":[1543,122],"dy":[1543,122],"length":1763.858969333765,"timing":[3085.10000000149,3097,3113.60000000149,3130.300000000745,3146.900000002235,3163.60000000149,3180.300000000745,3197,3392.300000000745,3396.900000002235,3413.60000000149,3430.300000000745,3447,3463.5,3480.300000000745,3496.900000002235,3513.60000000149,3530.300000000745,3547,3563.60000000149,3580.300000000745,3597,3614.5,3631.2000000029802,3647,3663.7000000029802,3832.900000002235,3919.800000000745,3943.800000000745,3947.10000000149,3963.800000000745,3980.2000000029802,3996.900000002235,4013.60000000149,4030.300000000745,4047,4063.7000000029802,4080.400000002235,4097.10000000149,4113.70000000298,4130.5,4147.20000000298,4163.800000000745,4180.400000002235,4197.20000000298,4213.800000000745,4263.60000000149,4280.400000002235,4297,4313.60000000149,4330.20000000298,4347,4363.60000000149,4380.20000000298,4396.900000002235,4413.60000000149,4430.300000000745,4446.900000002235,4463.60000000149,4579]},{"start":[1585,850],"end":[935,115],"points":[[1585,850],[1585,851],[1586,851],[1587,851],[1588,851],[1589,851],[1589,850],[1588,849],[1584,846],[1570,827],[1541,784],[1482,709],[1394,614],[1280,501],[1183,410],[1121,347],[1082,304],[1067,284],[1061,274],[1060,270],[1059,268],[1058,268],[1056,263],[1049,251],[1035,229],[1016,201],[989,166],[967,133],[953,110],[947,96],[946,91],[945,91],[945,92],[945,93],[944,96],[943,101],[941,106],[938,111],[936,113],[935,115]],"dx":[-650,-735],"dy":[-650,-735],"length":1034.639020801594,"timing":[0,15.199999999254942,31.5,83.80000000074506,262.4000000022352,323.30000000074506,374.19999999925494,383.9000000022352,398.1000000014901,414.80000000074506,431.5,448.19999999925494,464.9000000022352,481.4000000022352,498.1000000014901,514.8000000007451,531.4000000022352,548.1000000014901,564.6999999992549,581.5,598.1000000014901,670.1000000014901,681.5,698.1999999992549,714.8000000007451,731.5,748.1999999992549,764.8000000007451,781.5,798.1000000014901,814.8000000007451,831.5,974.1000000014901,985,998.1999999992549,1014.9000000022352,1031.5,1048.199999999255,1064.800000000745,1081.4000000022352]},{"start":[906,133],"end":[547,545],"points":[[906,133],[900,136],[891,140],[883,145],[877,151],[872,154],[871,156],[870,156],[870,157],[863,164],[847,176],[822,197],[786,234],[746,286],[712,335],[675,385],[640,428],[610,465],[588,493],[571,515],[562,533],[557,543],[555,548],[554,550],[553,550],[552,550],[551,550],[550,550],[549,549],[548,548],[548,547],[547,545]],"dx":[-359,412],"dy":[-359,412],"length":561.6431180215917,"timing":[14.199999999254942,30.899999998509884,47.5,64.30000000074506,80.89999999850988,97.5,114.19999999925494,244.10000000149012,247.39999999850988,264.19999999925494,280.8999999985099,297.6000000014901,315.6000000014901,332.69999999925494,347.5,364.19999999925494,380.8999999985099,397.69999999925494,414.30000000074506,431.1000000014901,447.69999999925494,464.30000000074506,481,497.69999999925494,583.3000000007451,597.8999999985099,614.8999999985099,664.3999999985099,680.8000000007451,697.6000000014901,714.1999999992549,730.8000000007451]},{"start":[548,545],"end":[1829,400],"points":[[548,545],[554,541],[573,530],[612,506],[688,469],[810,423],[937,387],[1086,356],[1208,337],[1313,328],[1403,326],[1458,329],[1492,337],[1512,348],[1524,359],[1532,369],[1537,377],[1541,381],[1545,383],[1553,385],[1565,387],[1582,388],[1594,388],[1617,389],[1785,402],[1786,402],[1788,402],[1821,400],[1828,400],[1829,400]],"dx":[1281,-145],"dy":[1281,-145],"length":1339.4524415489022,"timing":[228.39999999850988,244.39999999850988,261,277.69999999925494,294.30000000074506,311.0999999977648,327.5999999977648,344.30000000074506,361.0999999977648,377.69999999925494,394.30000000074506,411,427.69999999925494,444.3999999985099,461,477.5999999977648,494.30000000074506,510.8999999985099,527.8999999985099,544.3000000007451,561,577.6999999992549,594.8000000007451,611.0999999977648,724.8999999985099,994,1012.0999999977648,1061.0999999977648,1077.5999999977648,1094.3999999985099]},{"start":[1480,373],"end":[992,94],"points":[[1480,373],[1409,364],[1347,355],[1296,348],[1261,343],[1239,340],[1224,337],[1210,335],[1192,331],[1162,322],[1124,310],[1072,291],[1017,269],[975,248],[951,230],[940,215],[937,201],[943,187],[954,174],[967,161],[975,151],[982,142],[988,135],[992,130],[996,126],[999,125],[1000,123],[1000,122],[1000,121],[1000,118],[1000,113],[998,105],[995,98],[992,94]],"dx":[-488,-279],"dy":[-488,-279],"length":719.1731265456488,"timing":[15.199999999254942,31.900000002235174,48.600000001490116,65.19999999925494,82.5,98.5,115.19999999925494,132,148.69999999925494,165.30000000074506,182.10000000149012,199.10000000149012,215.30000000074506,231.90000000223517,248.69999999925494,265.30000000074506,281.9000000022352,298.5,315.19999999925494,331.80000000074506,348.5,365.19999999925494,381.80000000074506,398.6000000014901,415.1000000014901,431.80000000074506,448.5,471.5,484.80000000074506,498.5,515.3000000007451,532.6999999992549,548.5,565.1999999992549]},{"start":[895,210],"end":[433,333],"points":[[895,210],[886,219],[879,225],[875,229],[873,231],[873,232],[872,233],[869,234],[866,238],[859,242],[847,249],[826,261],[795,273],[762,286],[718,299],[671,310],[615,318],[568,322],[536,322],[513,322],[500,322],[492,322],[490,323],[489,323],[487,324],[484,324],[482,324],[481,324],[481,324],[481,325],[477,326],[467,328],[454,330],[441,332],[434,333],[433,333],[433,333]],"dx":[-462,123],"dy":[-462,123],"length":490.91959206041395,"timing":[10.199999999254942,26.899999998509884,43.5,60.099999997764826,76.79999999701977,136,143.5,160.09999999776483,176.79999999701977,193.5,210.19999999925494,226.89999999850988,243.5,260.19999999925494,277,293.5,310.19999999925494,326.69999999925494,343.5,360.0999999977648,376.79999999701977,393.5,410.0999999977648,426.79999999701977,443.5,460.19999999925494,476.79999999701977,526.7999999970198,584.0999999977648,629,676.7999999970198,693.5,710.1999999992549,727.5999999977648,743.3999999985099,760.1999999992549,833.0999999977648]},{"start":[708,251],"end":[835,75],"points":[[708,251],[753,234],[786,223],[809,216],[821,213],[827,212],[831,212],[835,211],[839,211],[843,211],[848,211],[855,211],[866,210],[877,207],[886,202],[893,192],[899,173],[902,142],[896,107],[883,68],[871,35],[865,15],[862,3],[862,2],[862,3],[862,5],[861,13],[859,24],[856,33],[854,43],[850,51],[847,58],[843,64],[840,70],[837,74],[835,75]],"dx":[127,-176],"dy":[127,-176],"length":475.1519967514816,"timing":[8.800000000745058,25.5,42.100000001490116,58.69999999925494,75.39999999850988,92.10000000149012,108.69999999925494,125.39999999850988,142.10000000149012,158.69999999925494,175.39999999850988,192.10000000149012,208.80000000074506,225.39999999850988,242.10000000149012,258.80000000074506,275.3999999985099,292.1000000014901,308.8999999985099,325.8999999985099,342,358.80000000074506,375.3999999985099,392.1000000014901,463.5,475.3999999985099,492.1000000014901,508.69999999925494,525.3999999985099,542,558.8000000007451,575.5,592.1000000014901,608.8000000007451,625.5,642.1000000014901]},{"start":[860,110],"end":[1343,375],"points":[[860,110],[867,116],[874,122],[882,130],[890,139],[895,147],[898,156],[899,163],[899,167],[899,170],[899,172],[899,174],[899,178],[904,186],[920,200],[951,220],[1013,255],[1088,295],[1169,336],[1232,369],[1285,398],[1322,415],[1342,422],[1346,423],[1346,422],[1344,421],[1344,417],[1345,412],[1346,405],[1346,398],[1346,391],[1346,385],[1344,380],[1343,376],[1343,375]],"dx":[483,265],"dy":[483,265],"length":644.8351966216483,"timing":[10.800000000745058,27.5,44.100000001490116,60.900000002235174,77.5,94.10000000149012,110.80000000074506,127.40000000223517,144,160.80000000074506,177.40000000223517,194.10000000149012,210.90000000223517,227.5,244.19999999925494,260.9000000022352,277.6000000014901,294.1000000014901,310.80000000074506,327.4000000022352,344.1000000014901,360.69999999925494,377.4000000022352,394,415.5,427.4000000022352,444.1000000014901,460.69999999925494,477.4000000022352,494,510.69999999925494,527.4000000022352,544.1999999992549,560.6999999992549,577.4000000022352]},{"start":[1290,366],"end":[1619,809],"points":[[1290,366],[1259,362],[1226,358],[1194,356],[1163,354],[1129,353],[1095,352],[1065,352],[1046,352],[1036,352],[1035,352],[1034,352],[1028,352],[1012,354],[989,356],[971,359],[964,364],[965,380],[989,415],[1051,458],[1148,494],[1250,522],[1356,562],[1435,595],[1492,621],[1530,648],[1546,667],[1551,677],[1551,681],[1548,684],[1548,689],[1551,697],[1557,703],[1563,707],[1566,709],[1570,712],[1576,718],[1589,733],[1602,749],[1612,760],[1617,767],[1617,768],[1618,768],[1618,769],[1619,770],[1620,775],[1621,778],[1621,780],[1622,780],[1621,781],[1622,783],[1622,785],[1622,787],[1623,787],[1622,787],[1621,787],[1620,787],[1619,788],[1618,789],[1617,789],[1616,789],[1614,789],[1609,786],[1600,783],[1587,779],[1569,775],[1538,768],[1495,761],[1451,758],[1425,758],[1412,758],[1406,758],[1405,758],[1403,758],[1402,758],[1401,758],[1398,757],[1396,755],[1392,754],[1397,759],[1411,768],[1423,778],[1435,789],[1449,801],[1466,812],[1481,818],[1497,821],[1508,821],[1516,821],[1526,819],[1540,817],[1554,813],[1565,809],[1574,806],[1580,803],[1583,801],[1584,800],[1585,800],[1586,800],[1587,800],[1589,800],[1598,804],[1606,806],[1613,808],[1618,809],[1619,809]],"dx":[329,443],"dy":[329,443],"length":1649.684976249431,"timing":[6,22.600000001490116,39.30000000074506,56,72.69999999925494,89.30000000074506,105.89999999850988,122.60000000149012,139.30000000074506,155.89999999850988,172.60000000149012,222.60000000149012,239.30000000074506,255.89999999850988,272.6000000014901,289.19999999925494,306,322.69999999925494,339.30000000074506,356,372.69999999925494,389.3999999985099,406,422.6000000014901,439.30000000074506,455.8999999985099,472.6000000014901,489.30000000074506,506,522.6000000014901,539.3000000007451,556,572.6000000014901,589.3000000007451,606,622.6000000014901,639.3000000007451,656,672.6000000014901,689.3000000007451,705.8999999985099,722.6999999992549,744.6999999992549,765.5,772.6000000014901,789.1999999992549,805.8999999985099,822.6000000014901,878.8999999985099,1010,1056,1072.699999999255,1089.300000000745,1110.699999999255,1332.1000000014901,1339.300000000745,1355.8999999985099,1372.6000000014901,1389.300000000745,1419.699999999255,1428.5,1439.300000000745,1456,1472.6000000014901,1489.3999999985099,1506,1522.800000000745,1539.3999999985099,1556.199999999255,1572.8999999985099,1589.5,1606.199999999255,1622.800000000745,1639.6000000014901,1666.199999999255,1674.699999999255,1689.300000000745,1705.8999999985099,1722.6000000014901,1772.699999999255,1789.300000000745,1806,1822.699999999255,1839.300000000745,1855.8999999985099,1872.699999999255,1889.300000000745,1906,1922.6000000014901,1939.300000000745,1956,1972.6000000014901,1989.3999999985099,2007.300000000745,2022.6000000014901,2039.300000000745,2056,2072.699999999255,2273.300000000745,2344.39999999851,2356,2372.60000000149,2389.300000000745,2406,2422.699999999255,2439.300000000745]},{"start":[1582,788],"end":[650,209],"points":[[1582,788],[1569,778],[1548,763],[1521,745],[1496,728],[1480,718],[1466,704],[1454,692],[1446,683],[1442,678],[1440,677],[1440,676],[1439,676],[1433,671],[1413,654],[1369,620],[1292,565],[1176,482],[1062,398],[966,322],[905,271],[880,244],[873,231],[872,229],[872,230],[871,233],[869,238],[866,238],[857,239],[831,239],[785,234],[730,223],[687,213],[648,200],[624,191],[613,184],[613,183],[614,183],[617,183],[624,186],[631,189],[637,194],[642,199],[647,204],[649,206],[650,208],[650,209]],"dx":[-932,-579],"dy":[-932,-579],"length":1229.6296425969615,"timing":[4.100000001490116,20.600000001490116,37.30000000074506,54,70.69999999925494,87.39999999850988,104,120.60000000149012,137.39999999850988,155.19999999925494,172.19999999925494,187.30000000074506,204.80000000074506,220.60000000149012,237.30000000074506,254,270.6000000014901,287.30000000074506,304,320.69999999925494,337.30000000074506,354.1000000014901,370.69999999925494,387.30000000074506,441,453.8999999985099,470.80000000074506,487.30000000074506,504,520.8999999985099,537.5,554.1000000014901,570.8000000007451,587.5,604.1000000014901,620.8999999985099,638.1000000014901,789.1000000014901,804.1000000014901,820.8000000007451,837.6000000014901,854.1000000014901,870.6999999992549,887.3999999985099,904.1000000014901,920.6999999992549,941.8999999985099]},{"start":[695,255],"end":[754,551],"points":[[695,255],[705,262],[719,269],[736,274],[748,278],[754,279],[755,280],[755,281],[754,281],[749,283],[742,289],[738,301],[738,322],[741,347],[744,380],[744,405],[744,424],[748,449],[750,464],[750,478],[751,496],[752,513],[753,528],[754,541],[754,547],[754,550],[754,551]],"dx":[59,296],"dy":[59,296],"length":345.8739906037279,"timing":[12.100000001490116,28.800000000745058,45.5,62.19999999925494,78.80000000074506,95.60000000149012,112.19999999925494,192.30000000074506,196.60000000149012,212.19999999925494,228.80000000074506,245.5,262.1000000014901,278.9000000022352,295.5,312.1000000014901,328.80000000074506,345.5,362.30000000074506,379,395.6000000014901,412.1000000014901,428.80000000074506,445.5,462.19999999925494,478.80000000074506,495.5]},{"start":[628,319],"end":[1126,674],"points":[[628,319],[609,286],[591,253],[582,233],[579,223],[577,215],[576,211],[576,209],[576,206],[581,205],[588,203],[597,201],[606,199],[617,198],[636,198],[662,199],[707,205],[770,215],[849,226],[939,241],[1027,261],[1091,286],[1129,314],[1161,363],[1181,426],[1189,474],[1191,512],[1185,538],[1178,555],[1173,568],[1171,580],[1171,586],[1171,588],[1170,589],[1169,589],[1168,591],[1165,596],[1160,604],[1152,618],[1145,631],[1139,642],[1134,652],[1129,662],[1126,669],[1126,673],[1126,674]],"dx":[498,355],"dy":[498,355],"length":1087.4483684560337,"timing":[2.699999999254942,19.400000002235174,36,52.600000001490116,69.30000000074506,86,102.69999999925494,120.19999999925494,136,152.69999999925494,169.40000000223517,186,202.60000000149012,219.30000000074506,236,252.80000000074506,269.30000000074506,286,302.69999999925494,319.30000000074506,336,352.69999999925494,369.4000000022352,386,402.6000000014901,419.4000000022352,436,452.6000000014901,469.30000000074506,486,502.69999999925494,519.3000000007451,536,552.6000000014901,569.3000000007451,586,602.6999999992549,619.3000000007451,635.9000000022352,652.6999999992549,669.3000000007451,686,702.6999999992549,719.4000000022352,736,754.6999999992549]},{"start":[1140,529],"end":[1623,690],"points":[[1140,529],[1136,507],[1131,491],[1121,475],[1107,458],[1091,443],[1075,427],[1064,414],[1052,397],[1041,380],[1034,368],[1027,358],[1025,354],[1025,352],[1031,349],[1048,347],[1099,355],[1184,389],[1273,439],[1342,490],[1401,542],[1459,597],[1494,632],[1522,662],[1544,685],[1566,701],[1588,709],[1616,715],[1645,720],[1670,724],[1678,725],[1677,723],[1672,721],[1668,719],[1662,715],[1657,711],[1649,705],[1641,699],[1633,695],[1626,691],[1623,690]],"dx":[483,161],"dy":[483,161],"length":1058.983651081074,"timing":[16.399999998509884,33.100000001490116,49.80000000074506,66.5,83.10000000149012,99.89999999850988,116.39999999850988,133.30000000074506,149.80000000074506,166.5,183.19999999925494,199.80000000074506,216.39999999850988,233.10000000149012,249.80000000074506,266.80000000074506,283.30000000074506,299.80000000074506,316.6000000014901,333.30000000074506,349.8999999985099,366.5,383.19999999925494,399.8999999985099,416.6000000014901,433.30000000074506,450,466.5,483.30000000074506,500,516.5,566.5,583.1000000014901,599.8000000007451,616.5,633.1999999992549,649.8000000007451,666.5,683.1999999992549,699.8000000007451,716.5]},{"start":[1603,688],"end":[1165,191],"points":[[1603,688],[1588,683],[1560,673],[1519,661],[1479,649],[1430,635],[1390,623],[1350,611],[1318,601],[1290,589],[1269,580],[1252,570],[1237,556],[1222,536],[1206,508],[1188,473],[1171,429],[1159,391],[1152,354],[1149,325],[1149,297],[1150,277],[1152,261],[1152,248],[1152,240],[1153,237],[1154,235],[1155,234],[1155,233],[1155,230],[1155,224],[1156,216],[1157,209],[1159,203],[1161,198],[1163,194],[1164,193],[1165,191]],"dx":[-438,-497],"dy":[-438,-497],"length":778.9504944430113,"timing":[13.700000002980232,30.200000002980232,46.900000002235174,63.5,80.20000000298023,96.80000000074506,113.5,130.20000000298023,146.90000000223517,163.5,180.10000000149012,196.80000000074506,213.60000000149012,230.20000000298023,246.90000000223517,263.6000000014901,280.30000000074506,297,313.6000000014901,330.20000000298023,346.9000000022352,363.5,380.20000000298023,396.80000000074506,413.5,430.20000000298023,446.9000000022352,463.6000000014901,530.5,546.9000000022352,563.5,580.3000000007451,596.9000000022352,613.5,630.3000000007451,641.8000000007451,646.8000000007451,663.6000000014901]},{"start":[821,73],"end":[1480,407],"points":[[821,73],[823,73],[824,74],[824,75],[824,78],[825,81],[825,84],[825,86],[825,90],[825,97],[829,108],[847,137],[875,170],[913,208],[966,246],[1048,289],[1138,327],[1228,364],[1299,394],[1363,420],[1414,442],[1450,456],[1469,464],[1473,466],[1473,464],[1473,458],[1476,444],[1479,431],[1480,419],[1480,412],[1480,408],[1480,407]],"dx":[659,334],"dy":[659,334],"length":847.3547656367426,"timing":[12.399999998509884,29,104.60000000149012,112.19999999925494,128.89999999850988,145.5,162.19999999925494,178.89999999850988,195.5,212.19999999925494,229.19999999925494,245.80000000074506,262.30000000074506,278.8999999985099,295.6000000014901,312.19999999925494,328.8999999985099,345.6000000014901,362.30000000074506,379,395.6000000014901,412.19999999925494,428.8999999985099,445.6000000014901,501.30000000074506,512.1999999992549,528.8000000007451,545.6000000014901,562.3000000007451,578.8999999985099,595.5,612.3000000007451]},{"start":[1444,402],"end":[641,358],"points":[[1444,402],[1429,398],[1408,393],[1377,387],[1340,380],[1301,373],[1262,365],[1218,353],[1183,343],[1149,331],[1123,320],[1099,311],[1071,302],[1045,298],[1013,296],[973,297],[933,300],[882,309],[840,317],[782,327],[729,336],[705,341],[670,349],[641,358]],"dx":[-803,-44],"dy":[-803,-44],"length":823.5484955051483,"timing":[9.199999999254942,26.100000001490116,42.80000000074506,59.30000000074506,76,92.60000000149012,109.40000000223517,126.10000000149012,142.60000000149012,159.30000000074506,176,192.69999999925494,209.30000000074506,226,242.69999999925494,259.19999999925494,276.19999999925494,293.30000000074506,309.30000000074506,326.19999999925494,343,359.4000000022352,376.1000000014901,493.30000000074506]},{"start":[594,613],"end":[227,207],"points":[[594,613],[594,612],[595,603],[593,585],[578,554],[548,511],[505,461],[448,408],[389,368],[328,336],[282,317],[252,304],[245,300],[244,299],[244,298],[243,296],[242,295],[241,293],[240,290],[237,286],[235,280],[231,275],[226,267],[222,258],[220,250],[218,243],[217,239],[216,234],[216,232],[215,230],[215,229],[215,228],[215,226],[215,223],[215,221],[216,221],[216,220],[217,220],[219,218],[220,216],[221,214],[223,213],[224,212],[225,210],[226,208],[226,207],[227,207]],"dx":[-367,-406],"dy":[-367,-406],"length":596.3887560685866,"timing":[209.69999999925494,216.59999999776483,232,248.5,265.19999999925494,281.8999999985099,298.5999999977648,315.19999999925494,331.8999999985099,348.5999999977648,365.29999999701977,382,398.5999999977648,415.29999999701977,431.79999999701977,448.5999999977648,465.19999999925494,482.5999999977648,498.5,515.1999999992549,532.0999999977648,548.6999999992549,565.3999999985099,582.6999999992549,598.5999999977648,615.2999999970198,631.8999999985099,648.5,665.1999999992549,681.8999999985099,698.3999999985099,715.1999999992549,732,748.5999999977648,765.1999999992549,962.5,976.8999999985099,981.7999999970198,998.5,1015.0999999977648,1031.7999999970198,1048.5,1065.199999999255,1081.7999999970198,1098.5,1115.199999999255,1132.5999999977648]},{"start":[233,212],"end":[1651,42],"points":[[233,212],[237,217],[251,229],[269,238],[298,246],[335,249],[379,249],[432,248],[478,245],[519,243],[561,242],[608,248],[671,256],[754,259],[831,259],[946,244],[1058,221],[1187,190],[1303,163],[1438,133],[1549,116],[1629,107],[1684,107],[1712,114],[1720,121],[1719,129],[1712,135],[1709,136],[1709,135],[1708,122],[1704,94],[1697,56],[1690,26],[1683,3],[1682,0],[1680,0],[1679,5],[1677,12],[1674,18],[1670,23],[1666,29],[1662,32],[1659,35],[1658,37],[1655,38],[1653,40],[1652,40],[1651,41],[1651,42]],"dx":[1418,-170],"dy":[1418,-170],"length":1731.9505126863378,"timing":[20,36.69999999925494,53.30000000074506,70,86.60000000149012,103.19999999925494,119.90000000223517,136.60000000149012,153.30000000074506,170,186.69999999925494,203.30000000074506,220,236.60000000149012,253.30000000074506,270,286.6000000014901,303.19999999925494,319.9000000022352,336.6000000014901,353.19999999925494,370,386.6000000014901,403.30000000074506,420,436.69999999925494,453.4000000022352,470,490.5,503.30000000074506,520,536.6000000014901,553.3000000007451,570,574,687.6000000014901,703.3000000007451,720,736.6999999992549,753.3000000007451,769.9000000022352,786.6000000014901,803.1999999992549,820,836.6999999992549,853.9000000022352,870,885.3000000007451,886.6999999992549]},{"start":[113,807],"end":[1583,41],"points":[[113,807],[138,793],[152,784],[182,766],[217,741],[245,720],[268,702],[326,651],[334,645],[363,621],[393,595],[420,572],[430,560],[434,555],[438,550],[442,547],[451,541],[471,529],[538,496],[608,467],[719,424],[827,381],[913,346],[1061,283],[1125,253],[1154,235],[1179,214],[1199,191],[1204,186],[1209,179],[1213,177],[1221,169],[1234,156],[1247,144],[1264,131],[1283,119],[1338,96],[1381,83],[1401,78],[1409,78],[1410,79],[1422,80],[1435,80],[1456,74],[1482,63],[1503,54],[1507,54],[1522,49],[1542,47],[1564,41],[1585,37],[1594,34],[1592,34],[1591,35],[1589,37],[1587,39],[1586,39],[1585,40],[1583,41]],"dx":[1470,-766],"dy":[1470,-766],"length":1713.7303509839348,"timing":[14,31,48,64,82,98,115,143,149,165,181,198,215,231,248,265,281,298,314,331,348,365,381,398,415,431,448,464,481,498,515,531,550,564,581,597,614,631,648,665,704,731,748,765,781,798,816,831,848,865,885,905,981,998,1015,1031,1095,1114,1131]},{"start":[1458,130],"end":[1167,621],"points":[[1458,130],[1429,147],[1408,156],[1366,171],[1314,191],[1282,202],[1248,214],[1231,218],[1211,219],[1214,215],[1231,202],[1269,180],[1330,153],[1378,135],[1425,119],[1436,115],[1435,118],[1426,126],[1410,140],[1382,174],[1328,239],[1298,279],[1267,327],[1237,396],[1220,453],[1217,509],[1217,533],[1222,549],[1226,556],[1228,561],[1236,578],[1236,581],[1235,586],[1228,588],[1219,588],[1211,590],[1202,594],[1188,604],[1185,608],[1181,612],[1178,614],[1175,616],[1170,620],[1168,620],[1167,621]],"dx":[-291,491],"dy":[-291,491],"length":1137.1110191174364,"timing":[17,33,49,66,83,99,117,133,150,166,183,199,217,233,250,266,283,301,316,333,350,366,383,400,417,433,450,466,483,500,516,533,550,566,583,599,617,642,649,666,683,700,716,732,749]},{"start":[1120,514],"end":[1330,723],"points":[[1120,514],[1105,501],[1089,488],[1073,478],[1054,462],[1047,456],[1041,451],[1040,449],[1040,452],[1040,453],[1040,457],[1040,471],[1040,477],[1040,486],[1044,497],[1066,529],[1096,556],[1127,578],[1164,597],[1206,618],[1239,638],[1261,653],[1284,671],[1304,691],[1322,705],[1328,712],[1330,712],[1330,713],[1330,714],[1330,716],[1330,717],[1330,720],[1330,721],[1330,723]],"dx":[210,209],"dy":[210,209],"length":525.6287746162235,"timing":[8,26,42,59,75,92,108,125,204,212,226,242,259,274,292,313,325,342,358,376,392,409,425,442,459,475,492,509,578,592,609,634,725,742]},{"start":[1330,721],"end":[752,29],"points":[[1330,721],[1328,721],[1328,720],[1327,718],[1326,716],[1323,712],[1320,708],[1318,705],[1315,703],[1314,703],[1314,701],[1305,694],[1289,678],[1266,653],[1220,606],[1167,553],[1099,483],[1037,414],[993,365],[932,296],[854,209],[826,173],[807,137],[803,116],[807,102],[813,88],[813,85],[813,84],[813,81],[813,80],[812,77],[811,76],[807,72],[791,59],[783,54],[767,41],[759,36],[756,33],[756,32],[755,32],[754,30],[752,30],[752,29]],"dx":[-578,-692],"dy":[-578,-692],"length":928.8485675268804,"timing":[9,39,52,68,84,101,118,135,151,182,228,251,268,285,301,318,334,351,368,384,401,418,434,451,467,485,502,518,534,551,568,585,601,618,634,651,668,684,785,802,818,835,902]},{"start":[752,55],"end":[1297,51],"points":[[752,55],[755,69],[756,73],[760,91],[763,103],[764,110],[765,116],[768,130],[768,138],[768,145],[768,150],[768,156],[768,159],[768,160],[769,160],[774,160],[813,156],[846,150],[899,140],[954,129],[1000,119],[1077,102],[1124,90],[1154,82],[1186,72],[1198,65],[1204,62],[1208,58],[1212,54],[1216,51],[1219,50],[1220,50],[1221,50],[1225,50],[1238,52],[1255,56],[1267,59],[1275,60],[1279,60],[1282,60],[1286,59],[1290,55],[1294,52],[1297,51]],"dx":[545,-4],"dy":[545,-4],"length":656.5694930444985,"timing":[1,18,35,50,67,84,100,117,133,150,167,184,200,218,248,267,284,300,317,333,351,367,384,400,417,434,450,467,483,499,517,534,583,600,616,634,650,667,684,700,717,734,750,767]},{"start":[1233,94],"end":[1382,306],"points":[[1233,94],[1225,99],[1216,104],[1203,111],[1195,116],[1185,124],[1178,128],[1176,129],[1164,137],[1151,148],[1150,150],[1150,151],[1150,154],[1150,163],[1151,177],[1158,213],[1167,234],[1186,262],[1208,281],[1252,301],[1271,304],[1297,307],[1317,308],[1333,308],[1359,306],[1363,304],[1364,304],[1367,304],[1369,304],[1372,304],[1373,304],[1376,304],[1378,304],[1381,304],[1381,306],[1382,306]],"dx":[149,212],"dy":[149,212],"length":431.4986138401142,"timing":[3,20,36,53,70,90,112,119,144,162,170,256,270,285,302,320,336,353,369,386,403,421,436,453,470,487,553,570,587,603,620,637,653,670,688,720]},{"start":[1375,304],"end":[190,485],"points":[[1375,304],[1372,304],[1367,303],[1363,302],[1360,302],[1359,302],[1356,301],[1350,301],[1346,301],[1339,301],[1334,301],[1333,301],[1330,301],[1319,302],[1291,304],[1241,308],[1189,312],[1101,320],[944,334],[864,342],[766,355],[684,371],[614,388],[565,406],[531,420],[510,432],[502,438],[483,454],[468,466],[455,473],[442,477],[432,479],[415,476],[393,473],[362,471],[337,471],[315,472],[295,475],[290,476],[276,478],[256,481],[237,484],[225,485],[217,486],[216,486],[216,485],[211,485],[203,485],[194,485],[190,485]],"dx":[-1185,181],"dy":[-1185,181],"length":1217.9913006773718,"timing":[17,33,50,66,83,100,116,133,152,166,183,200,216,234,249,267,283,300,316,333,350,366,383,399,416,433,449,466,483,501,516,533,549,567,583,600,616,646,654,666,682,699,716,733,756,767,783,800,816,833]},{"start":[268,472],"end":[1369,724],"points":[[268,472],[286,469],[299,468],[342,460],[362,455],[388,449],[412,441],[429,434],[441,430],[468,420],[503,406],[524,398],[538,390],[545,386],[546,386],[555,391],[609,410],[670,428],[744,448],[830,473],[891,495],[958,525],[1063,585],[1100,612],[1141,643],[1173,666],[1184,677],[1186,677],[1186,679],[1186,680],[1188,685],[1190,686],[1191,688],[1192,688],[1200,695],[1216,706],[1243,719],[1268,727],[1292,728],[1318,724],[1327,720],[1334,716],[1339,715],[1340,715],[1343,716],[1345,717],[1351,719],[1353,719],[1358,720],[1365,723],[1368,723],[1369,723],[1369,724]],"dx":[1101,252],"dy":[1101,252],"length":1209.4115167205164,"timing":[3,19,37,53,70,86,103,120,137,152,170,186,203,220,251,270,289,303,320,337,353,370,386,403,420,437,453,470,492,513,536,553,589,602,624,636,653,669,687,703,720,736,753,769,786,803,819,836,853,869,887,903,952]},{"start":[1334,686],"end":[1193,32],"points":[[1334,686],[1330,682],[1327,680],[1318,672],[1312,665],[1291,649],[1279,639],[1275,637],[1273,636],[1271,634],[1269,632],[1267,630],[1265,629],[1265,630],[1267,634],[1269,637],[1275,645],[1275,643],[1275,616],[1275,602],[1273,578],[1266,526],[1252,461],[1230,378],[1211,303],[1200,232],[1193,179],[1188,127],[1187,97],[1189,82],[1191,74],[1192,67],[1192,61],[1192,56],[1193,54],[1193,52],[1195,47],[1195,44],[1195,36],[1193,32]],"dx":[-141,-654],"dy":[-141,-654],"length":732.4375027057349,"timing":[3,20,37,52,70,87,103,120,137,153,170,187,203,223,236,253,270,286,314,322,336,353,370,387,403,419,437,452,471,486,503,520,537,553,570,586,603,620,636,653]},{"start":[1154,75],"end":[1309,510],"points":[[1154,75],[1145,84],[1137,92],[1120,106],[1105,121],[1096,130],[1085,137],[1080,143],[1079,144],[1075,147],[1064,154],[1053,165],[1044,174],[1031,189],[1022,215],[1024,219],[1036,227],[1057,240],[1080,257],[1123,300],[1154,339],[1179,369],[1224,417],[1246,430],[1261,435],[1265,435],[1266,435],[1267,435],[1269,435],[1274,443],[1275,443],[1278,447],[1281,455],[1285,464],[1288,475],[1293,488],[1298,499],[1302,504],[1306,508],[1309,510]],"dx":[155,435],"dy":[155,435],"length":619.8953572653493,"timing":[12,29,46,62,79,96,112,130,146,163,179,196,212,229,246,263,279,296,312,330,346,363,380,396,413,430,446,513,536,575,579,596,612,629,646,662,681,696,712,728]},{"start":[1309,509],"end":[455,596],"points":[[1309,509],[1309,508],[1307,508],[1306,504],[1302,501],[1300,497],[1298,496],[1297,495],[1297,494],[1297,492],[1296,490],[1296,487],[1294,484],[1283,477],[1262,471],[1228,470],[1180,474],[1125,483],[1025,505],[929,519],[865,526],[796,535],[708,552],[681,558],[652,565],[631,573],[604,584],[588,596],[578,601],[573,604],[539,608],[518,609],[503,610],[496,610],[478,609],[470,607],[461,604],[455,601],[453,601],[453,600],[455,597],[455,596]],"dx":[-854,87],"dy":[-854,87],"length":901.374377153156,"timing":[61,68,82,99,116,132,150,166,182,200,216,233,249,266,283,299,317,332,349,366,382,400,416,433,449,466,483,499,516,533,550,566,583,600,616,633,648,666,683,714,732,749]},{"start":[622,552],"end":[947,137],"points":[[622,552],[639,545],[668,535],[685,528],[726,515],[742,509],[756,500],[763,496],[781,484],[794,476],[809,466],[821,457],[820,454],[817,454],[808,453],[807,454],[807,453],[811,449],[829,421],[859,363],[873,326],[894,272],[929,211],[944,189],[969,159],[973,154],[980,142],[982,136],[983,133],[983,131],[985,128],[985,125],[986,124],[986,123],[987,121],[987,120],[986,120],[982,123],[972,128],[965,129],[963,131],[960,131],[955,133],[952,134],[950,136],[947,137]],"dx":[325,-415],"dy":[325,-415],"length":666.2125883767224,"timing":[3,19,36,53,69,86,102,120,136,153,169,186,203,219,236,252,273,286,303,320,336,353,370,387,411,419,436,452,470,486,503,519,536,553,570,586,634,653,669,686,702,720,736,752,769,786]},{"start":[933,215],"end":[623,363],"points":[[933,215],[933,221],[931,223],[931,224],[930,224],[930,227],[929,229],[929,231],[929,232],[929,236],[929,240],[926,242],[911,253],[881,271],[838,294],[805,311],[714,347],[660,368],[632,377],[613,383],[613,381],[614,381],[615,380],[617,379],[618,377],[619,375],[621,371],[622,370],[622,368],[622,367],[623,364],[623,363]],"dx":[-310,148],"dy":[-310,148],"length":399.45155427969183,"timing":[15,33,48,66,82,99,116,132,148,165,181,260,282,299,315,332,349,366,382,411,843,850,865,882,899,916,933,949,966,991,1015,1036]},{"start":[644,359],"end":[591,837],"points":[[644,359],[651,358],[654,357],[660,355],[667,354],[673,353],[675,353],[676,353],[678,353],[682,353],[691,353],[695,354],[696,354],[696,355],[699,362],[706,376],[723,398],[740,422],[761,463],[764,498],[752,540],[735,567],[704,603],[663,648],[644,668],[619,693],[593,720],[570,749],[558,766],[553,778],[549,789],[548,793],[549,795],[552,795],[553,795],[555,800],[559,804],[563,809],[567,811],[570,813],[574,813],[578,817],[579,822],[583,830],[585,836],[585,837],[588,837],[589,837],[591,837]],"dx":[-53,478],"dy":[-53,478],"length":655.340408927995,"timing":[13,29,45,63,79,96,112,151,163,179,196,213,229,246,263,278,295,312,329,345,362,379,395,412,429,445,462,480,496,512,529,546,562,579,615,630,646,662,679,696,712,729,745,762,779,796,813,832,870]},{"start":[602,806],"end":[789,225],"points":[[602,806],[605,793],[607,785],[609,781],[613,766],[618,746],[623,736],[631,715],[646,681],[654,667],[667,645],[675,633],[683,615],[688,601],[697,575],[710,540],[737,486],[772,438],[796,411],[818,384],[844,345],[854,324],[862,306],[871,284],[872,276],[872,272],[872,269],[872,267],[870,261],[867,257],[865,254],[859,251],[852,247],[836,242],[818,237],[806,231],[794,226],[789,225]],"dx":[187,-581],"dy":[187,-581],"length":706.5824022722676,"timing":[5,22,52,55,72,88,105,122,138,156,172,188,205,222,238,254,272,289,306,322,339,356,371,389,405,422,439,455,472,488,505,522,539,555,572,588,606,622]},{"start":[789,226],"end":[278,77],"points":[[789,226],[788,228],[785,230],[778,235],[755,247],[713,257],[642,256],[575,238],[516,211],[477,189],[430,160],[363,118],[336,105],[299,90],[281,81],[280,78],[280,77],[278,77]],"dx":[-511,-149],"dy":[-511,-149],"length":564.0860088050015,"timing":[205,219,235,251,268,285,302,318,335,352,369,386,402,419,435,454,583,614]},{"start":[374,113],"end":[1033,444],"points":[[374,113],[413,125],[433,130],[451,135],[469,139],[495,144],[511,148],[517,148],[520,149],[520,151],[530,159],[560,174],[599,191],[667,221],[745,257],[838,309],[901,351],[958,392],[994,418],[1019,434],[1022,435],[1023,435],[1027,441],[1028,443],[1030,443],[1031,443],[1031,444],[1032,444],[1033,444]],"dx":[659,331],"dy":[659,331],"length":747.9728730190318,"timing":[4,19,37,54,70,87,104,120,137,249,270,287,304,320,336,353,370,387,404,420,437,594,620,637,704,734,756,777,869]},{"start":[1032,444],"end":[573,469],"points":[[1032,444],[1023,442],[996,438],[940,437],[887,438],[838,443],[793,447],[720,450],[679,451],[654,451],[633,455],[617,459],[615,461],[611,466],[610,468],[608,469],[607,469],[604,469],[595,469],[580,469],[573,469]],"dx":[-459,25],"dy":[-459,25],"length":465.6119422694986,"timing":[258,285,300,318,334,351,368,386,400,418,434,451,467,487,501,517,534,550,568,584,601]},{"start":[576,470],"end":[1358,457],"points":[[576,470],[577,470],[578,470],[580,470],[582,470],[586,469],[593,466],[598,464],[611,461],[626,460],[677,461],[729,466],[811,474],[884,479],[984,485],[1136,486],[1207,487],[1285,489],[1345,490],[1376,491],[1378,490],[1378,489],[1376,486],[1375,485],[1375,479],[1374,477],[1373,473],[1366,466],[1363,464],[1362,464],[1362,463],[1358,459],[1358,457]],"dx":[782,-13],"dy":[782,-13],"length":846.3261616420114,"timing":[23,76,128,138,154,173,188,205,222,238,255,271,288,305,322,339,355,372,388,405,422,438,455,472,488,505,522,539,555,609,622,638,734]},{"start":[1357,457],"end":[589,97],"points":[[1357,457],[1356,457],[1347,457],[1310,457],[1257,451],[1213,443],[1136,424],[1063,401],[994,370],[925,332],[877,303],[821,267],[772,234],[762,226],[752,213],[754,202],[763,192],[767,186],[768,179],[767,175],[760,169],[746,157],[735,150],[720,141],[696,132],[680,127],[656,119],[647,115],[643,114],[634,110],[622,106],[613,104],[609,102],[607,102],[607,101],[605,101],[603,100],[596,98],[594,98],[589,98],[589,97]],"dx":[-768,-360],"dy":[-768,-360],"length":907.8601870827215,"timing":[177,189,206,221,239,255,271,288,305,321,339,355,372,388,405,421,439,455,472,488,505,522,538,555,572,587,605,621,638,655,672,688,705,721,738,757,770,788,805,821,840]},{"start":[590,98],"end":[757,235],"points":[[590,98],[591,100],[591,101],[592,102],[595,105],[599,110],[601,114],[604,117],[611,123],[621,131],[653,154],[673,167],[692,183],[716,204],[743,227],[754,234],[756,235],[757,235]],"dx":[167,137],"dy":[167,137],"length":217.77114853772554,"timing":[36,94,104,121,138,154,171,187,204,221,237,254,271,288,304,321,337,508]},{"start":[759,236],"end":[1370,700],"points":[[759,236],[760,236],[768,240],[804,253],[850,274],[886,292],[950,331],[1047,401],[1093,435],[1163,488],[1229,536],[1286,577],[1329,608],[1351,623],[1357,626],[1357,627],[1358,627],[1358,629],[1358,630],[1359,631],[1361,633],[1361,634],[1362,634],[1362,635],[1362,642],[1362,646],[1362,662],[1362,672],[1363,679],[1364,686],[1364,691],[1366,698],[1366,699],[1367,699],[1367,700],[1368,700],[1370,700]],"dx":[611,464],"dy":[611,464],"length":798.4371502213735,"timing":[228,240,257,273,290,306,322,340,357,373,390,407,425,440,456,473,512,523,540,556,573,589,607,648,679,690,706,723,739,757,773,790,806,822,840,856,973]},{"start":[1366,691],"end":[440,615],"points":[[1366,691],[1362,686],[1353,677],[1333,657],[1316,643],[1288,625],[1247,604],[1227,592],[1205,580],[1175,565],[1151,552],[1129,541],[1128,540],[1125,540],[1117,538],[1095,536],[1065,536],[1029,536],[948,540],[882,541],[817,541],[696,544],[670,545],[638,551],[610,554],[569,564],[553,569],[539,577],[526,586],[513,592],[487,599],[467,602],[452,606],[447,609],[439,613],[436,614],[437,614],[439,614],[440,614],[440,615]],"dx":[-926,-76],"dy":[-926,-76],"length":994.0676857128117,"timing":[5,22,39,55,72,89,105,122,138,155,171,188,204,287,305,324,338,354,372,389,405,430,438,455,472,488,505,522,539,555,572,589,605,622,638,655,692,789,820,851]},{"start":[462,609],"end":[1267,845],"points":[[462,609],[465,608],[467,606],[471,604],[476,600],[479,599],[482,597],[482,596],[483,595],[487,593],[493,588],[500,583],[511,571],[521,562],[535,552],[544,548],[563,547],[578,547],[611,548],[661,554],[738,566],[888,600],[933,613],[977,628],[1037,650],[1082,670],[1120,687],[1156,706],[1172,715],[1177,719],[1178,722],[1186,730],[1196,739],[1206,747],[1215,754],[1220,760],[1224,764],[1226,769],[1233,779],[1238,786],[1241,790],[1242,792],[1243,793],[1244,797],[1247,802],[1251,813],[1256,827],[1257,830],[1257,832],[1259,834],[1260,838],[1260,840],[1261,844],[1261,845],[1263,845],[1264,845],[1265,845],[1267,845]],"dx":[805,236],"dy":[805,236],"length":928.6375898576014,"timing":[4,20,37,54,70,86,103,120,137,154,170,187,203,220,237,254,270,287,304,320,337,365,372,386,404,420,436,454,470,487,504,520,537,554,570,587,603,620,637,654,671,687,704,720,736,753,781,786,804,820,836,853,870,898,921,936,963,1007]},{"start":[1248,818],"end":[984,561],"points":[[1248,818],[1242,808],[1229,791],[1224,786],[1213,775],[1211,770],[1208,763],[1205,756],[1199,741],[1183,710],[1172,694],[1152,676],[1135,662],[1129,655],[1123,648],[1117,632],[1110,618],[1107,609],[1097,588],[1082,564],[1071,553],[1069,550],[1068,550],[1068,551],[1062,559],[1058,563],[1056,567],[1053,568],[1049,572],[1048,572],[1047,572],[1044,572],[1042,571],[1029,567],[1018,566],[1008,564],[999,564],[987,562],[984,562],[984,561]],"dx":[-264,-257],"dy":[-264,-257],"length":425.2786808411693,"timing":[6,23,51,57,72,89,106,123,140,156,173,189,206,223,240,256,272,288,306,323,339,356,377,389,406,423,439,456,474,496,506,523,540,556,573,589,606,623,645,672]},{"start":[987,562],"end":[540,531],"points":[[987,562],[987,561],[988,559],[989,558],[991,557],[992,554],[992,553],[992,551],[992,549],[992,542],[989,532],[980,523],[954,510],[928,505],[901,505],[879,505],[832,510],[766,515],[724,518],[687,519],[642,519],[619,520],[594,523],[570,524],[567,525],[566,525],[564,525],[564,527],[559,529],[554,529],[547,531],[544,531],[541,531],[540,531]],"dx":[-447,-31],"dy":[-447,-31],"length":492.3864559464129,"timing":[57,67,83,100,116,133,152,168,183,200,217,233,250,267,283,300,317,333,350,367,383,400,417,434,450,467,483,500,517,533,550,567,583,600]},{"start":[551,531],"end":[1091,280],"points":[[551,531],[554,529],[555,529],[559,527],[563,524],[567,520],[571,518],[572,515],[575,514],[575,512],[577,511],[580,507],[585,505],[589,501],[619,488],[644,478],[677,465],[719,449],[793,416],[840,394],[888,372],[968,341],[1002,328],[1045,309],[1071,296],[1087,289],[1093,282],[1096,278],[1097,274],[1097,272],[1097,269],[1097,268],[1096,268],[1096,267],[1096,268],[1095,269],[1095,270],[1095,272],[1093,272],[1093,273],[1092,274],[1092,277],[1091,278],[1091,280]],"dx":[540,-251],"dy":[540,-251],"length":634.8896213208534,"timing":[4,21,37,54,71,88,104,120,137,154,171,187,204,221,238,253,271,287,304,320,338,354,371,388,404,421,437,454,471,487,504,572,587,654,855,871,888,910,921,937,954,971,987,1097]},{"start":[1089,280],"end":[624,845],"points":[[1089,280],[1089,281],[1088,281],[1088,282],[1087,282],[1087,283],[1084,286],[1083,287],[1075,294],[1054,309],[1013,334],[967,365],[906,417],[853,472],[794,528],[757,565],[715,624],[708,646],[707,656],[708,667],[712,681],[712,690],[708,705],[702,721],[690,746],[681,769],[675,781],[668,789],[662,795],[658,802],[652,811],[650,815],[646,819],[639,824],[636,828],[628,836],[625,841],[625,842],[624,845],[623,845],[624,845]],"dx":[-465,565],"dy":[-465,565],"length":764.447918599638,"timing":[71,82,98,114,169,182,198,263,282,298,315,334,350,365,381,398,417,431,448,465,484,498,515,532,548,566,582,598,615,632,649,665,682,698,715,731,748,822,848,864,944]},{"start":[636,819],"end":[1406,264],"points":[[636,819],[639,811],[645,803],[651,792],[663,777],[678,759],[706,736],[725,724],[743,712],[754,704],[767,690],[776,678],[794,667],[808,663],[836,658],[889,639],[936,613],[993,572],[1071,512],[1131,469],[1191,431],[1245,400],[1284,377],[1324,349],[1332,343],[1335,342],[1337,339],[1340,335],[1343,331],[1344,330],[1344,327],[1344,325],[1348,321],[1350,318],[1356,313],[1358,310],[1359,308],[1361,307],[1363,304],[1367,300],[1374,295],[1381,290],[1387,284],[1392,279],[1396,277],[1397,274],[1398,271],[1400,271],[1400,270],[1402,267],[1405,265],[1406,264]],"dx":[770,-555],"dy":[770,-555],"length":968.4807523721157,"timing":[4,20,37,54,70,86,103,121,137,154,170,187,203,221,237,254,270,287,303,320,337,353,370,387,403,420,436,454,470,487,504,520,537,554,571,587,604,621,637,654,670,687,704,720,737,754,770,787,804,820,837,853]},{"start":[401,402],"end":[838,561],"points":[[401,402],[446,400],[479,398],[552,396],[614,389],[670,381],[703,375],[726,368],[739,363],[735,363],[732,363],[697,372],[662,387],[644,406],[641,422],[649,453],[658,476],[662,491],[671,519],[688,545],[710,571],[745,596],[764,604],[773,605],[777,605],[786,602],[792,599],[795,596],[800,591],[805,583],[809,579],[813,576],[819,575],[826,574],[827,572],[830,570],[832,566],[834,565],[835,562],[836,561],[838,561]],"dx":[437,159],"dy":[437,159],"length":788.609012188879,"timing":[7,24,40,58,74,91,108,124,141,210,225,241,258,273,292,308,325,341,358,374,391,408,425,441,458,474,491,508,524,541,558,574,591,608,625,641,658,675,691,708,781]},{"start":[838,559],"end":[1387,381],"points":[[838,559],[839,559],[839,558],[840,558],[841,558],[849,558],[877,548],[910,533],[960,511],[997,496],[1094,459],[1151,441],[1207,426],[1246,414],[1309,392],[1333,385],[1361,376],[1372,372],[1376,367],[1377,367],[1381,363],[1386,362],[1387,361],[1387,362],[1389,363],[1390,364],[1391,366],[1393,367],[1393,370],[1391,374],[1389,377],[1389,379],[1387,381]],"dx":[549,-178],"dy":[549,-178],"length":612.3506014222035,"timing":[76,91,108,264,275,292,308,325,342,359,375,392,409,426,442,458,475,492,509,524,542,559,575,624,642,659,675,692,709,725,742,758,775]},{"start":[1352,383],"end":[156,282],"points":[[1352,383],[1326,379],[1291,373],[1256,370],[1226,366],[1173,362],[1143,360],[1121,358],[1090,354],[1048,350],[1027,350],[1006,353],[1001,357],[1000,360],[992,366],[973,372],[940,377],[910,381],[852,385],[746,385],[697,381],[623,372],[541,359],[466,344],[398,329],[356,320],[336,316],[325,315],[312,314],[291,312],[277,311],[258,310],[238,307],[219,302],[199,297],[177,290],[157,288],[151,285],[152,285],[155,284],[156,282]],"dx":[-1196,-101],"dy":[-1196,-101],"length":1226.6707129775864,"timing":[1,19,35,51,68,85,101,118,135,152,169,185,202,218,235,251,268,285,301,318,335,351,368,384,401,418,435,451,468,484,502,518,534,552,568,584,602,618,635,651,668]},{"start":[272,277],"end":[1565,835],"points":[[272,277],[316,277],[325,277],[371,277],[410,277],[476,278],[499,278],[538,280],[567,280],[585,281],[628,288],[655,291],[681,294],[692,295],[712,298],[732,299],[754,303],[781,310],[824,324],[890,369],[937,403],[1006,450],[1076,493],[1136,525],[1256,589],[1325,627],[1368,650],[1418,677],[1470,706],[1505,729],[1530,753],[1542,768],[1546,779],[1547,787],[1547,789],[1547,793],[1547,797],[1549,811],[1551,814],[1551,817],[1553,824],[1557,832],[1560,835],[1561,835],[1562,835],[1564,835],[1565,835]],"dx":[1293,558],"dy":[1293,558],"length":1479.9170151351443,"timing":[1,17,33,50,68,83,101,117,135,150,167,184,201,219,234,251,267,284,301,317,333,350,367,384,400,417,433,450,466,483,500,517,534,550,567,584,600,659,690,700,717,734,750,772,794,816,833]},{"start":[1565,820],"end":[944,559],"points":[[1565,820],[1565,818],[1564,816],[1562,813],[1561,809],[1557,805],[1544,789],[1529,776],[1500,757],[1460,733],[1425,715],[1358,693],[1334,688],[1321,685],[1305,681],[1279,672],[1261,663],[1227,644],[1187,624],[1133,605],[1089,594],[1045,586],[972,571],[959,567],[945,560],[944,560],[944,559]],"dx":[-621,-261],"dy":[-621,-261],"length":688.0382603353553,"timing":[5,21,37,54,70,88,104,120,137,157,170,186,204,221,237,255,270,287,304,321,337,354,381,391,404,424,477]},{"start":[944,555],"end":[1530,743],"points":[[944,555],[944,549],[944,542],[942,537],[940,526],[940,524],[937,519],[932,510],[928,503],[919,494],[911,485],[903,478],[902,476],[901,473],[902,471],[906,468],[931,465],[972,468],[1012,476],[1063,493],[1129,538],[1157,564],[1205,606],[1252,643],[1301,677],[1345,703],[1384,719],[1409,728],[1426,732],[1450,738],[1475,745],[1482,746],[1484,746],[1486,746],[1488,747],[1502,750],[1509,749],[1515,746],[1521,743],[1525,743],[1527,743],[1530,743]],"dx":[586,188],"dy":[586,188],"length":811.0669151001355,"timing":[7,23,40,57,83,91,107,123,140,156,173,190,207,222,241,256,273,290,306,323,340,357,373,390,407,424,440,457,473,490,507,523,540,556,573,613,628,640,657,673,689,706]},{"start":[1514,724],"end":[1237,49],"points":[[1514,724],[1508,720],[1497,714],[1492,711],[1482,706],[1469,698],[1440,685],[1422,678],[1398,671],[1380,665],[1361,658],[1339,650],[1301,634],[1281,625],[1255,611],[1241,587],[1241,570],[1242,538],[1248,481],[1250,417],[1257,339],[1263,270],[1266,212],[1264,171],[1251,121],[1245,105],[1244,100],[1244,95],[1246,91],[1247,86],[1246,79],[1244,71],[1241,65],[1240,65],[1240,63],[1240,60],[1238,54],[1237,49]],"dx":[-277,-675],"dy":[-277,-675],"length":856.1507517201838,"timing":[6,22,39,56,73,90,106,122,139,155,172,189,206,223,238,255,272,289,306,322,339,357,372,389,406,422,439,456,472,489,505,522,539,555,603,624,639,656]},{"start":[1214,72],"end":[193,339],"points":[[1214,72],[1208,79],[1197,91],[1180,109],[1169,119],[1156,132],[1138,150],[1121,166],[1094,191],[1069,215],[1055,235],[1047,244],[1037,257],[1012,278],[987,295],[942,317],[890,334],[815,351],[717,360],[632,362],[564,364],[519,364],[443,362],[406,358],[388,357],[361,357],[333,357],[293,357],[266,357],[235,356],[214,352],[200,349],[174,340],[158,336],[142,334],[144,334],[149,335],[157,336],[167,338],[170,338],[171,338],[172,338],[179,339],[185,339],[189,339],[190,339],[192,339],[193,339]],"dx":[-1021,267],"dy":[-1021,267],"length":1229.2075421594416,"timing":[7,23,40,57,73,90,106,124,140,157,173,190,207,223,240,256,273,289,306,323,339,357,372,389,406,423,440,456,473,490,506,523,540,556,577,589,606,623,639,657,779,789,806,823,840,876,892,983]},{"start":[194,339],"end":[397,683],"points":[[194,339],[196,339],[205,336],[210,336],[222,335],[240,332],[261,332],[296,332],[313,334],[323,335],[341,338],[359,340],[378,343],[413,347],[437,352],[457,357],[487,370],[517,389],[546,422],[558,445],[562,465],[552,497],[543,519],[524,551],[504,577],[485,596],[462,618],[433,640],[423,648],[414,657],[409,669],[406,681],[402,691],[401,692],[401,691],[400,687],[398,687],[398,686],[398,684],[397,684],[397,683]],"dx":[203,344],"dy":[203,344],"length":721.9964181904797,"timing":[35,42,69,72,89,105,122,138,155,171,188,206,222,239,255,272,290,305,323,338,355,372,388,405,422,438,455,471,488,505,521,538,555,571,599,622,638,689,704,722,836]},{"start":[400,677],"end":[1000,823],"points":[[400,677],[401,675],[401,674],[403,670],[405,669],[405,668],[406,668],[410,666],[418,664],[431,662],[457,664],[487,673],[529,690],[585,713],[653,742],[713,764],[770,785],[813,800],[851,813],[886,829],[917,844],[926,851],[929,853],[930,853],[932,855],[935,855],[939,855],[948,851],[956,851],[969,851],[982,851],[992,847],[997,840],[997,839],[999,836],[999,833],[1000,829],[1000,825],[1000,823]],"dx":[600,146],"dy":[600,146],"length":665.0511481145898,"timing":[50,124,138,156,171,222,238,255,272,288,306,321,339,355,372,388,405,422,438,456,471,489,505,546,572,589,605,622,639,655,672,688,718,726,738,755,772,788,805]},{"start":[1001,823],"end":[1255,379],"points":[[1001,823],[1001,825],[1001,826],[1001,827],[1001,823],[1006,807],[1017,788],[1032,752],[1053,704],[1100,641],[1142,599],[1170,574],[1191,554],[1200,544],[1226,510],[1242,487],[1248,475],[1256,466],[1260,458],[1261,449],[1261,441],[1261,432],[1261,423],[1261,409],[1261,405],[1260,401],[1260,398],[1259,393],[1256,387],[1255,384],[1255,383],[1255,381],[1255,380],[1255,379]],"dx":[254,-444],"dy":[254,-444],"length":541.4677842756793,"timing":[75,185,206,219,282,303,319,336,352,369,386,403,419,436,452,469,486,503,519,536,552,569,587,606,619,635,653,669,686,702,720,736,759,784]},{"start":[1251,381],"end":[187,368],"points":[[1251,381],[1250,381],[1248,381],[1247,381],[1247,383],[1244,383],[1242,383],[1239,384],[1235,385],[1234,387],[1233,388],[1231,388],[1223,389],[1184,396],[1129,400],[1031,402],[943,402],[753,392],[650,379],[581,367],[510,355],[425,338],[401,335],[381,331],[371,331],[365,331],[358,333],[347,336],[329,338],[316,341],[311,341],[284,346],[258,351],[246,355],[235,359],[228,362],[220,363],[213,364],[202,367],[194,368],[191,368],[190,368],[187,368]],"dx":[-1064,-13],"dy":[-1064,-13],"length":1078.8124567333552,"timing":[66,88,115,126,137,154,170,187,204,220,237,254,271,287,304,320,337,354,370,387,404,421,437,453,471,488,504,520,549,592,604,621,637,654,671,687,703,721,737,754,770,818,837]},{"start":[273,363],"end":[649,406],"points":[[273,363],[300,359],[309,358],[376,350],[406,347],[434,347],[463,346],[493,346],[532,345],[560,345],[585,345],[595,346],[603,347],[602,347],[598,347],[588,347],[582,347],[582,349],[582,350],[584,350],[584,351],[585,354],[591,362],[627,393],[647,405],[672,415],[702,419],[712,419],[718,416],[718,414],[718,411],[716,411],[716,410],[715,410],[715,408],[714,408],[712,407],[703,407],[684,407],[668,406],[651,406],[649,406]],"dx":[376,43],"dy":[376,43],"length":593.278596502362,"timing":[9,26,43,59,76,93,109,127,143,159,176,193,220,225,243,259,283,292,308,326,349,360,376,393,410,427,442,460,476,493,510,527,563,592,609,626,643,659,676,692,709,727]},{"start":[656,406],"end":[834,689],"points":[[656,406],[658,406],[659,406],[659,405],[660,405],[662,405],[663,405],[665,405],[668,405],[671,405],[676,412],[686,437],[702,475],[717,509],[741,550],[769,589],[806,627],[818,636],[825,641],[825,642],[825,644],[825,646],[825,648],[825,649],[827,654],[828,657],[828,658],[829,664],[831,675],[832,679],[833,681],[834,683],[834,684],[834,688],[834,689]],"dx":[178,283],"dy":[178,283],"length":351.4851576859903,"timing":[3,21,37,61,166,181,187,205,221,237,254,270,287,304,321,337,354,370,388,404,421,437,455,514,538,555,619,638,655,670,688,704,721,738,754]},{"start":[834,688],"end":[1379,140],"points":[[834,688],[834,685],[834,683],[836,679],[836,677],[836,676],[836,675],[836,674],[836,671],[834,663],[833,659],[833,657],[834,650],[841,632],[856,598],[879,555],[911,510],[960,463],[1003,425],[1063,375],[1128,324],[1211,273],[1272,242],[1313,220],[1345,179],[1352,174],[1352,173],[1353,172],[1354,170],[1358,166],[1361,164],[1361,163],[1361,161],[1361,160],[1361,159],[1365,155],[1371,150],[1374,146],[1376,143],[1378,143],[1378,142],[1379,140]],"dx":[545,-548],"dy":[545,-548],"length":804.5784668968527,"timing":[28,42,60,80,96,116,125,142,159,179,192,209,225,241,258,276,292,309,325,342,358,375,392,408,425,442,459,475,492,508,525,541,567,591,609,625,642,659,675,747,758,774]},{"start":[1363,150],"end":[702,324],"points":[[1363,150],[1352,153],[1337,157],[1315,165],[1292,174],[1276,179],[1201,204],[1172,212],[1135,218],[1118,222],[1032,238],[1005,246],[990,252],[984,255],[971,260],[951,266],[941,269],[882,286],[864,290],[845,295],[782,304],[759,307],[738,309],[730,309],[726,311],[725,312],[720,315],[715,318],[708,322],[702,324]],"dx":[-661,174],"dy":[-661,174],"length":686.9840966008403,"timing":[11,27,43,61,77,94,110,127,144,160,183,200,215,227,244,260,277,298,316,327,343,360,377,393,410,427,443,460,476,493]},{"start":[703,324],"end":[1179,96],"points":[[703,324],[704,324],[705,324],[707,324],[708,322],[711,322],[713,321],[717,320],[720,318],[725,317],[729,315],[733,312],[744,308],[765,303],[789,295],[834,278],[887,251],[932,226],[1013,186],[1056,168],[1093,152],[1123,138],[1154,122],[1164,117],[1168,114],[1168,113],[1168,112],[1169,110],[1172,106],[1175,103],[1179,97],[1179,96]],"dx":[476,-228],"dy":[476,-228],"length":534.5517556575119,"timing":[4,24,36,53,70,87,102,119,135,153,169,186,203,220,236,253,269,287,302,320,336,353,370,387,403,420,451,469,486,503,519,669]},{"start":[1158,112],"end":[457,225],"points":[[1158,112],[1154,114],[1151,116],[1146,119],[1140,125],[1127,135],[1117,140],[1106,149],[1097,154],[1090,158],[1084,162],[1074,167],[1068,173],[1056,183],[1039,197],[995,218],[968,227],[943,231],[864,240],[796,242],[753,243],[713,243],[666,242],[639,239],[614,238],[569,234],[549,234],[534,232],[514,230],[504,229],[491,227],[478,227],[471,227],[463,227],[463,226],[462,226],[461,226],[458,226],[458,225],[457,225]],"dx":[-701,113],"dy":[-701,113],"length":738.9605096021845,"timing":[2,18,35,51,68,84,101,118,135,152,168,185,201,219,235,251,268,285,301,317,334,351,367,385,402,418,435,452,468,485,501,518,534,552,568,610,634,651,670,735]},{"start":[488,222],"end":[149,427],"points":[[488,222],[504,221],[510,219],[539,217],[554,215],[584,214],[600,213],[622,213],[638,212],[657,212],[676,212],[696,210],[712,210],[723,209],[731,209],[731,210],[728,213],[717,225],[699,238],[665,258],[618,283],[583,300],[511,329],[458,345],[418,356],[364,364],[292,373],[257,381],[246,383],[234,390],[224,396],[211,407],[201,413],[193,418],[189,419],[186,421],[185,421],[185,422],[184,422],[182,423],[177,423],[172,425],[160,426],[150,427],[149,427]],"dx":[-339,205],"dy":[-339,205],"length":877.9202414993089,"timing":[12,29,45,63,79,96,113,129,146,162,179,196,212,229,245,270,295,319,329,346,362,379,396,413,429,446,463,479,496,512,529,546,562,581,595,612,635,646,662,679,696,712,729,746,763]},{"start":[344,396],"end":[1253,421],"points":[[344,396],[377,391],[414,386],[450,380],[489,373],[514,369],[531,366],[546,364],[562,361],[574,358],[587,357],[601,356],[618,354],[623,354],[631,354],[644,357],[665,358],[692,360],[748,361],[780,361],[836,366],[880,370],[943,379],[982,386],[1025,392],[1058,397],[1099,404],[1191,415],[1217,418],[1226,419],[1240,419],[1252,421],[1253,421]],"dx":[909,25],"dy":[909,25],"length":916.9361984215082,"timing":[7,23,40,57,73,90,107,124,140,156,174,190,207,223,240,257,273,290,306,323,340,357,374,390,407,423,440,502,523,540,556,573,653]},{"start":[1160,417],"end":[155,601],"points":[[1160,417],[1130,413],[1083,406],[1058,404],[1037,400],[992,392],[976,389],[940,384],[917,383],[902,382],[885,380],[868,379],[858,379],[858,380],[858,382],[857,383],[849,384],[824,392],[794,402],[732,422],[673,436],[603,448],[530,457],[480,463],[412,473],[384,478],[368,480],[355,487],[339,499],[330,506],[317,515],[296,525],[280,530],[230,545],[222,547],[212,551],[207,554],[199,562],[196,565],[192,569],[188,574],[182,576],[173,583],[166,589],[162,595],[159,599],[156,601],[155,601]],"dx":[-1005,184],"dy":[-1005,184],"length":1059.564906095152,"timing":[13,30,45,63,79,97,113,130,146,163,179,197,212,229,246,278,295,313,329,346,363,379,395,412,429,448,463,479,495,512,529,546,563,593,601,612,629,646,663,679,696,712,729,746,762,779,796,812]},{"start":[313,526],"end":[546,596],"points":[[313,526],[346,515],[363,510],[409,498],[433,492],[459,481],[473,476],[493,468],[524,457],[560,445],[584,440],[599,436],[607,433],[610,432],[611,432],[610,432],[610,433],[613,439],[623,444],[630,452],[637,465],[641,491],[643,518],[642,552],[641,558],[638,567],[635,571],[634,572],[632,576],[628,579],[620,584],[611,588],[599,592],[583,601],[564,610],[555,614],[544,615],[539,615],[537,615],[535,615],[535,614],[537,613],[537,611],[538,611],[539,609],[539,606],[541,604],[543,600],[544,600],[546,597],[546,596]],"dx":[233,70],"dy":[233,70],"length":602.7277651737746,"timing":[16,33,49,66,83,99,116,132,150,166,183,200,216,233,249,285,299,316,332,349,367,382,400,429,435,449,466,483,499,516,533,550,565,583,599,616,632,649,666,707,934,950,966,985,999,1016,1033,1050,1113,1133,1150]},{"start":[582,578],"end":[1465,180],"points":[[582,578],[587,575],[596,572],[607,570],[615,567],[621,565],[634,562],[644,559],[655,558],[663,557],[665,555],[665,557],[664,557],[665,557],[686,548],[704,539],[745,518],[802,489],[872,453],[946,412],[1036,364],[1144,312],[1245,277],[1311,258],[1352,246],[1383,237],[1396,232],[1413,223],[1418,217],[1422,213],[1430,206],[1448,195],[1450,193],[1450,191],[1459,184],[1463,181],[1465,180]],"dx":[883,-398],"dy":[883,-398],"length":981.6504586652482,"timing":[3,21,38,54,71,88,103,121,137,154,171,202,210,263,287,304,321,338,353,371,387,404,420,437,454,470,487,504,521,537,554,570,587,646,670,687,704]},{"start":[1302,235],"end":[346,423],"points":[[1302,235],[1249,256],[1207,268],[1185,274],[1137,287],[1082,308],[1049,324],[1017,338],[987,352],[952,369],[939,375],[935,377],[932,378],[926,381],[912,388],[890,397],[851,406],[805,412],[753,416],[677,423],[644,426],[583,434],[548,438],[530,439],[493,439],[475,439],[461,439],[447,439],[427,439],[409,437],[391,433],[379,430],[367,428],[356,425],[346,424],[346,423]],"dx":[-956,188],"dy":[-956,188],"length":993.1366840783024,"timing":[16,33,50,66,83,100,117,133,149,167,184,200,217,233,250,266,283,299,316,333,350,366,383,400,416,433,450,466,483,500,517,533,549,566,583,733]},{"start":[510,402],"end":[504,663],"points":[[510,402],[534,400],[551,398],[621,387],[682,377],[733,369],[791,361],[822,356],[860,350],[898,339],[912,334],[918,332],[926,329],[939,325],[944,322],[947,320],[944,320],[937,322],[918,331],[900,354],[887,382],[870,408],[846,438],[813,473],[794,493],[757,524],[717,555],[697,569],[674,586],[648,601],[636,607],[599,623],[580,629],[561,634],[547,640],[535,642],[528,645],[522,646],[521,647],[518,650],[513,655],[509,659],[504,662],[504,663]],"dx":[-6,261],"dy":[-6,261],"length":1024.3224225600657,"timing":[6,22,38,56,72,87,105,122,139,155,172,188,205,222,239,255,272,289,305,322,341,356,372,389,405,422,438,455,472,488,505,522,539,555,572,588,606,621,639,655,674,688,705,821]},{"start":[273,560],"end":[1327,758],"points":[[273,560],[277,560],[280,560],[281,560],[282,559],[284,558],[288,558],[290,556],[293,556],[298,555],[302,554],[308,551],[316,550],[321,548],[327,547],[336,547],[380,548],[422,550],[496,554],[583,558],[652,564],[796,582],[876,598],[953,617],[993,629],[1071,658],[1104,672],[1123,681],[1140,691],[1155,702],[1170,715],[1181,724],[1198,737],[1208,745],[1229,760],[1251,776],[1263,782],[1270,785],[1276,785],[1281,782],[1285,780],[1290,777],[1296,775],[1308,767],[1311,765],[1316,762],[1324,758],[1325,758],[1326,758],[1327,758]],"dx":[1054,198],"dy":[1054,198],"length":1115.2185835116425,"timing":[10,26,43,60,77,93,109,126,143,160,176,193,210,226,243,260,276,294,310,326,343,360,376,393,411,426,444,460,476,494,510,527,544,560,577,593,610,627,643,660,676,693,709,727,743,760,780,793,810,882]},{"start":[1326,758],"end":[385,355],"points":[[1326,758],[1325,758],[1321,756],[1316,756],[1312,756],[1311,756],[1309,756],[1303,754],[1294,750],[1278,743],[1240,730],[1196,715],[1104,680],[1030,646],[957,604],[913,576],[846,533],[771,487],[728,464],[690,447],[674,440],[653,433],[629,425],[618,422],[602,420],[585,417],[567,414],[543,410],[528,408],[510,404],[481,397],[454,392],[441,390],[426,386],[425,384],[420,383],[410,379],[402,377],[387,373],[382,369],[382,368],[382,366],[382,365],[384,365],[384,364],[385,362],[386,361],[386,360],[386,356],[385,355]],"dx":[-941,-403],"dy":[-941,-403],"length":1049.1414789887192,"timing":[102,112,129,145,162,200,212,229,245,262,279,295,312,328,346,362,379,395,412,428,446,462,479,495,512,528,545,562,578,595,612,629,649,672,679,695,712,729,745,762,779,807,913,1345,1362,1381,1427,1457,1479,1502]},{"start":[403,362],"end":[1287,206],"points":[[403,362],[421,373],[433,378],[477,401],[499,409],[550,426],[572,432],[599,442],[620,452],[630,461],[629,468],[625,471],[624,473],[625,473],[638,465],[673,449],[723,431],[754,422],[831,400],[931,374],[1014,357],[1079,344],[1136,331],[1169,322],[1213,305],[1224,296],[1226,291],[1223,278],[1223,270],[1223,265],[1226,256],[1230,248],[1234,244],[1235,243],[1235,241],[1236,241],[1237,239],[1247,231],[1250,227],[1257,223],[1269,217],[1271,215],[1275,213],[1278,211],[1280,210],[1287,206]],"dx":[884,-156],"dy":[884,-156],"length":1015.119588845918,"timing":[4,21,38,54,71,88,104,121,137,154,171,187,204,233,254,271,288,304,321,337,354,371,388,404,421,438,455,471,488,504,521,537,554,571,588,615,637,654,671,688,704,721,737,754,771,788]},{"start":[1118,287],"end":[1515,531],"points":[[1118,287],[1010,310],[986,314],[937,322],[901,328],[867,335],[829,344],[794,353],[786,353],[785,354],[784,354],[780,357],[775,362],[772,380],[773,401],[778,419],[795,447],[827,478],[877,505],[944,525],[1001,535],[1079,547],[1210,560],[1270,566],[1339,571],[1400,573],[1434,573],[1460,573],[1471,570],[1473,570],[1473,569],[1474,567],[1475,565],[1476,565],[1476,564],[1479,564],[1488,560],[1495,556],[1495,554],[1497,552],[1501,548],[1502,545],[1508,540],[1513,535],[1514,532],[1515,531]],"dx":[397,244],"dy":[397,244],"length":1209.130898508796,"timing":[7,52,57,74,90,107,123,140,157,217,224,241,257,287,296,307,323,340,357,374,390,407,424,440,458,474,490,507,524,545,557,574,590,620,640,657,673,690,706,724,741,757,774,791,807,823]},{"start":[1375,527],"end":[1335,123],"points":[[1375,527],[1348,524],[1339,523],[1297,519],[1283,518],[1271,518],[1259,517],[1251,517],[1250,517],[1249,517],[1248,517],[1244,517],[1237,518],[1233,518],[1231,514],[1229,511],[1225,498],[1220,478],[1215,440],[1215,402],[1219,353],[1225,323],[1238,284],[1255,250],[1267,232],[1286,205],[1299,186],[1311,171],[1320,155],[1325,146],[1331,137],[1332,133],[1335,128],[1335,127],[1335,125],[1335,124],[1335,123]],"dx":[-40,-404],"dy":[-40,-404],"length":571.3654746739052,"timing":[14,30,47,63,80,96,114,130,189,204,212,230,247,263,287,297,313,331,346,363,380,397,414,430,446,463,480,497,513,530,546,563,580,597,659,680,697]},{"start":[1072,262],"end":[1012,416],"points":[[1072,262],[1068,264],[1063,267],[1056,271],[1051,276],[1041,282],[1033,288],[1024,294],[1013,301],[1004,306],[1000,310],[1000,311],[998,321],[995,328],[992,341],[992,371],[994,384],[999,402],[1003,411],[1005,415],[1007,415],[1009,415],[1011,416],[1012,416]],"dx":[-60,154],"dy":[-60,154],"length":202.45288628868278,"timing":[15,31,49,65,82,99,115,132,148,165,182,274,299,315,332,348,366,382,398,415,431,449,465,492]},{"start":[1012,416],"end":[1582,185],"points":[[1012,416],[1012,415],[1012,414],[1012,412],[1013,408],[1013,404],[1015,403],[1017,402],[1018,399],[1028,393],[1050,378],[1091,352],[1139,323],[1195,291],[1216,281],[1298,246],[1358,225],[1414,209],[1454,198],[1498,183],[1541,167],[1554,161],[1562,156],[1562,157],[1563,159],[1564,161],[1566,164],[1568,165],[1570,168],[1573,170],[1575,173],[1577,178],[1581,183],[1581,185],[1582,185]],"dx":[570,-231],"dy":[570,-231],"length":655.9223670768421,"timing":[80,132,138,150,168,183,201,217,234,250,267,283,300,317,335,351,366,384,400,418,433,451,467,636,651,667,683,701,717,734,750,768,784,804,835]},{"start":[1542,208],"end":[1426,697],"points":[[1542,208],[1532,213],[1517,218],[1497,226],[1478,231],[1464,234],[1442,239],[1423,244],[1395,252],[1385,255],[1365,260],[1345,264],[1322,268],[1289,274],[1280,277],[1280,279],[1280,283],[1280,295],[1278,309],[1277,342],[1282,382],[1296,438],[1308,472],[1326,515],[1341,545],[1356,571],[1370,593],[1389,620],[1394,629],[1400,645],[1404,655],[1407,662],[1408,667],[1409,675],[1415,685],[1419,694],[1420,695],[1421,695],[1422,695],[1424,695],[1424,697],[1425,697],[1426,697]],"dx":[-116,489],"dy":[-116,489],"length":730.019086314676,"timing":[5,21,38,55,71,89,105,123,139,155,172,188,206,222,238,255,272,288,305,322,338,355,372,389,405,421,439,456,472,488,505,522,538,556,572,589,605,626,641,657,672,688,735]},{"start":[1412,677],"end":[328,811],"points":[[1412,677],[1408,672],[1407,671],[1405,669],[1404,668],[1403,667],[1402,664],[1395,655],[1389,649],[1386,646],[1385,646],[1383,646],[1383,645],[1381,643],[1379,643],[1360,633],[1334,625],[1304,621],[1243,617],[1156,613],[1031,615],[931,625],[841,637],[750,651],[666,667],[623,674],[599,681],[583,690],[575,702],[570,712],[554,728],[532,741],[508,747],[482,752],[450,756],[389,762],[365,767],[347,774],[342,781],[341,789],[341,794],[339,795],[338,798],[338,799],[338,800],[337,800],[334,803],[330,807],[328,810],[328,811]],"dx":[-1084,134],"dy":[-1084,134],"length":1164.5112716040085,"timing":[3,19,37,53,70,86,103,119,137,153,197,211,220,236,253,270,286,303,320,336,353,370,387,403,420,436,453,470,487,503,520,537,553,570,586,603,620,636,654,670,694,702,720,740,756,771,787,803,820,836]},{"start":[372,782],"end":[548,529],"points":[[372,782],[374,780],[376,778],[381,774],[383,771],[386,769],[386,768],[387,767],[387,765],[390,764],[394,760],[399,754],[402,751],[402,750],[403,750],[404,748],[407,746],[424,728],[435,715],[451,696],[482,655],[489,643],[497,629],[504,614],[512,600],[523,582],[525,577],[528,570],[532,562],[535,555],[541,546],[543,540],[545,538],[546,535],[547,533],[548,529],[548,527],[548,529]],"dx":[176,-253],"dy":[176,-253],"length":317.2685470116592,"timing":[0,16,33,49,66,82,100,116,149,167,183,200,217,233,250,269,283,299,317,333,371,383,400,417,433,450,467,483,500,517,534,550,566,583,600,617,685,773]},{"start":[548,531],"end":[226,106],"points":[[548,531],[548,533],[548,534],[548,535],[548,536],[548,539],[548,547],[550,562],[555,574],[571,603],[585,618],[595,626],[606,631],[607,633],[607,631],[603,618],[597,591],[585,564],[558,523],[487,447],[447,408],[396,363],[356,330],[287,272],[264,249],[255,239],[245,223],[245,215],[244,210],[243,206],[239,200],[223,176],[221,171],[221,168],[221,164],[225,157],[226,155],[226,145],[226,138],[226,137],[226,136],[226,135],[226,132],[226,124],[226,115],[226,107],[226,106]],"dx":[-322,-425],"dy":[-322,-425],"length":806.4852113255376,"timing":[18,79,109,122,139,152,168,185,202,219,236,251,269,285,319,336,351,369,386,403,419,436,453,481,488,502,519,536,552,570,585,602,618,636,653,669,684,702,718,736,752,769,785,802,819,835,852]},{"start":[226,107],"end":[377,795],"points":[[226,107],[227,107],[231,111],[243,120],[270,138],[291,151],[310,162],[334,175],[351,188],[375,218],[394,265],[405,335],[405,389],[404,445],[401,483],[398,528],[391,589],[387,618],[384,643],[382,653],[379,674],[375,700],[374,710],[373,714],[373,719],[371,732],[371,744],[371,752],[373,758],[374,764],[375,765],[375,770],[375,778],[375,786],[377,788],[377,790],[377,791],[377,792],[377,793],[377,795]],"dx":[151,688],"dy":[151,688],"length":773.2023630393584,"timing":[142,150,163,181,197,214,231,248,264,281,297,314,330,347,364,381,398,414,431,447,464,481,497,514,530,547,564,581,598,614,630,648,665,683,701,718,733,748,764,862]},{"start":[383,779],"end":[460,537],"points":[[383,779],[384,775],[386,774],[387,771],[390,767],[395,761],[408,745],[421,734],[449,714],[468,704],[477,697],[479,696],[481,696],[482,693],[490,686],[501,671],[522,640],[536,614],[549,589],[556,575],[559,565],[559,563],[557,563],[555,563],[549,563],[536,561],[527,557],[510,549],[500,545],[492,541],[490,541],[487,540],[483,540],[475,540],[466,539],[461,539],[461,537],[460,537]],"dx":[77,-242],"dy":[77,-242],"length":392.8542353172707,"timing":[7,25,41,58,74,91,108,125,140,158,174,191,207,224,241,257,274,291,308,324,341,358,387,407,424,441,458,474,491,508,526,541,558,574,592,608,625,670]},{"start":[228,51],"end":[930,823],"points":[[228,51],[222,76],[221,106],[223,139],[229,168],[241,204],[264,256],[288,306],[319,358],[355,409],[394,454],[441,498],[487,535],[531,568],[571,598],[603,621],[634,640],[658,655],[681,669],[699,682],[723,694],[750,709],[772,718],[790,726],[808,732],[819,735],[829,739],[838,742],[843,747],[846,750],[849,754],[853,762],[858,772],[867,784],[873,795],[879,802],[883,807],[885,810],[886,811],[888,813],[892,814],[900,817],[906,819],[912,820],[918,822],[921,823],[924,823],[925,823],[927,823],[928,823],[930,823]],"dx":[702,772],"dy":[702,772],"length":1115.6178353549615,"timing":[6501.0999999996275,6517.5999999996275,6534.299999998882,6551,6567.699999999255,6584.199999999255,6601.0999999996275,6617.799999998882,6634.39999999851,6651.0999999996275,6667.799999998882,6684.39999999851,6701.199999999255,6717.799999998882,6734.5999999996275,6751.199999999255,6767.799999998882,6784.5999999996275,6801.299999998882,6817.799999998882,6834.5,6851.299999998882,6868,6884.89999999851,6901.299999998882,6917.89999999851,6934.699999999255,6951.39999999851,6968.0999999996275,6984.699999999255,7001.39999999851,7018,7034.699999999255,7051.5,7068.0999999996275,7084.799999998882,7101.39999999851,7118.0999999996275,7134.89999999851,7151.5999999996275,7168.0999999996275,7184.89999999851,7201.5999999996275,7218.199999999255,7235,7251.5999999996275,7268.299999998882,7285,7308.89999999851,7400.199999999255,7638.39999999851]},{"start":[940,823],"end":[1314,892],"points":[[940,823],[940,822],[942,822],[946,822],[960,822],[976,822],[1000,821],[1032,819],[1063,819],[1090,819],[1120,822],[1144,822],[1162,823],[1179,823],[1194,826],[1210,829],[1225,835],[1237,841],[1248,849],[1258,861],[1267,873],[1273,882],[1281,888],[1285,891],[1287,891],[1288,891],[1290,891],[1291,892],[1294,892],[1297,892],[1300,892],[1303,892],[1306,892],[1309,892],[1311,892],[1312,892],[1314,892]],"dx":[374,69],"dy":[374,69],"length":400.86126529596817,"timing":[6.099999999627471,95.19999999925494,497.30000000074506,506.59999999962747,523.1999999992549,539.9000000003725,556.5999999996275,573.3000000007451,590,606.5999999996275,623.3000000007451,640,656.6999999992549,673.4000000003725,690.0999999996275,706.8000000007451,723.5,740.0999999996275,756.8000000007451,773.5999999996275,790.0999999996275,806.9000000003725,823.5999999996275,840.1999999992549,857,873.5999999996275,895.1999999992549,907.0999999996275,923.6999999992549,940.4000000003725,957.0999999996275,1007.0999999996275,1023.6999999992549,1040.4000000003725,1059,1087.199999999255,1102.199999999255]},{"start":[1315,892],"end":[453,442],"points":[[1315,892],[1315,891],[1320,888],[1323,887],[1324,885],[1326,885],[1327,885],[1326,885],[1317,881],[1287,869],[1235,846],[1160,816],[1058,773],[945,726],[846,681],[750,641],[669,605],[611,576],[573,554],[554,537],[543,527],[539,518],[534,512],[531,507],[527,503],[524,497],[519,486],[512,477],[504,465],[497,455],[489,447],[485,440],[479,432],[477,428],[474,425],[473,425],[473,423],[471,423],[470,423],[468,424],[465,427],[461,430],[458,433],[455,436],[455,438],[455,439],[455,441],[453,442]],"dx":[-862,-450],"dy":[-862,-450],"length":1036.866749485262,"timing":[65.69999999925494,68.30000000074506,85.09999999962747,101.59999999962747,118.40000000037253,135.09999999962747,197.69999999925494,274.80000000074506,285.19999999925494,301.80000000074506,318.59999999962747,335.30000000074506,352,368.69999999925494,385.30000000074506,402,418.59999999962747,435.40000000037253,452,468.69999999925494,485.40000000037253,502,518.6999999992549,535.4000000003725,552.0999999996275,568.9000000003725,585.5,602.0999999996275,618.8000000007451,635.4000000003725,652.0999999996275,668.9000000003725,685.5999999996275,702.4000000003725,719,749.5999999996275,785.5999999996275,943.9000000003725,952.5,969.1999999992549,986,1002.5999999996275,1019.3000000007451,1035.9000000003725,1052.699999999255,1119.800000000745,1136.0999999996275,1152.699999999255]},{"start":[454,442],"end":[1626,517],"points":[[454,442],[457,442],[471,444],[498,445],[543,450],[601,456],[673,462],[748,466],[823,471],[900,477],[970,480],[1030,481],[1083,484],[1135,484],[1183,486],[1225,487],[1269,487],[1308,487],[1341,487],[1371,487],[1398,487],[1419,487],[1434,487],[1449,489],[1458,489],[1468,490],[1477,490],[1486,493],[1497,495],[1507,496],[1518,499],[1530,502],[1540,504],[1549,507],[1558,510],[1567,511],[1573,513],[1578,513],[1582,516],[1587,516],[1590,516],[1594,516],[1599,516],[1603,517],[1608,517],[1611,517],[1612,517],[1614,517],[1615,517],[1617,517],[1618,517],[1620,517],[1623,517],[1624,517],[1626,517]],"dx":[1172,75],"dy":[1172,75],"length":1178.05961585173,"timing":[203.59999999962747,208.69999999925494,224.19999999925494,240.7999999988824,257.5,274.19999999925494,291,307.59999999962747,324.19999999925494,340.8999999985099,357.59999999962747,374.2999999988824,390.8999999985099,407.59999999962747,424.2999999988824,441,457.69999999925494,474.3999999985099,491.09999999962747,507.69999999925494,524.2999999988824,541.0999999996275,557.7999999988824,574.5,591.1999999992549,607.8999999985099,624.5,641.1999999992549,657.7999999988824,674.5999999996275,691.2999999988824,707.8999999985099,724.5,741.1999999992549,758,774.5999999996275,791.1999999992549,808.0999999996275,824.6999999992549,841.2999999988824,858.0999999996275,874.7999999988824,891.3999999985099,908.0999999996275,924.6999999992549,941.5,958.1999999992549,974.7999999988824,996.5,1015.3999999985099,1030.3999999985099,1041.5,1058.3999999985099,1075,1091.5]},{"start":[1625,517],"end":[123,597],"points":[[1625,517],[1620,517],[1614,519],[1613,519],[1611,519],[1611,520],[1610,520],[1605,520],[1595,522],[1575,523],[1548,526],[1511,529],[1446,532],[1358,537],[1260,540],[1154,543],[1052,544],[968,544],[891,543],[830,540],[779,540],[735,540],[695,540],[659,540],[632,539],[608,539],[587,539],[564,539],[543,539],[522,539],[506,539],[488,539],[474,539],[465,539],[458,540],[450,540],[441,540],[425,540],[407,541],[389,543],[372,544],[356,546],[341,546],[324,546],[308,546],[293,546],[281,547],[269,547],[260,547],[254,547],[248,549],[242,549],[237,550],[230,552],[215,558],[201,562],[188,568],[174,571],[165,574],[158,577],[152,579],[147,580],[143,582],[140,583],[137,585],[132,586],[129,586],[128,586],[126,586],[125,588],[125,589],[123,589],[123,591],[123,592],[123,594],[123,595],[123,597]],"dx":[-1502,80],"dy":[-1502,80],"length":1521.7996318727062,"timing":[67.40000000037253,80.60000000149012,97.30000000074506,114,130.7000000011176,147.40000000037253,165.2000000011176,214.2000000011176,230.80000000074506,247.5,264.1000000014901,280.90000000037253,297.5,314.2000000011176,331,347.6000000014901,364.2000000011176,381,397.7000000011176,414.2000000011176,431,447.7000000011176,464.40000000037253,481,497.80000000074506,514.5,531,547.8000000007451,564.5,581.1000000014901,597.8000000007451,614.6000000014901,631.2000000011176,647.9000000003725,664.5,681.1000000014901,697.9000000003725,714.5,731.4000000003725,748,764.7000000011176,781.4000000003725,798,814.8000000007451,831.4000000003725,848.1000000014901,864.8000000007451,881.4000000003725,898.1000000014901,914.7000000011176,931.5,948.2000000011176,964.9000000003725,981.6000000014901,998.3000000007451,1014.9000000003725,1031.6000000014901,1048.4000000003725,1064.9000000003725,1081.800000000745,1098.300000000745,1114.9000000003725,1131.7000000011176,1148.4000000003725,1165,1181.7000000011176,1198.5,1215,1265.300000000745,1282,1307.4000000003725,1353.5,1366.300000000745,1396.5,1517.6000000014901,1539.4000000003725,1552.300000000745]},{"start":[145,597],"end":[1059,780],"points":[[145,597],[156,597],[168,600],[180,600],[192,600],[199,600],[202,601],[204,601],[204,603],[205,603],[214,604],[226,607],[246,610],[273,615],[304,618],[345,625],[387,630],[433,636],[484,646],[535,660],[582,675],[627,690],[669,702],[703,712],[735,721],[760,729],[783,735],[805,741],[828,748],[853,756],[880,765],[906,772],[930,777],[955,781],[975,783],[990,783],[1002,784],[1011,784],[1018,784],[1026,784],[1033,783],[1042,783],[1050,783],[1056,783],[1057,783],[1057,780],[1059,780]],"dx":[914,183],"dy":[914,183],"length":942.5977830117354,"timing":[16.699999999254942,33.40000000037253,50.09999999962747,66.69999999925494,83.5,100.09999999962747,116.79999999888241,141.59999999962747,150.19999999925494,166.7999999988824,183.5,200.09999999962747,216.90000000037253,233.59999999962747,250.2999999988824,266.90000000037253,283.69999999925494,300.40000000037253,317,333.69999999925494,350.40000000037253,367,383.59999999962747,400.40000000037253,417.09999999962747,433.69999999925494,450.5,467.09999999962747,483.90000000037253,500.5,517.1999999992549,533.7999999988824,550.5,567.1999999992549,583.7999999988824,600.5999999996275,617.4000000003725,633.9000000003725,650.5999999996275,667.4000000003725,683.9000000003725,700.6999999992549,717.4000000003725,734.0999999996275,750.6999999992549,1030,1134]},{"start":[1060,780],"end":[905,748],"points":[[1060,780],[1062,780],[1065,776],[1068,774],[1071,771],[1074,767],[1077,759],[1078,752],[1080,740],[1080,729],[1080,723],[1079,723],[1076,723],[1073,719],[1065,716],[1052,713],[1028,713],[1002,713],[977,713],[951,721],[933,732],[921,739],[915,744],[912,745],[911,745],[909,747],[908,747],[905,748]],"dx":[-155,-32],"dy":[-155,-32],"length":251.66809662744586,"timing":[18.5,27.399999998509884,44.09999999962747,60.69999999925494,77.29999999888241,94.09999999962747,110.69999999925494,127.39999999850988,144.19999999925494,160.89999999850988,177.5,194.09999999962747,210.89999999850988,227.5,244.19999999925494,260.8999999985099,277.69999999925494,294.2999999988824,311,327.59999999962747,344.2999999988824,360.8999999985099,377.59999999962747,394.2999999988824,411.5,427.69999999925494,444.2999999988824,461]},{"start":[387,809],"end":[519,437],"points":[[387,809],[390,797],[390,783],[390,771],[390,761],[390,752],[389,746],[387,741],[384,737],[384,732],[383,728],[383,720],[384,711],[387,699],[397,684],[408,668],[420,648],[433,623],[448,600],[459,579],[472,558],[481,537],[489,519],[495,506],[499,495],[502,486],[504,479],[505,477],[507,474],[507,473],[507,470],[507,465],[510,458],[513,450],[514,447],[516,446],[516,443],[516,441],[517,438],[519,438],[519,437]],"dx":[132,-372],"dy":[132,-372],"length":410.09140511290894,"timing":[5.800000000745058,22.300000000745058,39.09999999962747,55.70000000111759,72.40000000037253,89.09999999962747,105.80000000074506,122.5,139.2000000011176,155.80000000074506,172.59999999962747,189.2000000011176,205.90000000037253,222.5,239.30000000074506,255.90000000037253,272.7000000011176,289.30000000074506,306,322.7000000011176,339.40000000037253,356.09999999962747,372.7000000011176,389.30000000074506,406.09999999962747,422.7000000011176,439.59999999962747,456.09999999962747,472.80000000074506,489.59999999962747,506.2000000011176,522.9000000003725,539.5,556.2000000011176,572.9000000003725,589.5,611.8000000007451,622.8000000007451,639.7000000011176,656.2000000011176,684.0999999996275]},{"start":[490,348],"end":[1642,47],"points":[[490,348],[532,348],[556,348],[565,348],[567,348],[568,348],[576,348],[618,347],[696,341],[784,335],[886,326],[1003,314],[1129,300],[1240,290],[1336,275],[1413,261],[1470,249],[1503,239],[1522,231],[1537,224],[1548,218],[1560,212],[1569,206],[1573,201],[1575,197],[1576,192],[1578,182],[1578,171],[1581,158],[1585,144],[1593,131],[1599,116],[1603,105],[1611,93],[1620,81],[1627,72],[1633,63],[1636,59],[1638,54],[1639,51],[1642,48],[1642,47]],"dx":[1152,-301],"dy":[1152,-301],"length":1273.4010965063767,"timing":[6.799999998882413,23.40000000037253,40,56.69999999925494,73.40000000037253,249.19999999925494,256.7999999988824,273.69999999925494,290.2999999988824,307,323.59999999962747,340.2999999988824,357,373.59999999962747,390.40000000037253,406.90000000037253,423.7999999988824,440.40000000037253,457.19999999925494,473.69999999925494,490.40000000037253,507.09999999962747,523.7999999988824,540.5,557.0999999996275,573.7999999988824,590.5,607.1999999992549,623.9000000003725,640.6999999992549,657.4000000003725,673.9000000003725,690.5999999996275,707.2999999988824,724,740.6999999992549,757.2999999988824,774.0999999996275,790.7999999988824,807.2999999988824,824.0999999996275,847.9000000003725]},{"start":[1454,187],"end":[1546,96],"points":[[1454,187],[1422,204],[1392,219],[1364,232],[1341,244],[1319,256],[1302,265],[1289,271],[1274,279],[1262,286],[1248,294],[1239,300],[1232,304],[1226,307],[1221,309],[1221,310],[1224,305],[1249,287],[1290,255],[1329,228],[1369,200],[1408,174],[1444,152],[1473,135],[1500,120],[1518,113],[1530,107],[1534,105],[1537,105],[1539,104],[1539,102],[1540,102],[1542,99],[1543,98],[1545,96],[1546,96]],"dx":[92,-91],"dy":[92,-91],"length":656.9490611319893,"timing":[16.699999999254942,33.19999999925494,49.899999998509884,66.59999999962747,83.39999999850988,100.09999999962747,116.59999999962747,133.39999999850988,150,166.69999999925494,183.2999999988824,200,216.7999999988824,233.39999999850988,250.09999999962747,266.7999999988824,283.5,300.19999999925494,316.7999999988824,333.59999999962747,350.2999999988824,367,383.59999999962747,400.19999999925494,417,433.59999999962747,450.2999999988824,467,483.69999999925494,533.7999999988824,603,732,737.8999999985099,750.7999999988824,767.5,790.8999999985099]},{"start":[1527,100],"end":[770,564],"points":[[1527,100],[1517,100],[1502,102],[1476,103],[1448,105],[1413,111],[1383,117],[1364,123],[1359,126],[1356,126],[1353,126],[1334,130],[1308,139],[1277,151],[1238,178],[1187,216],[1133,262],[1071,316],[1013,369],[968,427],[930,471],[902,504],[884,528],[872,544],[866,555],[861,559],[860,561],[857,561],[848,561],[836,562],[824,562],[813,562],[801,561],[789,561],[780,561],[774,562],[770,564],[770,565],[770,564]],"dx":[-757,464],"dy":[-757,464],"length":938.6471794611252,"timing":[16.800000000745058,33.30000000074506,50.100000001490116,66.80000000074506,83.40000000037253,100.20000000111759,116.80000000074506,133.5,150.2000000011176,225.10000000149012,233.60000000149012,250.30000000074506,267,283.80000000074506,300.40000000037253,317,333.7000000011176,350.40000000037253,367.1000000014901,383.80000000074506,400.40000000037253,417.1000000014901,433.80000000074506,450.40000000037253,467.2000000011176,483.80000000074506,500.6000000014901,550.5,567.3000000007451,584,600.8000000007451,617.3000000007451,634,650.8000000007451,667.3000000007451,684.1000000014901,700.7000000011176,717.4000000003725,790.9000000003725]},{"start":[822,510],"end":[1002,747],"points":[[822,510],[829,507],[837,503],[840,498],[841,495],[840,489],[833,477],[825,461],[822,446],[822,434],[829,423],[841,414],[856,407],[876,401],[904,401],[937,401],[979,409],[1020,435],[1047,466],[1060,511],[1058,570],[1041,630],[1023,679],[1008,712],[1002,732],[1002,744],[1002,747]],"dx":[180,237],"dy":[180,237],"length":642.1668903286172,"timing":[0.2999999988824129,17.09999999962747,33.59999999962747,50.19999999925494,66.90000000037253,83.59999999962747,100.19999999925494,116.90000000037253,133.69999999925494,150.40000000037253,167,183.7999999988824,200.40000000037253,217.09999999962747,233.7999999988824,250.40000000037253,267.09999999962747,283.7999999988824,300.5,317.2999999988824,333.7999999988824,350.59999999962747,367.19999999925494,383.7999999988824,400.59999999962747,417.2999999988824,433.90000000037253]},{"start":[1099,641],"end":[687,330],"points":[[1099,641],[1101,632],[1101,627],[1098,623],[1095,620],[1091,620],[1089,618],[1085,617],[1079,615],[1076,612],[1070,608],[1062,602],[1041,588],[1005,570],[962,554],[912,531],[869,507],[833,480],[797,440],[761,399],[725,366],[702,350],[690,341],[689,339],[689,338],[687,335],[687,332],[687,330]],"dx":[-412,-311],"dy":[-412,-311],"length":534.9133387410872,"timing":[16.799999998882413,33.399999998509884,50.09999999962747,66.69999999925494,83.29999999888241,100.09999999962747,116.89999999850988,133.5,150,166.7999999988824,183.5,200.19999999925494,216.89999999850988,233.59999999962747,250.2999999988824,266.8999999985099,283.59999999962747,300.2999999988824,317,333.69999999925494,350.3999999985099,367,383.69999999925494,400.2999999988824,550.8999999985099,600.5999999996275,617.2999999988824,641.2999999988824]},{"start":[837,423],"end":[1375,86],"points":[[837,423],[861,447],[879,471],[892,495],[900,513],[903,526],[904,537],[904,544],[903,553],[897,562],[888,565],[879,568],[872,568],[869,567],[869,560],[877,543],[900,518],[927,480],[963,423],[1006,360],[1048,305],[1092,254],[1132,218],[1167,194],[1195,176],[1216,167],[1231,158],[1243,150],[1258,143],[1270,137],[1287,126],[1300,119],[1311,114],[1317,113],[1318,113],[1324,111],[1333,108],[1344,104],[1354,99],[1362,95],[1366,90],[1372,87],[1375,86]],"dx":[538,-337],"dy":[538,-337],"length":910.3195907090602,"timing":[12,28.699999999254942,45.40000000037253,62,78.79999999888241,95.5,112.09999999962747,128.69999999925494,145.40000000037253,162.19999999925494,178.7999999988824,195.5,212.19999999925494,228.7999999988824,245.5,262.19999999925494,278.90000000037253,295.69999999925494,312.40000000037253,329,345.69999999925494,362.40000000037253,379,395.69999999925494,412.2999999988824,429,445.69999999925494,462.2999999988824,479,495.69999999925494,512.5,529.0999999996275,545.7999999988824,562.4000000003725,579.1999999992549,595.7999999988824,612.5,629.2999999988824,645.9000000003725,662.5999999996275,679.2999999988824,696.0999999996275,712.6999999992549]},{"start":[1106,565],"end":[235,102],"points":[[1106,565],[1079,624],[1061,672],[1046,718],[1037,756],[1031,781],[1023,804],[1016,817],[1010,829],[1004,838],[999,844],[996,847],[993,850],[993,848],[990,843],[986,819],[971,771],[942,701],[893,594],[822,461],[732,327],[630,218],[515,134],[410,72],[332,36],[276,15],[251,6],[245,6],[245,7],[243,9],[239,15],[233,21],[224,30],[215,43],[206,61],[200,84],[200,102],[200,112],[201,117],[202,118],[204,118],[207,118],[213,116],[222,110],[231,107],[232,104],[234,104],[235,102]],"dx":[-871,-463],"dy":[-871,-463],"length":1654.4437898886752,"timing":[10.300000000745058,26.90000000037253,43.69999999925494,60.30000000074506,76.90000000037253,93.69999999925494,110.30000000074506,127,143.69999999925494,160.30000000074506,177,193.80000000074506,210.30000000074506,237.90000000037253,243.80000000074506,260.5,277.19999999925494,293.90000000037253,310.59999999962747,327.30000000074506,343.90000000037253,360.59999999962747,377.19999999925494,394,410.69999999925494,427.40000000037253,444,460.59999999962747,491.19999999925494,496.09999999962747,510.69999999925494,527.5,544.0999999996275,560.8000000007451,577.4000000003725,594.1999999992549,610.9000000003725,627.5,644.1999999992549,660.9000000003725,682,694.0999999996275,710.8000000007451,727.5999999996275,744.1999999992549,760.9000000003725,777.5999999996275,794.4000000003725]},{"start":[1217,88],"end":[861,684],"points":[[1217,88],[1214,102],[1202,117],[1187,136],[1169,150],[1149,162],[1128,172],[1109,184],[1085,196],[1062,205],[1047,213],[1037,220],[1028,226],[1017,237],[1004,256],[983,286],[960,327],[936,376],[914,429],[887,487],[867,532],[857,567],[855,592],[854,610],[854,627],[854,636],[854,640],[854,646],[854,652],[854,658],[854,663],[855,667],[856,670],[858,675],[859,679],[859,684],[861,684]],"dx":[-356,596],"dy":[-356,596],"length":744.8253812912627,"timing":[16.699999999254942,33.19999999925494,50,66.69999999925494,83.40000000037253,100.09999999962747,116.59999999962747,133.40000000037253,150,166.69999999925494,183.40000000037253,200.09999999962747,216.80000000074506,233.40000000037253,250.19999999925494,266.80000000074506,283.5,300.09999999962747,316.90000000037253,333.5,350.30000000074506,366.90000000037253,383.59999999962747,400.40000000037253,417,433.59999999962747,450.30000000074506,467,483.59999999962747,500.5,517,533.6999999992549,550.4000000003725,567.0999999996275,583.8000000007451,600.4000000003725,617.0999999996275]},{"start":[666,708],"end":[1083,396],"points":[[666,708],[657,642],[644,573],[630,504],[617,435],[602,377],[590,333],[579,297],[576,269],[576,249],[576,240],[579,237],[580,237],[580,236],[582,236],[583,236],[610,237],[664,252],[739,283],[822,324],[888,363],[945,393],[996,412],[1033,418],[1056,421],[1060,420],[1065,419],[1069,411],[1072,404],[1075,399],[1078,398],[1080,398],[1081,398],[1083,396]],"dx":[417,-312],"dy":[417,-312],"length":1040.578104529636,"timing":[0.6000000014901161,17.100000001490116,33.90000000037253,50.600000001490116,67.30000000074506,84,100.60000000149012,117.20000000111759,133.90000000037253,150.60000000149012,167.30000000074506,184,200.60000000149012,260,280.90000000037253,284,300.90000000037253,317.6000000014901,334.1000000014901,350.80000000074506,367.7000000011176,384.30000000074506,401,417.7000000011176,434.40000000037253,451,467.6000000014901,484.5,501.2000000011176,517.9000000003725,534.6000000014901,551.2000000011176,567.9000000003725,584.4000000003725]},{"start":[1651,0],"end":[986,672],"points":[[1651,0],[1592,28],[1516,63],[1430,100],[1339,138],[1252,174],[1172,216],[1106,261],[1057,309],[1015,366],[983,424],[961,486],[950,544],[949,594],[954,625],[965,643],[977,657],[984,666],[986,670],[986,672]],"dx":[-665,672],"dy":[-665,672],"length":1074.883675140872,"timing":[42564.90000000037,42577.59999999963,42594.29999999888,42611.09999999963,42627.699999999255,42644.40000000037,42661.09999999963,42677.79999999888,42694.40000000037,42711.199999999255,42727.79999999888,42744.40000000037,42761.09999999963,42777.90000000037,42794.5,42811.199999999255,42827.90000000037,42844.59999999963,42861.29999999888,42878]},{"start":[1410,931],"end":[1418,477],"points":[[1410,931],[1447,895],[1475,859],[1495,827],[1508,795],[1518,768],[1521,753],[1521,745],[1520,741],[1519,740],[1518,740],[1517,740],[1517,739],[1517,738],[1517,733],[1517,718],[1520,698],[1522,670],[1525,630],[1521,589],[1510,555],[1496,527],[1477,502],[1458,485],[1444,478],[1436,475],[1434,475],[1431,475],[1430,475],[1429,475],[1429,476],[1428,476],[1427,477],[1424,477],[1421,477],[1419,477],[1418,477]],"dx":[8,-454],"dy":[8,-454],"length":548.2817537431641,"timing":[4,21,38,54,71,88,105,121,138,155,193,224,489,492,506,522,539,556,572,589,605,622,639,656,672,689,706,723,742,764,773,790,806,823,840,856,873]},{"start":[1419,476],"end":[1143,260],"points":[[1419,476],[1418,476],[1401,474],[1356,465],[1283,445],[1209,420],[1150,392],[1126,370],[1124,352],[1129,330],[1136,308],[1139,294],[1140,287],[1140,284],[1140,283],[1141,281],[1143,278],[1147,272],[1149,266],[1150,263],[1150,262],[1149,261],[1148,261],[1147,261],[1145,261],[1144,260],[1143,260]],"dx":[-276,-216],"dy":[-276,-216],"length":436.18754544070714,"timing":[222,225,242,259,276,292,309,325,342,359,376,393,409,426,443,459,476,493,510,526,543,560,577,594,609,627,643]},{"start":[949,284],"end":[2512,351],"points":[[949,284],[950,284],[951,285],[972,291],[1041,298],[1176,309],[1371,320],[1587,331],[1823,346],[2028,361],[2165,369],[2250,375],[2279,376],[2282,376],[2283,376],[2284,376],[2285,376],[2286,376],[2286,375],[2292,373],[2307,367],[2332,359],[2356,352],[2371,346],[2388,344],[2418,344],[2469,347],[2533,351],[2559,353],[2558,364],[2552,362],[2544,360],[2535,359],[2530,358],[2525,357],[2521,356],[2517,354],[2514,353],[2513,352],[2512,352],[2512,351]],"dx":[1563,67],"dy":[1563,67],"length":1680.4651406693877,"timing":[251,253,257,274,290,307,324,341,357,374,390,407,424,441,498,518,529,538,541,557,574,591,608,624,641,658,674,691,699,942,959,975,992,1008,1025,1042,1058,1075,1092,1108,1125]},{"start":[1818,335],"end":[2075,422],"points":[[1818,335],[1765,323],[1744,317],[1739,315],[1739,314],[1738,314],[1737,314],[1733,313],[1724,313],[1707,313],[1688,315],[1664,321],[1643,327],[1631,328],[1629,328],[1629,329],[1630,329],[1631,329],[1642,334],[1681,350],[1741,376],[1819,405],[1897,433],[1952,452],[1985,466],[2000,472],[2003,473],[2004,473],[2005,473],[2005,472],[2007,472],[2008,471],[2009,471],[2010,470],[2012,468],[2014,467],[2017,465],[2018,465],[2019,465],[2020,465],[2021,465],[2031,461],[2049,451],[2065,439],[2075,431],[2077,426],[2077,423],[2077,422],[2076,422],[2075,422]],"dx":[257,87],"dy":[257,87],"length":693.5397724695629,"timing":[6,22,39,55,79,98,108,122,139,156,172,189,206,222,240,471,475,478,489,507,523,540,556,574,590,607,624,670,676,684,690,707,723,741,757,773,790,807,1038,1042,1043,1058,1074,1092,1108,1125,1141,1159,1174,1231]},{"start":[2011,458],"end":[2224,393],"points":[[2011,458],[2005,454],[2000,451],[1995,447],[1994,447],[1995,447],[1998,447],[2006,446],[2018,444],[2033,443],[2043,441],[2048,441],[2051,441],[2056,441],[2063,437],[2071,432],[2081,422],[2098,408],[2111,398],[2123,390],[2136,385],[2148,381],[2156,380],[2161,380],[2163,380],[2165,380],[2166,380],[2170,381],[2173,383],[2177,385],[2179,387],[2181,389],[2183,392],[2187,394],[2191,397],[2198,398],[2207,398],[2216,398],[2221,395],[2223,394],[2224,393]],"dx":[213,-65],"dy":[213,-65],"length":277.51620376478064,"timing":[4,20,38,54,71,139,154,170,188,205,221,237,255,272,288,305,321,338,354,371,388,405,421,438,455,472,488,505,522,539,555,572,588,606,622,639,655,672,689,706,723]},{"start":[2223,393],"end":[1748,442],"points":[[2223,393],[2222,393],[2218,392],[2198,391],[2157,396],[2104,401],[2042,405],[1993,409],[1961,414],[1940,419],[1926,423],[1915,426],[1902,428],[1889,429],[1874,430],[1859,430],[1843,430],[1824,430],[1806,430],[1783,434],[1764,437],[1755,439],[1751,439],[1751,440],[1750,440],[1750,441],[1749,441],[1748,442]],"dx":[-475,49],"dy":[-475,49],"length":481.3553633980511,"timing":[230,232,240,257,273,290,307,324,341,357,374,390,408,424,440,458,474,491,507,524,540,558,574,657,661,668,675,692]},{"start":[1751,448],"end":[2223,622],"points":[[1751,448],[1751,446],[1749,443],[1746,441],[1743,438],[1739,435],[1730,431],[1712,423],[1684,411],[1663,401],[1658,399],[1667,402],[1726,414],[1854,438],[2000,467],[2160,499],[2277,530],[2332,553],[2347,566],[2348,574],[2343,582],[2340,587],[2337,592],[2334,598],[2327,603],[2318,608],[2309,614],[2299,619],[2291,622],[2284,625],[2277,626],[2266,626],[2248,625],[2232,622],[2224,622],[2223,622]],"dx":[472,174],"dy":[472,174],"length":973.8550206295447,"timing":[78,92,107,125,141,158,174,191,208,224,242,258,275,292,309,325,342,358,375,392,409,426,442,459,476,492,509,526,542,559,576,592,609,626,642,659]},{"start":[1951,620],"end":[314,827],"points":[[1951,620],[1907,617],[1880,616],[1872,615],[1870,615],[1869,615],[1868,614],[1867,614],[1865,615],[1849,622],[1811,630],[1736,635],[1622,628],[1480,615],[1307,606],[1128,599],[951,599],[798,611],[667,635],[566,665],[500,692],[462,712],[440,728],[422,742],[408,754],[396,762],[384,770],[367,778],[347,787],[330,795],[322,801],[319,805],[318,809],[317,814],[316,819],[315,822],[315,823],[315,824],[314,824],[314,825],[314,826],[314,827]],"dx":[-1637,207],"dy":[-1637,207],"length":1706.0203737939232,"timing":[13,29,46,62,79,96,112,239,246,263,279,296,313,330,346,363,380,397,413,430,447,463,480,497,514,530,547,564,581,597,614,630,647,664,681,697,714,771,782,784,797,883]},{"start":[489,791],"end":[587,1150],"points":[[489,791],[564,778],[637,765],[691,756],[732,746],[762,736],[792,728],[828,720],[866,719],[900,720],[940,723],[983,724],[1037,724],[1090,724],[1138,724],[1161,728],[1163,731],[1148,744],[1095,783],[999,844],[890,918],[781,1001],[690,1063],[634,1099],[603,1121],[592,1133],[589,1140],[588,1141],[588,1142],[588,1143],[587,1144],[587,1147],[587,1149],[587,1150]],"dx":[98,359],"dy":[98,359],"length":1401.4312459016815,"timing":[1,18,35,51,68,85,101,118,135,151,168,185,202,218,235,252,268,285,302,319,335,352,369,385,402,418,436,452,469,486,502,519,536,774]},{"start":[1273,947],"end":[812,138],"points":[[1273,947],[1276,943],[1276,940],[1277,940],[1279,936],[1285,930],[1296,920],[1311,909],[1327,898],[1339,890],[1343,887],[1343,886],[1343,885],[1343,883],[1333,855],[1315,803],[1268,725],[1189,633],[1094,545],[988,460],[904,389],[858,336],[846,303],[848,279],[857,259],[863,244],[865,228],[861,209],[849,188],[831,166],[818,154],[814,151],[813,151],[813,150],[813,149],[812,144],[812,140],[812,138]],"dx":[-461,-809],"dy":[-461,-809],"length":1063.1123240518507,"timing":[3,20,36,105,119,136,153,170,186,203,220,264,264,270,286,304,320,337,354,370,387,403,420,437,453,470,487,503,521,537,554,570,667,667,671,688,704,721]},{"start":[916,254],"end":[712,620],"points":[[916,254],[928,265],[945,278],[972,294],[1009,309],[1051,325],[1095,341],[1127,353],[1138,359],[1140,360],[1141,362],[1142,363],[1142,364],[1142,366],[1142,369],[1137,376],[1122,388],[1087,407],[1024,425],[940,441],[846,464],[771,493],[720,526],[696,551],[689,574],[688,596],[688,613],[687,625],[685,634],[682,640],[680,644],[678,646],[678,648],[678,647],[679,647],[683,642],[689,635],[692,631],[693,630],[694,630],[695,630],[696,630],[697,630],[699,630],[703,627],[707,624],[710,622],[710,621],[711,621],[712,621],[712,620]],"dx":[-204,366],"dy":[-204,366],"length":898.5743433458973,"timing":[13,30,46,63,80,97,113,130,147,164,180,197,213,230,247,264,280,297,314,330,347,363,380,397,414,430,447,464,480,497,514,531,547,684,687,698,714,731,748,912,928,946,954,965,982,998,1015,1032,1416,1433,1436]},{"start":[772,604],"end":[1017,514],"points":[[772,604],[763,605],[740,606],[719,606],[704,606],[698,606],[699,606],[700,606],[701,606],[714,604],[750,597],[804,589],[850,583],[883,575],[899,568],[902,564],[904,560],[907,555],[916,550],[931,544],[949,540],[962,538],[970,538],[976,536],[981,534],[985,532],[987,530],[988,529],[989,529],[989,528],[990,528],[997,525],[1005,521],[1010,519],[1012,517],[1014,515],[1016,514],[1017,514]],"dx":[245,-90],"dy":[245,-90],"length":414.9123118327674,"timing":[88,98,115,131,148,164,281,284,286,298,315,332,349,365,382,398,416,432,449,465,482,498,516,533,549,566,583,599,673,678,683,700,716,733,749,766,783,844]},{"start":[1020,514],"end":[1544,879],"points":[[1020,514],[1020,513],[1028,513],[1038,513],[1043,513],[1044,513],[1045,513],[1050,515],[1061,516],[1083,518],[1125,524],[1196,539],[1278,563],[1361,597],[1420,637],[1449,666],[1462,696],[1467,727],[1469,757],[1474,786],[1481,809],[1490,826],[1496,839],[1501,846],[1502,846],[1502,847],[1502,848],[1503,849],[1505,853],[1507,855],[1508,857],[1509,857],[1509,858],[1510,858],[1511,859],[1515,861],[1521,866],[1529,872],[1537,876],[1541,878],[1543,879],[1544,879]],"dx":[524,365],"dy":[524,365],"length":714.029906941101,"timing":[29,44,61,77,94,215,228,244,261,278,294,311,328,345,362,378,395,411,428,445,462,478,496,512,528,722,725,729,745,763,779,844,852,854,863,879,896,913,929,946,963,980]},{"start":[1628,878],"end":[2410,342],"points":[[1628,878],[1627,878],[1622,879],[1617,881],[1611,882],[1605,884],[1602,886],[1602,887],[1611,894],[1678,909],[1842,919],[2044,914],[2274,882],[2443,828],[2516,768],[2534,715],[2534,663],[2530,619],[2527,587],[2527,561],[2532,542],[2536,530],[2536,521],[2535,513],[2533,504],[2531,497],[2529,488],[2525,480],[2520,471],[2513,462],[2502,457],[2491,451],[2482,447],[2474,442],[2464,433],[2451,418],[2437,398],[2427,378],[2421,362],[2416,352],[2413,345],[2411,344],[2411,343],[2410,343],[2410,342]],"dx":[782,-536],"dy":[782,-536],"length":1460.157201173179,"timing":[119,129,145,162,179,195,212,229,246,262,279,295,313,328,346,362,378,395,413,429,446,462,479,496,513,529,546,563,580,596,613,630,646,663,679,697,713,730,746,763,780,797,813,864,893]},{"start":[2308,366],"end":[1623,244],"points":[[2308,366],[2278,375],[2257,383],[2243,391],[2233,399],[2224,406],[2214,417],[2201,429],[2186,441],[2165,455],[2146,466],[2132,473],[2121,479],[2105,485],[2071,493],[2019,498],[1937,493],[1855,474],[1809,449],[1788,418],[1784,385],[1786,353],[1790,327],[1790,303],[1783,281],[1773,262],[1762,248],[1753,237],[1746,228],[1740,224],[1733,221],[1723,220],[1709,220],[1689,223],[1670,228],[1655,234],[1642,239],[1633,242],[1627,244],[1624,244],[1623,244]],"dx":[-685,-122],"dy":[-685,-122],"length":913.8767629268716,"timing":[17,33,51,67,84,100,117,134,151,167,184,200,217,233,250,267,284,301,318,334,351,367,384,401,418,435,451,468,485,501,518,535,552,568,585,601,618,635,651,668,685]},{"start":[1619,249],"end":[301,220],"points":[[1619,249],[1613,255],[1599,265],[1581,273],[1560,281],[1542,285],[1523,286],[1506,287],[1488,290],[1464,293],[1429,295],[1390,296],[1361,294],[1347,293],[1343,293],[1342,293],[1340,295],[1337,297],[1327,299],[1302,299],[1257,294],[1181,285],[1077,271],[966,258],[848,244],[745,233],[649,228],[567,221],[496,217],[441,216],[399,216],[364,216],[343,218],[334,220],[330,221],[326,221],[320,222],[314,222],[307,222],[303,221],[301,220]],"dx":[-1318,-29],"dy":[-1318,-29],"length":1334.9438457181104,"timing":[8,25,42,58,75,91,108,125,142,158,175,192,209,225,242,259,276,292,309,326,342,359,375,393,410,426,442,460,476,493,509,526,543,560,576,593,610,626,643,660,676]},{"start":[275,765],"end":[574,40],"points":[[275,765],[286,767],[305,769],[321,770],[329,770],[332,771],[332,772],[332,773],[331,774],[331,775],[332,777],[335,779],[338,780],[346,781],[370,774],[427,749],[503,692],[583,597],[640,475],[659,347],[649,236],[622,136],[603,77],[594,52],[587,42],[582,40],[580,40],[579,40],[578,40],[577,40],[576,40],[575,40],[574,40]],"dx":[299,-725],"dy":[299,-725],"length":978.6360445557507,"timing":[5,21,38,54,72,88,131,143,155,171,188,205,222,238,255,271,289,306,322,338,355,372,388,405,422,439,455,477,490,514,532,548,585]},{"start":[582,42],"end":[1571,1075],"points":[[582,42],[582,47],[588,59],[616,82],[669,115],[751,164],[841,226],[931,306],[1009,399],[1090,514],[1169,637],[1249,745],[1331,832],[1403,897],[1449,942],[1471,972],[1482,997],[1489,1020],[1495,1042],[1501,1058],[1505,1065],[1508,1068],[1511,1070],[1515,1073],[1523,1075],[1528,1075],[1532,1075],[1536,1075],[1543,1076],[1554,1078],[1565,1079],[1570,1079],[1571,1078],[1571,1076],[1571,1075]],"dx":[989,1033],"dy":[989,1033],"length":1475.164496204165,"timing":[173,188,204,221,238,255,270,288,304,320,337,355,371,388,404,422,438,454,471,488,505,521,538,555,572,588,605,621,638,655,671,688,705,722,739]},{"start":[1358,718],"end":[1144,359],"points":[[1358,718],[1346,680],[1333,643],[1310,601],[1279,561],[1247,529],[1221,509],[1203,495],[1196,490],[1195,488],[1194,488],[1192,484],[1182,472],[1164,444],[1145,410],[1136,380],[1134,365],[1138,358],[1140,358],[1141,358],[1143,358],[1144,359]],"dx":[-214,-359],"dy":[-214,-359],"length":443.51592899667196,"timing":[13,30,46,63,80,96,113,130,146,163,218,230,246,263,280,297,313,330,347,371,380,397]},{"start":[1121,358],"end":[2242,620],"points":[[1121,358],[1114,358],[1105,358],[1097,358],[1090,359],[1083,363],[1079,367],[1077,370],[1077,372],[1076,374],[1077,374],[1077,375],[1084,380],[1130,407],[1262,444],[1486,479],[1749,513],[1971,540],[2104,553],[2165,559],[2176,562],[2176,563],[2172,566],[2168,570],[2165,575],[2163,582],[2162,589],[2161,594],[2160,598],[2160,599],[2160,600],[2163,605],[2178,611],[2202,616],[2225,619],[2240,622],[2243,622],[2243,621],[2243,620],[2242,620]],"dx":[1121,262],"dy":[1121,262],"length":1309.5872884197624,"timing":[6,23,40,57,73,89,106,123,140,156,173,225,240,257,274,290,307,323,340,357,374,390,407,423,441,458,474,490,508,524,540,557,575,590,608,624,641,814,830,833]},{"start":[2026,623],"end":[349,706],"points":[[2026,623],[1942,618],[1866,615],[1807,611],[1765,606],[1738,604],[1721,604],[1710,604],[1703,603],[1697,601],[1692,601],[1686,600],[1676,598],[1660,596],[1627,592],[1572,583],[1473,567],[1340,549],[1219,538],[1109,536],[1027,545],[969,561],[918,582],[878,600],[844,616],[815,632],[787,644],[760,655],[735,660],[706,662],[664,663],[609,663],[548,662],[484,662],[435,664],[408,668],[392,670],[384,674],[379,678],[373,682],[369,684],[366,686],[364,687],[361,690],[358,692],[355,695],[353,699],[351,703],[350,706],[349,706]],"dx":[-1677,83],"dy":[-1677,83],"length":1721.6078554555186,"timing":[2,18,35,52,68,85,101,119,135,152,168,186,202,219,235,253,269,286,303,319,336,353,369,386,403,420,436,453,469,486,503,520,536,553,570,586,603,620,637,653,669,687,704,720,737,754,770,787,803,820]},{"start":[419,712],"end":[807,1049],"points":[[419,712],[452,712],[492,710],[542,706],[598,699],[658,691],[725,682],[782,675],[827,667],[869,662],[909,658],[945,655],[972,654],[996,656],[1013,660],[1022,664],[1025,670],[1025,683],[1015,705],[990,745],[945,802],[894,868],[856,917],[830,954],[818,979],[814,997],[813,1013],[813,1025],[813,1033],[813,1036],[812,1037],[812,1038],[811,1038],[811,1039],[811,1040],[809,1041],[809,1044],[808,1046],[807,1047],[807,1049]],"dx":[388,337],"dy":[388,337],"length":1063.754344675235,"timing":[7,24,40,57,73,91,107,124,140,157,174,190,207,224,240,258,274,291,308,324,341,357,374,391,408,424,441,458,475,492,508,525,541,592,599,608,625,641,658,675]},{"start":[1104,1020],"end":[765,231],"points":[[1104,1020],[1120,1012],[1133,1006],[1142,1002],[1146,1000],[1147,999],[1148,999],[1148,998],[1149,997],[1150,984],[1149,953],[1132,897],[1093,815],[1034,717],[969,614],[913,528],[876,462],[854,411],[840,374],[832,347],[824,321],[812,296],[799,273],[783,253],[770,239],[765,231]],"dx":[-339,-789],"dy":[-339,-789],"length":917.9776984204344,"timing":[15,32,49,65,82,99,278,283,284,300,316,333,349,366,383,400,417,433,450,467,483,500,517,534,550,567]},{"start":[765,232],"end":[960,872],"points":[[765,232],[767,235],[783,261],[810,307],[841,368],[861,432],[878,508],[893,585],[902,649],[905,695],[905,731],[905,757],[905,774],[904,785],[904,795],[904,802],[904,807],[905,810],[906,815],[910,820],[916,828],[924,837],[931,842],[938,846],[941,847],[942,847],[942,848],[943,849],[943,850],[943,852],[945,854],[947,857],[949,859],[949,860],[950,861],[953,864],[955,868],[958,870],[959,872],[960,872]],"dx":[195,640],"dy":[195,640],"length":692.2285753297044,"timing":[215,220,236,253,270,287,303,320,337,353,370,387,403,420,437,453,470,487,504,521,537,554,570,587,604,634,697,711,717,722,737,754,771,787,804,821,838,854,871,932]},{"start":[961,872],"end":[2063,78],"points":[[961,872],[964,870],[969,867],[975,864],[981,859],[991,852],[1001,845],[1014,837],[1044,831],[1083,827],[1133,823],[1195,820],[1261,815],[1327,804],[1371,787],[1398,764],[1422,731],[1452,682],[1490,620],[1526,558],[1562,495],[1598,438],[1635,388],[1677,336],[1716,290],[1756,252],[1792,220],[1828,196],[1859,177],[1875,168],[1881,164],[1883,164],[1884,163],[1887,162],[1891,162],[1894,162],[1900,162],[1914,162],[1942,158],[1973,150],[2005,138],[2034,126],[2057,114],[2071,106],[2078,99],[2082,96],[2084,92],[2085,90],[2085,89],[2085,88],[2084,88],[2083,88],[2082,86],[2078,85],[2073,84],[2069,82],[2066,81],[2064,80],[2063,78]],"dx":[1102,-794],"dy":[1102,-794],"length":1492.6108854496408,"timing":[44,55,72,89,106,122,139,155,172,190,206,222,239,256,273,289,306,322,339,356,373,390,407,423,440,456,473,489,506,523,540,556,573,590,607,623,640,657,673,691,707,723,740,757,774,790,807,824,841,914,925,928,940,957,974,991,1007,1024,1038]},{"start":[1712,324],"end":[1717,1004],"points":[[1712,324],[1610,388],[1512,456],[1417,524],[1352,573],[1317,602],[1302,616],[1294,626],[1291,632],[1289,633],[1289,634],[1287,634],[1286,634],[1274,634],[1267,634],[1267,635],[1267,636],[1266,643],[1273,663],[1286,686],[1300,715],[1324,747],[1358,780],[1393,806],[1436,830],[1477,848],[1507,859],[1531,868],[1552,877],[1572,885],[1590,892],[1604,895],[1612,896],[1615,897],[1616,897],[1616,898],[1617,899],[1619,901],[1625,907],[1633,914],[1644,922],[1660,935],[1684,950],[1708,961],[1726,970],[1733,972],[1732,972],[1731,972],[1730,972],[1729,972],[1728,972],[1727,972],[1726,972],[1725,973],[1725,974],[1723,977],[1721,980],[1720,987],[1719,994],[1718,1002],[1717,1008],[1717,1012],[1717,1015],[1717,1016],[1717,1017],[1717,1016],[1717,1015],[1717,1014],[1717,1013],[1717,1012],[1717,1011],[1717,1008],[1717,1007],[1717,1006],[1717,1005],[1717,1004]],"dx":[5,680],"dy":[5,680],"length":1217.9582572086404,"timing":[14,31,47,64,80,98,115,131,147,164,708,4057,4060,4073,4090,4224,4226,4240,4257,4274,4290,4307,4324,4341,4357,4374,4391,4407,4424,4441,4458,4473,4491,4507,4524,4555,4558,4574,4591,4608,4624,4641,4658,4675,4691,4708,4750,4753,4759,4774,4791,4811,4859,4867,4875,4891,4909,4924,4942,4958,4975,4992,5008,5025,5042,5281,5300,5310,5316,5327,5342,5359,5376,5392,5410,5480]},{"start":[1718,1004],"end":[2305,173],"points":[[1718,1004],[1719,1004],[1720,1004],[1732,994],[1760,973],[1795,937],[1856,874],[1936,798],[2019,709],[2100,618],[2159,540],[2205,476],[2233,435],[2251,403],[2264,372],[2269,347],[2270,326],[2270,313],[2266,300],[2263,292],[2261,287],[2259,282],[2257,277],[2257,274],[2258,269],[2261,262],[2269,250],[2280,236],[2291,219],[2300,202],[2305,191],[2306,182],[2306,176],[2306,174],[2306,173],[2305,173]],"dx":[587,-831],"dy":[587,-831],"length":1057.3717539013892,"timing":[292,296,296,311,327,344,361,377,394,411,428,444,461,477,494,511,528,544,561,578,595,611,628,645,662,678,695,712,728,745,761,779,795,812,828,895]},{"start":[2294,194],"end":[1175,724],"points":[[2294,194],[2292,195],[2291,195],[2291,196],[2286,199],[2275,205],[2257,213],[2234,221],[2200,231],[2159,239],[2100,246],[2031,252],[1935,266],[1825,287],[1722,315],[1637,345],[1588,372],[1567,391],[1559,406],[1553,428],[1546,456],[1533,488],[1515,530],[1496,571],[1480,599],[1464,625],[1445,645],[1426,659],[1400,670],[1358,683],[1308,698],[1262,716],[1222,734],[1198,747],[1186,755],[1180,759],[1179,759],[1178,759],[1178,758],[1177,758],[1174,754],[1173,749],[1172,742],[1172,733],[1173,728],[1175,724]],"dx":[-1119,530],"dy":[-1119,530],"length":1377.059245652624,"timing":[5,22,39,176,189,206,223,240,256,273,290,306,323,340,356,373,389,407,423,440,456,474,490,507,523,540,557,573,590,607,624,640,657,674,691,707,724,763,771,774,791,807,824,841,857,874]},{"start":[1106,659],"end":[640,225],"points":[[1106,659],[1102,658],[1100,658],[1098,658],[1096,657],[1094,656],[1091,654],[1086,651],[1078,647],[1068,643],[1058,640],[1052,638],[1051,638],[1050,637],[1049,635],[1035,620],[1010,592],[971,551],[922,497],[862,432],[805,370],[759,324],[731,296],[715,276],[706,264],[700,254],[694,248],[686,242],[678,237],[668,232],[656,228],[648,226],[644,225],[643,225],[641,225],[640,225]],"dx":[-466,-434],"dy":[-466,-434],"length":648.4436166926798,"timing":[8,25,41,58,75,91,108,125,141,158,175,192,249,254,258,276,292,308,325,342,359,375,392,409,425,442,459,476,492,510,525,543,559,576,593,609]},{"start":[849,459],"end":[1870,241],"points":[[849,459],[870,482],[889,496],[904,507],[916,517],[926,528],[934,540],[938,554],[941,572],[945,595],[952,621],[959,644],[971,664],[983,679],[1008,695],[1059,710],[1152,721],[1289,716],[1431,691],[1547,655],[1620,611],[1662,562],[1686,521],[1700,487],[1710,458],[1720,435],[1729,418],[1739,404],[1747,394],[1758,382],[1766,371],[1773,361],[1781,352],[1794,341],[1810,331],[1826,320],[1838,310],[1845,301],[1850,294],[1852,288],[1854,283],[1855,277],[1857,271],[1858,264],[1860,260],[1860,256],[1861,253],[1863,251],[1864,248],[1866,246],[1867,243],[1869,241],[1870,241]],"dx":[1021,-218],"dy":[1021,-218],"length":1389.8832051753025,"timing":[10,26,43,60,76,93,110,127,143,160,177,194,210,227,243,260,277,294,310,327,344,360,377,394,410,427,444,460,478,494,511,528,545,561,577,594,611,628,644,661,678,694,711,728,744,761,778,795,811,829,845,862,897]},{"start":[1771,408],"end":[2097,268],"points":[[1771,408],[1755,430],[1735,459],[1711,492],[1683,528],[1663,554],[1646,578],[1635,595],[1628,605],[1621,614],[1610,625],[1598,636],[1588,645],[1582,651],[1579,655],[1578,660],[1577,664],[1579,668],[1592,671],[1638,667],[1723,640],[1826,593],[1912,539],[1981,478],[2026,424],[2059,385],[2090,352],[2117,327],[2136,308],[2156,290],[2170,275],[2179,265],[2184,259],[2185,257],[2185,256],[2184,256],[2180,256],[2172,256],[2161,260],[2143,265],[2126,268],[2113,271],[2106,271],[2104,272],[2103,272],[2101,271],[2098,268],[2097,268]],"dx":[326,-140],"dy":[326,-140],"length":1176.8984343395537,"timing":[4,21,37,54,70,87,104,120,138,154,171,187,204,221,238,254,271,287,305,321,338,354,371,388,405,421,438,455,471,488,505,521,538,555,571,588,605,621,638,655,672,689,705,722,744,755,772,786]},{"start":[1787,1038],"end":[628,687],"points":[[1787,1038],[1774,1030],[1768,1024],[1765,1021],[1760,1018],[1753,1013],[1744,1008],[1733,1005],[1722,1004],[1710,1002],[1697,1001],[1680,999],[1662,997],[1643,994],[1617,989],[1571,975],[1489,945],[1373,898],[1217,841],[1063,795],[942,771],[855,758],[796,749],[760,745],[736,743],[714,741],[693,738],[677,736],[665,734],[654,730],[639,727],[625,722],[608,717],[596,713],[592,711],[592,710],[592,709],[593,708],[598,705],[606,700],[618,694],[625,690],[627,688],[628,687]],"dx":[-1159,-351],"dy":[-1159,-351],"length":1292.6952518320888,"timing":[14,31,48,65,81,98,114,132,148,164,181,198,215,231,248,265,282,299,315,332,348,365,382,399,415,432,448,465,482,499,515,532,549,566,582,617,627,633,649,666,683,699,716,732]},{"start":[635,687],"end":[1812,1044],"points":[[635,687],[636,687],[638,685],[640,683],[643,682],[650,680],[661,678],[677,673],[700,668],[732,661],[779,652],[851,643],[942,642],[1034,654],[1121,680],[1193,715],[1249,752],[1299,796],[1348,842],[1398,880],[1459,915],[1521,946],[1579,974],[1634,995],[1668,1009],[1682,1015],[1688,1018],[1693,1020],[1702,1023],[1716,1025],[1735,1028],[1749,1031],[1757,1035],[1766,1039],[1775,1043],[1784,1046],[1792,1047],[1801,1047],[1810,1047],[1815,1047],[1817,1047],[1816,1047],[1816,1046],[1815,1046],[1815,1045],[1813,1044],[1812,1044]],"dx":[1177,357],"dy":[1177,357],"length":1302.753714620342,"timing":[52,55,70,87,104,120,137,154,170,187,204,221,237,254,271,288,304,321,337,354,371,388,404,421,438,454,471,488,504,521,538,554,571,588,605,621,639,655,672,688,705,831,835,842,856,872,889]},{"start":[1812,1043],"end":[164,356],"points":[[1812,1043],[1811,1040],[1809,1035],[1807,1027],[1804,1012],[1799,992],[1788,966],[1757,924],[1687,852],[1560,763],[1406,686],[1255,635],[1118,595],[980,553],[852,510],[748,477],[664,452],[597,436],[553,426],[522,419],[504,414],[489,409],[471,403],[442,394],[399,383],[352,372],[300,362],[256,358],[229,357],[216,357],[209,357],[208,359],[207,359],[206,359],[205,359],[195,359],[183,357],[171,357],[165,356],[164,356]],"dx":[-1648,-687],"dy":[-1648,-687],"length":1851.8561961338085,"timing":[101,109,126,143,159,176,193,209,226,243,260,276,293,309,326,343,360,376,393,410,427,443,460,477,494,511,527,544,561,578,593,611,649,656,660,678,694,711,727,744]},{"start":[1030,500],"end":[746,711],"points":[[1030,500],[1098,520],[1183,535],[1251,545],[1301,553],[1329,558],[1343,561],[1353,564],[1361,567],[1367,569],[1373,570],[1374,570],[1373,570],[1372,570],[1372,571],[1360,575],[1323,586],[1244,605],[1131,630],[1043,645],[980,649],[937,648],[908,645],[887,642],[873,641],[862,642],[851,646],[839,652],[827,659],[817,668],[812,673],[810,675],[808,678],[804,683],[797,689],[788,698],[778,707],[767,716],[757,723],[751,727],[750,727],[749,727],[749,726],[748,726],[748,725],[748,724],[748,723],[748,722],[747,722],[747,721],[747,720],[747,719],[747,718],[747,717],[747,715],[746,713],[746,712],[746,711]],"dx":[-284,211],"dy":[-284,211],"length":1035.4475899117765,"timing":[1,18,35,51,68,84,101,118,135,152,169,185,247,249,253,269,285,302,319,336,352,369,386,402,419,436,452,469,485,502,519,536,552,569,585,603,619,636,652,670,686,713,739,741,913,919,923,1029,1030,1038,1054,1071,1087,1104,1120,1137,1153,1171]},{"start":[951,696],"end":[362,400],"points":[[951,696],[977,699],[994,702],[1006,704],[1012,707],[1017,709],[1023,713],[1032,718],[1041,721],[1047,723],[1048,724],[1048,725],[1048,726],[1048,727],[1047,728],[1044,728],[1038,726],[1013,714],[954,685],[859,644],[733,597],[613,555],[524,527],[467,505],[443,491],[434,484],[429,478],[423,472],[414,466],[402,458],[383,447],[360,436],[343,427],[333,421],[329,418],[327,414],[326,413],[326,412],[326,411],[326,410],[327,410],[331,407],[335,405],[339,403],[341,402],[342,401],[343,401],[344,401],[352,400],[362,400]],"dx":[-589,-296],"dy":[-589,-296],"length":940.7358998344661,"timing":[1,17,34,51,67,84,101,117,135,151,167,264,267,275,284,301,318,335,352,368,385,402,419,435,452,469,485,502,519,536,552,569,585,602,618,636,653,675,696,713,721,735,752,770,786,803,887,891,903,910]},{"start":[640,439],"end":[2318,496],"points":[[640,439],[647,441],[652,443],[655,444],[658,445],[660,446],[664,448],[668,450],[674,452],[685,455],[699,458],[716,461],[734,464],[755,467],[796,472],[865,479],[979,488],[1126,497],[1298,506],[1496,518],[1667,525],[1771,532],[1816,536],[1835,539],[1841,541],[1847,545],[1864,550],[1897,557],[1941,564],[1997,571],[2048,574],[2082,576],[2101,576],[2106,574],[2110,572],[2119,567],[2141,560],[2181,548],[2227,536],[2267,522],[2290,510],[2295,504],[2296,501],[2297,500],[2299,499],[2303,498],[2307,498],[2311,498],[2314,497],[2318,497],[2318,496]],"dx":[1678,57],"dy":[1678,57],"length":1707.512409544425,"timing":[15,32,48,65,82,98,115,131,148,165,182,198,215,232,248,265,282,298,315,332,349,365,382,399,416,432,449,466,483,499,516,532,549,566,583,600,616,633,649,666,683,700,716,733,750,766,783,800,816,833,952]},{"start":[2003,505],"end":[165,368],"points":[[2003,505],[1953,499],[1880,493],[1791,490],[1723,492],[1679,498],[1640,503],[1606,510],[1560,517],[1492,524],[1412,531],[1345,535],[1294,540],[1257,541],[1213,541],[1155,534],[1051,521],[902,501],[752,478],[606,454],[479,427],[371,400],[287,375],[226,356],[191,346],[180,343],[179,343],[178,343],[177,343],[174,343],[171,343],[170,343],[169,343],[169,344],[169,345],[169,346],[168,348],[168,354],[168,360],[166,365],[165,367],[165,368]],"dx":[-1838,-137],"dy":[-1838,-137],"length":1884.3289735412104,"timing":[12,28,45,62,79,95,112,128,145,162,179,195,212,229,246,262,279,295,312,329,346,363,379,396,413,429,446,463,482,496,513,530,570,623,626,631,646,663,680,696,713,730]},{"start":[169,371],"end":[1280,570],"points":[[169,371],[171,373],[173,378],[179,386],[190,403],[209,427],[230,449],[248,464],[264,473],[277,478],[287,485],[305,495],[335,511],[390,535],[471,558],[570,580],[655,598],[725,612],[787,624],[840,634],[878,638],[911,639],[941,633],[968,623],[997,609],[1036,592],[1080,578],[1121,570],[1145,565],[1150,563],[1151,563],[1152,563],[1153,563],[1156,563],[1170,563],[1192,565],[1210,567],[1224,569],[1235,569],[1241,569],[1246,569],[1255,569],[1266,569],[1277,569],[1280,570]],"dx":[1111,199],"dy":[1111,199],"length":1196.6946091425953,"timing":[8,24,41,57,74,90,108,124,141,157,174,191,208,224,241,258,275,291,308,325,342,358,374,392,408,425,441,458,475,492,508,549,552,558,575,591,608,625,642,658,675,692,709,725,742]},{"start":[1341,564],"end":[204,150],"points":[[1341,564],[1397,555],[1467,542],[1520,528],[1551,516],[1558,509],[1561,503],[1563,498],[1565,494],[1568,491],[1570,488],[1573,484],[1574,480],[1575,474],[1572,468],[1566,461],[1549,447],[1510,419],[1438,378],[1311,317],[1143,257],[972,212],[793,170],[635,130],[509,97],[426,74],[377,60],[354,53],[342,50],[328,48],[310,46],[290,46],[272,46],[259,46],[246,48],[238,52],[233,56],[230,65],[229,75],[228,87],[227,98],[226,109],[222,117],[218,124],[214,130],[211,137],[208,143],[206,148],[204,150]],"dx":[-1137,-414],"dy":[-1137,-414],"length":1793.187752665037,"timing":[14,30,47,63,81,97,114,130,147,164,181,197,214,231,247,265,280,298,315,331,348,364,381,398,414,431,448,465,482,498,515,531,548,565,582,598,615,631,648,665,682,698,715,732,748,765,782,798,816]},{"start":[220,313],"end":[101,466],"points":[[220,313],[228,357],[240,391],[250,413],[260,431],[271,448],[278,461],[283,473],[288,488],[293,507],[298,530],[305,559],[316,592],[330,626],[346,665],[362,698],[377,723],[387,739],[397,750],[402,756],[404,756],[403,756],[402,756],[400,755],[389,741],[369,713],[335,657],[279,584],[221,525],[187,494],[168,477],[157,469],[150,466],[147,465],[142,464],[137,465],[131,466],[125,467],[121,467],[118,468],[117,468],[116,468],[113,469],[110,469],[107,468],[103,467],[101,466]],"dx":[-119,153],"dy":[-119,153],"length":925.2564420685309,"timing":[7,24,41,57,74,91,108,124,141,158,174,191,207,224,241,257,274,291,308,324,342,448,451,458,475,491,509,525,542,558,576,591,609,625,642,659,676,692,709,725,746,759,775,793,809,825,843]},{"start":[112,505],"end":[1048,108],"points":[[112,505],[120,515],[133,524],[146,533],[159,541],[172,547],[182,551],[191,554],[198,557],[204,558],[208,561],[212,562],[217,563],[226,565],[242,568],[269,570],[314,570],[370,566],[412,553],[441,535],[462,514],[485,486],[517,447],[565,405],[639,360],[717,313],[776,276],[824,243],[861,222],[884,210],[898,205],[911,202],[928,196],[945,190],[954,185],[956,184],[958,183],[961,181],[966,179],[974,172],[982,165],[994,155],[1008,144],[1021,134],[1032,125],[1041,118],[1046,112],[1048,109],[1048,108]],"dx":[936,-397],"dy":[936,-397],"length":1105.3551317085505,"timing":[14,30,48,64,81,98,115,131,147,165,181,198,214,232,248,265,281,299,314,331,348,364,381,399,415,432,448,465,481,499,515,532,549,565,582,599,616,632,649,666,682,699,715,732,749,766,782,800,817]},{"start":[1080,139],"end":[356,1127],"points":[[1080,139],[1088,147],[1094,154],[1100,158],[1105,161],[1110,164],[1121,169],[1142,176],[1177,186],[1221,197],[1253,206],[1268,211],[1272,215],[1274,220],[1276,227],[1276,240],[1267,267],[1242,306],[1195,356],[1120,410],[1021,460],[915,504],[824,542],[745,581],[683,625],[642,667],[613,705],[591,742],[571,782],[551,827],[531,869],[513,907],[501,930],[493,942],[488,947],[483,950],[476,953],[462,959],[443,972],[422,990],[409,1009],[401,1022],[398,1032],[395,1042],[390,1053],[384,1067],[376,1089],[368,1112],[360,1131],[358,1137],[357,1137],[357,1136],[357,1135],[357,1132],[356,1128],[356,1127]],"dx":[-724,988],"dy":[-724,988],"length":1591.1772252889878,"timing":[1,17,34,50,67,84,101,117,134,151,168,184,202,218,235,251,268,285,302,318,335,351,368,385,402,419,434,452,469,485,502,519,535,552,569,585,602,618,636,652,669,685,703,719,736,752,769,785,803,820,836,863,869,886,903,919]},{"start":[1321,760],"end":[920,177],"points":[[1321,760],[1337,710],[1352,664],[1372,619],[1391,579],[1414,542],[1435,512],[1453,492],[1464,475],[1467,460],[1467,444],[1467,431],[1465,421],[1463,412],[1457,401],[1440,383],[1408,358],[1348,315],[1252,257],[1143,200],[1046,162],[982,142],[943,133],[930,131],[929,131],[928,131],[927,131],[926,131],[922,131],[919,131],[918,131],[916,132],[915,134],[912,139],[910,146],[908,154],[908,158],[908,159],[909,159],[909,160],[911,162],[913,165],[913,166],[914,166],[915,167],[916,168],[918,169],[928,174],[943,180],[969,190],[1003,205],[1033,217],[1050,224],[1056,227],[1057,227],[1057,228],[1058,228],[1063,230],[1067,232],[1068,232],[1067,232],[1066,232],[1065,232],[1057,230],[1048,228],[1034,224],[1018,220],[1006,216],[995,212],[986,209],[978,205],[967,200],[951,193],[936,187],[929,184],[928,183],[927,183],[925,181],[923,180],[922,179],[921,178],[920,177]],"dx":[-401,-583],"dy":[-401,-583],"length":1378.0383998093846,"timing":[1,17,34,51,67,84,101,117,134,151,167,184,201,218,235,251,268,284,301,318,335,351,368,385,402,418,446,452,469,485,502,518,535,552,568,585,601,618,893,894,903,919,936,1012,1127,1130,1136,1153,1169,1186,1203,1220,1236,1253,1329,1335,1337,1354,1370,1387,1432,1436,1437,1454,1470,1487,1503,1520,1538,1554,1571,1587,1604,1621,1637,1654,1671,1687,1704,1716,1721,1737]},{"start":[1019,250],"end":[578,819],"points":[[1019,250],[1041,259],[1056,266],[1064,270],[1066,271],[1068,271],[1070,273],[1071,274],[1072,274],[1072,275],[1071,275],[1070,275],[1069,275],[1058,275],[1030,279],[976,297],[899,346],[814,420],[738,507],[697,569],[677,613],[667,638],[661,651],[657,661],[651,671],[641,686],[630,704],[619,721],[610,736],[604,747],[600,757],[598,762],[596,766],[595,770],[594,774],[593,781],[592,789],[590,797],[587,803],[585,807],[584,809],[584,810],[583,810],[583,811],[582,813],[579,817],[578,819]],"dx":[-441,569],"dy":[-441,569],"length":832.3134160966882,"timing":[11,27,44,61,78,94,111,128,145,177,295,298,300,312,328,345,362,378,395,412,428,445,462,479,495,512,529,545,562,579,595,612,629,646,662,679,695,712,729,746,762,826,826,831,846,863,879]},{"start":[579,818],"end":[1575,57],"points":[[579,818],[580,818],[580,817],[597,812],[642,795],[720,765],[819,722],[947,664],[1057,593],[1161,511],[1265,425],[1360,341],[1421,282],[1446,247],[1457,220],[1466,194],[1474,170],[1484,148],[1492,135],[1499,126],[1507,119],[1516,114],[1521,111],[1524,108],[1527,104],[1528,102],[1530,99],[1533,94],[1538,89],[1544,85],[1551,80],[1557,75],[1564,69],[1569,64],[1573,60],[1574,57],[1575,57]],"dx":[996,-761],"dy":[996,-761],"length":1290.1336557770028,"timing":[234,234,235,252,269,286,302,319,336,352,369,385,402,419,436,452,469,486,502,519,536,553,569,586,603,619,636,653,670,687,703,720,737,754,770,786,803]},{"start":[1577,60],"end":[554,1178],"points":[[1577,60],[1582,65],[1591,77],[1602,99],[1622,139],[1665,187],[1700,216],[1717,233],[1721,239],[1722,244],[1722,250],[1714,260],[1686,281],[1607,325],[1489,371],[1371,406],[1259,440],[1150,484],[1052,541],[966,616],[902,689],[855,758],[823,822],[810,870],[803,909],[798,939],[794,960],[790,977],[785,990],[781,999],[776,1007],[769,1015],[759,1023],[748,1033],[731,1044],[708,1056],[682,1065],[657,1073],[635,1081],[618,1092],[600,1106],[582,1124],[567,1143],[558,1158],[553,1168],[553,1172],[553,1173],[553,1174],[553,1175],[553,1176],[553,1177],[554,1178]],"dx":[-1023,1118],"dy":[-1023,1118],"length":1831.0849290886536,"timing":[73,84,100,117,134,151,167,184,200,217,234,250,267,285,301,317,334,351,368,385,401,418,434,451,468,485,501,518,535,551,568,585,602,618,635,652,668,685,701,719,735,752,768,785,802,819,835,951,957,960,969,986]},{"start":[750,1172],"end":[2467,140],"points":[[750,1172],[788,1166],[838,1157],[882,1147],[912,1139],[933,1129],[950,1120],[964,1109],[992,1092],[1035,1067],[1092,1040],[1143,1014],[1190,987],[1232,959],[1268,932],[1313,898],[1379,852],[1467,802],[1560,759],[1665,718],[1780,672],[1884,624],[1984,575],[2083,524],[2177,473],[2262,422],[2321,383],[2361,354],[2386,331],[2407,310],[2429,290],[2452,273],[2476,258],[2492,247],[2502,240],[2505,238],[2504,238],[2503,238],[2503,237],[2502,237],[2500,236],[2494,229],[2489,221],[2486,213],[2484,204],[2483,194],[2481,184],[2479,175],[2475,165],[2472,155],[2471,148],[2469,143],[2468,141],[2468,140],[2467,140]],"dx":[1717,-1032],"dy":[1717,-1032],"length":2114.36266634289,"timing":[12,29,46,62,79,96,113,130,146,163,180,196,213,230,247,263,280,296,314,330,347,363,380,397,414,430,447,463,480,496,513,531,547,564,581,597,661,670,676,682,698,714,731,748,765,781,798,815,831,848,864,881,897,937,941]},{"start":[2186,230],"end":[2091,500],"points":[[2186,230],[2116,238],[2031,244],[1942,247],[1863,248],[1810,240],[1782,235],[1759,232],[1727,228],[1665,226],[1560,224],[1426,219],[1257,210],[1096,202],[978,200],[910,203],[867,211],[843,218],[835,224],[834,232],[842,248],[875,273],[959,312],[1082,351],[1205,388],[1325,426],[1446,460],[1553,488],[1616,504],[1641,511],[1646,513],[1648,514],[1652,516],[1663,519],[1691,522],[1737,525],[1798,528],[1853,529],[1890,528],[1914,527],[1926,524],[1930,523],[1934,521],[1944,516],[1958,509],[1983,504],[2025,501],[2064,500],[2085,500],[2090,500],[2091,500]],"dx":[-95,270],"dy":[-95,270],"length":2684.4636186690973,"timing":[5,22,38,55,72,88,105,121,138,154,172,188,205,222,238,256,272,289,305,322,338,355,372,388,405,423,439,456,472,488,505,523,539,556,572,589,606,623,639,656,673,689,706,723,740,757,773,790,806,823,903]},{"start":[1889,567],"end":[1402,1069],"points":[[1889,567],[1882,570],[1879,572],[1874,574],[1862,578],[1842,583],[1808,590],[1769,598],[1736,609],[1711,618],[1696,623],[1687,626],[1679,628],[1664,630],[1636,632],[1590,637],[1522,651],[1461,675],[1421,704],[1404,737],[1396,786],[1387,845],[1374,907],[1356,970],[1342,1015],[1334,1041],[1330,1054],[1329,1060],[1328,1064],[1326,1068],[1323,1073],[1321,1076],[1320,1077],[1320,1078],[1321,1078],[1322,1078],[1326,1077],[1347,1068],[1374,1059],[1394,1053],[1400,1052],[1400,1053],[1400,1054],[1400,1055],[1400,1056],[1401,1058],[1401,1062],[1402,1065],[1402,1067],[1402,1069]],"dx":[-487,502],"dy":[-487,502],"length":984.7308510647612,"timing":[12,29,46,63,80,96,113,129,147,163,180,197,214,230,247,263,280,297,313,330,347,364,380,397,414,430,448,464,481,497,514,531,548,564,624,625,631,647,664,681,698,769,825,832,837,848,865,881,898,915]},{"start":[1872,244],"end":[786,1151],"points":[[1872,244],[1842,263],[1806,291],[1763,325],[1731,352],[1717,367],[1715,370],[1714,370],[1713,370],[1707,371],[1700,372],[1693,375],[1685,378],[1672,382],[1647,387],[1609,395],[1557,409],[1503,437],[1451,479],[1410,527],[1366,597],[1319,684],[1273,776],[1227,860],[1184,922],[1143,970],[1108,1005],[1077,1031],[1048,1054],[1016,1074],[983,1091],[956,1103],[936,1109],[927,1111],[921,1111],[915,1111],[905,1110],[889,1110],[872,1112],[854,1118],[837,1125],[820,1130],[808,1135],[801,1138],[796,1140],[792,1143],[790,1145],[789,1147],[787,1149],[786,1151]],"dx":[-1086,907],"dy":[-1086,907],"length":1487.4433630321628,"timing":[11,27,45,61,78,94,112,172,178,194,212,228,245,262,278,295,312,329,345,362,378,396,412,429,445,462,479,495,512,529,546,562,579,596,612,629,646,662,679,696,713,729,746,763,780,796,813,830,847,863]},{"start":[1072,930],"end":[1396,1133],"points":[[1072,930],[1072,896],[1066,870],[1060,855],[1057,844],[1054,839],[1053,836],[1053,837],[1053,838],[1053,847],[1056,883],[1061,927],[1064,979],[1069,1034],[1079,1079],[1091,1104],[1098,1113],[1102,1114],[1107,1114],[1115,1112],[1123,1110],[1133,1105],[1144,1100],[1155,1094],[1161,1089],[1165,1087],[1169,1086],[1179,1084],[1197,1080],[1216,1079],[1235,1079],[1249,1084],[1263,1093],[1274,1102],[1282,1110],[1293,1119],[1311,1127],[1334,1132],[1353,1137],[1369,1140],[1384,1143],[1394,1145],[1398,1145],[1399,1145],[1399,1144],[1399,1143],[1400,1143],[1400,1140],[1400,1138],[1400,1136],[1400,1135],[1399,1135],[1398,1135],[1398,1134],[1397,1134],[1396,1134],[1396,1133]],"dx":[324,203],"dy":[324,203],"length":723.5673181450288,"timing":[16,32,49,66,83,99,116,558,559,567,584,600,617,633,651,668,684,700,717,734,750,767,784,801,817,834,851,868,884,901,917,934,951,968,984,1001,1018,1035,1051,1068,1085,1101,1118,1192,1209,1213,1219,1235,1252,1269,1285,1327,1339,1345,1351,1369,1386]},{"start":[1633,578],"end":[2115,380],"points":[[1633,578],[1629,546],[1619,520],[1604,500],[1587,487],[1568,482],[1547,481],[1527,487],[1511,493],[1503,496],[1498,498],[1495,501],[1492,506],[1493,519],[1513,541],[1584,568],[1699,578],[1843,564],[1967,536],[2048,510],[2092,489],[2115,474],[2124,463],[2128,453],[2131,444],[2136,436],[2141,431],[2146,426],[2152,423],[2154,421],[2154,418],[2155,415],[2155,413],[2153,409],[2147,406],[2140,401],[2133,397],[2127,394],[2123,389],[2120,386],[2118,384],[2117,381],[2115,380]],"dx":[482,-198],"dy":[482,-198],"length":1005.569397605768,"timing":[2,19,35,52,68,85,102,119,136,152,169,186,202,219,236,253,269,286,302,319,336,353,370,386,403,419,436,452,469,487,503,520,537,553,570,586,604,620,637,654,670,687,704]},{"start":[1781,349],"end":[1413,935],"points":[[1781,349],[1757,348],[1745,348],[1741,348],[1740,348],[1739,348],[1732,347],[1722,345],[1712,345],[1708,345],[1707,345],[1706,345],[1705,345],[1691,345],[1665,344],[1635,347],[1604,358],[1582,379],[1565,412],[1551,457],[1540,514],[1533,580],[1529,652],[1522,714],[1511,768],[1498,813],[1484,856],[1475,892],[1468,914],[1463,932],[1458,947],[1452,958],[1444,968],[1438,975],[1434,978],[1433,978],[1432,978],[1431,978],[1430,977],[1428,973],[1425,968],[1422,962],[1419,953],[1418,946],[1416,941],[1415,939],[1415,938],[1415,937],[1414,936],[1413,935]],"dx":[-368,586],"dy":[-368,586],"length":884.7893916843562,"timing":[16,33,49,66,88,100,116,133,150,167,183,227,233,250,266,283,299,316,333,350,366,383,400,417,433,450,467,484,500,517,534,551,567,584,600,617,653,655,668,684,701,717,734,751,768,784,801,817,835,851]},{"start":[1216,862],"end":[1584,924],"points":[[1216,862],[1214,860],[1211,856],[1208,849],[1202,841],[1195,833],[1191,829],[1188,827],[1187,823],[1185,816],[1183,809],[1181,801],[1180,794],[1178,788],[1178,783],[1180,782],[1186,781],[1209,785],[1261,803],[1320,829],[1376,860],[1427,892],[1472,915],[1514,932],[1550,940],[1577,942],[1590,941],[1595,939],[1598,937],[1600,936],[1604,935],[1608,932],[1609,930],[1609,928],[1610,927],[1611,926],[1610,926],[1610,925],[1607,925],[1602,924],[1598,924],[1595,924],[1589,924],[1587,924],[1585,924],[1584,924]],"dx":[368,62],"dy":[368,62],"length":594.3949468821086,"timing":[3,19,36,53,70,86,103,120,136,154,170,186,203,221,236,253,270,286,303,320,337,354,371,387,403,420,437,453,470,488,504,521,537,554,571,587,655,658,671,687,704,721,738,755,771,774]},{"start":[1580,926],"end":[1395,167],"points":[[1580,926],[1580,925],[1580,919],[1584,905],[1588,880],[1590,848],[1588,798],[1571,703],[1544,586],[1518,481],[1500,396],[1488,334],[1481,293],[1474,262],[1467,242],[1463,235],[1462,232],[1461,232],[1460,232],[1459,232],[1458,232],[1455,232],[1449,234],[1442,237],[1435,238],[1430,238],[1427,238],[1423,233],[1420,225],[1420,220],[1420,216],[1419,212],[1419,208],[1417,202],[1414,196],[1408,187],[1403,178],[1397,170],[1395,167]],"dx":[-185,-759],"dy":[-185,-759],"length":825.391565610619,"timing":[255,255,266,283,300,317,333,350,366,383,399,416,433,450,466,483,500,517,565,568,575,584,600,617,633,651,668,684,701,717,734,750,767,783,800,818,834,851,867]},{"start":[1383,186],"end":[178,765],"points":[[1383,186],[1376,194],[1371,201],[1368,204],[1368,205],[1368,206],[1367,206],[1365,210],[1363,217],[1360,227],[1356,235],[1355,241],[1354,244],[1353,245],[1351,248],[1344,254],[1324,272],[1285,306],[1229,342],[1166,375],[1096,402],[1025,426],[937,450],[839,480],[747,519],[672,560],[611,606],[566,649],[534,679],[505,699],[477,713],[442,728],[407,740],[378,749],[355,757],[342,760],[332,763],[321,765],[308,765],[290,765],[270,763],[252,761],[240,761],[234,761],[233,761],[231,760],[229,760],[225,760],[219,760],[215,761],[210,764],[205,766],[201,767],[199,767],[197,767],[193,767],[186,766],[181,765],[179,765],[178,765]],"dx":[-1205,579],"dy":[-1205,579],"length":1385.3867922529766,"timing":[3,19,36,53,69,90,102,120,136,153,169,187,203,219,237,253,270,286,303,320,336,353,370,387,403,420,437,453,471,487,504,520,537,553,570,587,604,621,637,654,671,688,704,721,738,754,771,787,805,821,837,854,871,888,905,921,938,955,971,988]},{"start":[179,765],"end":[2428,97],"points":[[179,765],[180,765],[193,765],[245,766],[376,760],[570,744],[803,720],[1061,682],[1328,614],[1547,544],[1713,483],[1821,436],[1892,397],[1960,358],[2015,327],[2056,300],[2104,272],[2152,249],[2189,232],[2212,219],[2229,206],[2244,198],[2253,191],[2257,187],[2258,182],[2262,176],[2271,168],[2287,158],[2310,145],[2330,135],[2346,126],[2360,119],[2377,112],[2396,107],[2412,102],[2421,99],[2425,98],[2427,98],[2428,97]],"dx":[2249,-668],"dy":[2249,-668],"length":2387.7421232223137,"timing":[232,234,248,265,281,298,315,332,348,365,382,398,415,432,448,466,482,499,515,532,549,566,583,599,616,632,649,666,683,699,716,733,750,766,783,799,816,833,850]},{"start":[2421,108],"end":[1471,740],"points":[[2421,108],[2416,111],[2404,118],[2383,130],[2346,149],[2293,175],[2237,202],[2166,238],[2071,285],[1948,333],[1812,381],[1738,404],[1710,414],[1685,420],[1639,431],[1559,453],[1462,485],[1341,540],[1236,608],[1180,664],[1167,700],[1174,724],[1186,739],[1199,751],[1216,763],[1231,774],[1246,784],[1269,797],[1299,809],[1324,819],[1341,824],[1358,825],[1374,825],[1390,819],[1409,808],[1424,797],[1432,789],[1439,781],[1446,775],[1455,768],[1465,761],[1470,756],[1471,753],[1471,750],[1471,747],[1471,744],[1471,741],[1471,740]],"dx":[-950,632],"dy":[-950,632],"length":1800.7752675096758,"timing":[12,29,45,62,79,96,112,129,146,163,179,195,212,230,246,262,280,296,313,329,346,363,380,396,413,430,447,463,480,496,513,530,547,563,580,597,613,630,646,663,680,696,713,730,747,764,780,797]},{"start":[1320,756],"end":[123,133],"points":[[1320,756],[1292,753],[1253,741],[1204,727],[1169,717],[1146,711],[1125,704],[1108,695],[1089,685],[1074,678],[1068,675],[1066,675],[1059,672],[1043,666],[1012,655],[966,633],[914,603],[852,561],[789,512],[728,463],[663,420],[601,384],[551,357],[512,335],[482,315],[454,298],[429,284],[403,273],[374,262],[342,254],[309,245],[282,237],[259,228],[239,219],[224,212],[217,208],[213,205],[209,202],[200,196],[192,189],[181,181],[170,173],[162,166],[157,162],[154,159],[151,156],[147,153],[142,148],[135,142],[129,137],[125,135],[123,134],[123,133]],"dx":[-1197,-623],"dy":[-1197,-623],"length":1365.2788398926596,"timing":[7,25,41,58,75,91,108,125,141,158,175,191,209,225,242,259,275,291,309,325,342,359,375,392,409,425,442,459,475,492,509,526,542,559,576,593,609,626,642,659,676,693,710,727,743,759,776,793,810,826,843,860,911]},{"start":[242,264],"end":[1014,237],"points":[[242,264],[298,326],[352,381],[399,424],[449,461],[501,492],[559,518],[620,546],[679,572],[738,590],[801,603],[865,610],[920,611],[960,612],[998,612],[1034,607],[1062,593],[1081,569],[1099,524],[1117,465],[1130,406],[1135,354],[1133,322],[1128,304],[1123,290],[1118,280],[1115,275],[1114,273],[1112,272],[1110,271],[1104,269],[1095,267],[1084,265],[1075,263],[1065,261],[1053,257],[1044,254],[1033,249],[1023,243],[1016,239],[1014,237]],"dx":[772,-27],"dy":[772,-27],"length":1378.9479095352872,"timing":[9,26,42,59,76,92,109,126,143,159,176,193,210,226,243,260,277,293,310,326,343,360,377,393,410,427,443,460,476,493,510,527,543,560,577,594,610,627,644,661,677]},{"start":[1466,363],"end":[789,630],"points":[[1466,363],[1510,373],[1558,383],[1608,394],[1650,406],[1681,419],[1699,429],[1707,438],[1715,447],[1722,455],[1730,462],[1739,468],[1747,472],[1749,474],[1748,475],[1747,475],[1735,479],[1694,491],[1626,507],[1526,525],[1408,541],[1294,553],[1178,568],[1091,582],[1035,596],[1002,606],[985,611],[972,612],[961,613],[943,612],[921,610],[892,609],[863,612],[842,617],[827,623],[816,628],[808,630],[799,630],[793,630],[790,630],[789,630]],"dx":[-677,267],"dy":[-677,267],"length":1288.5821308526147,"timing":[12,28,45,61,78,95,112,128,145,161,178,195,212,228,263,265,279,295,312,329,346,362,379,396,413,429,446,462,480,496,513,529,546,562,579,596,613,630,646,663,679]},{"start":[445,658],"end":[822,1111],"points":[[445,658],[444,658],[442,658],[440,658],[439,658],[438,658],[437,661],[434,671],[434,693],[448,732],[476,782],[524,849],[594,927],[669,1000],[745,1072],[799,1127],[829,1162],[850,1185],[858,1195],[862,1199],[863,1200],[864,1200],[864,1199],[864,1198],[864,1197],[864,1193],[863,1190],[861,1187],[857,1179],[850,1165],[842,1150],[835,1135],[828,1121],[825,1113],[822,1111]],"dx":[377,453],"dy":[377,453],"length":812.8383903884622,"timing":[5,15,25,42,59,215,225,242,258,275,292,309,325,342,359,375,392,409,426,443,460,476,518,520,526,543,560,576,593,610,626,643,660,677,693]},{"start":[1193,933],"end":[2440,141],"points":[[1193,933],[1242,909],[1290,885],[1330,858],[1353,836],[1369,815],[1384,794],[1399,779],[1420,763],[1442,748],[1454,738],[1455,734],[1455,733],[1456,733],[1456,732],[1471,722],[1518,695],[1593,656],[1700,605],[1839,547],[1982,489],[2080,442],[2149,399],[2189,369],[2209,346],[2225,327],[2246,306],[2273,287],[2295,272],[2317,261],[2333,254],[2352,246],[2373,236],[2393,224],[2408,213],[2421,201],[2431,190],[2438,180],[2442,174],[2444,169],[2444,166],[2444,161],[2444,156],[2444,150],[2443,146],[2442,142],[2441,141],[2440,141]],"dx":[1247,-792],"dy":[1247,-792],"length":1517.2662013409451,"timing":[9,27,42,60,76,93,110,127,143,160,177,193,210,243,243,260,276,294,310,327,343,360,377,394,411,427,444,461,477,494,510,528,544,561,577,594,611,628,644,661,678,695,711,728,744,761,778,895]},{"start":[2135,239],"end":[1163,398],"points":[[2135,239],[2097,251],[2070,262],[2052,271],[2040,277],[2031,283],[2025,288],[2020,290],[2012,293],[2001,297],[1985,305],[1956,321],[1911,346],[1846,385],[1773,422],[1704,451],[1659,459],[1628,460],[1595,457],[1560,451],[1521,442],[1477,431],[1428,419],[1377,406],[1332,396],[1288,388],[1248,381],[1219,379],[1203,377],[1195,377],[1192,376],[1189,376],[1182,375],[1173,375],[1159,377],[1141,382],[1125,387],[1117,390],[1115,391],[1116,391],[1116,392],[1118,392],[1123,393],[1126,394],[1129,394],[1133,394],[1139,395],[1145,396],[1152,397],[1159,398],[1163,398]],"dx":[-972,159],"dy":[-972,159],"length":1132.3999025649357,"timing":[16,33,50,67,83,100,116,134,150,166,184,200,217,234,250,267,284,300,317,333,350,367,384,400,417,434,451,467,484,500,518,534,550,568,585,601,618,635,651,741,742,751,768,785,801,818,834,851,868,885,901]},{"start":[1151,417],"end":[417,980],"points":[[1151,417],[1147,422],[1145,425],[1145,426],[1144,427],[1142,430],[1139,435],[1138,442],[1138,451],[1139,456],[1140,458],[1140,460],[1138,464],[1129,474],[1114,488],[1087,514],[1048,551],[1007,595],[960,645],[911,688],[866,720],[827,746],[788,770],[742,797],[687,822],[624,846],[573,865],[551,875],[545,876],[545,877],[544,877],[540,879],[533,884],[523,890],[508,899],[488,910],[468,923],[457,932],[451,939],[448,942],[445,945],[440,949],[435,953],[431,958],[427,963],[424,967],[423,969],[422,971],[422,972],[421,972],[421,973],[420,976],[417,979],[417,980]],"dx":[-734,563],"dy":[-734,563],"length":953.949163277416,"timing":[6,23,39,56,109,123,139,156,173,190,206,223,240,257,273,290,306,324,340,357,373,390,407,424,440,457,474,490,507,526,540,557,574,591,607,624,640,657,674,691,707,724,741,758,774,791,808,824,920,924,927,942,958,975]},{"start":[4,699],"end":[645,421],"points":[[4,699],[68,712],[126,726],[128,727],[128,727],[131,726],[140,725],[170,721],[227,718],[290,712],[379,694],[481,661],[587,616],[689,565],[742,533],[767,512],[773,501],[773,494],[770,488],[766,483],[763,480],[760,478],[756,476],[750,473],[740,470],[730,467],[722,466],[716,465],[711,464],[705,461],[698,454],[692,447],[686,442],[683,439],[680,436],[675,434],[670,432],[664,430],[658,428],[653,426],[650,425],[647,423],[646,422],[645,422],[645,421],[645,421]],"dx":[641,-278],"dy":[641,-278],"length":984.7239437501385,"timing":[837.4000000953674,850,867.5,884,1106.9000000953674,1116.9000000953674,1133.5,1150.2000000476837,1167.8000001907349,1183.6000001430511,1200.2000000476837,1216.9000000953674,1233.6000001430511,1250.6000001430511,1266.4000000953674,1283,1299.8000001907349,1316.9000000953674,1333.6000001430511,1350.7000000476837,1366.7000000476837,1383.6000001430511,1400.7000000476837,1417,1433.8000001907349,1450.4000000953674,1467.7000000476837,1483.7000000476837,1500.4000000953674,1517,1534.8000001907349,1550.3000001907349,1566.9000000953674,1584,1599.6000001430511,1616.4000000953674,1633.6000001430511,1650.8000001907349,1667.6000001430511,1683.8000001907349,1700.5,1718.2000000476837,1734.7000000476837,1750.8000001907349,1767.2000000476837,1784.1000001430511]},{"start":[645,421],"end":[509,122],"points":[[645,421],[642,419],[634,409],[617,379],[593,334],[572,293],[558,263],[551,248],[548,240],[546,234],[542,228],[540,223],[537,219],[535,215],[533,210],[530,201],[526,190],[523,177],[519,161],[515,147],[512,137],[511,131],[510,127],[509,124],[509,122],[509,122],[509,122]],"dx":[-136,-299],"dy":[-136,-299],"length":331.33410509355616,"timing":[313.09999990463257,324.90000009536743,341.90000009536743,358.40000009536743,375.09999990463257,391.7000000476837,408.40000009536743,425,441.7000000476837,458.40000009536743,475.09999990463257,491.7000000476837,508.40000009536743,525.7999999523163,541.7000000476837,558.5,575.7999999523163,591.7999999523163,608.5,625.5,641.9000000953674,658.7000000476837,675.2999999523163,692.2999999523163,708.5,722.7999999523163,741]},{"start":[136,573],"end":[1396,564],"points":[[136,573],[141,573],[149,571],[156,569],[161,568],[163,568],[165,568],[166,568],[166,568],[166,568],[166,567],[168,567],[172,565],[187,561],[238,549],[378,532],[547,524],[743,511],[807,505],[883,499],[959,496],[1014,504],[1052,519],[1079,533],[1093,539],[1107,542],[1111,542],[1118,542],[1122,543],[1126,546],[1129,550],[1129,552],[1130,552],[1184,552],[1265,555],[1298,561],[1335,566],[1358,570],[1373,573],[1380,574],[1382,575],[1385,575],[1389,575],[1395,576],[1400,577],[1406,579],[1408,579],[1410,580],[1408,579],[1403,574],[1399,570],[1396,567],[1395,565],[1395,564],[1395,564],[1395,564],[1396,564]],"dx":[1260,-9],"dy":[1260,-9],"length":1319.8248076716689,"timing":[14,32,48,66,82,99,116,132,156,172,182,198,215,232,249,265,283,317,332,348,365,382,399,415,432,448,465,482,499,515,532,549,740,765,782,799,816,832,848,865,882,899,916,931,948,965,982,999,1015,1031,1049,1065,1082,1098,1115,1132,1152]},{"start":[1398,564],"end":[630,225],"points":[[1398,564],[1396,564],[1379,559],[1276,512],[1103,408],[1025,360],[912,295],[819,250],[786,237],[757,226],[739,219],[729,215],[721,210],[714,206],[708,202],[702,198],[696,195],[690,192],[687,189],[682,188],[679,187],[675,187],[673,190],[669,195],[665,203],[662,207],[658,209],[656,210],[653,210],[650,210],[647,211],[643,212],[641,214],[639,216],[637,217],[636,217],[635,217],[634,217],[633,217],[632,217],[632,218],[632,218],[632,219],[632,220],[632,221],[631,223],[631,224],[630,225],[630,225],[630,225]],"dx":[-768,-339],"dy":[-768,-339],"length":883.9491598609733,"timing":[245,258,274,292,308,324,341,358,375,392,408,424,442,458,474,491,507,525,542,558,574,591,608,625,641,658,674,692,708,724,741,758,775,791,808,824,842,858,875,891,909,924,942,958,974,991,1008,1025,1041,1058]},{"start":[634,228],"end":[1244,442],"points":[[634,228],[655,242],[703,274],[752,305],[799,333],[846,358],[931,388],[953,393],[987,397],[1004,398],[1015,398],[1025,398],[1035,398],[1039,398],[1043,398],[1046,398],[1050,398],[1058,399],[1081,407],[1102,419],[1119,430],[1136,443],[1147,451],[1153,455],[1158,459],[1158,459],[1171,458],[1184,456],[1231,446],[1232,445],[1239,445],[1240,445],[1241,444],[1242,444],[1243,443],[1244,443],[1244,443],[1244,442],[1244,442]],"dx":[610,214],"dy":[610,214],"length":673.7695195581215,"timing":[284,297,314,330,346,363,393,397,413,430,446,463,480,496,513,530,547,563,580,596,613,630,646,663,680,925,946,963,1043,1047,1103,1113,1129,1147,1163,1180,1197,1213,1267]},{"start":[1243,442],"end":[1115,573],"points":[[1243,442],[1243,442],[1240,444],[1233,448],[1219,458],[1204,472],[1178,500],[1168,512],[1162,520],[1157,526],[1156,528],[1155,529],[1155,530],[1152,532],[1146,538],[1139,547],[1128,562],[1120,574],[1117,579],[1115,583],[1113,584],[1113,585],[1113,585],[1113,585],[1113,585],[1113,585],[1113,585],[1113,584],[1113,584],[1113,584],[1113,582],[1113,580],[1114,577],[1115,575],[1115,574],[1115,573]],"dx":[-128,131],"dy":[-128,131],"length":208.13508970851046,"timing":[224,246,262,280,297,313,329,346,362,380,396,412,429,446,463,483,496,512,528,546,563,579,596,620,653,726,746,763,848,863,879,896,912,929,946,962]},{"start":[1115,573],"end":[1074,451],"points":[[1115,573],[1115,571],[1115,562],[1110,542],[1101,514],[1094,496],[1086,476],[1082,467],[1080,461],[1078,458],[1078,457],[1078,457],[1077,456],[1077,456],[1077,455],[1076,454],[1076,454],[1075,454],[1075,454],[1074,454],[1074,453],[1074,452],[1074,451],[1074,451]],"dx":[-41,-122],"dy":[-41,-122],"length":131.48766913450282,"timing":[286,297,313,330,347,364,380,397,413,430,447,463,480,497,514,530,547,563,580,597,614,631,647,681]},{"start":[1074,452],"end":[1194,815],"points":[[1074,452],[1099,510],[1123,578],[1142,635],[1157,674],[1170,708],[1176,729],[1179,743],[1179,753],[1179,758],[1177,762],[1177,764],[1176,764],[1176,765],[1176,765],[1176,766],[1176,767],[1176,770],[1176,777],[1180,791],[1184,804],[1188,819],[1190,827],[1191,832],[1192,834],[1193,835],[1193,835],[1193,834],[1193,831],[1193,829],[1193,827],[1193,825],[1193,823],[1193,822],[1193,821],[1193,820],[1193,817],[1194,816],[1194,816],[1194,815]],"dx":[120,363],"dy":[120,363],"length":426.26442356573455,"timing":[308,331,348,365,381,398,414,432,448,464,481,498,514,531,548,564,581,597,615,631,647,664,681,698,714,731,752,765,781,798,814,831,847,865,881,898,915,932,948,981]},{"start":[1193,814],"end":[980,661],"points":[[1193,814],[1177,799],[1156,778],[1113,737],[1087,713],[1055,687],[1023,667],[1007,657],[1000,654],[995,651],[993,650],[992,650],[991,650],[990,650],[990,650],[989,650],[989,650],[988,651],[988,652],[987,653],[986,654],[986,654],[985,655],[985,655],[983,657],[982,658],[981,659],[981,660],[980,661],[980,661]],"dx":[-213,-153],"dy":[-213,-153],"length":278.67327023333957,"timing":[307,329,345,363,379,395,412,429,446,463,479,495,512,529,546,562,579,595,613,628,645,662,680,696,712,729,745,762,779,829]},{"start":[980,660],"end":[834,478],"points":[[980,660],[978,655],[964,632],[949,608],[931,578],[919,562],[907,547],[902,542],[895,535],[885,527],[875,519],[867,511],[857,500],[851,495],[845,490],[842,487],[841,486],[840,486],[840,485],[839,484],[839,483],[838,481],[837,480],[836,478],[835,478],[834,478],[834,478]],"dx":[-146,-182],"dy":[-146,-182],"length":237.1487699459105,"timing":[326,338,354,371,388,405,421,438,455,472,488,504,521,538,555,571,588,604,621,638,655,671,689,706,722,738,771]},{"start":[836,479],"end":[1174,671],"points":[[836,479],[878,518],[943,578],[1000,626],[1067,677],[1102,700],[1122,712],[1135,718],[1149,721],[1156,720],[1161,710],[1166,701],[1170,696],[1172,693],[1173,691],[1174,691],[1174,691],[1174,691],[1174,688],[1174,687],[1174,685],[1174,684],[1174,684],[1174,683],[1174,683],[1174,681],[1174,680],[1174,678],[1174,675],[1174,673],[1174,672],[1174,672],[1174,671],[1174,671]],"dx":[338,192],"dy":[338,192],"length":460.1265556381538,"timing":[302,318,334,351,368,385,402,418,434,451,468,485,501,518,534,551,568,608,635,652,668,683,701,718,735,751,767,784,801,818,834,851,868,885]},{"start":[1174,671],"end":[146,288],"points":[[1174,671],[1170,667],[1144,649],[1048,592],[894,513],[757,454],[542,374],[417,331],[327,296],[264,267],[241,253],[227,244],[222,239],[221,237],[220,237],[220,237],[220,238],[219,239],[217,242],[216,244],[214,246],[212,248],[208,251],[201,255],[187,262],[177,266],[170,269],[166,271],[162,273],[159,274],[158,275],[157,276],[156,276],[156,277],[154,279],[153,281],[151,284],[149,286],[148,287],[147,287],[147,288],[146,288],[146,288]],"dx":[-1028,-383],"dy":[-1028,-383],"length":1146.419960341588,"timing":[260,279,296,313,329,346,363,379,396,413,430,446,462,480,496,559,580,596,613,629,646,662,680,697,713,729,746,763,779,796,813,830,846,862,879,896,913,930,946,963,980,997,1046]},{"start":[147,288],"end":[1534,574],"points":[[147,288],[191,282],[381,279],[659,335],[883,401],[1053,455],[1218,506],[1294,527],[1380,548],[1453,568],[1497,583],[1527,596],[1534,599],[1549,605],[1552,605],[1552,604],[1552,603],[1552,603],[1553,602],[1553,601],[1553,601],[1553,599],[1550,595],[1545,589],[1540,580],[1537,575],[1536,573],[1536,572],[1535,572],[1535,572],[1535,572],[1535,572],[1535,572],[1535,573],[1534,573],[1534,574],[1534,574]],"dx":[1387,286],"dy":[1387,286],"length":1494.2138740850928,"timing":[241,265,281,297,315,331,347,364,380,398,415,431,450,465,481,686,697,714,731,748,763,781,797,815,831,848,864,881,898,914,978,998,1014,1030,1048,1064,1097]},{"start":[1534,574],"end":[1651,813],"points":[[1534,574],[1534,579],[1534,592],[1532,613],[1532,642],[1532,667],[1533,693],[1539,712],[1542,719],[1550,731],[1558,740],[1565,745],[1578,754],[1588,760],[1603,768],[1613,774],[1617,776],[1621,778],[1622,779],[1625,780],[1631,784],[1633,787],[1642,797],[1647,804],[1650,810],[1651,812],[1651,813]],"dx":[117,239],"dy":[117,239],"length":294.1938377342415,"timing":[286,299,315,332,350,366,382,399,415,432,448,465,482,499,515,533,550,566,583,599,615,633,649,666,682,699,716]},{"start":[1650,813],"end":[1070,720],"points":[[1650,813],[1650,813],[1649,813],[1648,812],[1646,811],[1643,810],[1639,807],[1630,803],[1614,797],[1589,789],[1557,785],[1524,782],[1487,780],[1431,775],[1355,760],[1295,743],[1265,733],[1247,727],[1232,721],[1220,717],[1208,716],[1192,715],[1169,715],[1155,715],[1145,715],[1132,715],[1126,715],[1118,715],[1113,716],[1108,717],[1104,717],[1103,717],[1102,718],[1102,718],[1101,719],[1097,721],[1092,723],[1090,723],[1084,723],[1081,722],[1080,721],[1078,721],[1078,720],[1076,720],[1074,720],[1073,720],[1071,720],[1070,720],[1070,720]],"dx":[-580,-93],"dy":[-580,-93],"length":597.4222226690067,"timing":[156,173,181,199,215,232,248,265,282,298,315,331,349,365,381,398,415,431,447,465,482,498,515,532,548,565,581,599,615,632,648,665,682,700,715,732,748,767,782,798,815,831,848,865,882,898,915,932,965]},{"start":[1069,720],"end":[929,695],"points":[[1069,720],[1061,715],[1052,710],[1041,707],[1030,706],[1020,706],[1011,706],[996,704],[985,703],[970,700],[958,697],[952,696],[947,695],[945,695],[943,695],[941,695],[939,695],[935,695],[931,696],[930,696],[929,696],[929,695],[929,695]],"dx":[-140,-25],"dy":[-140,-25],"length":145.32609659597105,"timing":[289,312,328,346,362,379,395,412,429,445,461,478,496,512,529,545,562,578,596,612,628,644,695]},{"start":[927,695],"end":[410,270],"points":[[927,695],[888,677],[840,649],[763,592],[686,527],[598,449],[579,433],[530,389],[504,363],[498,352],[493,344],[491,333],[491,328],[493,318],[492,318],[483,312],[451,291],[435,281],[425,275],[417,270],[414,268],[413,267],[413,267],[413,267],[412,267],[411,267],[410,266],[409,264],[408,263],[408,263],[408,263],[409,264],[410,266],[410,266],[410,267],[410,269],[410,269],[410,270],[410,270]],"dx":[-517,-425],"dy":[-517,-425],"length":698.2823185872633,"timing":[261,280,296,313,329,346,363,379,397,413,429,446,462,480,714,730,746,762,779,796,813,829,846,863,879,896,913,929,945,962,1006,1029,1045,1062,1079,1096,1113,1129,1163]},{"start":[410,270],"end":[1339,47],"points":[[410,270],[410,270],[410,269],[412,269],[413,269],[418,268],[423,268],[428,268],[435,267],[447,266],[493,261],[649,258],[868,258],[1108,263],[1267,263],[1439,247],[1481,240],[1520,233],[1560,220],[1574,205],[1581,185],[1582,171],[1583,163],[1583,155],[1583,153],[1583,153],[1581,152],[1568,145],[1545,127],[1522,112],[1505,101],[1486,91],[1468,83],[1453,75],[1425,57],[1404,38],[1386,21],[1377,11],[1368,0],[1366,6],[1364,10],[1362,15],[1358,22],[1356,26],[1353,30],[1349,35],[1345,41],[1343,44],[1341,46],[1340,47],[1339,47],[1339,47]],"dx":[929,-223],"dy":[929,-223],"length":1551.6672398319122,"timing":[104,119,136,152,168,185,202,219,235,252,269,286,302,318,335,352,369,385,402,419,435,452,469,485,502,542,552,568,585,601,619,635,652,668,685,702,719,735,753,852,869,885,902,918,935,952,969,985,1001,1018,1035,1052]},{"start":[1338,48],"end":[602,846],"points":[[1338,48],[1316,78],[1276,133],[1237,182],[1192,239],[1151,293],[1091,370],[1029,451],[966,547],[930,606],[905,647],[887,675],[864,707],[848,723],[830,740],[799,771],[775,791],[749,810],[730,820],[710,829],[695,833],[689,834],[683,835],[680,835],[676,836],[673,839],[668,843],[664,846],[657,850],[653,852],[646,853],[636,853],[632,854],[630,854],[625,855],[623,856],[622,856],[619,856],[616,855],[612,853],[608,851],[605,849],[603,847],[602,846],[602,846]],"dx":[-736,798],"dy":[-736,798],"length":1128.087695948969,"timing":[280,296,313,329,346,362,380,396,413,429,446,463,479,496,512,530,546,562,579,602,613,630,646,662,679,696,713,729,745,763,780,798,812,829,846,863,879,896,912,929,946,963,979,996,1013]},{"start":[602,845],"end":[499,690],"points":[[602,845],[602,844],[602,841],[604,838],[606,830],[608,819],[609,801],[609,790],[608,786],[605,782],[603,781],[602,781],[598,780],[592,778],[579,773],[563,764],[551,756],[537,745],[530,738],[523,730],[519,725],[517,721],[514,715],[512,710],[508,698],[505,694],[503,690],[502,689],[501,689],[501,689],[500,689],[500,690],[499,690],[499,690]],"dx":[-103,-155],"dy":[-103,-155],"length":214.41307012453964,"timing":[220,232,248,266,282,298,316,332,349,365,382,399,415,432,448,465,482,499,515,532,548,566,582,598,615,631,649,666,682,698,715,732,749,782]},{"start":[500,690],"end":[1165,757],"points":[[500,690],[525,683],[627,670],[780,667],[903,665],[1067,659],[1212,647],[1293,642],[1380,648],[1417,662],[1430,669],[1436,675],[1441,680],[1441,683],[1438,687],[1431,691],[1422,695],[1412,698],[1402,702],[1391,703],[1377,705],[1362,708],[1350,711],[1335,717],[1302,731],[1281,738],[1241,745],[1220,745],[1206,745],[1194,745],[1188,745],[1185,745],[1183,745],[1181,747],[1179,748],[1177,750],[1176,753],[1173,755],[1170,756],[1168,757],[1166,757],[1165,757],[1165,757]],"dx":[665,67],"dy":[665,67],"length":1248.4607107711015,"timing":[242,262,279,296,313,329,346,362,379,396,411,429,446,463,479,496,512,529,545,563,579,595,612,629,647,662,679,696,713,729,746,762,778,796,812,829,846,862,879,896,912,929,962]},{"start":[1212,809],"end":[1309,147],"points":[[1212,809],[1212,809],[1212,809],[1212,807],[1212,801],[1211,782],[1198,717],[1167,556],[1152,441],[1143,351],[1141,288],[1141,231],[1142,208],[1146,186],[1152,168],[1165,136],[1175,118],[1183,106],[1194,92],[1204,82],[1214,73],[1225,64],[1235,58],[1246,53],[1254,51],[1260,51],[1267,51],[1276,58],[1288,78],[1297,95],[1304,110],[1311,126],[1313,133],[1314,137],[1314,138],[1314,139],[1314,139],[1313,140],[1311,143],[1310,144],[1309,146],[1309,147],[1309,147]],"dx":[97,-662],"dy":[97,-662],"length":933.2904757660384,"timing":[203,220,228,246,263,280,296,312,328,346,363,379,395,413,429,446,462,479,496,513,529,546,562,579,596,613,629,646,663,680,695,712,729,746,762,779,795,813,830,846,862,879,896]},{"start":[1309,148],"end":[1326,614],"points":[[1309,148],[1309,154],[1309,171],[1302,212],[1291,259],[1282,292],[1274,331],[1270,350],[1268,406],[1268,435],[1273,485],[1277,512],[1279,528],[1281,539],[1282,544],[1282,545],[1283,546],[1283,546],[1283,547],[1283,548],[1283,551],[1285,558],[1289,565],[1295,574],[1299,581],[1304,588],[1306,591],[1309,592],[1310,593],[1312,593],[1314,596],[1317,600],[1319,604],[1321,608],[1323,611],[1325,613],[1326,613],[1326,614],[1326,614]],"dx":[17,466],"dy":[17,466],"length":487.68445745852756,"timing":[282,297,313,330,347,363,380,396,414,430,447,463,479,497,513,530,547,575,579,597,613,630,646,663,680,696,713,730,747,763,780,797,813,830,846,864,880,896,1046]},{"start":[1438,260],"end":[1333,423],"points":[[1438,260],[1427,274],[1410,294],[1396,312],[1387,323],[1380,332],[1377,336],[1375,338],[1374,339],[1371,342],[1366,348],[1359,357],[1351,367],[1344,378],[1338,386],[1334,393],[1332,396],[1332,397],[1331,398],[1331,399],[1331,401],[1330,403],[1330,406],[1329,407],[1329,408],[1329,409],[1329,410],[1329,410],[1329,411],[1330,413],[1331,415],[1332,417],[1333,420],[1333,422],[1333,423],[1333,423]],"dx":[-105,163],"dy":[-105,163],"length":201.61596077318816,"timing":[302,327,343,361,377,393,410,427,444,460,477,493,510,527,544,560,577,593,610,627,643,660,677,693,710,727,744,760,776,794,811,827,844,861,877,910]},{"start":[1333,422],"end":[554,579],"points":[[1333,422],[1327,423],[1309,433],[1253,458],[1158,489],[1016,524],[871,545],[774,553],[673,557],[620,557],[586,557],[557,553],[547,550],[539,548],[536,547],[536,547],[536,547],[536,547],[537,548],[537,549],[538,550],[538,550],[538,551],[538,551],[540,554],[543,559],[546,568],[548,573],[551,577],[552,579],[553,580],[553,580],[553,580],[553,579],[553,579],[553,579],[554,579],[554,579]],"dx":[-779,157],"dy":[-779,157],"length":857.0126572046529,"timing":[246,263,280,297,313,329,347,363,380,396,413,430,447,463,480,496,562,580,597,614,630,647,664,680,697,713,730,746,763,781,797,813,830,847,864,880,896,930]},{"start":[555,579],"end":[841,510],"points":[[555,579],[572,569],[628,540],[707,506],[770,485],[797,478],[820,473],[837,471],[843,470],[844,470],[844,470],[844,471],[844,472],[844,472],[844,473],[844,474],[843,475],[843,476],[843,479],[842,484],[842,490],[842,494],[842,499],[842,501],[842,502],[842,503],[842,504],[842,505],[842,506],[842,507],[842,508],[842,509],[841,509],[841,510],[841,510],[841,510]],"dx":[286,-69],"dy":[286,-69],"length":352.34328197427044,"timing":[243,263,279,295,312,329,345,363,379,395,420,446,462,479,495,513,529,545,562,579,595,613,629,645,662,679,696,712,729,745,763,779,795,812,829,849]},{"start":[841,510],"end":[867,650],"points":[[841,510],[841,511],[841,511],[841,516],[841,526],[846,551],[849,563],[852,572],[855,579],[856,583],[857,585],[858,587],[858,590],[860,596],[862,602],[863,608],[864,612],[865,616],[866,619],[866,625],[866,636],[866,641],[867,646],[867,648],[867,649],[867,650]],"dx":[26,140],"dy":[26,140],"length":143.8016437077714,"timing":[258,280,296,312,329,346,363,379,396,412,429,446,463,479,496,513,529,546,562,579,598,614,629,645,662,679]},{"start":[867,649],"end":[716,368],"points":[[867,649],[867,648],[863,638],[856,619],[804,503],[781,467],[756,430],[741,411],[732,400],[727,394],[724,392],[723,391],[722,391],[722,391],[721,390],[719,389],[719,389],[718,387],[717,385],[716,383],[716,381],[715,381],[715,380],[715,380],[715,380],[715,378],[716,375],[716,373],[716,371],[716,370],[716,370],[716,370],[716,369],[716,369],[716,368]],"dx":[-151,-281],"dy":[-151,-281],"length":325.2859057759278,"timing":[285,299,315,332,349,365,382,398,415,432,449,465,481,498,515,532,548,564,582,599,615,632,648,681,699,715,732,748,766,782,798,827,849,865,882]},{"start":[716,369],"end":[782,463],"points":[[716,369],[717,370],[719,379],[724,393],[730,409],[734,419],[740,430],[743,436],[745,439],[748,442],[752,445],[754,448],[760,451],[765,455],[771,459],[776,463],[778,464],[780,464],[780,464],[781,464],[781,464],[781,463],[781,463],[782,463],[782,463],[782,463],[782,463]],"dx":[66,94],"dy":[66,94],"length":123.01169806436971,"timing":[299,315,332,349,366,383,399,416,432,449,466,482,498,516,532,549,565,582,599,618,640,666,682,700,716,733,783]},{"start":[782,463],"end":[1242,321],"points":[[782,463],[782,463],[782,462],[782,462],[782,461],[783,457],[791,449],[808,436],[849,413],[919,387],[1035,354],[1095,336],[1143,324],[1190,315],[1212,314],[1224,314],[1234,314],[1237,314],[1239,314],[1240,314],[1240,315],[1240,315],[1240,315],[1240,316],[1240,316],[1240,317],[1240,317],[1241,318],[1241,319],[1242,319],[1242,320],[1242,320],[1242,321]],"dx":[460,-142],"dy":[460,-142],"length":499.5336380834801,"timing":[231,238,251,267,284,300,317,334,350,367,384,400,417,434,451,467,483,501,517,534,550,567,583,600,617,634,650,667,684,700,717,733,750]},{"start":[1242,321],"end":[1307,212],"points":[[1242,321],[1242,320],[1242,320],[1242,319],[1243,315],[1248,308],[1256,298],[1265,287],[1274,276],[1280,269],[1284,265],[1288,260],[1291,257],[1295,254],[1298,252],[1298,251],[1301,249],[1303,247],[1304,244],[1306,241],[1307,238],[1307,235],[1308,234],[1308,233],[1308,232],[1308,232],[1308,231],[1308,229],[1308,226],[1308,223],[1308,219],[1308,215],[1307,214],[1307,213],[1307,213],[1307,212]],"dx":[65,-109],"dy":[65,-109],"length":134.27724720218833,"timing":[245,263,279,296,312,328,346,362,378,395,413,429,446,463,479,500,512,529,545,562,578,596,612,629,645,662,679,696,712,729,746,762,779,795,812,829]},{"start":[1307,212],"end":[1229,617],"points":[[1307,212],[1307,212],[1306,213],[1306,213],[1304,214],[1304,214],[1303,214],[1302,215],[1302,215],[1301,216],[1283,236],[1273,250],[1261,266],[1238,308],[1225,342],[1215,378],[1210,420],[1208,437],[1205,455],[1199,470],[1193,483],[1190,490],[1187,496],[1184,501],[1184,505],[1183,509],[1183,512],[1183,517],[1183,523],[1183,534],[1183,545],[1185,554],[1187,562],[1189,567],[1189,568],[1190,568],[1192,570],[1193,571],[1196,576],[1200,582],[1203,585],[1207,590],[1208,592],[1211,594],[1212,596],[1214,598],[1216,601],[1218,604],[1222,609],[1224,612],[1226,614],[1227,616],[1228,616],[1228,617],[1229,617],[1229,617],[1229,617]],"dx":[-78,405],"dy":[-78,405],"length":454.6247401615704,"timing":[124,140,149,166,183,199,216,233,249,266,293,300,316,333,349,366,382,400,416,433,449,465,483,499,516,532,550,566,582,599,616,632,650,666,682,699,716,733,749,766,782,799,816,846,866,882,899,916,932,949,965,983,999,1016,1032,1050,1071]},{"start":[1229,617],"end":[812,437],"points":[[1229,617],[1229,616],[1229,616],[1227,614],[1227,613],[1224,611],[1221,610],[1217,609],[1214,609],[1210,608],[1205,607],[1195,604],[1181,599],[1170,592],[1156,583],[1143,573],[1126,561],[1105,550],[1077,540],[1033,527],[984,516],[951,507],[922,498],[898,490],[884,486],[869,481],[862,479],[854,476],[848,475],[844,473],[839,472],[835,471],[830,469],[826,467],[821,463],[819,459],[818,454],[816,449],[814,443],[813,441],[812,439],[812,439],[812,439],[812,438],[812,438],[812,437],[812,437]],"dx":[-417,-180],"dy":[-417,-180],"length":469.53204798998746,"timing":[90,97,112,129,146,163,179,196,213,230,246,262,279,296,313,329,346,363,379,396,413,429,445,462,479,496,513,529,545,563,579,596,612,629,646,663,679,695,713,729,746,762,779,802,813,829,862]},{"start":[813,437],"end":[1587,141],"points":[[813,437],[817,434],[859,410],[931,370],[1042,324],[1208,276],[1273,269],[1324,265],[1374,264],[1386,263],[1403,262],[1414,260],[1424,258],[1431,256],[1437,256],[1444,256],[1450,256],[1456,256],[1461,256],[1472,249],[1480,240],[1491,227],[1501,216],[1514,201],[1522,191],[1530,181],[1536,169],[1541,156],[1544,149],[1547,143],[1548,140],[1550,138],[1552,138],[1553,138],[1554,138],[1556,138],[1560,140],[1566,142],[1570,144],[1575,145],[1578,146],[1581,148],[1582,148],[1583,148],[1583,148],[1583,148],[1584,148],[1584,148],[1584,148],[1585,146],[1585,145],[1586,143],[1586,142],[1587,141],[1587,141],[1587,141]],"dx":[774,-296],"dy":[774,-296],"length":877.083933712219,"timing":[337,349,367,383,400,417,433,449,467,483,500,516,533,550,566,583,599,616,633,650,666,682,699,717,733,749,766,783,800,816,833,849,867,883,899,916,933,949,967,983,1000,1016,1033,1050,1066,1082,1105,1146,1166,1183,1199,1216,1233,1250,1266,1300]},{"start":[1585,141],"end":[1041,123],"points":[[1585,141],[1581,141],[1575,141],[1553,141],[1508,141],[1460,144],[1423,150],[1367,159],[1317,160],[1264,158],[1232,150],[1198,141],[1179,135],[1136,131],[1122,131],[1094,131],[1074,136],[1061,139],[1048,142],[1041,144],[1038,145],[1037,145],[1036,145],[1036,144],[1036,141],[1036,138],[1037,135],[1038,132],[1039,129],[1039,126],[1040,124],[1040,123],[1041,123],[1041,123],[1041,123]],"dx":[-544,-18],"dy":[-544,-18],"length":579.0738184959039,"timing":[212,219,233,249,267,284,300,316,333,350,367,384,400,425,433,450,467,483,499,517,534,550,567,583,600,617,633,650,666,683,700,717,733,750,784]},{"start":[1041,124],"end":[278,742],"points":[[1041,124],[1039,125],[1024,139],[998,164],[951,212],[877,291],[809,371],[736,460],[682,522],[619,593],[561,648],[501,694],[461,718],[424,736],[392,751],[366,764],[344,776],[329,789],[319,800],[305,819],[294,835],[286,847],[277,859],[269,864],[265,865],[260,865],[258,864],[256,855],[256,847],[256,838],[259,823],[261,812],[263,798],[266,786],[268,776],[270,769],[272,763],[272,760],[272,758],[272,758],[272,758],[272,757],[272,756],[272,754],[273,750],[275,745],[276,744],[277,743],[277,742],[278,742],[278,742],[278,742]],"dx":[-763,618],"dy":[-763,618],"length":1218.5869591385465,"timing":[236,247,264,281,297,314,330,348,364,381,398,414,430,447,464,481,497,514,531,547,564,580,597,614,631,647,663,680,697,714,731,747,764,781,797,814,830,848,864,881,897,914,931,948,964,981,997,1014,1031,1047,1064,1097]},{"start":[278,742],"end":[325,45],"points":[[278,742],[278,741],[280,735],[288,714],[300,679],[311,634],[321,575],[327,517],[334,454],[339,414],[348,351],[357,319],[357,319],[357,310],[354,293],[352,273],[352,257],[351,240],[351,233],[351,226],[351,223],[351,217],[351,206],[351,189],[351,175],[351,160],[351,154],[351,148],[351,146],[351,144],[350,138],[349,132],[348,124],[347,116],[346,110],[345,104],[344,100],[343,98],[341,97],[340,96],[338,95],[337,93],[335,89],[334,85],[333,80],[333,76],[332,72],[330,69],[329,68],[329,66],[329,65],[329,63],[328,62],[328,60],[327,58],[326,57],[325,56],[324,54],[324,53],[324,52],[324,51],[324,50],[325,49],[325,48],[325,47],[325,45],[325,45]],"dx":[47,-697],"dy":[47,-697],"length":714.1479036923148,"timing":[271,280,298,314,329,346,364,381,397,414,431,448,748,764,781,797,814,830,848,864,881,897,913,931,948,964,980,997,1013,1030,1048,1064,1079,1096,1113,1130,1146,1164,1180,1198,1214,1229,1246,1264,1281,1298,1313,1330,1347,1363,1381,1397,1414,1430,1448,1464,1480,1497,1513,1531,1547,1563,1580,1598,1614,1631,1697]},{"start":[325,45],"end":[1009,821],"points":[[325,45],[336,51],[373,79],[399,102],[519,217],[614,318],[701,417],[747,476],[802,541],[845,591],[884,635],[920,678],[951,720],[967,748],[984,781],[990,799],[994,815],[995,823],[995,828],[995,831],[995,834],[996,836],[996,837],[996,839],[996,841],[996,842],[996,843],[996,844],[996,845],[996,845],[996,845],[996,844],[997,842],[997,839],[999,835],[1000,832],[1001,831],[1002,830],[1003,829],[1004,828],[1005,827],[1006,826],[1007,824],[1008,823],[1009,822],[1009,822],[1009,822],[1009,821],[1009,821]],"dx":[684,776],"dy":[684,776],"length":1086.8445513230902,"timing":[266,281,297,313,331,347,364,380,397,413,431,446,464,480,496,514,531,546,564,581,598,613,631,646,663,681,697,714,730,749,766,781,796,813,831,847,864,881,897,914,930,948,964,980,997,1014,1031,1046,1080]},{"start":[1009,821],"end":[840,201],"points":[[1009,821],[1009,821],[1009,820],[1008,818],[999,808],[963,764],[906,688],[867,629],[840,581],[817,532],[809,509],[802,477],[802,470],[802,456],[802,437],[802,420],[802,400],[804,386],[806,371],[809,361],[810,356],[811,355],[812,353],[815,347],[819,336],[825,317],[832,296],[835,282],[838,266],[839,259],[840,248],[841,240],[841,233],[841,225],[842,217],[842,210],[842,204],[842,201],[842,201],[841,201],[841,201],[840,201]],"dx":[-169,-620],"dy":[-169,-620],"length":689.3513976052976,"timing":[225,241,257,274,290,306,324,340,356,373,389,412,423,439,456,473,489,506,522,540,556,574,590,606,622,640,657,674,689,706,723,740,757,774,790,806,823,840,857,873,890,913]},{"start":[840,201],"end":[542,616],"points":[[840,201],[840,201],[840,201],[840,201],[840,201],[840,201],[838,202],[835,205],[827,213],[804,236],[773,271],[737,316],[709,349],[672,394],[658,411],[632,442],[604,480],[589,502],[572,533],[564,549],[557,565],[554,573],[549,585],[548,592],[546,599],[545,604],[544,609],[543,611],[543,613],[543,613],[543,614],[543,614],[542,615],[542,615],[542,616]],"dx":[-298,415],"dy":[-298,415],"length":517.0012978960735,"timing":[159,174,183,199,216,233,249,266,282,299,316,333,350,366,382,399,415,432,449,466,483,499,516,532,549,566,583,599,616,633,650,666,683,699,716]},{"start":[542,616],"end":[1620,386],"points":[[542,616],[543,616],[544,614],[551,609],[587,589],[660,549],[767,494],[896,436],[1029,399],[1164,385],[1358,397],[1476,421],[1500,426],[1594,442],[1621,445],[1637,446],[1654,445],[1661,434],[1662,423],[1663,415],[1664,409],[1666,405],[1669,405],[1671,405],[1673,405],[1674,407],[1674,407],[1674,408],[1674,408],[1672,408],[1669,408],[1665,407],[1662,405],[1656,402],[1652,399],[1647,396],[1643,394],[1637,393],[1633,391],[1630,390],[1626,389],[1624,388],[1621,387],[1621,386],[1620,386],[1620,386]],"dx":[1078,-230],"dy":[1078,-230],"length":1279.5795336676704,"timing":[248,266,283,299,316,333,350,367,383,400,416,433,448,466,482,499,516,532,549,566,583,600,615,633,649,667,683,699,765,783,799,816,833,850,866,883,899,916,934,950,966,982,999,1015,1033,1066]},{"start":[1620,386],"end":[286,385],"points":[[1620,386],[1619,386],[1619,386],[1617,387],[1607,390],[1580,398],[1507,410],[1406,415],[1282,417],[1142,417],[986,424],[841,441],[760,453],[699,463],[644,469],[621,470],[603,471],[593,469],[588,464],[584,458],[577,450],[571,446],[564,443],[555,441],[545,441],[537,441],[531,441],[526,442],[522,442],[519,442],[515,440],[510,438],[503,436],[489,434],[473,432],[456,429],[444,427],[420,421],[403,418],[387,415],[371,414],[355,412],[340,410],[328,406],[315,403],[303,400],[295,397],[287,395],[282,393],[280,392],[280,390],[280,389],[280,388],[281,387],[282,386],[284,385],[284,385],[285,385],[286,385],[286,385],[286,385]],"dx":[-1334,-1],"dy":[-1334,-1],"length":1374.6730912897283,"timing":[191,199,214,231,247,265,280,298,314,331,348,364,381,397,414,431,447,464,481,496,514,531,548,563,580,596,614,631,647,665,681,698,714,731,746,764,781,798,814,831,847,864,880,897,913,930,948,964,981,997,1014,1031,1047,1064,1081,1097,1114,1131,1147,1164,1214]},{"start":[288,385],"end":[51,526],"points":[[288,385],[292,382],[300,379],[335,366],[382,357],[425,356],[458,357],[476,363],[489,372],[494,382],[495,392],[488,406],[475,417],[457,427],[421,445],[359,465],[286,482],[233,490],[188,496],[136,499],[95,502],[75,504],[66,505],[58,507],[55,508],[53,510],[52,512],[51,515],[51,518],[51,520],[51,521],[51,521],[51,522],[51,522],[51,523],[51,524],[51,525],[51,525],[51,526]],"dx":[-237,141],"dy":[-237,141],"length":716.3830417345321,"timing":[207,214,229,247,263,281,297,313,330,347,364,381,397,414,430,447,464,479,496,513,531,547,563,580,597,614,630,647,662,680,697,714,730,747,764,780,797,812,829]},{"start":[51,525],"end":[872,772],"points":[[51,525],[51,524],[59,515],[91,487],[105,477],[140,450],[167,434],[191,421],[216,412],[239,406],[255,405],[281,405],[342,420],[424,444],[490,465],[541,480],[591,498],[623,513],[642,531],[652,544],[660,560],[664,573],[666,583],[670,596],[676,611],[687,633],[704,655],[711,661],[719,666],[723,668],[727,669],[733,671],[739,673],[748,676],[757,679],[763,680],[772,684],[782,691],[795,705],[808,722],[816,737],[820,749],[826,762],[828,772],[829,786],[829,802],[829,808],[830,817],[830,821],[831,823],[831,824],[832,824],[832,824],[833,824],[835,821],[837,817],[839,811],[841,805],[844,801],[848,795],[851,791],[855,788],[858,785],[862,781],[864,780],[866,778],[868,776],[870,774],[871,773],[872,772],[872,772]],"dx":[821,247],"dy":[821,247],"length":1095.9954281414052,"timing":[99,110,128,147,159,176,194,210,227,244,260,277,294,311,327,344,360,377,394,410,427,444,461,477,494,511,528,544,561,576,594,611,626,644,660,677,693,711,726,744,760,778,794,811,827,843,860,878,894,909,927,944,961,977,994,1009,1027,1044,1060,1076,1094,1110,1127,1143,1159,1177,1195,1211,1227,1244,1277]},{"start":[871,772],"end":[756,55],"points":[[871,772],[871,771],[871,765],[868,754],[860,732],[846,690],[819,605],[795,511],[775,400],[765,288],[765,221],[765,123],[772,72],[778,40],[782,26],[784,16],[785,13],[786,11],[786,11],[786,11],[786,10],[786,11],[785,11],[784,13],[784,14],[782,18],[778,26],[775,32],[769,43],[765,48],[762,51],[761,52],[760,53],[759,53],[758,54],[757,54],[757,54],[757,55],[756,55],[756,55]],"dx":[-115,-717],"dy":[-115,-717],"length":834.4881033991884,"timing":[77,296,316,333,348,366,383,399,416,433,450,466,482,499,516,533,550,566,582,599,616,676,700,716,732,749,765,782,799,816,831,849,866,883,899,916,932,949,966,981]},{"start":[757,55],"end":[1176,712],"points":[[757,55],[776,94],[813,167],[866,268],[906,339],[939,394],[986,472],[1013,515],[1038,557],[1047,574],[1066,604],[1077,622],[1082,628],[1086,633],[1088,635],[1090,637],[1093,639],[1096,643],[1105,654],[1110,662],[1120,675],[1130,695],[1139,711],[1142,717],[1145,721],[1147,722],[1148,722],[1149,722],[1151,722],[1153,722],[1155,723],[1158,723],[1160,723],[1163,722],[1164,722],[1165,721],[1166,721],[1167,720],[1168,719],[1169,719],[1170,718],[1171,718],[1172,717],[1172,717],[1173,716],[1174,716],[1174,715],[1175,715],[1175,715],[1175,715],[1175,715],[1175,714],[1175,714],[1176,714],[1176,714],[1176,713],[1176,713],[1176,713],[1176,713],[1176,713],[1176,712],[1176,712],[1176,712]],"dx":[419,657],"dy":[419,657],"length":810.5455973454754,"timing":[274,297,315,332,348,365,381,398,415,432,448,465,481,498,515,532,548,564,582,597,615,631,648,665,680,698,715,731,749,765,781,798,814,832,849,865,881,898,915,932,947,964,981,998,1015,1032,1048,1067,1082,1098,1114,1131,1156,1182,1198,1221,1237,1248,1265,1282,1298,1315,1332]},{"start":[1176,711],"end":[1114,459],"points":[[1176,711],[1176,711],[1176,710],[1175,708],[1174,706],[1172,703],[1170,700],[1169,698],[1167,695],[1163,689],[1159,682],[1155,674],[1152,667],[1150,659],[1149,653],[1148,652],[1148,646],[1148,642],[1148,636],[1148,630],[1148,622],[1148,613],[1148,605],[1148,600],[1148,595],[1148,592],[1148,590],[1148,589],[1148,585],[1148,581],[1148,577],[1147,574],[1146,571],[1145,567],[1144,564],[1143,559],[1140,553],[1138,545],[1135,535],[1132,525],[1128,514],[1125,502],[1122,490],[1120,484],[1118,476],[1118,475],[1118,474],[1117,474],[1117,472],[1117,470],[1116,468],[1116,465],[1115,462],[1115,461],[1114,461],[1114,460],[1114,460],[1114,460],[1114,460],[1114,459]],"dx":[-62,-252],"dy":[-62,-252],"length":266.0578826128248,"timing":[111,119,131,148,165,181,198,215,232,248,265,281,298,315,332,348,365,381,398,415,431,448,465,481,498,514,531,549,565,581,598,614,632,648,665,681,698,715,731,748,764,782,798,815,832,848,864,881,898,915,931,948,964,981,998,1014,1032,1050,1083,1099]},{"start":[1114,459],"end":[845,820],"points":[[1114,459],[1114,459],[1113,457],[1113,457],[1111,456],[1108,456],[1099,460],[1084,474],[1067,493],[1047,519],[1028,545],[1010,571],[991,600],[971,630],[952,663],[935,694],[925,712],[919,724],[915,733],[913,737],[912,739],[911,740],[910,741],[908,743],[906,745],[901,750],[896,754],[890,761],[884,768],[881,771],[878,774],[876,775],[875,777],[872,780],[866,790],[860,799],[853,809],[848,816],[846,819],[845,819],[845,820],[845,820],[845,820]],"dx":[-269,361],"dy":[-269,361],"length":461.17800476512673,"timing":[203,218,234,250,267,283,300,317,334,350,367,383,400,417,434,450,467,484,501,517,534,550,567,584,600,616,634,651,667,684,700,717,734,750,767,783,800,817,834,850,866,898,939]},{"start":[845,818],"end":[1022,435],"points":[[845,818],[845,817],[846,814],[847,810],[848,807],[849,804],[853,791],[890,720],[902,694],[915,664],[942,602],[957,566],[977,524],[988,505],[994,496],[999,490],[1002,486],[1005,483],[1008,479],[1011,475],[1015,468],[1018,464],[1020,460],[1021,457],[1022,456],[1022,455],[1022,455],[1022,454],[1022,453],[1022,450],[1022,447],[1022,444],[1022,442],[1022,440],[1022,439],[1022,437],[1022,436],[1022,435]],"dx":[177,-383],"dy":[177,-383],"length":425.68279345954363,"timing":[108,117,133,150,166,186,259,311,318,334,350,366,383,400,416,434,450,467,483,501,517,534,549,566,584,600,617,633,651,667,683,700,717,733,750,767,784,836]},{"start":[1022,435],"end":[1515,39],"points":[[1022,435],[1021,436],[1021,437],[1020,437],[1020,438],[1019,439],[1018,440],[1018,440],[1018,440],[1018,440],[1018,438],[1021,433],[1031,417],[1056,388],[1095,353],[1167,303],[1221,273],[1279,244],[1315,227],[1354,209],[1371,201],[1383,197],[1392,193],[1398,192],[1402,190],[1405,189],[1408,188],[1413,186],[1417,182],[1420,179],[1424,174],[1427,170],[1433,159],[1435,150],[1442,124],[1448,114],[1459,101],[1465,97],[1472,93],[1472,92],[1482,78],[1491,66],[1501,55],[1506,50],[1509,46],[1511,44],[1512,43],[1513,43],[1513,42],[1514,41],[1514,41],[1514,40],[1514,40],[1514,40],[1514,39],[1515,39],[1515,39]],"dx":[493,-396],"dy":[493,-396],"length":669.9680510058563,"timing":[131,147,164,180,197,212,231,247,264,293,313,330,347,363,380,397,414,430,446,463,481,497,513,530,546,564,580,597,613,630,647,664,694,696,713,730,747,764,780,1289,1314,1331,1346,1363,1380,1397,1413,1429,1447,1464,1481,1496,1514,1532,1549,1564,1597]},{"start":[1514,39],"end":[194,515],"points":[[1514,39],[1511,40],[1492,54],[1429,101],[1301,195],[1211,253],[1112,300],[994,340],[871,375],[755,405],[674,424],[570,448],[494,462],[454,469],[428,475],[414,479],[404,482],[400,483],[399,484],[399,484],[397,484],[394,485],[382,488],[368,492],[342,499],[318,505],[279,511],[262,513],[251,514],[241,515],[237,515],[231,516],[225,516],[215,517],[208,518],[202,518],[199,518],[198,518],[197,518],[196,517],[195,516],[194,516],[194,515]],"dx":[-1320,476],"dy":[-1320,476],"length":1428.6256511552363,"timing":[236,251,267,283,300,316,334,350,366,382,400,416,433,450,466,484,500,517,533,550,804,816,833,850,867,883,901,917,933,950,965,983,1000,1017,1033,1050,1066,1084,1100,1117,1133,1150,1183]},{"start":[194,515],"end":[1525,171],"points":[[194,515],[198,511],[219,493],[259,465],[339,419],[420,386],[486,367],[569,349],[643,339],[709,330],[768,320],[834,300],[907,274],[995,244],[1094,219],[1160,209],[1215,203],[1252,203],[1270,203],[1284,203],[1293,203],[1300,203],[1306,203],[1335,201],[1366,212],[1374,217],[1381,221],[1387,224],[1390,224],[1392,222],[1411,209],[1428,200],[1446,192],[1482,179],[1503,173],[1514,170],[1523,168],[1527,168],[1528,167],[1528,167],[1528,168],[1528,168],[1528,169],[1528,170],[1527,170],[1527,170],[1526,170],[1526,171],[1525,171],[1525,171]],"dx":[1331,-344],"dy":[1331,-344],"length":1418.3405392085142,"timing":[100,113,129,146,163,180,196,212,230,246,263,280,296,313,329,347,363,379,400,413,430,446,462,531,583,596,613,629,646,856,879,897,913,929,945,963,979,996,1013,1029,1098,1112,1129,1147,1163,1179,1196,1212,1229,1263]},{"start":[1525,171],"end":[1342,112],"points":[[1525,171],[1520,173],[1507,182],[1488,196],[1462,212],[1442,221],[1422,226],[1406,226],[1397,221],[1392,213],[1391,203],[1391,194],[1391,189],[1393,174],[1396,163],[1397,151],[1397,140],[1392,133],[1389,130],[1386,129],[1383,128],[1380,128],[1376,128],[1371,128],[1363,127],[1355,124],[1350,121],[1346,118],[1343,115],[1342,114],[1342,112],[1342,112],[1342,112]],"dx":[-183,-59],"dy":[-183,-59],"length":293.4924865097076,"timing":[201,217,233,250,267,283,300,316,333,350,367,383,400,417,434,450,466,484,500,517,533,550,567,584,600,617,633,650,666,684,700,717,751]},{"start":[1341,112],"end":[149,755],"points":[[1341,112],[1337,115],[1315,131],[1272,161],[1187,216],[1099,267],[979,330],[859,394],[737,460],[646,513],[567,555],[461,604],[408,628],[364,647],[324,666],[304,676],[287,686],[279,694],[276,700],[274,707],[273,715],[270,723],[267,727],[262,732],[258,732],[254,731],[251,726],[248,723],[247,720],[246,719],[246,718],[244,717],[243,717],[242,717],[241,717],[240,718],[239,720],[239,723],[238,725],[238,727],[235,733],[234,733],[231,734],[222,738],[215,741],[207,745],[201,748],[193,751],[183,755],[171,759],[163,760],[156,761],[152,761],[150,761],[150,761],[149,761],[149,760],[149,759],[149,758],[149,757],[149,755],[149,755],[149,755]],"dx":[-1192,643],"dy":[-1192,643],"length":1399.8184561187365,"timing":[185,198,214,230,247,264,281,297,314,330,346,364,380,397,412,430,447,463,480,497,514,531,548,564,579,596,613,631,647,663,680,697,714,730,747,763,780,797,813,830,864,1150,1163,1181,1197,1214,1230,1247,1263,1281,1297,1313,1330,1347,1364,1380,1397,1413,1431,1447,1463,1479,1513]},{"start":[149,755],"end":[1223,274],"points":[[149,755],[153,751],[173,737],[195,723],[241,699],[291,679],[378,653],[433,643],[474,638],[501,636],[529,635],[547,635],[591,630],[649,611],[723,581],[785,558],[876,522],[960,490],[1030,465],[1069,452],[1094,443],[1115,433],[1127,424],[1136,414],[1142,405],[1148,395],[1156,383],[1164,372],[1172,362],[1182,351],[1186,345],[1194,337],[1198,330],[1205,318],[1210,308],[1213,301],[1216,296],[1217,293],[1218,292],[1218,292],[1219,292],[1219,292],[1219,292],[1220,292],[1220,292],[1220,291],[1220,291],[1221,290],[1221,288],[1222,284],[1222,280],[1223,276],[1223,275],[1223,274],[1223,274]],"dx":[1074,-481],"dy":[1074,-481],"length":1224.2693053086753,"timing":[70,80,96,113,130,147,163,180,197,214,230,247,263,280,297,313,330,346,364,380,396,413,429,447,463,480,496,513,530,547,562,580,597,614,630,647,663,680,696,714,730,745,763,781,797,813,830,847,863,879,897,913,930,946,963]},{"start":[1223,274],"end":[878,340],"points":[[1223,274],[1222,274],[1221,274],[1215,275],[1200,282],[1180,293],[1154,305],[1138,311],[1121,314],[1107,314],[1096,313],[1086,309],[1065,305],[1046,305],[1025,306],[1003,311],[979,315],[951,319],[921,321],[890,323],[858,326],[832,329],[815,332],[805,334],[798,336],[796,336],[795,336],[795,336],[795,335],[796,334],[796,334],[797,334],[798,334],[800,334],[806,334],[818,334],[830,334],[848,334],[860,334],[867,334],[873,335],[876,336],[877,337],[878,337],[878,338],[878,339],[878,339],[878,340],[878,340],[878,340],[878,340]],"dx":[-345,66],"dy":[-345,66],"length":528.0990097815762,"timing":[229,236,247,263,280,297,314,330,347,363,380,396,414,430,446,464,480,497,513,530,547,563,580,596,613,630,647,664,680,696,714,730,747,763,780,797,814,830,846,863,880,896,912,930,946,963,980,996,1012,1029,1080]},{"start":[251,854],"end":[751,824],"points":[[251,854],[251,854],[252,853],[259,849],[284,836],[333,816],[428,792],[484,787],[527,787],[571,793],[589,799],[601,803],[610,806],[619,811],[631,814],[647,817],[686,821],[705,822],[724,822],[734,822],[742,822],[746,823],[748,823],[750,824],[750,824],[751,824],[751,824]],"dx":[500,-30],"dy":[500,-30],"length":516.8370618568941,"timing":[232,264,289,306,322,339,355,373,389,406,422,439,456,473,489,505,523,539,556,572,589,606,623,639,655,672,688]},{"start":[751,824],"end":[844,618],"points":[[751,824],[755,819],[771,801],[788,779],[812,750],[827,732],[841,716],[850,707],[857,699],[861,693],[862,689],[863,684],[864,678],[864,675],[864,671],[864,669],[863,666],[862,663],[860,657],[858,653],[857,647],[856,645],[853,636],[851,633],[850,630],[849,627],[847,625],[847,623],[846,620],[845,618],[844,618]],"dx":[93,-206],"dy":[93,-206],"length":251.5811395832803,"timing":[256,279,296,313,330,346,363,380,397,413,430,446,463,480,496,513,529,546,563,580,601,612,629,647,663,679,696,713,730,746,779]},{"start":[844,617],"end":[1366,90],"points":[[844,617],[844,617],[845,616],[847,613],[892,568],[973,488],[1067,397],[1118,347],[1137,329],[1156,309],[1172,295],[1179,288],[1185,283],[1191,277],[1201,266],[1215,247],[1226,230],[1233,219],[1240,209],[1245,202],[1254,198],[1285,192],[1333,188],[1351,186],[1363,186],[1368,185],[1368,185],[1368,177],[1368,169],[1368,158],[1367,152],[1367,146],[1366,143],[1366,141],[1366,138],[1366,132],[1366,122],[1366,115],[1367,108],[1367,105],[1367,104],[1367,103],[1367,103],[1367,102],[1367,101],[1367,101],[1366,101],[1366,100],[1366,100],[1366,99],[1366,98],[1366,97],[1366,95],[1366,92],[1366,91],[1366,90],[1366,90]],"dx":[522,-527],"dy":[522,-527],"length":799.6521515527279,"timing":[227,248,265,282,298,315,332,349,365,381,399,415,431,448,465,481,499,514,532,547,566,582,598,615,631,649,949,965,982,998,1015,1032,1048,1065,1082,1099,1115,1132,1149,1166,1182,1264,1282,1297,1315,1332,1348,1365,1382,1399,1415,1432,1448,1466,1482,1498,1515]},{"start":[1366,90],"end":[1156,387],"points":[[1366,90],[1365,92],[1353,107],[1327,136],[1291,179],[1266,212],[1239,247],[1226,265],[1218,276],[1208,291],[1200,301],[1195,309],[1190,319],[1185,329],[1182,338],[1179,343],[1177,348],[1175,352],[1174,356],[1173,358],[1172,360],[1172,361],[1172,362],[1172,362],[1172,362],[1171,363],[1171,363],[1171,363],[1170,364],[1170,365],[1170,365],[1169,367],[1167,370],[1164,375],[1162,378],[1161,381],[1160,382],[1159,384],[1158,385],[1157,386],[1157,386],[1157,387],[1156,387],[1156,387],[1156,387]],"dx":[-210,297],"dy":[-210,297],"length":367.03058241896736,"timing":[272,282,299,316,333,349,366,382,400,417,433,449,466,482,499,516,532,549,566,583,604,616,632,650,666,683,699,716,733,749,766,782,799,816,833,848,866,882,899,916,933,948,966,983,999]},{"start":[1155,387],"end":[957,758],"points":[[1155,387],[1146,397],[1135,413],[1119,439],[1105,469],[1093,499],[1081,536],[1073,569],[1068,587],[1063,610],[1055,634],[1049,651],[1043,667],[1038,676],[1034,682],[1029,686],[1024,689],[1018,692],[1014,693],[1007,695],[1004,696],[1000,697],[998,698],[994,699],[990,700],[988,700],[986,700],[986,700],[985,700],[985,701],[980,712],[972,729],[968,741],[965,748],[962,755],[960,759],[958,763],[956,768],[954,771],[953,776],[951,779],[949,781],[949,783],[949,783],[948,784],[947,784],[947,784],[947,782],[947,781],[947,780],[947,779],[947,779],[948,778],[949,776],[951,773],[953,768],[954,764],[955,762],[956,760],[956,758],[957,758],[957,758],[957,758],[957,758]],"dx":[-198,371],"dy":[-198,371],"length":497.7918788039995,"timing":[260,283,300,317,333,350,366,383,400,417,433,450,466,482,500,516,533,550,567,583,600,616,633,650,667,684,700,716,732,1030,1050,1067,1084,1100,1117,1133,1150,1168,1184,1200,1216,1233,1250,1267,1283,1300,1316,1333,1350,1366,1383,1400,1417,1433,1450,1466,1484,1500,1516,1533,1550,1567,1596,1667]},{"start":[957,757],"end":[1006,121],"points":[[957,757],[957,754],[957,749],[960,724],[965,687],[968,637],[971,576],[976,508],[981,442],[988,383],[998,328],[1007,269],[1018,203],[1020,179],[1022,165],[1023,152],[1023,148],[1023,146],[1023,145],[1023,145],[1023,144],[1023,143],[1023,142],[1023,140],[1022,139],[1022,139],[1021,139],[1020,139],[1019,139],[1019,138],[1018,137],[1017,135],[1016,133],[1014,131],[1013,129],[1011,126],[1010,124],[1009,122],[1008,121],[1007,121],[1007,121],[1006,121]],"dx":[49,-636],"dy":[49,-636],"length":649.0810820143982,"timing":[229,237,247,264,280,298,314,331,347,364,381,397,414,430,448,464,481,497,513,531,547,564,581,597,614,631,647,664,681,697,714,731,747,764,781,798,814,831,847,864,881,914]},{"start":[1006,122],"end":[905,262],"points":[[1006,122],[1005,123],[1004,126],[996,137],[985,152],[970,173],[960,187],[950,203],[946,209],[943,214],[941,215],[941,215],[941,215],[941,215],[941,216],[939,217],[937,219],[933,225],[928,231],[922,240],[918,245],[914,250],[912,253],[910,256],[909,258],[907,259],[907,260],[906,261],[905,262],[905,262]],"dx":[-101,140],"dy":[-101,140],"length":174.15716325262665,"timing":[230,237,248,265,282,298,316,333,349,365,382,431,449,496,515,532,548,565,582,599,617,630,648,666,682,699,715,732,748,768]},{"start":[906,262],"end":[1596,463],"points":[[906,262],[909,263],[928,276],[983,305],[1063,336],[1134,358],[1223,379],[1315,402],[1387,425],[1429,443],[1448,452],[1456,456],[1458,456],[1485,455],[1517,455],[1542,455],[1567,455],[1580,458],[1589,460],[1593,462],[1595,463],[1595,464],[1596,464],[1596,463]],"dx":[690,201],"dy":[690,201],"length":729.2982092474203,"timing":[289,300,317,334,350,367,384,400,417,434,450,467,711,734,750,767,783,800,817,834,850,867,883,1033]},{"start":[1595,463],"end":[173,550],"points":[[1595,463],[1594,463],[1592,461],[1590,460],[1589,460],[1588,459],[1587,459],[1580,459],[1556,459],[1508,459],[1472,459],[1402,459],[1315,461],[1146,483],[948,512],[807,535],[708,549],[645,558],[611,561],[592,562],[576,562],[575,562],[574,562],[558,562],[519,563],[462,563],[398,561],[329,554],[290,550],[268,550],[248,550],[234,550],[223,550],[210,550],[198,550],[192,549],[187,549],[185,548],[184,548],[184,548],[184,548],[184,547],[183,547],[183,547],[183,547],[183,547],[182,547],[181,547],[180,547],[178,548],[176,549],[174,549],[173,550]],"dx":[-1422,87],"dy":[-1422,87],"length":1433.4946698032406,"timing":[1911,1930,1947,1964,1981,1997,2014,2031,2047,2070,2080,2097,2114,2131,2147,2164,2180,2198,2214,2231,2247,2264,2525,2547,2564,2580,2598,2614,2631,2646,2663,2681,2697,2714,2730,2747,2764,2781,2798,2813,2830,2848,2864,2881,2897,2913,2931,2947,2964,2980,2997,3014,3064]},{"start":[174,549],"end":[1176,71],"points":[[174,549],[178,546],[184,543],[222,521],[323,478],[470,431],[655,383],[771,355],[850,325],[922,278],[965,223],[993,168],[1001,147],[1015,118],[1020,108],[1029,98],[1035,96],[1042,95],[1049,94],[1058,94],[1067,94],[1083,95],[1100,98],[1113,100],[1128,103],[1139,105],[1145,107],[1151,110],[1151,110],[1151,106],[1151,100],[1152,95],[1156,89],[1162,81],[1166,78],[1170,74],[1172,73],[1172,72],[1173,72],[1174,71],[1174,71],[1175,71],[1175,71],[1176,71],[1176,71]],"dx":[1002,-478],"dy":[1002,-478],"length":1186.5453221628156,"timing":[198,206,215,232,248,265,282,298,315,332,349,365,382,399,416,432,449,466,482,498,515,532,549,565,582,599,615,632,871,882,898,915,932,949,965,982,999,1016,1032,1049,1065,1082,1099,1115,1132]},{"start":[1176,71],"end":[1229,713],"points":[[1176,71],[1175,73],[1174,75],[1171,83],[1168,109],[1168,146],[1195,243],[1230,352],[1247,423],[1253,477],[1253,523],[1248,542],[1239,560],[1232,571],[1228,583],[1227,601],[1227,632],[1227,654],[1231,678],[1235,690],[1238,699],[1239,701],[1239,702],[1238,703],[1236,706],[1234,708],[1233,710],[1232,711],[1231,712],[1231,712],[1230,713],[1229,713]],"dx":[53,642],"dy":[53,642],"length":666.213608185726,"timing":[232,240,251,267,285,301,317,334,351,368,384,401,418,435,451,468,484,501,517,534,551,567,857,871,885,901,917,935,951,968,984,1001]},{"start":[1229,713],"end":[369,398],"points":[[1229,713],[1228,713],[1220,711],[1198,703],[1138,680],[1040,650],[876,605],[698,546],[609,515],[553,485],[510,456],[487,439],[469,423],[464,418],[462,415],[462,414],[462,414],[459,414],[451,414],[440,414],[422,414],[407,413],[391,411],[382,409],[373,405],[370,403],[370,403],[369,402],[369,402],[369,402],[369,401],[369,400],[369,400],[369,399],[369,398],[369,398]],"dx":[-860,-315],"dy":[-860,-315],"length":930.2325959045445,"timing":[215,231,247,264,280,297,314,331,347,363,381,397,414,430,447,463,660,680,697,714,730,747,764,780,797,813,831,847,863,880,897,913,930,947,964,997]},{"start":[369,398],"end":[846,318],"points":[[369,398],[374,396],[397,387],[443,374],[503,361],[565,354],[627,347],[658,344],[692,340],[724,338],[755,338],[788,339],[821,347],[842,353],[855,357],[866,362],[867,364],[868,364],[863,363],[857,357],[852,352],[849,347],[847,344],[847,342],[847,341],[847,340],[847,337],[847,333],[847,329],[847,324],[847,321],[846,319],[846,318],[846,318]],"dx":[477,-80],"dy":[477,-80],"length":566.5666216517152,"timing":[154,163,180,197,213,230,246,263,279,296,313,329,347,363,380,397,413,430,447,463,480,496,513,529,546,563,579,596,613,630,646,663,679,696]},{"start":[859,788],"end":[1130,453],"points":[[859,788],[859,788],[859,788],[859,787],[862,783],[878,765],[907,729],[946,674],[990,603],[1024,547],[1046,517],[1063,495],[1075,483],[1084,475],[1090,472],[1094,470],[1098,468],[1105,464],[1113,461],[1118,458],[1124,456],[1129,454],[1130,453],[1130,453],[1130,453],[1130,453]],"dx":[271,-335],"dy":[271,-335],"length":438.00752176718896,"timing":[171,211,251,267,284,299,317,334,351,367,383,400,417,434,450,467,484,501,517,534,549,567,584,600,656,671]},{"start":[1129,453],"end":[1313,601],"points":[[1129,453],[1129,453],[1124,453],[1120,454],[1117,454],[1113,455],[1107,457],[1097,458],[1083,458],[1072,458],[1064,457],[1058,455],[1056,454],[1055,454],[1055,454],[1057,456],[1075,470],[1101,490],[1138,513],[1169,527],[1222,549],[1242,560],[1266,574],[1269,576],[1286,586],[1292,589],[1294,590],[1295,590],[1297,590],[1298,590],[1299,590],[1299,590],[1300,590],[1301,591],[1304,592],[1307,594],[1311,598],[1312,600],[1313,600],[1313,601]],"dx":[184,148],"dy":[184,148],"length":375.6014924995617,"timing":[70,76,106,123,126,143,159,176,192,210,226,242,259,275,295,311,326,342,360,375,393,408,426,443,459,476,493,508,526,543,560,576,593,609,626,643,659,676,693,709]},{"start":[1313,601],"end":[1479,783],"points":[[1313,601],[1312,600],[1311,599],[1310,599],[1309,598],[1308,598],[1307,598],[1305,598],[1304,598],[1304,598],[1303,598],[1303,599],[1305,606],[1309,619],[1314,633],[1326,658],[1341,678],[1348,688],[1356,696],[1356,696],[1364,702],[1389,724],[1420,755],[1439,780],[1451,797],[1457,807],[1461,816],[1463,820],[1463,821],[1463,822],[1463,821],[1463,821],[1463,819],[1464,816],[1465,811],[1466,806],[1469,800],[1472,793],[1475,789],[1477,785],[1478,784],[1479,783],[1479,783],[1479,783]],"dx":[166,182],"dy":[166,182],"length":334.5607185740051,"timing":[100,117,133,149,166,182,200,215,233,249,267,286,300,316,333,348,366,385,399,684,700,716,733,749,766,783,799,816,832,848,934,950,966,983,999,1016,1033,1049,1066,1082,1099,1116,1133,1149]},{"start":[1479,783],"end":[1574,670],"points":[[1479,783],[1477,782],[1475,781],[1469,775],[1467,771],[1466,765],[1472,758],[1483,756],[1496,755],[1508,754],[1519,754],[1527,753],[1535,751],[1543,746],[1550,741],[1557,735],[1561,731],[1564,728],[1566,725],[1569,722],[1570,720],[1572,716],[1574,712],[1575,707],[1575,696],[1575,686],[1574,680],[1574,675],[1574,672],[1574,671],[1574,670],[1574,670],[1574,670]],"dx":[95,-113],"dy":[95,-113],"length":194.66632823503627,"timing":[245,258,274,292,308,324,342,358,375,391,408,424,441,458,475,491,509,525,541,558,574,592,608,625,641,658,675,692,708,725,741,758,808]},{"start":[727,42],"end":[1278,813],"points":[[727,42],[729,45],[731,47],[738,56],[746,70],[767,100],[804,157],[854,230],[917,320],[986,420],[1055,525],[1056,527],[1076,562],[1107,620],[1140,672],[1168,712],[1197,754],[1212,774],[1226,793],[1232,801],[1236,807],[1238,810],[1239,812],[1240,814],[1240,815],[1241,815],[1241,816],[1242,817],[1242,817],[1243,817],[1243,817],[1243,817],[1244,817],[1245,817],[1245,817],[1246,817],[1249,817],[1253,817],[1256,817],[1265,815],[1271,814],[1274,813],[1276,813],[1277,813],[1277,813],[1278,813]],"dx":[551,771],"dy":[551,771],"length":968.546909275081,"timing":[181,188,200,217,233,250,267,283,300,316,334,634,650,667,684,700,717,733,750,767,783,800,816,834,850,867,883,900,917,941,966,983,1000,1017,1033,1050,1067,1084,1100,1116,1133,1150,1167,1183,1200,1233]},{"start":[1277,813],"end":[777,491],"points":[[1277,813],[1242,787],[1193,746],[1139,699],[1087,659],[1055,640],[1020,621],[999,611],[984,605],[973,600],[963,596],[924,576],[911,572],[888,565],[870,558],[852,552],[847,550],[842,548],[840,546],[838,544],[835,541],[829,536],[821,530],[813,523],[806,518],[800,513],[795,508],[792,504],[789,502],[787,500],[784,498],[783,497],[781,496],[779,495],[778,494],[777,492],[776,491],[777,491],[777,491]],"dx":[-500,-322],"dy":[-500,-322],"length":603.336879657843,"timing":[258,281,298,314,330,347,365,381,397,414,430,447,464,481,497,514,531,547,564,580,597,614,631,647,664,680,696,714,731,747,764,781,798,814,830,847,864,905,948]},{"start":[778,492],"end":[793,731],"points":[[778,492],[787,503],[798,523],[810,546],[815,560],[820,576],[822,587],[823,595],[823,601],[823,610],[823,615],[821,623],[819,630],[817,638],[816,643],[813,652],[811,659],[809,665],[806,673],[804,681],[801,691],[800,696],[799,702],[798,706],[797,710],[796,714],[796,717],[796,720],[796,721],[795,723],[795,724],[794,727],[794,729],[793,730],[793,731]],"dx":[15,239],"dy":[15,239],"length":254.40928908579542,"timing":[284,301,318,334,351,367,384,401,418,434,451,467,484,501,518,534,551,568,585,601,618,634,651,668,684,701,718,735,751,768,784,801,818,834,851]},{"start":[793,731],"end":[566,587],"points":[[793,731],[793,730],[793,729],[793,728],[793,726],[792,724],[783,716],[769,706],[738,686],[711,670],[674,649],[641,633],[623,623],[605,614],[592,608],[582,603],[576,599],[571,594],[567,590],[566,588],[566,587],[566,587],[566,587],[566,587]],"dx":[-227,-144],"dy":[-227,-144],"length":273.366218268904,"timing":[198,214,230,246,263,280,297,313,329,346,363,379,396,413,429,446,464,480,496,513,530,546,627,682]},{"start":[567,587],"end":[1196,179],"points":[[567,587],[567,587],[567,587],[572,582],[594,562],[681,496],[821,425],[948,379],[1060,346],[1127,327],[1181,310],[1200,302],[1208,295],[1214,287],[1218,278],[1222,270],[1223,264],[1224,258],[1225,254],[1225,250],[1225,246],[1223,240],[1221,231],[1219,225],[1218,219],[1216,216],[1216,214],[1215,214],[1213,211],[1208,203],[1205,195],[1202,189],[1199,183],[1198,180],[1197,179],[1197,179],[1196,179]],"dx":[629,-408],"dy":[629,-408],"length":840.5293654274865,"timing":[232,248,267,284,301,317,334,351,368,385,401,417,433,450,467,484,500,517,534,550,567,583,601,617,634,651,667,684,701,717,733,750,768,784,800,817,833]},{"start":[1196,180],"end":[1389,706],"points":[[1196,180],[1196,180],[1196,180],[1196,182],[1200,198],[1213,256],[1226,338],[1236,407],[1247,486],[1253,526],[1261,583],[1268,608],[1277,630],[1291,652],[1309,675],[1324,689],[1342,704],[1356,714],[1362,717],[1367,719],[1369,720],[1369,721],[1370,721],[1371,720],[1371,718],[1373,717],[1374,716],[1375,713],[1379,710],[1383,708],[1385,706],[1387,706],[1388,706],[1389,706],[1389,706]],"dx":[193,526],"dy":[193,526],"length":617.4694094427899,"timing":[206,222,234,251,267,284,300,317,334,350,367,383,400,417,434,450,467,484,501,517,534,550,567,584,600,617,634,651,667,684,700,716,734,750,834]},{"start":[1388,706],"end":[255,535],"points":[[1388,706],[1387,707],[1386,708],[1385,709],[1382,710],[1376,710],[1368,710],[1352,707],[1320,697],[1250,679],[1162,658],[1061,637],[952,620],[828,606],[763,600],[616,589],[565,583],[532,578],[516,574],[511,572],[509,570],[507,570],[504,570],[495,569],[488,569],[474,568],[456,567],[443,567],[426,565],[404,563],[382,561],[359,558],[341,556],[323,554],[314,553],[307,552],[302,551],[298,549],[292,547],[284,545],[275,544],[266,541],[261,540],[258,538],[256,537],[255,536],[255,536],[255,535]],"dx":[-1133,-171],"dy":[-1133,-171],"length":1153.3447119236027,"timing":[114,129,145,162,180,196,212,229,245,263,279,295,311,329,347,362,379,395,412,429,446,664,679,696,713,729,745,762,779,796,811,829,846,862,879,895,912,929,946,962,979,995,1013,1029,1046,1062,1080,1096]},{"start":[255,535],"end":[1324,329],"points":[[255,535],[255,535],[255,535],[256,535],[268,529],[314,509],[439,466],[585,426],[703,402],[799,386],[908,371],[986,365],[1030,364],[1075,364],[1109,369],[1135,378],[1152,383],[1183,389],[1197,389],[1207,387],[1211,383],[1215,379],[1216,375],[1217,373],[1217,371],[1218,370],[1221,368],[1224,367],[1228,366],[1231,365],[1235,365],[1239,365],[1242,364],[1244,364],[1246,363],[1247,363],[1250,362],[1251,361],[1261,351],[1274,337],[1292,321],[1306,311],[1314,306],[1320,303],[1323,302],[1324,302],[1324,302],[1324,302],[1324,302],[1324,303],[1324,307],[1324,313],[1324,318],[1324,323],[1324,326],[1324,328],[1324,329],[1324,329]],"dx":[1069,-206],"dy":[1069,-206],"length":1156.4821938380508,"timing":[139,172,203,211,237,254,271,287,304,320,338,354,370,387,404,421,437,454,470,488,504,521,537,554,570,588,604,620,637,654,671,687,704,720,738,754,770,1055,1071,1087,1104,1120,1138,1154,1171,1186,1204,1285,1305,1321,1337,1354,1371,1386,1404,1421,1437,1454]},{"start":[818,743],"end":[982,632],"points":[[818,743],[820,743],[824,743],[825,743],[826,743],[827,743],[827,743],[827,743],[828,741],[831,736],[849,720],[879,697],[903,681],[936,664],[954,655],[966,650],[975,647],[979,645],[981,644],[981,642],[981,640],[981,638],[981,635],[981,633],[981,632],[982,632]],"dx":[164,-111],"dy":[164,-111],"length":207.237806673557,"timing":[151,167,183,199,216,233,249,273,299,316,333,349,366,383,399,416,433,449,466,482,500,516,532,549,566,583]},{"start":[981,631],"end":[442,228],"points":[[981,631],[976,628],[952,610],[897,568],[831,521],[691,428],[590,370],[520,330],[494,313],[446,276],[440,268],[436,261],[434,250],[434,244],[434,244],[434,242],[434,241],[435,239],[436,238],[437,236],[438,235],[438,235],[439,234],[440,234],[440,233],[440,233],[441,232],[441,231],[441,230],[442,229],[442,229],[442,228]],"dx":[-539,-403],"dy":[-539,-403],"length":697.6796171720296,"timing":[270,282,298,314,332,348,364,382,398,414,432,448,465,481,747,765,782,798,814,832,848,865,881,898,915,932,948,965,981,999,1015,1064]},{"start":[442,229],"end":[154,32],"points":[[442,229],[441,229],[439,227],[434,223],[416,209],[389,189],[362,171],[328,148],[311,135],[300,126],[290,115],[289,115],[287,114],[273,109],[253,98],[230,86],[206,74],[196,69],[189,65],[186,64],[186,63],[186,63],[186,62],[186,62],[185,62],[185,61],[184,59],[182,56],[180,52],[178,49],[175,44],[174,40],[171,38],[169,35],[167,34],[163,33],[160,33],[157,32],[154,32],[154,32]],"dx":[-288,-197],"dy":[-288,-197],"length":357.3274553216695,"timing":[281,337,349,365,382,399,415,432,448,465,482,735,749,765,782,799,815,832,848,866,882,899,936,949,965,982,999,1015,1032,1048,1066,1082,1098,1116,1132,1149,1165,1182,1198,1216]},{"start":[154,32],"end":[1035,502],"points":[[154,32],[156,32],[160,32],[166,35],[172,38],[190,47],[255,87],[378,157],[501,224],[650,297],[736,333],[817,366],[857,383],[912,406],[954,424],[970,432],[1005,446],[1019,451],[1028,454],[1031,456],[1032,457],[1033,457],[1033,458],[1032,458],[1032,458],[1032,458],[1032,459],[1032,459],[1031,459],[1031,462],[1031,464],[1031,468],[1031,471],[1031,471],[1031,472],[1031,474],[1031,479],[1031,486],[1031,492],[1032,497],[1033,500],[1033,502],[1034,502],[1034,502],[1034,502],[1035,502]],"dx":[881,470],"dy":[881,470],"length":1028.0590323831677,"timing":[173,181,198,214,231,248,264,281,297,315,331,347,364,381,398,415,432,448,464,481,498,515,569,581,598,614,631,648,664,681,698,714,732,748,764,781,797,814,831,848,864,881,898,915,933,958]},{"start":[1034,502],"end":[926,72],"points":[[1034,502],[1030,498],[1021,488],[1005,464],[987,431],[968,388],[951,337],[937,283],[929,249],[924,224],[922,209],[920,195],[920,187],[920,177],[920,172],[920,167],[920,163],[920,161],[920,159],[920,155],[920,149],[920,142],[920,136],[920,132],[920,129],[920,126],[920,122],[920,118],[920,113],[920,109],[921,104],[921,103],[921,102],[921,100],[922,97],[923,92],[924,85],[925,81],[926,77],[926,74],[926,73],[926,72],[926,72],[926,72]],"dx":[-108,-430],"dy":[-108,-430],"length":455.47551408538067,"timing":[254,279,297,313,330,346,363,379,397,413,429,446,463,480,496,513,530,547,563,580,596,613,629,647,663,680,696,713,730,746,763,780,797,813,829,846,863,880,896,913,930,946,962,997]},{"start":[926,72],"end":[464,826],"points":[[926,72],[926,72],[926,73],[926,73],[926,74],[926,75],[926,76],[926,77],[926,81],[925,88],[920,99],[907,125],[870,188],[816,279],[769,368],[724,463],[698,528],[666,613],[638,692],[616,768],[606,808],[600,835],[597,849],[594,860],[592,865],[588,869],[583,872],[579,873],[571,875],[567,875],[562,875],[556,875],[541,875],[517,870],[499,865],[482,858],[475,854],[469,850],[467,847],[466,846],[466,845],[466,845],[466,844],[466,843],[466,840],[466,838],[464,834],[464,833],[464,831],[464,830],[464,829],[464,828],[464,828],[464,827],[464,827],[464,827],[464,826],[464,826],[464,826]],"dx":[-462,754],"dy":[-462,754],"length":1021.8323906685395,"timing":[104,114,130,147,163,181,197,213,230,248,264,280,297,314,330,347,364,380,397,414,431,447,464,480,497,514,530,547,564,580,597,614,631,647,664,680,698,714,730,747,764,781,797,814,830,848,864,880,897,917,931,948,964,980,997,1014,1031,1047,1080]},{"start":[464,825],"end":[1258,265],"points":[[464,825],[464,825],[465,825],[465,825],[465,824],[466,824],[467,822],[472,817],[488,803],[537,762],[611,708],[759,609],[902,528],[1103,424],[1202,377],[1273,344],[1310,326],[1330,315],[1351,302],[1356,294],[1358,285],[1358,279],[1358,274],[1357,268],[1353,266],[1347,263],[1343,262],[1339,260],[1335,258],[1329,256],[1325,256],[1314,255],[1306,255],[1298,256],[1294,256],[1288,257],[1285,257],[1282,257],[1279,257],[1278,257],[1276,258],[1272,259],[1270,260],[1266,261],[1264,262],[1261,263],[1259,264],[1259,265],[1258,265]],"dx":[794,-560],"dy":[794,-560],"length":1174.189571848993,"timing":[133,156,166,183,200,217,234,250,266,284,300,317,333,350,367,383,400,416,434,450,467,483,500,516,534,550,567,583,600,617,633,655,666,684,700,717,733,750,767,784,800,816,833,850,866,884,900,917,950]},{"start":[1258,265],"end":[1226,477],"points":[[1258,265],[1258,266],[1258,266],[1258,266],[1258,267],[1257,273],[1253,294],[1247,329],[1241,360],[1237,387],[1235,404],[1233,418],[1231,426],[1231,428],[1230,431],[1229,437],[1228,450],[1227,461],[1227,467],[1226,472],[1226,475],[1226,476],[1226,477],[1226,477]],"dx":[-32,212],"dy":[-32,212],"length":214.77429277670774,"timing":[200,217,233,251,267,284,300,318,334,350,367,384,406,417,434,450,467,484,501,517,534,550,567,733]},{"start":[1226,476],"end":[307,706],"points":[[1226,476],[1226,476],[1225,475],[1218,472],[1190,469],[1128,469],[1006,474],[955,482],[774,516],[694,529],[633,538],[598,542],[574,546],[558,550],[557,550],[552,553],[536,563],[516,576],[489,592],[447,614],[424,627],[406,636],[393,643],[382,648],[376,651],[370,654],[366,656],[361,659],[356,663],[353,665],[349,669],[342,675],[335,682],[329,688],[323,694],[320,696],[319,697],[318,698],[317,698],[316,700],[315,702],[314,704],[313,705],[312,705],[311,705],[310,705],[309,705],[308,705],[307,705],[307,706],[307,706],[307,706]],"dx":[-919,230],"dy":[-919,230],"length":975.6166299202798,"timing":[209,217,230,246,264,280,298,313,331,347,363,380,396,414,672,697,713,730,746,764,780,797,813,830,847,863,880,896,913,930,947,963,980,997,1014,1030,1047,1063,1080,1097,1113,1130,1146,1164,1180,1197,1213,1230,1247,1264,1280,1330]},{"start":[703,279],"end":[117,51],"points":[[703,279],[715,288],[715,289],[711,294],[703,302],[674,324],[622,348],[563,361],[525,363],[486,363],[471,356],[458,347],[451,333],[451,313],[414,282],[400,271],[372,251],[291,193],[241,162],[201,139],[177,126],[156,114],[147,109],[143,107],[141,105],[140,104],[140,102],[139,100],[137,96],[136,93],[135,89],[133,84],[131,80],[130,77],[129,74],[128,72],[127,69],[126,67],[125,65],[124,63],[123,62],[122,61],[120,60],[119,59],[118,59],[118,58],[117,57],[117,57],[117,56],[117,56],[117,55],[117,55],[117,54],[117,53],[117,53],[117,53],[117,52],[117,52],[117,51],[117,51],[117,51]],"dx":[-586,-228],"dy":[-586,-228],"length":768.6195991931452,"timing":[48,64,328,336,348,364,381,398,414,431,448,465,481,498,692,698,715,731,748,764,781,797,815,831,847,865,885,897,914,931,948,964,981,998,1015,1031,1048,1065,1082,1098,1114,1131,1148,1164,1181,1198,1215,1231,1248,1265,1281,1298,1314,1331,1347,1364,1415,1431,1448,1464,1514]},{"start":[117,51],"end":[488,76],"points":[[117,51],[119,51],[122,51],[126,52],[131,53],[134,54],[137,54],[138,54],[139,54],[139,54],[139,54],[140,54],[145,54],[184,61],[262,80],[321,96],[347,102],[370,107],[386,109],[392,110],[393,109],[393,107],[394,101],[395,93],[397,89],[398,86],[402,84],[409,82],[421,80],[431,79],[440,79],[449,79],[454,79],[456,79],[459,79],[462,79],[467,79],[470,80],[475,80],[476,80],[479,80],[482,80],[483,80],[485,80],[487,78],[488,77],[488,76],[488,76]],"dx":[371,25],"dy":[371,25],"length":400.41341559616427,"timing":[94,102,118,133,150,167,183,200,216,256,272,290,300,317,333,350,366,384,399,416,433,450,467,484,500,516,533,549,566,583,602,616,633,650,666,683,700,716,733,750,767,783,800,817,833,850,866,933]},{"start":[491,77],"end":[1550,398],"points":[[491,77],[623,142],[737,200],[835,246],[902,278],[955,301],[986,313],[1009,322],[1013,324],[1015,324],[1026,323],[1083,320],[1139,320],[1222,320],[1302,323],[1375,335],[1431,355],[1454,367],[1469,374],[1480,380],[1483,382],[1485,382],[1485,383],[1486,382],[1486,381],[1487,379],[1488,378],[1488,377],[1489,377],[1489,377],[1492,377],[1497,377],[1503,377],[1509,381],[1515,385],[1520,388],[1523,389],[1526,390],[1529,390],[1533,391],[1536,392],[1539,393],[1542,395],[1544,396],[1546,398],[1547,399],[1548,399],[1549,399],[1549,399],[1550,399],[1550,399],[1550,398],[1550,398],[1550,398],[1550,398]],"dx":[1059,321],"dy":[1059,321],"length":1138.1673352463822,"timing":[274,300,317,333,349,367,383,400,416,654,666,683,700,717,733,749,766,783,800,816,833,850,867,883,899,916,932,949,966,983,1000,1016,1033,1050,1066,1082,1098,1116,1133,1149,1167,1183,1200,1216,1233,1250,1266,1283,1300,1326,1350,1367,1383,1415,1482]},{"start":[1549,398],"end":[739,663],"points":[[1549,398],[1549,398],[1548,398],[1547,398],[1547,398],[1547,398],[1547,398],[1546,398],[1546,398],[1546,398],[1545,398],[1544,398],[1541,398],[1532,400],[1512,407],[1457,420],[1374,437],[1263,465],[1181,488],[1060,522],[1022,533],[1002,538],[979,544],[965,549],[957,552],[946,558],[934,563],[915,570],[896,575],[860,580],[837,584],[818,586],[800,590],[792,593],[782,597],[778,602],[773,607],[767,614],[765,617],[759,623],[756,628],[753,633],[750,638],[749,642],[747,646],[746,649],[746,652],[745,654],[745,656],[745,656],[745,657],[744,658],[744,658],[744,658],[743,658],[743,659],[743,659],[742,660],[742,660],[741,661],[740,661],[739,661],[739,662],[739,662],[739,663]],"dx":[-810,265],"dy":[-810,265],"length":876.8190236356257,"timing":[49,63,81,98,115,131,180,212,229,247,263,281,297,314,330,346,364,381,397,414,431,447,465,481,497,513,531,548,564,581,598,615,631,648,665,681,698,714,730,747,764,781,797,814,831,847,864,881,896,914,930,948,964,981,997,1014,1031,1047,1064,1081,1098,1114,1131,1148,1164]},{"start":[740,662],"end":[1122,181],"points":[[740,662],[753,647],[794,604],[857,545],[906,495],[943,452],[993,388],[1020,343],[1036,309],[1045,286],[1051,262],[1054,256],[1058,247],[1066,234],[1076,221],[1084,212],[1090,205],[1094,201],[1097,199],[1099,197],[1102,195],[1110,189],[1115,186],[1119,183],[1121,182],[1122,181],[1123,181],[1123,181],[1122,181],[1122,181]],"dx":[382,-481],"dy":[382,-481],"length":624.6802842374375,"timing":[260,280,297,315,330,347,364,379,397,414,474,497,513,530,547,564,580,597,614,631,647,664,681,697,714,730,762,801,813,897]},{"start":[1122,181],"end":[108,380],"points":[[1122,181],[1118,184],[1111,192],[1108,195],[1094,210],[1085,219],[1080,224],[1076,228],[1074,229],[1073,230],[1071,231],[1065,236],[1053,248],[1027,272],[995,296],[940,330],[836,379],[669,431],[563,448],[468,460],[432,463],[399,464],[399,464],[375,446],[349,435],[327,428],[306,422],[290,419],[271,417],[253,416],[229,413],[198,408],[178,406],[165,404],[155,403],[150,402],[149,401],[148,401],[148,400],[144,399],[137,396],[130,393],[123,388],[118,385],[114,382],[111,381],[109,380],[109,380],[108,380],[108,380],[108,380],[108,380]],"dx":[-1014,199],"dy":[-1014,199],"length":1107.8408336007878,"timing":[55,67,82,100,116,132,149,165,185,199,216,233,249,266,283,300,316,333,349,367,384,400,676,699,716,733,749,766,783,799,816,832,849,866,883,899,925,932,949,966,982,999,1016,1033,1049,1066,1083,1100,1115,1133,1149,1166]},{"start":[59,571],"end":[1034,166],"points":[[59,571],[67,562],[105,524],[176,471],[328,387],[441,346],[538,319],[646,293],[703,282],[762,268],[830,250],[860,242],[884,233],[897,226],[910,217],[926,202],[934,193],[940,185],[947,178],[951,174],[956,172],[962,171],[967,171],[977,171],[985,171],[1000,171],[1009,171],[1019,173],[1022,173],[1024,173],[1025,173],[1027,172],[1028,171],[1029,171],[1030,171],[1031,170],[1032,169],[1033,169],[1033,168],[1034,168],[1034,167],[1034,167],[1034,167],[1034,166]],"dx":[975,-405],"dy":[975,-405],"length":1083.9925210552956,"timing":[273,284,301,317,333,350,366,384,399,417,433,451,467,484,500,517,534,550,567,583,599,617,634,650,667,684,700,717,733,751,767,783,801,817,833,850,867,884,900,917,960,984,1000,1016]},{"start":[1033,166],"end":[1497,416],"points":[[1033,166],[1033,166],[1032,166],[1030,166],[1028,167],[1025,168],[1022,170],[1020,172],[1018,174],[1013,178],[1008,182],[999,188],[993,193],[990,195],[988,199],[988,202],[988,209],[995,228],[1012,259],[1040,306],[1061,337],[1066,344],[1066,344],[1084,346],[1114,352],[1187,370],[1249,384],[1302,396],[1356,407],[1381,412],[1407,417],[1424,419],[1440,420],[1465,423],[1478,425],[1485,425],[1490,425],[1493,425],[1494,425],[1494,425],[1494,424],[1495,421],[1496,419],[1496,418],[1497,417],[1497,417],[1497,416],[1497,416]],"dx":[464,250],"dy":[464,250],"length":669.6969583216941,"timing":[38,49,65,82,98,115,132,148,165,182,198,215,232,248,265,282,298,315,332,349,365,382,613,631,649,665,681,698,715,732,749,765,781,798,815,832,848,865,892,906,915,931,949,965,982,998,1015,1032]},{"start":[1497,416],"end":[1535,528],"points":[[1497,416],[1496,416],[1494,417],[1489,420],[1485,423],[1481,426],[1478,428],[1475,429],[1474,430],[1471,432],[1470,434],[1468,436],[1467,440],[1467,450],[1474,461],[1484,469],[1494,476],[1500,479],[1505,481],[1507,481],[1509,481],[1513,481],[1520,482],[1526,487],[1532,492],[1538,498],[1542,504],[1543,507],[1543,509],[1543,511],[1543,513],[1541,515],[1539,520],[1538,522],[1536,525],[1536,527],[1536,528],[1535,528],[1535,528],[1535,528],[1535,528]],"dx":[38,112],"dy":[38,112],"length":173.79223194817496,"timing":[102,114,130,147,164,180,197,213,231,247,264,280,297,314,330,347,364,380,397,413,430,447,463,480,497,514,530,547,564,580,597,616,631,647,663,680,696,714,730,748,782]},{"start":[1534,528],"end":[760,69],"points":[[1534,528],[1534,528],[1533,528],[1532,528],[1530,528],[1527,528],[1524,528],[1522,528],[1521,528],[1520,528],[1518,528],[1515,528],[1505,528],[1491,528],[1461,526],[1409,509],[1288,450],[1080,314],[1001,258],[966,227],[926,193],[895,166],[879,152],[873,147],[867,142],[864,139],[862,138],[861,138],[860,137],[860,137],[859,136],[859,136],[852,135],[831,129],[814,122],[796,114],[788,110],[782,106],[780,104],[778,102],[776,100],[773,98],[769,96],[767,95],[765,93],[764,92],[763,92],[762,91],[762,91],[762,89],[762,88],[762,86],[762,83],[761,78],[760,75],[760,71],[760,69],[760,69]],"dx":[-774,-459],"dy":[-774,-459],"length":926.1596784654972,"timing":[62,77,85,96,113,129,145,163,179,196,213,230,246,263,279,295,312,329,346,362,379,396,413,428,446,463,480,496,512,532,546,563,578,596,613,629,645,663,679,695,712,729,745,762,779,796,812,829,846,862,879,896,913,929,946,963,980,1012]},{"start":[762,69],"end":[917,733],"points":[[762,69],[762,69],[763,69],[763,69],[763,69],[763,69],[763,69],[763,69],[763,69],[764,70],[765,70],[769,72],[780,79],[806,102],[836,144],[862,199],[881,259],[894,320],[899,373],[901,430],[903,490],[904,561],[906,608],[907,646],[909,679],[910,700],[912,719],[913,728],[914,735],[915,737],[915,738],[916,739],[916,739],[916,739],[916,739],[916,740],[917,740],[917,740],[917,739],[917,738],[917,738],[917,737],[917,736],[917,735],[917,734],[916,733],[916,733],[916,733],[916,732],[916,732],[917,733]],"dx":[155,664],"dy":[155,664],"length":725.5549414007852,"timing":[16,98,124,146,154,170,179,196,213,229,246,263,279,296,313,330,346,363,379,396,413,429,445,462,479,496,513,529,546,562,579,596,613,629,646,663,680,696,730,746,762,779,796,813,829,846,863,879,896,972,996]},{"start":[917,733],"end":[484,190],"points":[[917,733],[917,732],[917,732],[917,732],[917,731],[917,731],[917,730],[917,730],[917,729],[916,728],[908,722],[871,687],[804,623],[725,532],[654,426],[616,354],[593,305],[578,272],[565,245],[561,236],[557,230],[556,227],[556,227],[555,227],[548,226],[535,222],[521,218],[515,216],[508,212],[506,211],[506,211],[505,210],[504,209],[502,206],[498,202],[493,197],[489,194],[487,192],[485,191],[485,190],[484,190],[484,190]],"dx":[-433,-543],"dy":[-433,-543],"length":713.1514856749246,"timing":[113,129,143,161,178,194,211,227,245,261,278,294,311,328,345,361,377,395,411,428,445,462,478,706,728,744,761,778,794,811,828,844,861,877,894,911,927,944,961,978,994,1011]},{"start":[485,190],"end":[894,826],"points":[[485,190],[485,190],[485,190],[485,190],[486,190],[486,190],[487,190],[489,190],[497,190],[575,216],[680,260],[757,295],[838,338],[870,364],[899,392],[917,419],[935,460],[948,504],[959,563],[970,629],[979,669],[985,693],[988,707],[990,717],[991,721],[991,722],[986,722],[981,720],[981,721],[981,724],[979,733],[975,744],[964,760],[950,772],[942,777],[935,783],[930,787],[926,790],[924,794],[921,796],[918,798],[916,800],[915,800],[913,801],[913,801],[912,801],[911,801],[911,801],[910,801],[909,803],[908,805],[906,809],[905,811],[904,812],[903,813],[902,816],[900,818],[898,821],[897,824],[895,825],[895,826],[895,826],[894,826]],"dx":[409,636],"dy":[409,636],"length":966.2801824066985,"timing":[134,150,162,179,194,212,229,245,261,279,295,312,328,345,362,378,395,412,428,445,462,479,496,512,528,546,562,579,781,795,811,829,845,861,879,895,912,929,946,962,979,995,1012,1029,1045,1062,1078,1096,1112,1128,1145,1162,1179,1195,1212,1228,1245,1262,1278,1295,1312,1328,1345]},{"start":[894,826],"end":[1498,289],"points":[[894,826],[894,825],[894,825],[895,824],[895,824],[896,822],[896,821],[897,819],[898,818],[900,815],[904,809],[918,793],[955,751],[993,708],[1069,622],[1144,542],[1202,488],[1260,445],[1317,413],[1353,397],[1411,371],[1428,364],[1451,354],[1464,346],[1470,342],[1477,336],[1480,329],[1486,319],[1492,308],[1495,299],[1497,293],[1499,289],[1499,289],[1499,288],[1499,288],[1499,289],[1499,289],[1498,289],[1498,289],[1498,289],[1498,289]],"dx":[604,-537],"dy":[604,-537],"length":829.1862492838927,"timing":[104,112,129,145,162,179,196,212,228,246,262,279,295,312,329,346,362,379,396,413,429,445,463,479,495,512,529,546,563,579,596,617,629,645,727,745,762,779,795,812,829]},{"start":[1497,289],"end":[889,843],"points":[[1497,289],[1497,290],[1496,291],[1493,295],[1486,303],[1477,314],[1454,338],[1425,369],[1357,438],[1304,490],[1250,540],[1197,589],[1151,631],[1109,672],[1083,698],[1052,730],[1027,754],[1012,768],[996,782],[988,789],[981,795],[976,799],[971,804],[967,808],[964,812],[959,816],[956,818],[955,819],[952,821],[948,824],[941,827],[935,828],[930,829],[927,830],[924,831],[919,833],[911,836],[905,838],[898,840],[893,841],[891,841],[889,842],[889,842],[889,842],[889,843],[889,843]],"dx":[-608,554],"dy":[-608,554],"length":830.5890286188383,"timing":[212,218,232,249,266,282,298,315,333,349,366,383,399,415,433,449,466,482,498,515,532,549,565,582,599,615,632,649,665,682,699,716,732,749,766,783,799,815,832,849,866,882,899,916,933,965]},{"start":[889,841],"end":[1629,704],"points":[[889,841],[905,825],[963,783],[1060,742],[1137,722],[1223,706],[1245,703],[1298,694],[1337,688],[1394,682],[1435,681],[1474,680],[1497,677],[1519,674],[1536,668],[1540,667],[1544,664],[1545,663],[1546,663],[1547,663],[1547,663],[1548,663],[1550,663],[1551,663],[1552,663],[1552,663],[1553,663],[1553,663],[1557,666],[1563,671],[1572,680],[1582,691],[1588,697],[1590,700],[1592,702],[1593,702],[1594,702],[1600,702],[1609,702],[1617,703],[1623,704],[1626,704],[1628,704],[1629,704]],"dx":[740,-137],"dy":[740,-137],"length":793.770384930605,"timing":[299,316,333,349,366,383,399,416,433,449,466,483,500,516,533,549,566,583,599,616,633,650,666,683,700,716,733,749,766,784,800,816,833,849,866,883,900,916,932,950,966,982,1000,1015]},{"start":[1627,704],"end":[1555,831],"points":[[1627,704],[1623,702],[1613,698],[1608,694],[1598,687],[1590,681],[1582,676],[1573,669],[1567,665],[1556,660],[1552,660],[1550,665],[1549,678],[1550,689],[1555,703],[1560,716],[1563,726],[1566,737],[1567,748],[1567,761],[1567,773],[1563,788],[1560,801],[1559,809],[1558,814],[1556,821],[1556,823],[1555,825],[1555,826],[1555,827],[1555,828],[1555,829],[1555,829],[1555,830],[1555,830],[1555,830],[1555,831],[1555,831]],"dx":[-72,127],"dy":[-72,127],"length":263.6761326553825,"timing":[134,146,162,178,195,212,228,245,262,279,295,312,329,346,362,378,396,412,428,445,462,478,495,512,529,545,561,579,595,611,629,645,662,678,696,712,728,745]},{"start":[1555,830],"end":[1137,259],"points":[[1555,830],[1555,829],[1554,828],[1552,826],[1547,821],[1540,816],[1536,812],[1531,809],[1527,807],[1525,806],[1521,804],[1513,800],[1478,776],[1354,646],[1293,559],[1244,479],[1212,417],[1181,358],[1169,335],[1162,323],[1157,315],[1156,311],[1155,310],[1155,309],[1154,308],[1153,301],[1149,289],[1146,276],[1143,259],[1142,248],[1140,237],[1140,234],[1140,233],[1140,234],[1140,236],[1140,237],[1140,239],[1140,241],[1140,243],[1140,246],[1140,249],[1140,251],[1140,252],[1140,254],[1139,255],[1139,256],[1137,258],[1137,258],[1137,259]],"dx":[-418,-571],"dy":[-418,-571],"length":772.1223711601242,"timing":[96,102,114,130,147,164,181,197,214,231,248,264,280,298,314,331,347,363,381,397,414,430,447,464,481,497,514,531,547,564,580,598,614,645,664,681,697,714,731,748,764,780,798,814,831,847,864,880,914]},{"start":[1135,259],"end":[387,166],"points":[[1135,259],[1116,262],[1074,268],[1013,273],[899,274],[776,267],[700,254],[672,247],[647,239],[627,233],[620,231],[618,229],[618,228],[618,228],[615,228],[607,228],[593,227],[571,225],[535,219],[507,213],[478,205],[450,196],[431,190],[415,184],[406,181],[400,179],[396,178],[394,177],[392,176],[390,176],[389,174],[388,172],[387,171],[387,169],[387,169],[387,169],[387,168],[387,167],[387,166],[387,166]],"dx":[-748,-93],"dy":[-748,-93],"length":770.3318569664323,"timing":[330,348,365,382,398,415,432,448,465,482,499,515,532,735,748,765,782,798,816,832,849,865,881,899,915,932,948,965,982,997,1015,1032,1049,1065,1082,1099,1115,1132,1149,1198]},{"start":[387,166],"end":[403,309],"points":[[387,166],[388,166],[393,168],[403,176],[417,190],[425,204],[431,217],[433,226],[434,232],[434,234],[434,235],[433,235],[432,236],[431,236],[428,239],[424,245],[420,254],[416,264],[412,274],[410,282],[408,290],[406,294],[405,299],[404,303],[404,306],[404,307],[404,308],[404,308],[404,309],[403,309],[403,309]],"dx":[16,143],"dy":[16,143],"length":171.1792041301232,"timing":[247,266,283,299,316,333,350,366,382,400,417,433,449,466,483,499,516,533,550,567,583,600,616,633,650,666,683,699,716,733,750]},{"start":[403,309],"end":[92,833],"points":[[403,309],[404,309],[404,309],[404,309],[405,308],[405,308],[406,308],[406,308],[406,308],[407,308],[407,308],[409,308],[412,308],[418,310],[426,319],[432,332],[435,344],[436,359],[434,377],[420,401],[394,436],[337,505],[269,576],[220,623],[199,642],[170,669],[161,678],[159,681],[159,681],[158,682],[157,685],[154,692],[149,704],[143,721],[135,739],[126,760],[121,775],[115,792],[111,801],[108,809],[107,813],[105,815],[105,816],[104,816],[104,817],[103,817],[103,817],[102,820],[101,821],[100,823],[99,823],[99,824],[97,825],[96,827],[95,828],[94,830],[93,831],[92,833],[92,833]],"dx":[-311,524],"dy":[-311,524],"length":668.5133869458346,"timing":[79,86,99,116,133,150,166,183,199,216,232,249,266,283,299,315,333,349,365,383,399,416,433,449,466,482,500,516,532,799,816,832,849,866,882,899,916,933,949,966,983,1000,1016,1032,1050,1066,1082,1098,1115,1133,1149,1166,1183,1200,1216,1233,1249,1266,1299]},{"start":[92,833],"end":[673,629],"points":[[92,833],[92,832],[92,832],[92,832],[92,832],[93,831],[93,831],[93,830],[96,827],[105,818],[131,794],[222,733],[303,696],[368,676],[443,658],[486,652],[527,651],[546,651],[558,651],[568,651],[575,652],[580,652],[584,652],[589,652],[595,652],[603,652],[611,650],[623,647],[634,646],[644,644],[648,643],[651,642],[654,640],[656,637],[659,635],[662,633],[664,631],[667,631],[669,630],[670,630],[671,629],[672,629],[673,629],[673,629],[673,629]],"dx":[581,-204],"dy":[581,-204],"length":636.0547619846892,"timing":[110,134,150,161,179,196,212,228,246,263,279,295,312,329,346,362,379,396,413,429,445,463,479,495,512,529,545,562,579,595,612,629,645,662,679,696,712,729,745,762,779,795,812,829,862]},{"start":[673,629],"end":[1005,316],"points":[[673,629],[675,626],[681,620],[694,607],[712,590],[732,575],[746,565],[762,555],[775,548],[789,539],[799,531],[809,522],[826,504],[836,491],[845,481],[853,469],[859,459],[864,451],[869,441],[880,426],[894,410],[904,399],[909,392],[914,384],[917,379],[919,374],[919,372],[920,368],[921,366],[921,365],[921,365],[921,365],[922,367],[922,368],[923,367],[928,363],[940,356],[957,347],[969,342],[977,338],[984,336],[988,334],[989,334],[990,333],[990,332],[991,331],[993,329],[994,328],[995,326],[996,326],[997,325],[998,324],[999,323],[1001,321],[1002,319],[1003,318],[1004,316],[1004,316],[1005,316],[1005,316]],"dx":[332,-313],"dy":[332,-313],"length":472.76851837164185,"timing":[352,362,378,395,412,429,445,462,478,495,512,529,545,562,578,595,612,628,645,662,679,695,712,729,746,763,778,796,812,829,845,862,879,896,1275,1296,1312,1328,1346,1362,1379,1396,1412,1429,1445,1462,1479,1495,1511,1528,1545,1561,1579,1595,1611,1629,1645,1662,1678,1712]},{"start":[751,394],"end":[372,683],"points":[[751,394],[749,395],[746,398],[741,403],[725,419],[687,455],[634,507],[594,553],[557,610],[547,631],[537,654],[532,667],[525,678],[524,678],[516,681],[500,689],[490,692],[480,695],[459,701],[442,704],[431,706],[414,707],[401,707],[391,707],[382,707],[376,704],[373,703],[372,702],[372,700],[372,700],[372,698],[372,698],[372,696],[372,695],[372,693],[372,691],[372,689],[372,687],[372,686],[372,685],[372,684],[372,683]],"dx":[-379,289],"dy":[-379,289],"length":544.903312915552,"timing":[229,249,266,283,301,316,333,350,366,383,400,417,433,716,735,750,773,783,800,817,833,849,866,884,901,917,933,950,967,983,999,1017,1034,1050,1066,1083,1100,1117,1133,1150,1167,1183]},{"start":[372,683],"end":[538,331],"points":[[372,683],[373,683],[373,683],[373,683],[374,682],[377,680],[383,676],[394,668],[413,646],[439,612],[454,585],[471,553],[482,523],[486,507],[490,489],[492,477],[493,465],[497,446],[501,432],[505,417],[508,408],[510,401],[512,398],[513,395],[514,393],[516,391],[519,387],[520,384],[524,379],[527,374],[529,370],[531,366],[532,363],[533,361],[534,360],[534,359],[534,356],[536,352],[537,347],[538,341],[538,337],[538,334],[538,333],[538,331],[538,331]],"dx":[166,-352],"dy":[166,-352],"length":400.82429680660755,"timing":[154,178,185,199,216,232,250,266,282,299,315,332,349,365,382,399,416,432,449,466,483,499,516,533,549,565,582,599,615,632,649,665,682,699,716,732,749,766,782,799,815,832,849,865,882]},{"start":[1686,767],"end":[618,751],"points":[[1686,767],[1686,768],[1686,768],[1686,769],[1686,770],[1686,772],[1686,774],[1685,775],[1685,776],[1684,777],[1681,777],[1672,779],[1636,786],[1571,797],[1481,804],[1347,809],[1246,814],[1174,820],[1111,826],[1071,832],[1026,839],[984,844],[934,846],[914,846],[884,846],[869,846],[852,846],[846,846],[837,846],[830,845],[818,841],[812,840],[806,838],[802,836],[799,836],[797,835],[796,834],[796,834],[786,829],[769,820],[749,813],[735,808],[721,804],[714,802],[710,801],[706,800],[700,797],[690,792],[680,786],[674,783],[667,778],[663,776],[660,774],[655,772],[648,768],[639,763],[634,759],[628,755],[624,752],[622,751],[620,751],[619,751],[618,751],[618,751],[618,751],[618,751],[618,751]],"dx":[-1068,-16],"dy":[-1068,-16],"length":1103.3349204398312,"timing":[112,118,131,147,163,180,197,213,230,248,264,280,297,313,330,347,364,380,397,414,431,447,464,480,497,514,530,548,562,581,597,614,630,647,663,681,697,946,963,980,997,1014,1030,1047,1063,1080,1097,1114,1129,1147,1164,1180,1197,1213,1231,1247,1263,1280,1297,1314,1330,1347,1363,1380,1397,1414,1481]},{"start":[618,751],"end":[309,131],"points":[[618,751],[612,732],[602,706],[585,665],[559,607],[532,541],[519,508],[493,436],[484,406],[474,371],[471,351],[471,337],[473,325],[472,325],[471,324],[461,317],[448,305],[435,292],[422,277],[409,263],[401,253],[393,243],[386,235],[382,231],[377,226],[374,222],[370,218],[368,217],[367,215],[364,212],[358,204],[353,197],[350,192],[344,184],[340,179],[337,174],[333,168],[328,160],[324,152],[320,145],[318,141],[315,136],[313,133],[313,131],[312,130],[311,130],[311,130],[310,130],[310,130],[309,131],[309,131],[309,131]],"dx":[-309,-620],"dy":[-309,-620],"length":712.2161592207092,"timing":[407,433,450,467,484,500,527,533,550,566,583,600,617,902,916,933,950,967,984,1000,1017,1034,1050,1067,1083,1101,1119,1134,1150,1167,1184,1200,1216,1233,1250,1268,1284,1300,1317,1333,1349,1367,1383,1400,1416,1434,1450,1467,1483,1500,1517,1550]},{"start":[310,132],"end":[1211,108],"points":[[310,132],[315,134],[320,137],[341,149],[376,170],[452,213],[503,243],[525,256],[546,268],[565,277],[569,278],[570,279],[571,279],[571,279],[571,279],[580,278],[623,269],[703,244],[811,208],[874,189],[896,185],[915,182],[928,180],[933,179],[935,177],[938,169],[939,166],[939,166],[970,166],[980,166],[1028,169],[1102,178],[1133,182],[1166,188],[1177,190],[1183,190],[1197,190],[1200,188],[1203,184],[1206,182],[1209,180],[1210,178],[1211,176],[1212,175],[1213,171],[1214,153],[1214,141],[1213,132],[1212,124],[1211,119],[1211,117],[1211,115],[1211,114],[1211,113],[1211,112],[1211,110],[1211,109],[1211,108],[1211,108],[1211,108]],"dx":[901,-24],"dy":[901,-24],"length":1039.5295275754663,"timing":[94,101,115,131,148,165,182,198,214,232,248,265,281,298,315,331,348,365,381,398,415,432,447,465,482,498,515,775,799,813,830,848,866,898,907,919,935,948,965,981,998,1015,1031,1048,1063,1081,1098,1114,1131,1148,1165,1180,1198,1215,1232,1248,1265,1282,1298,1331]},{"start":[1211,108],"end":[193,122],"points":[[1211,108],[1210,109],[1195,122],[1147,156],[1065,195],[969,221],[805,248],[697,253],[605,254],[548,249],[516,240],[501,234],[490,230],[488,228],[488,228],[483,228],[471,227],[454,224],[443,223],[402,215],[366,208],[333,200],[301,192],[291,189],[269,180],[257,175],[244,169],[231,163],[219,157],[212,153],[205,150],[201,146],[198,144],[196,142],[194,139],[194,138],[193,136],[193,134],[193,132],[193,130],[193,128],[193,126],[193,123],[193,122],[193,122]],"dx":[-1018,14],"dy":[-1018,14],"length":1086.434119939025,"timing":[249,275,295,314,330,346,363,380,395,413,429,445,462,479,744,763,780,795,813,828,846,863,880,895,913,929,946,963,979,996,1012,1029,1046,1063,1079,1096,1113,1129,1145,1162,1179,1195,1211,1229,1279]},{"start":[193,122],"end":[1143,709],"points":[[193,122],[197,122],[202,123],[212,126],[233,133],[281,152],[351,181],[444,221],[505,246],[593,282],[694,325],[777,369],[830,404],[869,438],[894,463],[919,491],[927,503],[934,513],[934,516],[934,517],[936,518],[939,519],[949,526],[986,546],[999,554],[1039,576],[1067,594],[1094,615],[1121,633],[1135,644],[1143,649],[1150,655],[1153,656],[1154,657],[1154,658],[1154,658],[1154,658],[1154,659],[1154,661],[1153,665],[1152,669],[1150,675],[1148,677],[1147,680],[1146,683],[1145,687],[1144,694],[1144,699],[1143,704],[1143,706],[1143,708],[1143,708],[1143,709]],"dx":[950,587],"dy":[950,587],"length":1169.3698560520072,"timing":[178,194,212,229,245,261,278,295,312,329,345,361,378,395,412,428,445,462,478,495,697,712,729,745,761,779,795,811,828,845,862,878,895,912,928,945,961,978,995,1010,1028,1044,1062,1078,1095,1111,1128,1145,1161,1178,1195,1212,1228]},{"start":[1143,706],"end":[646,669],"points":[[1143,706],[1141,705],[1138,701],[1132,696],[1122,687],[1097,669],[1059,641],[1017,614],[992,601],[963,587],[946,579],[932,574],[925,572],[915,571],[904,571],[894,571],[879,570],[843,570],[806,572],[780,578],[747,589],[726,597],[707,606],[695,614],[686,621],[680,627],[675,633],[669,640],[663,647],[659,651],[655,655],[652,658],[650,659],[648,660],[647,660],[646,661],[646,662],[646,664],[646,667],[646,668],[646,669],[646,669],[646,669]],"dx":[-497,-37],"dy":[-497,-37],"length":572.8552420999819,"timing":[14,29,46,63,80,97,119,130,147,164,180,197,213,231,247,263,280,297,314,329,347,362,380,396,413,430,447,463,479,496,513,530,546,563,579,596,613,630,647,663,679,697,730]},{"start":[646,667],"end":[929,521],"points":[[646,667],[646,666],[646,665],[647,664],[649,663],[652,660],[660,654],[682,639],[693,632],[700,628],[708,625],[714,622],[719,620],[724,618],[735,611],[752,602],[779,589],[817,575],[853,565],[878,562],[893,560],[906,558],[912,557],[914,556],[915,554],[916,553],[916,552],[917,549],[919,546],[921,541],[923,538],[925,535],[926,532],[927,529],[928,526],[928,525],[929,523],[929,522],[929,521],[929,521]],"dx":[283,-146],"dy":[283,-146],"length":334.2647681477492,"timing":[17,33,50,66,84,100,116,133,149,166,183,199,216,233,249,267,286,299,316,333,350,366,383,400,416,433,449,466,482,500,516,533,549,566,583,599,616,633,650,700]},{"start":[929,521],"end":[739,358],"points":[[929,521],[929,521],[929,520],[928,518],[924,513],[917,503],[905,488],[883,456],[857,421],[838,396],[821,377],[808,365],[797,358],[791,355],[787,354],[785,354],[783,354],[780,353],[774,353],[771,353],[766,353],[758,353],[752,353],[749,355],[746,357],[743,359],[741,360],[740,360],[739,360],[739,359],[739,359],[739,358]],"dx":[-190,-163],"dy":[-190,-163],"length":274.1608092837591,"timing":[226,241,265,281,297,314,331,348,365,381,398,414,431,448,465,481,496,515,532,548,564,581,598,614,631,648,665,682,698,714,731,765]},{"start":[1109,50],"end":[517,343],"points":[[1109,50],[1101,57],[1087,71],[1059,102],[1006,152],[930,211],[834,278],[721,345],[672,370],[640,387],[613,402],[602,409],[594,415],[590,419],[588,422],[587,423],[586,423],[586,422],[582,420],[575,412],[562,397],[551,385],[540,372],[535,366],[532,361],[529,358],[529,357],[528,356],[526,353],[524,351],[523,347],[520,345],[519,344],[518,343],[518,343],[517,343]],"dx":[-592,293],"dy":[-592,293],"length":754.1119724304077,"timing":[261,282,298,315,331,348,365,381,397,415,431,448,465,481,498,513,531,771,782,798,815,832,848,864,881,898,914,931,948,965,981,998,1015,1031,1048,1065]},{"start":[518,343],"end":[541,714],"points":[[518,343],[520,343],[527,343],[553,344],[581,348],[614,352],[644,356],[654,357],[666,358],[670,359],[673,359],[674,359],[675,359],[675,359],[676,360],[679,364],[682,371],[686,383],[690,404],[692,428],[693,457],[688,513],[680,547],[673,568],[665,589],[654,610],[644,624],[636,636],[626,651],[615,665],[607,677],[601,682],[596,687],[592,691],[589,692],[583,695],[580,696],[579,696],[572,699],[566,701],[559,706],[553,709],[547,711],[544,713],[542,713],[541,714],[541,714]],"dx":[23,371],"dy":[23,371],"length":577.6955611057714,"timing":[69,83,100,117,133,150,166,184,200,216,234,251,267,282,300,317,334,350,367,384,400,417,433,451,467,483,499,517,533,551,567,583,599,617,634,650,667,684,700,716,733,749,766,783,799,817,850]},{"start":[541,713],"end":[1011,704],"points":[[541,713],[543,712],[544,711],[550,707],[559,703],[566,698],[573,695],[577,693],[581,692],[585,691],[586,690],[590,689],[594,688],[609,684],[632,678],[658,671],[678,667],[698,662],[724,659],[748,659],[793,662],[808,666],[846,677],[870,687],[887,695],[898,702],[906,706],[915,709],[924,710],[933,711],[940,711],[947,712],[955,712],[962,712],[968,712],[976,712],[982,710],[987,710],[991,709],[995,707],[997,707],[998,706],[1000,706],[1000,706],[1001,706],[1003,706],[1006,706],[1008,705],[1010,705],[1011,704],[1011,704]],"dx":[470,-9],"dy":[470,-9],"length":491.31902924574257,"timing":[16,32,49,65,82,98,115,131,148,165,182,197,215,232,249,265,280,299,315,331,348,364,382,398,414,432,448,464,482,498,515,532,547,565,581,598,615,631,647,665,682,697,715,732,749,765,781,798,815,831,865]},{"start":[1011,704],"end":[1326,621],"points":[[1011,704],[1010,703],[1010,703],[1009,702],[1008,701],[1007,700],[1007,700],[1007,699],[1006,699],[1006,698],[1005,697],[1004,697],[1003,697],[1003,697],[1003,696],[1003,696],[1003,694],[1004,689],[1009,683],[1020,675],[1032,672],[1040,671],[1051,671],[1054,671],[1056,672],[1057,672],[1057,672],[1066,671],[1078,668],[1093,664],[1117,658],[1142,651],[1157,647],[1171,643],[1181,640],[1190,636],[1198,633],[1206,630],[1211,628],[1217,626],[1220,626],[1225,625],[1227,625],[1228,625],[1228,625],[1229,625],[1229,625],[1229,625],[1233,625],[1235,625],[1238,624],[1246,622],[1255,621],[1262,619],[1270,618],[1276,616],[1281,616],[1292,615],[1311,615],[1317,617],[1323,619],[1326,620],[1326,620],[1326,621],[1326,621]],"dx":[315,-83],"dy":[315,-83],"length":358.1563227919153,"timing":[12,27,44,61,78,94,111,127,144,161,178,193,211,227,244,259,278,295,311,327,344,361,377,394,410,429,645,661,678,694,711,727,745,762,777,794,812,829,845,861,878,894,911,927,944,960,978,994,1024,1031,1046,1061,1077,1094,1111,1127,1144,1161,1177,1194,1211,1227,1244,1260,1327]},{"start":[1326,621],"end":[1279,740],"points":[[1326,621],[1325,621],[1324,622],[1320,623],[1314,626],[1309,628],[1305,629],[1302,630],[1299,631],[1297,631],[1294,632],[1291,633],[1286,635],[1281,637],[1276,639],[1272,642],[1269,644],[1267,647],[1266,653],[1266,660],[1266,670],[1265,682],[1265,695],[1264,706],[1264,714],[1264,721],[1264,727],[1264,732],[1264,738],[1265,742],[1266,745],[1266,749],[1266,753],[1266,756],[1266,758],[1266,759],[1266,760],[1267,760],[1267,760],[1267,759],[1271,754],[1273,751],[1275,747],[1277,744],[1278,742],[1278,741],[1279,740]],"dx":[-47,119],"dy":[-47,119],"length":203.96124686154442,"timing":[59,66,81,97,114,131,147,164,181,197,214,231,248,263,281,297,313,331,346,364,381,397,414,430,446,464,480,498,513,531,547,564,581,597,614,630,648,673,697,713,729,746,764,781,797,814,831]},{"start":[1279,740],"end":[1196,389],"points":[[1279,740],[1278,740],[1278,740],[1278,740],[1277,740],[1276,740],[1275,740],[1274,735],[1271,721],[1269,715],[1264,696],[1247,654],[1235,630],[1221,595],[1214,571],[1208,549],[1207,538],[1207,529],[1207,524],[1207,521],[1207,520],[1207,518],[1207,515],[1208,511],[1208,504],[1209,498],[1210,492],[1211,484],[1211,483],[1211,473],[1211,461],[1211,448],[1210,433],[1208,423],[1206,414],[1205,409],[1204,405],[1204,404],[1203,403],[1202,401],[1202,398],[1201,395],[1200,392],[1199,391],[1198,389],[1197,389],[1196,389],[1196,389],[1196,389]],"dx":[-83,-351],"dy":[-83,-351],"length":371.7251723741972,"timing":[203,227,234,248,265,282,298,315,332,347,365,381,397,415,431,448,465,482,497,514,531,548,565,581,598,614,630,648,664,681,697,714,731,748,765,781,808,815,831,848,864,881,897,915,932,948,965,981,1031]},{"start":[1196,390],"end":[1570,817],"points":[[1196,390],[1196,390],[1196,390],[1196,390],[1196,391],[1196,391],[1196,391],[1195,392],[1195,392],[1195,393],[1194,394],[1194,396],[1194,399],[1194,411],[1203,453],[1250,561],[1281,613],[1317,668],[1342,703],[1370,738],[1388,760],[1389,760],[1394,762],[1405,766],[1429,773],[1469,786],[1499,795],[1531,807],[1541,812],[1550,815],[1554,816],[1557,817],[1559,817],[1561,817],[1564,817],[1567,817],[1569,817],[1569,817],[1570,817],[1570,817],[1570,817]],"dx":[374,427],"dy":[374,427],"length":616.6968214377816,"timing":[119,135,159,175,190,199,216,232,249,265,282,298,316,332,349,365,382,398,415,432,449,718,732,749,765,782,799,815,831,848,865,881,897,915,931,947,964,982,999,1015,1041]},{"start":[1570,817],"end":[1284,61],"points":[[1570,817],[1570,817],[1570,817],[1570,816],[1569,815],[1553,799],[1525,768],[1481,721],[1432,664],[1388,605],[1364,569],[1341,528],[1328,498],[1319,469],[1311,441],[1304,402],[1296,343],[1295,304],[1295,263],[1295,242],[1295,221],[1297,206],[1298,198],[1299,192],[1301,190],[1301,189],[1301,182],[1299,176],[1287,125],[1285,118],[1284,112],[1284,108],[1284,106],[1284,105],[1284,104],[1284,102],[1284,101],[1284,99],[1284,99],[1284,98],[1284,96],[1284,94],[1284,91],[1284,88],[1284,79],[1284,75],[1284,72],[1284,70],[1284,68],[1284,65],[1284,63],[1284,62],[1284,61],[1284,61]],"dx":[-286,-756],"dy":[-286,-756],"length":846.7832812457063,"timing":[166,182,197,213,229,247,264,279,296,313,330,347,363,379,395,412,430,446,463,480,496,513,529,546,563,822,847,863,913,930,947,963,979,997,1013,1030,1046,1062,1078,1095,1113,1129,1146,1163,1207,1230,1246,1262,1279,1296,1312,1330,1345,1409]},{"start":[1283,61],"end":[851,666],"points":[[1283,61],[1283,62],[1282,64],[1282,65],[1281,67],[1281,69],[1281,70],[1280,73],[1280,75],[1278,80],[1272,93],[1260,121],[1245,147],[1217,195],[1178,253],[1150,292],[1119,336],[1087,379],[1058,424],[1039,456],[1017,496],[1000,527],[992,545],[982,564],[975,577],[967,588],[960,598],[954,605],[948,611],[945,614],[936,619],[930,622],[923,625],[919,627],[913,630],[907,632],[901,633],[895,634],[888,634],[881,638],[875,641],[868,645],[864,648],[860,652],[857,654],[855,656],[853,658],[852,660],[851,661],[851,662],[851,663],[851,664],[851,664],[851,665],[851,665],[851,665],[851,666]],"dx":[-432,605],"dy":[-432,605],"length":763.8523215015836,"timing":[89,99,115,132,149,165,182,199,216,232,248,265,282,299,316,331,348,366,382,399,415,432,448,465,482,498,515,532,549,565,582,599,615,632,649,665,682,699,716,732,748,765,782,798,816,831,849,865,882,899,915,931,948,966,982,998,1032]},{"start":[944,707],"end":[1239,514],"points":[[944,707],[947,702],[977,666],[1006,630],[1028,605],[1053,578],[1076,558],[1091,550],[1108,545],[1122,544],[1136,544],[1148,544],[1165,542],[1174,538],[1187,531],[1193,526],[1199,521],[1204,517],[1207,515],[1208,515],[1212,514],[1215,513],[1217,513],[1220,512],[1222,512],[1225,511],[1228,511],[1231,511],[1234,511],[1236,512],[1238,512],[1238,513],[1239,513],[1239,514],[1239,514]],"dx":[295,-193],"dy":[295,-193],"length":376.45985825376164,"timing":[282,296,313,332,347,363,380,397,413,430,446,463,480,496,513,529,547,564,580,596,614,630,646,663,680,697,713,730,747,764,780,796,814,831,847]},{"start":[1239,514],"end":[1023,668],"points":[[1239,514],[1236,517],[1231,521],[1221,531],[1209,545],[1201,556],[1183,576],[1173,588],[1159,603],[1146,612],[1137,616],[1128,619],[1120,621],[1112,623],[1105,627],[1097,632],[1090,638],[1083,644],[1073,652],[1067,656],[1062,659],[1055,662],[1050,664],[1046,665],[1043,666],[1042,666],[1036,667],[1032,668],[1028,668],[1026,668],[1024,668],[1023,668],[1023,668]],"dx":[-216,154],"dy":[-216,154],"length":273.7898136021422,"timing":[226,250,266,283,299,316,333,349,366,382,399,416,433,449,467,483,500,516,532,550,566,582,599,616,633,650,666,683,700,716,732,750,767]},{"start":[1023,668],"end":[1300,722],"points":[[1023,668],[1023,667],[1023,667],[1024,665],[1024,665],[1025,664],[1025,663],[1025,662],[1026,661],[1026,660],[1027,659],[1029,656],[1031,653],[1035,650],[1043,642],[1056,634],[1075,625],[1098,619],[1121,619],[1137,619],[1153,625],[1170,634],[1185,641],[1203,649],[1226,658],[1246,665],[1260,670],[1274,674],[1287,680],[1294,683],[1297,685],[1298,686],[1299,687],[1299,688],[1300,688],[1300,688],[1300,689],[1300,689],[1300,689],[1300,690],[1300,690],[1300,691],[1300,693],[1300,697],[1300,704],[1300,712],[1300,717],[1300,720],[1300,721],[1300,722],[1300,722]],"dx":[277,54],"dy":[277,54],"length":345.3170937058931,"timing":[59,68,85,101,118,134,151,168,184,201,217,235,251,268,284,301,318,335,351,367,384,400,418,434,451,470,485,501,518,534,551,568,585,602,618,634,656,681,701,717,734,751,768,784,801,825,835,851,867,885,901]},{"start":[1300,722],"end":[781,286],"points":[[1300,722],[1300,721],[1300,721],[1300,720],[1300,719],[1299,717],[1297,713],[1291,707],[1283,700],[1272,689],[1259,676],[1233,652],[1203,626],[1164,596],[1139,577],[1100,550],[1067,526],[1025,496],[1004,478],[986,461],[970,446],[960,434],[952,426],[946,419],[941,413],[931,406],[928,403],[920,399],[914,394],[905,388],[892,378],[880,368],[867,357],[859,351],[853,346],[846,340],[840,336],[831,327],[823,319],[812,308],[803,298],[797,292],[791,287],[785,284],[783,283],[782,282],[781,282],[780,281],[780,281],[779,281],[779,281],[779,282],[780,283],[781,283],[781,284],[781,285],[781,285],[781,285],[781,286]],"dx":[-519,-436],"dy":[-519,-436],"length":693.4636638789428,"timing":[136,156,164,181,198,229,261,281,298,315,331,347,365,381,398,414,431,448,465,481,498,514,532,548,564,581,597,615,631,648,665,681,698,714,731,748,765,782,798,814,832,849,865,881,898,914,931,947,963,982,1018,1031,1048,1064,1081,1098,1115,1131,1189]},{"start":[781,286],"end":[562,97],"points":[[781,286],[781,286],[781,286],[780,285],[780,285],[780,285],[764,279],[743,268],[727,259],[702,244],[684,233],[665,219],[645,204],[624,186],[612,175],[599,164],[592,159],[586,153],[581,147],[577,144],[575,141],[573,138],[571,135],[570,132],[569,129],[568,127],[567,125],[566,124],[566,122],[565,121],[565,119],[565,117],[565,115],[564,112],[564,110],[563,107],[563,105],[563,104],[562,102],[562,101],[562,100],[562,98],[562,98],[562,97],[562,97]],"dx":[-219,-189],"dy":[-219,-189],"length":301.2840421877245,"timing":[337,352,364,380,397,587,613,629,647,662,680,697,713,730,747,763,780,797,814,830,846,864,879,897,913,930,947,964,980,997,1013,1030,1047,1063,1080,1097,1113,1130,1146,1163,1180,1197,1213,1230,1259]},{"start":[562,97],"end":[1242,214],"points":[[562,97],[562,98],[563,98],[563,98],[563,98],[563,98],[564,98],[567,99],[578,102],[612,116],[686,144],[745,166],[815,191],[855,204],[894,216],[932,224],[956,230],[984,237],[1010,245],[1035,253],[1048,257],[1061,260],[1071,263],[1076,264],[1084,266],[1089,267],[1094,267],[1098,268],[1106,268],[1112,268],[1118,266],[1125,263],[1136,258],[1143,254],[1151,249],[1157,246],[1161,243],[1165,241],[1166,239],[1168,239],[1170,238],[1174,236],[1180,234],[1188,231],[1194,229],[1199,227],[1201,226],[1202,226],[1203,225],[1205,225],[1207,224],[1210,223],[1211,222],[1212,222],[1213,222],[1213,222],[1214,222],[1214,222],[1214,222],[1215,221],[1215,220],[1215,218],[1215,217],[1215,215],[1215,215],[1215,215],[1215,215],[1216,215],[1217,215],[1223,215],[1227,214],[1231,214],[1234,214],[1237,214],[1239,214],[1240,214],[1241,214],[1241,214],[1241,214],[1242,214],[1242,214],[1242,214]],"dx":[680,117],"dy":[680,117],"length":726.6747897401191,"timing":[161,177,193,201,212,228,245,262,279,295,311,328,345,362,378,395,411,429,445,461,478,495,512,528,545,561,578,595,611,628,645,662,678,695,712,728,744,762,779,795,812,828,845,862,878,895,911,927,945,962,977,994,1012,1029,1045,1060,1079,1094,1111,1128,1144,1161,1178,1195,1212,1229,1244,1830,1846,1862,1878,1895,1912,1928,1945,1961,1978,1995,2012,2028,2045,2061]},{"start":[1498,424],"end":[480,799],"points":[[1498,424],[1497,424],[1497,424],[1494,425],[1492,426],[1490,427],[1488,429],[1484,431],[1476,438],[1462,448],[1404,477],[1387,483],[1364,491],[1293,510],[1201,528],[1077,549],[992,570],[891,599],[797,631],[709,661],[607,688],[569,696],[536,704],[516,709],[510,711],[504,713],[502,714],[500,716],[499,720],[497,728],[494,737],[491,746],[489,754],[486,758],[485,760],[485,760],[485,761],[485,761],[485,762],[485,763],[485,764],[485,764],[485,766],[485,766],[485,768],[485,769],[485,770],[484,770],[484,771],[484,772],[484,773],[484,774],[484,776],[484,777],[484,779],[484,781],[483,785],[483,788],[482,791],[481,794],[481,795],[481,796],[480,797],[480,798],[480,798],[480,799],[480,799],[480,799],[480,799]],"dx":[-1018,375],"dy":[-1018,375],"length":1133.2287766785669,"timing":[141,149,164,180,197,214,230,247,264,281,311,318,330,347,364,380,397,414,431,448,464,480,498,514,530,547,564,581,597,614,630,647,664,680,698,714,730,747,764,781,797,814,831,848,864,880,898,914,930,946,964,981,998,1013,1031,1047,1064,1081,1096,1114,1130,1146,1164,1181,1196,1214,1230,1247,1297]},{"start":[480,799],"end":[114,397],"points":[[480,799],[480,798],[480,797],[480,796],[480,794],[481,791],[483,788],[487,782],[493,777],[499,772],[505,767],[515,759],[529,750],[550,734],[567,721],[584,708],[590,702],[596,695],[597,693],[597,691],[595,690],[592,690],[588,689],[583,688],[576,686],[567,681],[557,674],[552,669],[550,666],[549,666],[540,660],[502,632],[447,588],[404,552],[364,521],[324,493],[293,474],[252,454],[220,439],[183,421],[160,410],[140,401],[131,397],[124,394],[120,393],[119,392],[118,392],[117,392],[117,392],[117,394],[117,395],[116,397],[116,398],[116,398],[115,399],[115,399],[115,398],[114,397],[114,397]],"dx":[-366,-402],"dy":[-366,-402],"length":743.8432625005094,"timing":[31,46,63,79,96,112,129,146,162,179,196,213,229,246,263,280,296,312,330,346,363,379,396,413,430,446,463,479,496,742,763,779,796,813,830,846,862,880,896,913,930,946,962,979,996,1013,1030,1046,1063,1079,1096,1113,1129,1145,1162,1179,1196,1212,1246]},{"start":[421,76],"end":[811,778],"points":[[421,76],[421,76],[421,76],[421,76],[421,76],[422,76],[422,76],[422,76],[422,76],[423,76],[433,82],[478,107],[559,160],[621,207],[665,249],[710,295],[737,332],[765,379],[777,405],[789,435],[800,465],[811,495],[822,523],[831,550],[836,568],[842,591],[844,619],[844,641],[839,687],[835,709],[831,734],[827,758],[826,771],[825,779],[824,785],[824,788],[824,789],[823,790],[822,791],[819,792],[817,794],[815,796],[814,797],[814,797],[814,797],[814,797],[814,797],[814,797],[814,796],[814,795],[813,792],[813,789],[813,787],[812,783],[812,780],[812,779],[812,778],[811,778],[811,778],[811,778]],"dx":[390,702],"dy":[390,702],"length":924.1606849618225,"timing":[113,129,154,165,182,212,218,242,264,282,299,316,332,349,366,382,398,415,432,449,465,482,498,515,532,549,564,582,599,616,632,649,664,682,699,714,732,749,765,782,798,816,832,849,865,932,955,971,982,998,1016,1032,1049,1065,1082,1099,1115,1132,1149,1165]},{"start":[811,777],"end":[1077,55],"points":[[811,777],[811,777],[811,769],[814,743],[824,703],[840,652],[874,565],[898,512],[922,463],[937,433],[953,399],[963,377],[973,355],[980,341],[983,335],[987,327],[990,317],[995,304],[1001,286],[1005,269],[1008,252],[1010,236],[1012,224],[1014,208],[1016,197],[1018,187],[1021,176],[1024,164],[1029,143],[1033,130],[1036,120],[1039,111],[1040,106],[1040,104],[1041,103],[1041,103],[1041,103],[1041,102],[1042,102],[1042,101],[1045,99],[1046,98],[1049,96],[1052,93],[1054,90],[1062,82],[1066,76],[1069,73],[1071,69],[1072,66],[1073,64],[1074,62],[1074,60],[1075,59],[1075,58],[1076,57],[1076,57],[1076,56],[1076,55],[1077,55],[1077,55],[1077,55]],"dx":[266,-722],"dy":[266,-722],"length":780.1976746941539,"timing":[162,729,750,767,783,800,817,833,850,867,883,900,916,933,950,967,983,1000,1016,1033,1050,1066,1084,1100,1116,1133,1150,1167,1184,1200,1216,1233,1250,1267,1283,1300,1319,1334,1350,1366,1383,1400,1416,1433,1450,1467,1483,1500,1517,1533,1550,1566,1584,1600,1616,1633,1650,1667,1683,1700,1717,1733]},{"start":[1077,54],"end":[1367,325],"points":[[1077,54],[1077,55],[1076,55],[1076,55],[1076,56],[1075,57],[1074,58],[1074,60],[1073,61],[1072,62],[1072,64],[1071,67],[1069,71],[1068,78],[1066,86],[1066,101],[1066,118],[1074,140],[1081,151],[1090,163],[1098,171],[1112,182],[1127,196],[1144,213],[1177,245],[1201,268],[1240,326],[1243,341],[1248,362],[1250,377],[1250,381],[1251,381],[1261,375],[1270,369],[1279,364],[1297,356],[1317,351],[1331,346],[1340,343],[1348,340],[1353,339],[1357,335],[1360,332],[1362,329],[1365,326],[1366,325],[1367,325]],"dx":[290,271],"dy":[290,271],"length":530.0982585710165,"timing":[52,67,83,96,113,130,147,164,181,196,213,230,247,264,280,297,313,330,347,363,380,396,413,430,447,463,480,497,514,530,546,846,863,880,896,913,930,946,963,980,997,1013,1029,1047,1063,1080,1096]},{"start":[1367,325],"end":[1193,811],"points":[[1367,325],[1367,326],[1367,326],[1366,327],[1359,340],[1341,375],[1312,431],[1280,493],[1262,532],[1245,573],[1226,621],[1218,652],[1211,684],[1207,717],[1207,747],[1206,773],[1205,788],[1204,804],[1202,816],[1200,823],[1198,831],[1196,835],[1194,838],[1193,839],[1193,840],[1193,840],[1193,840],[1193,838],[1193,836],[1193,833],[1193,830],[1193,827],[1193,824],[1193,822],[1193,821],[1193,819],[1193,818],[1193,816],[1193,815],[1193,814],[1193,814],[1193,813],[1193,813],[1193,813],[1193,812],[1193,811],[1193,811]],"dx":[-174,486],"dy":[-174,486],"length":580.6139981808004,"timing":[218,235,251,263,280,297,313,330,346,363,380,396,413,429,446,463,480,496,513,530,546,562,579,596,613,630,663,680,696,713,730,747,763,780,797,813,830,846,863,879,896,913,929,945,963,980,1013]},{"start":[1193,810],"end":[972,141],"points":[[1193,810],[1193,809],[1193,808],[1193,807],[1193,806],[1193,804],[1193,802],[1193,801],[1193,800],[1193,798],[1193,797],[1193,796],[1193,796],[1193,796],[1193,796],[1193,796],[1194,796],[1194,796],[1194,795],[1190,786],[1166,741],[1122,667],[1091,610],[1052,540],[1029,498],[1005,448],[987,409],[974,373],[965,345],[961,330],[957,314],[955,302],[955,292],[955,283],[955,274],[955,265],[957,256],[958,251],[959,245],[960,237],[961,231],[963,223],[964,212],[966,199],[969,186],[970,179],[971,171],[972,166],[972,163],[972,160],[972,157],[973,154],[973,149],[973,146],[973,143],[973,141],[973,140],[972,140],[972,141],[972,141],[972,141]],"dx":[-221,-669],"dy":[-221,-669],"length":731.8534026640066,"timing":[13,29,46,63,79,96,113,129,146,163,179,196,213,229,260,284,308,358,406,430,446,463,479,496,512,529,546,562,579,596,613,629,646,663,678,696,712,729,746,763,779,796,813,829,846,863,880,896,913,929,946,963,979,996,1012,1029,1046,1070,1096,1113,1146]},{"start":[972,142],"end":[375,584],"points":[[972,142],[969,148],[963,159],[953,174],[938,192],[911,227],[859,282],[800,346],[750,397],[698,452],[665,484],[631,515],[602,538],[582,551],[568,559],[555,565],[537,574],[522,582],[503,592],[490,599],[477,608],[470,612],[464,615],[460,616],[458,616],[455,615],[452,613],[449,610],[446,609],[442,607],[441,606],[439,605],[438,603],[435,600],[433,598],[430,596],[428,594],[427,594],[426,593],[425,593],[425,593],[424,593],[424,593],[423,593],[422,593],[422,593],[421,594],[421,594],[421,594],[421,594],[421,594],[421,594],[421,593],[420,592],[419,591],[418,591],[414,590],[407,590],[399,590],[391,590],[386,591],[378,591],[375,591],[373,590],[373,588],[373,586],[373,585],[374,584],[375,584],[375,584]],"dx":[-597,442],"dy":[-597,442],"length":811.6669690317715,"timing":[261,280,296,313,330,346,363,380,397,413,430,447,464,480,497,513,530,547,564,580,596,613,630,647,663,680,697,713,730,747,764,780,796,813,830,846,863,880,897,913,930,947,964,980,997,1013,1030,1047,1064,1080,1168,1180,1197,1213,1230,1247,1263,1280,1297,1314,1330,1346,1363,1380,1396,1413,1430,1447,1463,1497]},{"start":[376,584],"end":[1111,34],"points":[[376,584],[378,584],[382,583],[390,579],[397,575],[404,571],[412,567],[419,564],[426,561],[434,559],[445,557],[459,555],[481,553],[496,552],[520,547],[544,540],[586,520],[650,479],[696,444],[759,395],[815,348],[865,308],[896,283],[922,258],[944,236],[963,217],[977,204],[993,188],[1007,174],[1022,158],[1032,144],[1043,130],[1051,118],[1060,105],[1067,92],[1070,87],[1074,82],[1077,80],[1079,78],[1082,77],[1084,76],[1085,76],[1085,76],[1085,77],[1085,77],[1085,77],[1085,77],[1086,77],[1088,74],[1096,58],[1105,45],[1111,34]],"dx":[735,-550],"dy":[735,-550],"length":947.1047727020868,"timing":[34,48,64,81,98,115,131,148,165,182,198,214,231,248,265,282,298,314,331,348,365,381,398,415,432,448,465,481,498,515,531,548,564,581,598,615,631,648,665,681,703,715,732,788,798,815,845,865,882,898,914,931]},{"start":[1109,53],"end":[1450,673],"points":[[1109,53],[1107,62],[1102,76],[1096,91],[1086,109],[1080,123],[1072,140],[1067,151],[1062,161],[1054,177],[1044,197],[1035,215],[1015,256],[1008,269],[1000,282],[994,295],[989,309],[988,330],[990,350],[1002,372],[1025,401],[1071,435],[1137,469],[1138,469],[1142,472],[1176,496],[1210,522],[1243,549],[1268,571],[1282,584],[1305,604],[1317,613],[1330,622],[1344,628],[1358,630],[1371,631],[1374,631],[1379,631],[1382,631],[1383,631],[1386,631],[1389,631],[1397,634],[1401,636],[1405,638],[1407,638],[1409,640],[1411,642],[1413,647],[1417,653],[1419,656],[1422,660],[1424,662],[1426,663],[1427,663],[1427,663],[1428,663],[1429,663],[1430,663],[1431,664],[1434,664],[1436,666],[1439,667],[1440,669],[1442,669],[1443,670],[1444,671],[1445,671],[1447,671],[1449,672],[1450,672],[1450,673]],"dx":[341,620],"dy":[341,620],"length":905.245399296575,"timing":[14,31,47,64,81,98,114,130,147,164,181,198,215,230,246,264,281,297,314,330,347,364,381,750,764,781,797,814,830,847,864,881,897,916,931,952,964,981,997,1014,1030,1048,1064,1081,1098,1114,1130,1148,1164,1180,1197,1214,1231,1248,1264,1281,1297,1315,1331,1347,1364,1380,1397,1414,1431,1447,1463,1481,1498,1514,1530,1564]},{"start":[1449,672],"end":[186,711],"points":[[1449,672],[1447,671],[1444,670],[1442,668],[1440,667],[1437,665],[1433,663],[1430,660],[1428,657],[1425,654],[1423,652],[1421,650],[1420,649],[1418,648],[1413,646],[1405,641],[1387,632],[1356,618],[1279,591],[1107,560],[951,551],[873,551],[727,566],[639,581],[475,608],[453,610],[350,613],[337,613],[326,612],[318,610],[312,608],[309,608],[302,607],[300,607],[297,607],[295,607],[292,610],[288,617],[286,621],[282,629],[282,631],[280,635],[278,639],[276,643],[275,647],[273,651],[271,654],[268,659],[267,660],[264,664],[261,667],[258,671],[255,675],[253,677],[249,679],[247,679],[230,688],[225,690],[218,694],[214,696],[213,697],[212,698],[212,698],[207,700],[201,703],[195,705],[191,708],[188,709],[187,711],[187,711],[186,711],[186,711],[186,711],[186,711]],"dx":[-1263,39],"dy":[-1263,39],"length":1341.5177996086766,"timing":[18,35,53,68,82,100,116,134,150,166,183,200,216,233,250,267,282,300,316,334,350,366,383,400,427,436,472,492,509,522,552,554,582,589,607,618,648,676,718,736,736,750,766,784,800,817,833,852,866,883,900,916,933,950,967,1258,1283,1300,1317,1333,1350,1367,1383,1399,1416,1433,1449,1467,1483,1500,1516,1565,1590,1616]},{"start":[186,711],"end":[637,765],"points":[[186,711],[186,711],[187,711],[189,711],[190,710],[192,709],[194,707],[195,706],[196,706],[199,704],[204,700],[223,688],[257,669],[310,647],[387,628],[463,617],[510,615],[560,615],[582,615],[604,618],[618,621],[625,623],[631,625],[636,627],[640,629],[646,632],[649,634],[653,638],[656,640],[658,643],[659,645],[660,649],[660,654],[660,661],[660,673],[659,684],[656,697],[652,711],[650,722],[648,728],[647,731],[647,733],[647,734],[646,735],[646,736],[645,737],[645,740],[644,743],[643,746],[642,749],[641,750],[641,751],[641,752],[640,753],[640,757],[639,760],[638,763],[638,765],[637,765],[637,765]],"dx":[451,54],"dy":[451,54],"length":626.4580709999063,"timing":[83,96,114,131,147,164,181,197,214,231,248,264,280,297,314,331,347,364,381,398,414,430,448,464,480,497,514,531,548,564,581,597,614,631,647,664,681,698,715,731,747,764,780,797,814,830,847,864,881,897,914,931,947,964,981,998,1014,1031,1048,1064]},{"start":[637,765],"end":[495,677],"points":[[637,765],[637,765],[637,763],[639,760],[640,757],[642,754],[643,750],[644,748],[644,746],[644,742],[642,740],[639,737],[636,734],[633,730],[628,728],[620,725],[611,722],[604,720],[598,717],[592,715],[585,711],[579,708],[571,703],[563,700],[555,697],[551,696],[546,695],[542,694],[538,693],[533,691],[524,688],[515,685],[508,683],[502,680],[498,679],[496,678],[495,677],[495,677]],"dx":[-142,-88],"dy":[-142,-88],"length":189.65645143762296,"timing":[133,148,164,180,197,214,230,247,264,281,297,314,331,347,364,380,397,413,431,447,463,480,497,514,530,549,564,581,597,613,630,647,664,680,697,714,730,781]},{"start":[495,677],"end":[601,241],"points":[[495,677],[495,675],[495,672],[495,665],[499,649],[505,624],[515,583],[522,555],[533,520],[545,487],[557,458],[568,431],[574,411],[584,374],[588,357],[589,343],[591,332],[593,320],[596,304],[598,292],[600,278],[602,265],[602,261],[602,258],[602,256],[601,256],[601,255],[601,255],[601,254],[601,254],[601,253],[601,253],[601,252],[601,252],[601,250],[601,249],[601,247],[601,245],[601,244],[601,242],[601,242],[601,241],[601,241]],"dx":[106,-436],"dy":[106,-436],"length":452.4007788751759,"timing":[255,282,298,314,331,347,364,381,397,414,431,448,464,482,497,514,531,548,564,581,597,619,631,648,664,681,698,715,731,748,764,781,798,814,831,847,865,881,897,914,931,948,964]},{"start":[602,241],"end":[994,62],"points":[[602,241],[602,241],[603,242],[605,244],[610,247],[620,253],[636,263],[657,276],[673,286],[692,297],[701,303],[710,307],[715,308],[719,309],[721,309],[724,307],[734,297],[756,279],[776,260],[807,234],[840,207],[870,184],[895,164],[911,153],[926,141],[938,133],[950,126],[966,117],[970,114],[976,110],[984,105],[986,103],[987,102],[988,101],[988,101],[988,101],[988,100],[988,100],[988,100],[988,100],[988,99],[988,94],[989,88],[990,80],[990,73],[991,69],[993,66],[994,63],[994,63],[995,62],[995,62],[994,62],[994,62]],"dx":[392,-179],"dy":[392,-179],"length":518.7367714093174,"timing":[112,119,130,146,163,180,196,212,229,246,263,279,296,313,329,346,363,378,396,414,430,446,463,480,496,513,529,548,563,579,596,613,630,646,663,679,696,711,742,762,779,796,813,829,846,862,879,896,913,929,946,1084,1123]},{"start":[994,63],"end":[1465,470],"points":[[994,63],[997,126],[1006,187],[1019,238],[1028,268],[1038,297],[1044,312],[1049,322],[1049,322],[1058,322],[1081,326],[1126,338],[1183,356],[1224,372],[1265,392],[1286,404],[1315,420],[1327,427],[1342,434],[1354,438],[1365,440],[1378,442],[1389,444],[1395,445],[1405,446],[1416,446],[1425,448],[1436,450],[1446,454],[1451,457],[1456,460],[1458,462],[1459,464],[1460,467],[1460,468],[1460,469],[1460,470],[1460,470],[1460,470],[1461,470],[1462,470],[1463,470],[1463,470],[1464,470],[1464,470],[1465,470]],"dx":[471,407],"dy":[471,407],"length":717.1241099629939,"timing":[283,299,315,332,349,366,383,399,713,733,749,765,783,799,815,832,849,866,882,899,915,931,949,966,982,999,1016,1033,1049,1065,1082,1099,1116,1132,1149,1165,1183,1199,1216,1233,1248,1266,1282,1299,1315,1349]},{"start":[1464,470],"end":[1405,659],"points":[[1464,470],[1464,470],[1461,470],[1455,473],[1448,480],[1440,491],[1428,512],[1423,526],[1420,539],[1416,557],[1415,569],[1413,592],[1410,613],[1408,629],[1406,639],[1405,648],[1405,653],[1405,654],[1405,655],[1405,657],[1405,657],[1405,658],[1405,659],[1405,659],[1405,659],[1405,659]],"dx":[-59,189],"dy":[-59,189],"length":206.76229478631194,"timing":[250,263,280,297,313,330,347,364,380,396,414,430,446,463,480,496,513,530,546,563,580,596,613,631,654,686]},{"start":[1404,658],"end":[132,363],"points":[[1404,658],[1396,654],[1373,644],[1280,602],[1130,538],[1000,503],[900,494],[805,496],[746,510],[711,518],[646,523],[580,521],[525,512],[485,504],[460,497],[447,492],[435,485],[434,484],[422,476],[384,456],[352,441],[312,422],[280,407],[254,395],[228,383],[204,373],[188,366],[177,363],[169,360],[165,358],[164,358],[164,358],[164,359],[163,360],[163,361],[162,363],[160,364],[158,366],[156,368],[151,369],[150,370],[148,370],[145,370],[143,369],[140,367],[138,366],[134,365],[133,364],[132,363],[132,363],[132,363]],"dx":[-1272,-295],"dy":[-1272,-295],"length":1347.2575345095097,"timing":[293,313,330,347,363,379,397,413,430,446,463,480,496,513,530,546,563,819,830,847,863,880,897,913,931,946,964,980,996,1013,1030,1047,1071,1096,1113,1130,1145,1163,1179,1202,1213,1230,1246,1263,1280,1296,1313,1330,1346,1363,1413]},{"start":[132,363],"end":[917,820],"points":[[132,363],[132,363],[132,362],[132,362],[132,362],[132,362],[132,361],[133,361],[133,361],[134,360],[139,355],[159,342],[196,325],[276,301],[375,295],[489,298],[601,327],[684,355],[771,390],[815,409],[858,428],[890,442],[926,456],[940,462],[962,475],[974,489],[981,500],[991,523],[997,542],[1002,565],[1007,594],[1009,637],[1011,661],[1011,671],[1011,683],[1011,689],[1009,690],[1004,690],[1000,692],[992,694],[989,695],[986,697],[982,698],[979,698],[973,700],[971,700],[971,701],[970,706],[967,714],[963,722],[959,729],[956,736],[949,748],[948,751],[943,760],[940,766],[937,772],[935,776],[933,780],[931,784],[930,787],[929,789],[928,790],[928,791],[927,794],[926,797],[924,800],[923,804],[922,806],[921,808],[921,809],[919,814],[918,816],[917,818],[917,819],[917,820],[917,820]],"dx":[785,457],"dy":[785,457],"length":1278.5352512257,"timing":[108,124,132,147,164,181,196,214,231,247,264,280,297,314,330,347,364,381,397,414,430,448,464,480,497,513,530,547,564,580,597,614,630,647,664,680,697,714,731,747,763,781,797,813,830,847,1193,1214,1231,1247,1263,1280,1298,1314,1330,1347,1364,1380,1397,1414,1430,1447,1464,1480,1497,1514,1530,1547,1563,1580,1597,1614,1630,1647,1663,1680,1729]},{"start":[917,820],"end":[78,332],"points":[[917,820],[917,819],[917,819],[917,819],[917,819],[917,818],[917,818],[917,818],[916,817],[914,816],[905,810],[889,800],[855,780],[786,744],[697,707],[583,655],[543,635],[530,627],[460,585],[441,567],[438,558],[435,557],[410,540],[347,497],[295,461],[238,421],[181,383],[143,358],[117,343],[96,332],[88,328],[85,327],[81,325],[81,325],[81,326],[81,327],[81,330],[81,331],[81,332],[80,332],[80,332],[79,332],[79,332],[78,332],[78,332]],"dx":[-839,-488],"dy":[-839,-488],"length":988.4149054409877,"timing":[120,135,150,167,184,199,217,234,272,284,301,317,334,350,367,384,400,417,434,451,467,726,750,767,784,800,816,834,849,867,884,900,917,934,961,984,1000,1016,1033,1050,1067,1083,1101,1117,1134]},{"start":[78,332],"end":[889,435],"points":[[78,332],[80,332],[84,331],[90,329],[99,326],[116,320],[124,318],[156,309],[183,303],[215,298],[247,295],[281,293],[327,293],[370,293],[418,300],[470,313],[505,322],[548,334],[588,343],[625,348],[658,349],[676,346],[691,341],[707,337],[723,334],[734,334],[745,334],[755,334],[764,335],[774,336],[783,338],[788,340],[795,342],[800,344],[805,348],[809,352],[816,358],[832,377],[839,387],[847,397],[852,403],[855,409],[859,413],[862,416],[865,420],[868,424],[872,428],[875,431],[879,434],[881,436],[882,437],[883,437],[884,437],[884,437],[885,436],[885,436],[886,436],[886,436],[887,436],[888,436],[889,435],[889,435]],"dx":[811,103],"dy":[811,103],"length":868.6636940022652,"timing":[78,85,101,116,133,150,167,183,200,217,233,250,267,284,299,316,333,351,367,383,400,417,434,450,467,484,500,517,533,550,566,583,600,616,633,650,667,683,700,717,734,750,766,784,800,816,834,850,866,883,900,917,933,950,967,984,1000,1017,1034,1050,1067,1133]},{"start":[889,435],"end":[357,808],"points":[[889,435],[886,435],[870,442],[843,459],[783,508],[700,577],[662,605],[567,666],[535,682],[514,692],[485,704],[465,712],[445,722],[422,732],[399,744],[382,751],[366,758],[353,763],[350,765],[346,767],[344,768],[343,770],[342,773],[341,780],[341,785],[340,790],[339,795],[339,798],[339,800],[339,802],[339,803],[339,803],[339,803],[339,804],[340,804],[341,804],[342,804],[342,804],[343,804],[345,805],[346,806],[348,807],[349,807],[350,807],[351,807],[352,807],[354,807],[355,807],[356,807],[357,808],[357,808]],"dx":[-532,373],"dy":[-532,373],"length":699.275371414649,"timing":[329,343,359,376,393,409,425,443,459,475,492,509,526,542,559,576,592,614,625,642,659,676,692,710,725,742,759,775,793,808,825,842,860,876,892,909,926,943,959,976,992,1009,1026,1042,1059,1076,1093,1108,1126,1143,1176]},{"start":[357,808],"end":[913,487],"points":[[357,808],[357,807],[357,807],[357,807],[357,805],[362,798],[376,776],[400,740],[437,695],[504,634],[556,604],[630,575],[728,556],[761,551],[796,544],[813,539],[835,530],[850,522],[862,514],[874,507],[884,501],[894,495],[902,491],[907,489],[910,487],[912,487],[913,487],[913,487],[913,487],[913,487]],"dx":[556,-321],"dy":[556,-321],"length":669.2835685639166,"timing":[167,199,215,231,251,267,284,301,317,335,351,368,384,400,418,434,450,467,484,501,518,534,550,567,584,601,617,634,676,701]},{"start":[913,487],"end":[511,163],"points":[[913,487],[912,487],[909,487],[908,487],[906,488],[905,488],[905,488],[904,488],[903,488],[899,488],[885,486],[864,480],[849,475],[789,447],[746,422],[699,389],[654,350],[627,323],[601,293],[580,264],[561,238],[544,216],[536,205],[526,194],[522,190],[520,187],[519,186],[518,184],[517,182],[515,178],[514,174],[513,170],[512,166],[511,164],[511,163],[511,163]],"dx":[-402,-324],"dy":[-402,-324],"length":536.3443765253962,"timing":[84,96,113,130,146,162,180,196,213,229,246,263,280,296,313,330,346,363,379,397,413,429,446,463,479,497,513,530,546,563,580,596,613,630,647,730]},{"start":[512,163],"end":[1452,221],"points":[[512,163],[512,163],[512,163],[513,163],[514,163],[516,163],[518,163],[521,164],[524,164],[528,165],[540,168],[564,176],[620,192],[696,215],[798,237],[909,255],[977,262],[1027,263],[1080,262],[1118,251],[1135,244],[1144,241],[1151,238],[1159,235],[1163,234],[1167,234],[1171,234],[1177,234],[1227,231],[1284,230],[1358,230],[1403,235],[1415,237],[1431,240],[1438,241],[1440,242],[1441,242],[1441,242],[1441,242],[1441,242],[1441,242],[1442,241],[1442,240],[1442,240],[1443,239],[1444,236],[1446,233],[1448,230],[1450,226],[1451,223],[1452,222],[1452,221]],"dx":[940,58],"dy":[940,58],"length":970.86428072683,"timing":[102,113,131,147,163,180,196,213,231,247,263,280,297,314,330,346,364,380,396,413,430,447,464,480,497,513,530,768,796,813,830,847,863,879,896,913,930,947,1034,1050,1064,1080,1097,1114,1131,1147,1163,1180,1197,1213,1230,1246]},{"start":[1452,221],"end":[633,808],"points":[[1452,221],[1452,221],[1451,221],[1450,222],[1450,222],[1450,223],[1450,223],[1449,224],[1449,224],[1449,225],[1449,225],[1448,226],[1438,234],[1403,266],[1362,309],[1306,368],[1249,424],[1172,494],[1104,546],[1052,584],[992,629],[945,664],[921,681],[900,697],[874,714],[853,727],[827,745],[801,763],[786,773],[769,784],[754,792],[740,798],[733,802],[725,805],[719,807],[715,809],[711,811],[708,812],[704,813],[699,814],[695,814],[692,814],[691,814],[690,814],[689,814],[688,813],[688,813],[687,813],[687,813],[686,813],[685,813],[684,812],[681,811],[679,810],[677,810],[676,810],[675,811],[673,812],[672,812],[670,813],[668,813],[664,813],[661,812],[656,811],[651,811],[646,811],[641,811],[637,811],[634,810],[633,808],[633,808]],"dx":[-819,587],"dy":[-819,587],"length":1035.1688203708882,"timing":[85,100,116,132,149,165,182,199,216,232,249,266,282,299,316,333,349,365,382,399,416,432,449,466,482,499,516,533,549,566,583,599,616,632,649,666,682,699,715,732,749,766,782,799,816,833,849,865,882,899,916,933,949,965,982,999,1016,1032,1049,1066,1083,1099,1115,1133,1149,1166,1182,1199,1216,1232,1266]},{"start":[633,808],"end":[213,206],"points":[[633,808],[632,800],[620,765],[590,707],[541,638],[476,562],[434,515],[384,459],[358,430],[332,402],[322,389],[314,375],[310,365],[308,355],[307,346],[307,338],[307,329],[307,329],[305,327],[296,317],[278,297],[264,281],[244,257],[237,248],[231,241],[228,237],[227,235],[226,234],[225,231],[223,228],[222,225],[220,221],[219,218],[218,216],[218,215],[218,214],[217,214],[217,213],[216,212],[215,210],[214,207],[213,206],[213,206],[213,206]],"dx":[-420,-602],"dy":[-420,-602],"length":746.7978544874128,"timing":[275,298,314,330,347,364,381,398,414,430,447,464,481,497,514,531,548,801,814,831,847,864,881,897,914,931,947,964,981,997,1014,1031,1048,1064,1081,1098,1114,1131,1147,1164,1181,1197,1214,1247]},{"start":[213,206],"end":[263,709],"points":[[213,206],[214,206],[217,206],[222,206],[226,206],[231,206],[235,206],[240,207],[248,208],[260,211],[275,215],[298,222],[320,232],[333,239],[345,249],[352,258],[357,269],[360,280],[363,302],[365,341],[365,392],[359,455],[351,500],[346,532],[340,560],[332,589],[326,605],[321,623],[317,640],[312,658],[308,669],[305,675],[300,683],[295,687],[291,689],[286,693],[282,694],[281,695],[280,695],[279,695],[278,696],[276,697],[273,701],[270,703],[269,704],[267,704],[267,705],[266,705],[266,706],[265,707],[264,708],[264,708],[264,709],[263,709]],"dx":[50,503],"dy":[50,503],"length":636.9634004664341,"timing":[86,99,115,131,149,165,182,198,215,232,248,265,282,299,315,331,348,365,382,398,415,432,448,465,482,498,515,532,548,565,581,599,615,632,648,665,682,698,715,731,749,765,782,798,815,831,848,865,881,898,915,932,949,981]},{"start":[318,616],"end":[1051,819],"points":[[318,616],[333,600],[345,588],[356,578],[366,569],[374,560],[382,553],[388,547],[394,542],[401,536],[408,530],[413,527],[417,524],[420,522],[422,522],[423,521],[425,521],[434,520],[480,519],[564,533],[678,587],[839,697],[868,721],[949,786],[993,817],[1003,823],[1013,828],[1020,831],[1022,831],[1022,831],[1022,831],[1021,831],[1020,831],[1021,831],[1025,829],[1031,827],[1039,824],[1043,822],[1048,820],[1050,819],[1051,819],[1051,819],[1051,819]],"dx":[733,203],"dy":[733,203],"length":869.0510898803739,"timing":[2,18,35,52,69,85,102,118,135,152,169,185,202,219,236,252,269,285,302,319,335,352,369,386,402,419,436,452,468,485,521,536,552,782,803,819,835,852,869,886,902,919,1036]},{"start":[1051,819],"end":[758,828],"points":[[1051,819],[1050,818],[1047,817],[1045,815],[1036,809],[1025,801],[1011,791],[992,779],[977,773],[953,765],[938,765],[916,768],[904,776],[891,785],[883,792],[874,801],[870,805],[863,811],[858,814],[853,817],[848,819],[844,820],[840,820],[835,821],[830,821],[822,821],[810,821],[797,822],[782,824],[774,825],[767,826],[762,827],[760,828],[759,828],[758,828]],"dx":[-293,9],"dy":[-293,9],"length":326.5340348163643,"timing":[189,197,213,230,246,263,280,296,313,330,347,363,380,397,413,430,446,464,480,497,513,530,547,563,580,597,614,630,647,663,680,697,713,729,763]},{"start":[758,827],"end":[956,356],"points":[[758,827],[769,805],[790,769],[815,730],[839,688],[862,644],[881,601],[891,571],[902,538],[911,511],[918,493],[928,465],[934,446],[939,431],[943,420],[946,410],[948,405],[949,402],[952,397],[954,392],[956,387],[957,385],[957,383],[957,382],[957,382],[957,382],[957,382],[957,382],[957,379],[957,374],[957,368],[957,364],[957,360],[957,358],[957,356],[956,356],[956,356],[956,356]],"dx":[198,-471],"dy":[198,-471],"length":516.8116896767153,"timing":[239,263,280,296,312,329,346,363,380,396,413,430,446,463,479,496,513,529,546,563,579,596,618,634,714,729,747,1113,1129,1146,1163,1180,1196,1213,1229,1246,1263,1279]},{"start":[956,356],"end":[422,613],"points":[[956,356],[956,356],[956,357],[956,357],[956,357],[956,357],[955,358],[950,363],[932,378],[898,406],[854,441],[802,479],[702,546],[635,588],[575,622],[519,650],[488,661],[466,669],[446,674],[432,677],[425,677],[415,677],[411,677],[406,677],[403,677],[401,676],[400,675],[399,674],[399,672],[399,671],[400,666],[401,662],[402,659],[404,655],[405,652],[406,649],[407,647],[408,644],[410,640],[413,634],[416,628],[417,624],[419,619],[420,616],[421,614],[421,613],[422,613]],"dx":[-534,257],"dy":[-534,257],"length":720.2846505279498,"timing":[148,164,180,196,220,233,250,266,283,299,316,333,349,365,382,400,417,433,449,466,483,499,516,533,549,566,582,599,616,632,649,666,683,699,716,733,750,765,782,799,816,833,850,866,882,900,916]},{"start":[423,611],"end":[1406,341],"points":[[423,611],[455,585],[555,524],[697,463],[870,411],[992,382],[1138,355],[1212,346],[1260,345],[1308,345],[1321,345],[1331,346],[1339,347],[1345,347],[1356,347],[1368,345],[1379,344],[1385,344],[1391,344],[1394,344],[1395,344],[1396,344],[1397,344],[1400,343],[1403,343],[1404,342],[1405,342],[1406,341]],"dx":[983,-270],"dy":[983,-270],"length":1037.3058958842125,"timing":[377,397,413,430,447,463,480,497,514,530,546,563,580,597,613,630,646,664,680,697,713,730,747,764,780,796,813,831]},{"start":[1400,341],"end":[1068,497],"points":[[1400,341],[1396,341],[1394,341],[1388,340],[1384,339],[1381,338],[1373,336],[1353,328],[1339,325],[1325,322],[1316,321],[1308,321],[1304,320],[1294,320],[1275,322],[1251,330],[1217,343],[1186,356],[1169,366],[1154,377],[1140,391],[1129,408],[1116,432],[1105,456],[1097,473],[1090,489],[1085,498],[1083,502],[1081,504],[1079,507],[1077,509],[1074,511],[1072,514],[1070,515],[1069,516],[1069,516],[1068,516],[1068,516],[1068,515],[1068,515],[1068,514],[1068,513],[1068,511],[1068,510],[1068,508],[1068,506],[1068,504],[1068,501],[1068,499],[1068,498],[1068,497]],"dx":[-332,156],"dy":[-332,156],"length":446.5995153111686,"timing":[7,23,39,57,73,89,106,122,139,156,173,189,206,223,240,256,273,290,307,323,339,356,373,390,407,423,439,456,474,490,506,523,540,557,573,589,607,1081,1107,1124,1140,1157,1173,1189,1206,1223,1239,1256,1273,1290,1323]},{"start":[1067,497],"end":[599,514],"points":[[1067,497],[1040,498],[997,498],[956,493],[909,485],[881,481],[855,479],[836,479],[823,479],[813,479],[805,480],[797,482],[784,486],[738,503],[730,505],[717,509],[697,513],[678,515],[663,516],[644,516],[634,516],[623,516],[616,516],[611,516],[608,516],[605,515],[603,515],[601,515],[600,514],[599,514]],"dx":[-468,17],"dy":[-468,17],"length":475.2685950998779,"timing":[307,333,350,366,383,400,416,433,450,467,483,500,517,576,583,599,616,633,649,666,683,700,716,733,749,766,783,800,817,833]},{"start":[599,514],"end":[771,741],"points":[[599,514],[599,514],[599,513],[599,513],[600,513],[600,513],[601,513],[601,512],[603,512],[611,512],[626,516],[650,528],[680,546],[706,564],[719,576],[734,590],[743,601],[749,609],[754,617],[756,621],[760,632],[761,640],[762,646],[763,653],[764,658],[764,664],[764,669],[764,676],[764,684],[764,690],[764,695],[764,699],[764,702],[764,704],[765,708],[767,714],[767,716],[768,717],[768,718],[769,719],[769,723],[769,727],[770,732],[770,736],[770,739],[771,740],[771,740],[771,741]],"dx":[172,227],"dy":[172,227],"length":322.1034850906997,"timing":[134,199,223,254,280,297,314,331,347,364,381,397,414,430,447,463,481,497,514,530,547,564,580,597,613,630,647,664,681,697,713,731,747,763,780,797,814,830,847,864,881,897,913,930,947,964,980,997]},{"start":[771,740],"end":[253,696],"points":[[771,740],[771,739],[771,738],[771,735],[771,731],[771,726],[771,720],[771,714],[771,710],[772,705],[772,703],[772,698],[770,694],[765,688],[753,681],[728,672],[667,664],[614,664],[563,664],[508,671],[480,675],[455,679],[439,681],[429,682],[425,682],[421,682],[418,682],[417,682],[416,682],[416,682],[414,682],[398,683],[377,685],[352,686],[338,687],[322,688],[309,689],[298,689],[287,690],[276,691],[268,693],[262,694],[258,695],[255,696],[254,696],[253,696]],"dx":[-518,-44],"dy":[-518,-44],"length":572.5437755358532,"timing":[62,73,89,106,122,139,155,173,189,206,222,240,256,273,290,306,322,339,356,372,389,406,423,439,456,473,490,506,523,774,789,807,823,840,856,872,889,906,923,939,955,973,990,1006,1023,1039]},{"start":[254,695],"end":[1594,788],"points":[[254,695],[255,694],[258,692],[263,688],[271,682],[280,676],[289,669],[299,663],[308,658],[316,654],[323,651],[329,648],[341,643],[383,633],[470,623],[581,619],[698,617],[806,613],[913,605],[1015,599],[1109,598],[1205,599],[1269,612],[1320,629],[1365,649],[1386,659],[1399,666],[1411,671],[1418,673],[1419,673],[1420,673],[1423,673],[1434,678],[1463,692],[1517,717],[1546,730],[1574,743],[1584,747],[1593,752],[1594,753],[1595,753],[1596,754],[1596,754],[1596,754],[1597,754],[1597,754],[1597,758],[1596,766],[1596,774],[1595,780],[1595,784],[1594,787],[1594,788],[1594,788]],"dx":[1340,93],"dy":[1340,93],"length":1426.521686280412,"timing":[54,64,81,97,113,130,147,163,180,196,213,230,247,263,280,297,314,330,346,364,380,396,413,430,447,464,480,496,513,530,749,764,780,796,814,831,847,863,887,897,913,930,947,963,983,1161,1180,1197,1213,1230,1247,1263,1280,1296]},{"start":[1627,815],"end":[801,170],"points":[[1627,815],[1625,815],[1615,814],[1587,804],[1519,763],[1385,658],[1366,642],[1219,520],[1161,478],[1111,446],[1062,417],[1039,405],[1017,393],[1009,388],[1003,384],[1000,380],[997,375],[997,375],[987,365],[965,341],[943,316],[918,287],[906,271],[892,255],[884,244],[877,235],[871,229],[865,222],[859,214],[855,209],[852,206],[851,205],[850,204],[849,204],[849,203],[847,202],[843,198],[834,192],[826,186],[815,179],[810,175],[805,172],[803,170],[801,170],[801,170],[801,170]],"dx":[-826,-645],"dy":[-826,-645],"length":1060.2279479690178,"timing":[243,264,281,297,314,331,347,364,381,398,414,431,447,464,480,497,514,761,781,797,814,829,847,864,879,897,913,930,947,964,980,997,1014,1031,1047,1064,1080,1098,1114,1130,1148,1163,1181,1197,1214,1281]},{"start":[801,170],"end":[1603,801],"points":[[801,170],[801,170],[801,170],[802,170],[802,170],[802,170],[802,170],[803,170],[803,170],[805,170],[817,172],[859,193],[928,229],[1017,277],[1113,327],[1174,360],[1249,401],[1328,444],[1391,482],[1438,524],[1488,582],[1527,643],[1552,684],[1573,714],[1594,739],[1602,747],[1609,753],[1609,754],[1607,760],[1607,764],[1606,767],[1605,768],[1605,770],[1605,770],[1605,772],[1605,772],[1604,775],[1604,779],[1604,786],[1604,792],[1603,797],[1603,800],[1603,801],[1603,802],[1603,801],[1603,801],[1603,801]],"dx":[802,631],"dy":[802,631],"length":1069.6516267570585,"timing":[98,106,118,136,152,168,187,202,219,236,253,268,285,303,319,336,351,369,385,402,419,434,452,468,485,501,519,795,819,835,852,868,884,902,918,935,952,969,985,1002,1018,1036,1052,1069,1110,1135,1219]},{"start":[1602,801],"end":[884,147],"points":[[1602,801],[1594,796],[1561,767],[1479,685],[1397,604],[1322,536],[1267,487],[1192,425],[1149,394],[1108,364],[1061,332],[1013,299],[995,285],[982,276],[970,266],[964,261],[959,256],[958,253],[955,250],[953,246],[950,243],[947,239],[943,235],[942,233],[941,232],[940,230],[929,215],[924,207],[917,196],[912,189],[907,182],[903,177],[901,172],[897,167],[894,162],[890,157],[888,153],[886,150],[885,148],[884,147],[884,147],[884,147]],"dx":[-718,-654],"dy":[-718,-654],"length":977.9324500859947,"timing":[279,299,315,333,349,365,382,399,415,432,449,466,482,499,516,532,549,565,582,599,616,631,649,665,1017,1031,1050,1065,1082,1099,1116,1132,1149,1165,1183,1198,1215,1232,1248,1266,1282,1324]},{"start":[884,147],"end":[1340,275],"points":[[884,147],[884,147],[884,147],[884,147],[885,147],[885,148],[891,149],[911,158],[942,170],[985,187],[1020,199],[1062,212],[1094,224],[1120,233],[1143,243],[1156,249],[1171,258],[1183,265],[1195,272],[1204,279],[1214,284],[1224,290],[1234,295],[1240,297],[1244,298],[1245,299],[1249,299],[1252,299],[1256,298],[1262,296],[1268,296],[1276,295],[1284,294],[1296,292],[1307,288],[1317,284],[1327,281],[1332,279],[1336,277],[1339,276],[1340,276],[1340,276],[1340,275]],"dx":[456,128],"dy":[456,128],"length":493.7843363514009,"timing":[143,176,208,232,248,266,282,298,315,330,347,365,382,398,414,432,449,465,482,499,515,530,549,565,581,598,615,632,648,665,682,698,714,732,748,766,782,797,816,832,848,865,898]},{"start":[1341,277],"end":[1595,392],"points":[[1341,277],[1342,279],[1346,286],[1351,293],[1358,301],[1364,308],[1378,324],[1391,341],[1399,353],[1401,353],[1412,357],[1428,363],[1447,371],[1461,376],[1478,383],[1494,389],[1506,393],[1517,396],[1524,398],[1534,401],[1540,402],[1549,405],[1555,407],[1560,410],[1566,412],[1569,413],[1571,414],[1572,415],[1574,415],[1574,414],[1576,412],[1578,411],[1580,409],[1582,407],[1585,405],[1587,403],[1588,400],[1590,398],[1592,396],[1593,395],[1594,394],[1595,393],[1595,393],[1595,392],[1595,392]],"dx":[254,115],"dy":[254,115],"length":314.43145951242144,"timing":[326,338,355,371,387,405,421,437,453,738,754,771,788,804,820,839,854,870,888,903,921,938,954,971,988,1005,1021,1037,1055,1071,1087,1104,1121,1138,1154,1171,1187,1205,1221,1238,1254,1270,1287,1303,1371]},{"start":[1913,873],"end":[896,69],"points":[[1913,873],[1912,872],[1910,870],[1905,867],[1877,851],[1799,814],[1696,766],[1571,704],[1441,632],[1312,527],[1264,463],[1230,400],[1201,343],[1172,293],[1146,242],[1121,185],[1105,145],[1094,112],[1081,77],[1063,40],[1052,24],[1037,12],[1032,11],[1030,11],[1028,11],[1026,11],[1025,13],[1024,14],[1023,16],[1020,22],[1012,29],[995,38],[984,43],[981,44],[979,44],[978,43],[974,41],[971,41],[970,40],[969,40],[968,40],[961,44],[928,60],[905,66],[896,69]],"dx":[-1017,-804],"dy":[-1017,-804],"length":1445.6608064538998,"timing":[174.7000002861023,198.90000009536743,206.60000038146973,219.40000009536743,235.40000009536743,252.10000038146973,268.5,285.2000002861023,302.1000003814697,318.90000009536743,335.30000019073486,352,369.1000003814697,385.2000002861023,402.5,418.6000003814697,435.40000009536743,452.1000003814697,468.7000002861023,485.30000019073486,501.90000009536743,518.6000003814697,535.4000000953674,551.9000000953674,568.7000002861023,585.3000001907349,602,618.7000002861023,635.3000001907349,652.1000003814697,668.7000002861023,685.4000000953674,702.1000003814697,718.7000002861023,790.5,802.2000002861023,818.8000001907349,835.5,852.2000002861023,868.9000000953674,885.5,902.2000002861023,919.1000003814697,935.7000002861023,952.4000000953674]},{"start":[897,70],"end":[2468,835],"points":[[897,70],[898,70],[899,71],[900,71],[901,72],[904,72],[913,77],[939,89],[1018,125],[1152,188],[1417,322],[1582,412],[1743,492],[1890,567],[2020,618],[2124,653],[2211,681],[2256,699],[2292,712],[2318,724],[2340,734],[2358,746],[2373,756],[2388,769],[2402,784],[2419,803],[2439,822],[2455,833],[2468,841],[2477,844],[2480,845],[2479,844],[2475,843],[2470,837],[2469,836],[2468,835]],"dx":[1571,765],"dy":[1571,765],"length":1788.2883323105816,"timing":[13.600000381469727,117.60000038146973,181.60000038146973,197.40000009536743,205.40000009536743,218.5,235.2000002861023,251.80000019073486,268.6000003814697,285.2000002861023,301.80000019073486,318.6000003814697,335.2000002861023,352,368.6000003814697,385.30000019073486,402.1000003814697,418.7000002861023,435.30000019073486,452.1000003814697,468.7000002861023,485.30000019073486,502.1000003814697,518.7000002861023,535.4000000953674,552.2000002861023,568.9000000953674,585.7000002861023,602.2000002861023,618.9000000953674,635.5,661.4000000953674,670.2000002861023,685.6000003814697,702.3000001907349,813.6000003814697]},{"start":[2468,834],"end":[342,575],"points":[[2468,834],[2467,833],[2466,833],[2465,833],[2438,828],[2338,812],[2188,800],[2008,788],[1810,778],[1599,767],[1400,754],[1227,737],[1077,720],[952,701],[867,691],[810,684],[766,683],[745,683],[722,683],[698,683],[662,683],[622,680],[588,676],[560,669],[540,662],[519,653],[499,644],[480,638],[467,633],[461,631],[448,627],[425,624],[388,616],[370,611],[364,608],[365,607],[365,606],[365,605],[365,604],[365,602],[365,600],[366,598],[366,596],[366,595],[364,592],[360,589],[353,584],[343,577],[342,576],[342,575]],"dx":[-2126,-259],"dy":[-2126,-259],"length":2169.1170846744585,"timing":[164.5,212.2999997138977,220.2999997138977,235.69999980926514,252.2999997138977,269,285.69999980926514,302.40000009536743,319,335.69999980926514,352.40000009536743,369.09999990463257,385.7999997138977,402.5,419.09999990463257,435.7999997138977,452.5,469.09999990463257,485.90000009536743,502.5,519.0999999046326,535.9000000953674,552.5999999046326,569.2999997138977,585.9000000953674,602.5999999046326,619.2999997138977,636,652.5999999046326,669.2999997138977,686,702.6999998092651,719.2999997138977,736,752.7999997138977,780.1999998092651,820.4000000953674,869.4000000953674,886.1999998092651,903,919.5999999046326,936.1999998092651,952.9000000953674,969.5,986.2999997138977,1003,1019.5999999046326,1036.2999997138977,1053,1069.5999999046326]},{"start":[346,577],"end":[2247,1197],"points":[[346,577],[351,579],[363,580],[378,581],[396,582],[411,582],[425,582],[440,582],[454,581],[469,579],[481,576],[494,574],[523,574],[584,572],[670,572],[759,574],[847,578],[933,588],[1028,610],[1149,644],[1277,685],[1448,746],[1541,783],[1633,820],[1715,856],[1801,896],[1886,946],[1956,995],[2004,1030],[2044,1064],[2078,1086],[2122,1113],[2175,1145],[2235,1183],[2248,1194],[2249,1197],[2248,1197],[2247,1197]],"dx":[1901,620],"dy":[1901,620],"length":2054.9267800767525,"timing":[0.9000000953674316,17.5,34.09999990463257,50.80000019073486,67.5,84.2000002861023,100.90000009536743,117.5,134.30000019073486,150.90000009536743,167.5,184.2000002861023,201,217.59999990463257,234.30000019073486,251.09999990463257,267.80000019073486,284.30000019073486,301.30000019073486,317.80000019073486,334.5,351.30000019073486,367.80000019073486,384.59999990463257,401.30000019073486,417.80000019073486,434.5,451.09999990463257,467.80000019073486,484.40000009536743,501.09999990463257,518.0999999046326,534.5999999046326,551.2000002861023,567.9000000953674,584.5999999046326,601.3000001907349,618.3000001907349]},{"start":[2247,1194],"end":[148,620],"points":[[2247,1194],[2247,1193],[2246,1193],[2245,1192],[2243,1190],[2242,1189],[2241,1189],[2239,1187],[2237,1185],[2234,1184],[2223,1178],[2184,1163],[2104,1136],[1987,1103],[1851,1072],[1693,1040],[1532,1006],[1354,973],[1098,915],[959,876],[852,840],[768,805],[698,775],[636,752],[579,733],[529,715],[487,697],[459,687],[438,679],[422,674],[401,668],[356,657],[329,652],[314,647],[309,645],[308,644],[307,644],[304,644],[293,643],[272,641],[246,638],[215,635],[184,630],[160,624],[161,623],[164,622],[169,621],[170,621],[169,621],[167,621],[163,621],[157,621],[154,621],[152,621],[151,621],[150,620],[149,620],[148,620]],"dx":[-2099,-574],"dy":[-2099,-574],"length":2205.9139249087802,"timing":[25,97.2999997138977,112.90000009536743,128.90000009536743,144.90000009536743,152.90000009536743,168.19999980926514,185.59999990463257,201.69999980926514,218.5,234.90000009536743,252.09999990463257,268.5,285,301.7999997138977,318.40000009536743,335.09999990463257,352.2999997138977,369.19999980926514,385.09999990463257,401.7999997138977,418.40000009536743,435.19999980926514,451.90000009536743,468.5,485.19999980926514,501.7999997138977,518.6999998092651,535.5,552,568.5999999046326,585.2999997138977,602,618.5999999046326,635.2999997138977,652,672.6999998092651,685.2999997138977,702,718.5999999046326,735.4000000953674,752,768.6999998092651,785.4000000953674,808.7999997138977,818.6999998092651,835.5,852.0999999046326,968.9000000953674,985.5,1002.1999998092651,1018.9000000953674,1035.5999999046326,1052.2999997138977,1069,1085.5999999046326,1112.7999997138977,1120.7999997138977]},{"start":[149,619],"end":[244,237],"points":[[149,619],[150,619],[151,619],[154,620],[156,621],[157,621],[158,621],[159,621],[163,621],[172,617],[194,606],[226,584],[246,568],[255,550],[259,536],[259,507],[251,479],[237,454],[224,434],[216,422],[210,414],[209,408],[208,402],[208,394],[209,385],[209,377],[209,366],[209,360],[211,354],[212,349],[215,345],[217,341],[220,337],[222,333],[222,329],[222,325],[222,322],[222,319],[221,312],[220,306],[220,301],[219,296],[219,293],[219,288],[219,280],[220,272],[222,264],[225,256],[226,252],[227,248],[229,247],[230,246],[232,245],[234,243],[238,241],[241,239],[243,238],[244,237]],"dx":[95,-382],"dy":[95,-382],"length":474.40675470912885,"timing":[46.90000009536743,102.59999990463257,118.7000002861023,135.09999990463257,151.80000019073486,168.5,185.2000002861023,202.2000002861023,218.5,235.30000019073486,251.90000009536743,268.90000009536743,285.30000019073486,302.2000002861023,318.7000002861023,335.40000009536743,352,368.7000002861023,385.30000019073486,402.2000002861023,419,435.59999990463257,452.09999990463257,468.7000002861023,485.5,502.30000019073486,518.8000001907349,535.5,552.2000002861023,569.0999999046326,585.5,602.2000002861023,618.9000000953674,635.5999999046326,652.4000000953674,669,685.7000002861023,702.4000000953674,719,735.7000002861023,752.5,769.0999999046326,785.8000001907349,802.5,819.0999999046326,835.9000000953674,852.5999999046326,869.2000002861023,885.9000000953674,902.8000001907349,919.4000000953674,936,952.7000002861023,969.3000001907349,985.9000000953674,1002.7000002861023,1019.4000000953674,1035.9000000953674]},{"start":[2490,1170],"end":[965,209],"points":[[2490,1170],[2490,1169],[2490,1167],[2490,1166],[2489,1166],[2488,1166],[2480,1165],[2413,1148],[2243,1098],[1999,1003],[1636,824],[1437,654],[1319,514],[1269,443],[1256,405],[1254,378],[1252,364],[1252,357],[1252,355],[1251,353],[1230,329],[1195,299],[1157,276],[1140,265],[1130,260],[1123,256],[1112,253],[1101,249],[1090,246],[1081,240],[1075,237],[1074,236],[1072,235],[1067,234],[1057,233],[1047,233],[1039,231],[1031,229],[1020,225],[992,215],[970,210],[965,209]],"dx":[-1525,-961],"dy":[-1525,-961],"length":1879.556892554698,"timing":[0,16.600000381469727,33.200000286102295,56,304.30000019073486,317,333.5,350.2000002861023,366.90000009536743,383.6000003814697,400.2000002861023,417,433.6000003814697,450.5,467.1000003814697,483.7000002861023,500.30000019073486,517.2000002861023,533.9000000953674,583.8000001907349,600.4000000953674,617.1000003814697,633.7000002861023,650.4000000953674,667.1000003814697,683.8000001907349,700.5,717.2000002861023,733.9000000953674,750.5,767.2000002861023,783.8000001907349,800.6000003814697,817.2000002861023,833.9000000953674,850.8000001907349,867.3000001907349,884,900.7000002861023,917.6000003814697,934.1000003814697,950.9000000953674]},{"start":[965,208],"end":[1685,241],"points":[[965,208],[966,207],[967,207],[968,206],[974,204],[983,204],[1001,203],[1015,206],[1030,210],[1057,220],[1110,231],[1171,244],[1231,253],[1286,261],[1337,269],[1374,276],[1395,280],[1416,283],[1424,283],[1430,283],[1440,282],[1457,282],[1484,282],[1513,282],[1531,282],[1538,282],[1539,282],[1545,280],[1551,278],[1556,276],[1561,273],[1567,270],[1574,268],[1580,265],[1585,261],[1590,259],[1594,256],[1599,254],[1605,251],[1615,249],[1619,248],[1622,247],[1624,247],[1628,247],[1633,247],[1638,247],[1642,247],[1644,246],[1646,245],[1652,244],[1664,242],[1681,241],[1685,241]],"dx":[720,33],"dy":[720,33],"length":738.1617030366565,"timing":[139.39999961853027,195.19999980926514,203.19999980926514,217.59999990463257,234.2999997138977,251.09999990463257,267.59999990463257,284.2999997138977,301,317.59999990463257,334.2999997138977,351,367.7999997138977,384.3999996185303,401.09999990463257,417.69999980926514,434.3999996185303,451.09999990463257,467.7999997138977,484.3999996185303,501.09999990463257,517.8999996185303,534.3999996185303,551.1999998092651,567.7999997138977,584.5,635.3999996185303,651.2999997138977,667.8999996185303,684.5999999046326,701.3999996185303,718,734.5999999046326,751.3999996185303,768.0999999046326,784.7999997138977,801.5,818.0999999046326,834.6999998092651,851.3999996185303,868.0999999046326,884.7999997138977,901.5,918.3999996185303,934.7999997138977,951.5,968.1999998092651,984.8999996185303,1001.5999999046326,1018.2999997138977,1034.8999996185303,1051.5,1068.2999997138977]},{"start":[1770,204],"end":[1014,679],"points":[[1770,204],[1768,205],[1764,207],[1760,210],[1746,219],[1726,235],[1674,274],[1623,308],[1554,344],[1490,376],[1448,404],[1420,424],[1399,438],[1378,450],[1355,462],[1325,472],[1296,483],[1260,503],[1245,514],[1225,526],[1208,538],[1187,548],[1173,557],[1164,563],[1157,566],[1154,569],[1151,571],[1148,574],[1143,580],[1133,592],[1127,602],[1117,610],[1106,617],[1093,626],[1074,638],[1056,648],[1045,655],[1035,661],[1027,664],[1021,669],[1017,673],[1015,676],[1014,677],[1014,678],[1014,679]],"dx":[-756,475],"dy":[-756,475],"length":900.4184710632451,"timing":[213.5,229.30000019073486,237.2000002861023,251.80000019073486,268.40000009536743,285.09999990463257,301.7000002861023,318.40000009536743,335.09999990463257,351.80000019073486,368.40000009536743,385.09999990463257,401.80000019073486,418.5,435.2000002861023,451.90000009536743,468.5,485.30000019073486,501.90000009536743,518.5,535.2000002861023,551.9000000953674,568.5999999046326,585.4000000953674,602,618.7000002861023,635.4000000953674,652,668.7000002861023,685.4000000953674,702.0999999046326,718.7000002861023,735.4000000953674,752.0999999046326,768.8000001907349,785.5999999046326,802.0999999046326,818.9000000953674,835.4000000953674,852.2000002861023,868.9000000953674,885.5999999046326,902.2000002861023,952.3000001907349,1069.3000001907349]},{"start":[1014,678],"end":[992,521],"points":[[1014,678],[1015,678],[1016,677],[1016,675],[1016,674],[1016,672],[1017,667],[1017,659],[1019,647],[1019,630],[1019,607],[1018,595],[1014,582],[1009,570],[1003,558],[998,547],[995,541],[995,540],[994,539],[994,538],[994,537],[993,537],[992,537],[992,536],[992,534],[992,533],[992,531],[992,528],[992,525],[992,523],[992,521]],"dx":[-22,-157],"dy":[-22,-157],"length":165.94369455755586,"timing":[119.59999990463257,135.40000009536743,152.09999990463257,231.40000009536743,239.2000002861023,252.09999990463257,268.90000009536743,285.40000009536743,302.2000002861023,318.90000009536743,335.59999990463257,352.2000002861023,368.80000019073486,385.59999990463257,402.2000002861023,418.90000009536743,435.5,452.30000019073486,469,485.59999990463257,511.2000002861023,559.3000001907349,770.3000001907349,951.7000002861023,986.0999999046326,1002.8000001907349,1019.5,1036.2000002861023,1052.8000001907349,1069.5,1086.0999999046326]},{"start":[995,522],"end":[1365,1187],"points":[[995,522],[1002,528],[1017,541],[1043,569],[1079,617],[1123,678],[1172,744],[1225,809],[1273,865],[1307,905],[1327,932],[1335,947],[1340,961],[1345,978],[1352,1001],[1357,1021],[1364,1042],[1371,1065],[1381,1092],[1387,1111],[1389,1122],[1390,1125],[1390,1126],[1389,1127],[1389,1129],[1389,1131],[1388,1134],[1388,1137],[1388,1139],[1388,1142],[1388,1146],[1388,1149],[1387,1152],[1386,1154],[1385,1155],[1384,1156],[1384,1157],[1384,1158],[1383,1160],[1382,1162],[1382,1164],[1382,1165],[1381,1165],[1380,1167],[1379,1169],[1379,1172],[1377,1173],[1375,1175],[1372,1177],[1368,1181],[1366,1185],[1365,1187]],"dx":[370,665],"dy":[370,665],"length":803.6797670428522,"timing":[252.69999980926514,268.40000009536743,285,301.69999980926514,318.59999990463257,335.19999980926514,352,368.5,385.19999980926514,401.90000009536743,418.59999990463257,435.30000019073486,452,468.69999980926514,485.40000009536743,502,518.8000001907349,535.4000000953674,552,568.6999998092651,585.4000000953674,602.0999999046326,740.6999998092651,752.1999998092651,768.9000000953674,785.5999999046326,802.1999998092651,819,835.5999999046326,852.5,870.0999999046326,886.8000001907349,902.4000000953674,919,935.6999998092651,952.5,969.1999998092651,985.8000001907349,1002.5999999046326,1019.3000001907349,1035.8000001907349,1052.9000000953674,1069.0999999046326,1119.1999998092651,1135.9000000953674,1152.5999999046326,1169.1999998092651,1185.9000000953674,1202.5999999046326,1219.4000000953674,1235.9000000953674,1252.6999998092651]},{"start":[1365,1186],"end":[1093,884],"points":[[1365,1186],[1365,1185],[1364,1185],[1364,1183],[1361,1179],[1357,1175],[1349,1164],[1327,1142],[1293,1108],[1249,1068],[1178,1012],[1143,987],[1124,971],[1114,960],[1106,948],[1102,935],[1096,925],[1093,915],[1088,906],[1084,896],[1077,884],[1072,874],[1071,869],[1071,868],[1072,868],[1074,868],[1078,870],[1085,877],[1090,881],[1092,883],[1093,883],[1093,884]],"dx":[-272,-302],"dy":[-272,-302],"length":471.0293362774822,"timing":[160.69999980926514,208.69999980926514,219,235.69999980926514,252.40000009536743,269,285.80000019073486,302.40000009536743,319.19999980926514,335.80000019073486,352.5,369.19999980926514,385.80000019073486,402.59999990463257,419.19999980926514,435.90000009536743,452.69999980926514,469.5,486.19999980926514,502.80000019073486,519.4000000953674,536,552.8000001907349,569.4000000953674,632.5,640.3000001907349,652.6999998092651,669.4000000953674,686.0999999046326,702.8000001907349,719.5,848.6999998092651]},{"start":[1091,883],"end":[94,605],"points":[[1091,883],[1087,883],[1076,880],[1056,874],[1000,853],[923,822],[824,781],[703,721],[513,629],[411,584],[330,552],[258,526],[190,505],[122,488],[68,478],[27,472],[3,469],[0,468],[0,467],[1,469],[1,470],[4,477],[10,488],[18,499],[29,510],[43,521],[56,530],[64,536],[69,540],[70,542],[70,543],[70,544],[70,545],[71,546],[71,547],[71,548],[71,549],[71,551],[71,554],[71,559],[71,564],[73,574],[80,586],[87,597],[92,603],[93,605],[94,605]],"dx":[-997,-278],"dy":[-997,-278],"length":1348.8891945399323,"timing":[257,268.5,285.09999990463257,301.80000019073486,318.5,335.09999990463257,351.80000019073486,368.7000002861023,385.40000009536743,402,418.59999990463257,435.2000002861023,452,468.7000002861023,485.30000019073486,502,518.8000001907349,535.4000000953674,552.5,609.0999999046326,618.7000002861023,635.4000000953674,652.0999999046326,668.9000000953674,685.5,702.2000002861023,718.9000000953674,735.5,752.0999999046326,769,785.5,802.2000002861023,819,835.5999999046326,889.3000001907349,904.8000001907349,919,935.7000002861023,952.4000000953674,969.0999999046326,985.7000002861023,1002.4000000953674,1019.0999999046326,1035.7000002861023,1052.5,1069.0999999046326,1085.9000000953674]},{"start":[95,605],"end":[1458,1164],"points":[[95,605],[96,605],[97,605],[98,605],[100,605],[112,605],[152,605],[230,611],[379,636],[494,668],[606,715],[713,762],[820,813],[907,851],[991,890],[1061,926],[1124,960],[1179,995],[1232,1029],[1286,1065],[1365,1115],[1413,1143],[1464,1172],[1519,1208],[1566,1237],[1582,1247],[1587,1252],[1587,1251],[1586,1247],[1582,1242],[1573,1235],[1546,1217],[1504,1190],[1470,1172],[1458,1165],[1457,1164],[1458,1164]],"dx":[1363,559],"dy":[1363,559],"length":1808.1744444046524,"timing":[92.40000009536743,156.2999997138977,180.5,188.19999980926514,201.5,218.19999980926514,235,251.5,268.19999980926514,284.90000009536743,301.59999990463257,318.2999997138977,335.09999990463257,351.59999990463257,368.2999997138977,385.09999990463257,401.69999980926514,418.2999997138977,435.19999980926514,451.69999980926514,468.5,485.09999990463257,501.7999997138977,518.5999999046326,535.1999998092651,548.1999998092651,636.7999997138977,652,668.5999999046326,685.4000000953674,701.9000000953674,718.5999999046326,735.2999997138977,751.9000000953674,768.6999998092651,785.4000000953674,1052.7999997138977]},{"start":[1458,1163],"end":[224,1056],"points":[[1458,1163],[1458,1162],[1457,1161],[1455,1159],[1445,1154],[1406,1140],[1322,1116],[1212,1091],[1080,1063],[952,1043],[780,1019],[684,1003],[614,992],[558,988],[515,985],[477,985],[443,985],[413,985],[384,988],[349,988],[315,989],[272,989],[265,990],[265,991],[265,992],[266,995],[266,998],[267,1001],[267,1004],[267,1008],[265,1011],[261,1018],[258,1022],[255,1025],[250,1028],[244,1030],[235,1034],[230,1037],[229,1038],[229,1039],[228,1039],[228,1040],[227,1041],[227,1043],[226,1046],[226,1048],[226,1049],[226,1050],[225,1051],[225,1052],[224,1053],[224,1055],[224,1056]],"dx":[-1234,-107],"dy":[-1234,-107],"length":1302.7429855189487,"timing":[136.69999980926514,185.5,240.5,252.30000019073486,268.90000009536743,285.59999990463257,302.30000019073486,319,335.59999990463257,352.5,369.09999990463257,385.69999980926514,402.5,419.09999990463257,435.80000019073486,452.59999990463257,469.30000019073486,485.90000009536743,502.59999990463257,519.1999998092651,535.9000000953674,552.5999999046326,569.3000001907349,619.3000001907349,636,652.6999998092651,669.3000001907349,685.9000000953674,702.8000001907349,719.4000000953674,736,752.8000001907349,769.4000000953674,786.0999999046326,802.8000001907349,819.4000000953674,836.1999998092651,852.9000000953674,869.5999999046326,886.5,903.0999999046326,919.5999999046326,936.3000001907349,953,969.5999999046326,986.3000001907349,1003.4000000953674,1019.8000001907349,1036.4000000953674,1053.0999999046326,1069.6999998092651,1086.3000001907349,1103.4000000953674]},{"start":[224,1055],"end":[2407,44],"points":[[224,1055],[224,1054],[225,1054],[227,1053],[229,1051],[236,1045],[247,1038],[269,1022],[325,990],[413,948],[589,856],[718,780],[847,705],[959,639],[1069,575],[1176,512],[1288,463],[1401,425],[1500,393],[1595,362],[1682,335],[1792,299],[1857,274],[1913,255],[1961,240],[2001,229],[2040,218],[2082,204],[2116,189],[2155,169],[2197,149],[2234,129],[2264,114],[2307,94],[2331,84],[2346,77],[2351,74],[2351,73],[2350,73],[2346,73],[2344,74],[2345,74],[2346,74],[2348,74],[2355,72],[2362,68],[2372,64],[2381,59],[2389,54],[2395,50],[2399,48],[2401,46],[2402,46],[2403,46],[2403,45],[2404,45],[2405,45],[2405,44],[2406,44],[2407,44]],"dx":[2183,-1011],"dy":[2183,-1011],"length":2434.6298534140064,"timing":[101.80000019073486,151.7000002861023,168.2000002861023,184.90000009536743,201.59999990463257,218.30000019073486,235,252.09999990463257,268.40000009536743,285,301.80000019073486,318.40000009536743,335.09999990463257,351.80000019073486,368.5,385.2000002861023,402.2000002861023,418.59999990463257,435.2000002861023,451.90000009536743,468.59999990463257,485.5,502,518.7000002861023,535.3000001907349,552,568.5999999046326,585.3000001907349,602,618.8000001907349,635.4000000953674,652.0999999046326,668.9000000953674,685.5,702.0999999046326,718.7000002861023,735.5,757.5,768.7000002861023,785.5,802.3000001907349,925.9000000953674,935.7000002861023,952.3000001907349,969,985.7000002861023,1002.5,1019,1035.8000001907349,1052.5,1069.0999999046326,1085.8000001907349,1102.5999999046326,1119.0999999046326,1135.8000001907349,1189.8000001907349,1237.5,1252.5,1269.0999999046326,1365.4000000953674]},{"start":[2406,44],"end":[2477,169],"points":[[2406,44],[2405,44],[2405,45],[2404,45],[2403,46],[2400,47],[2396,51],[2391,54],[2388,57],[2387,60],[2386,62],[2385,64],[2385,67],[2384,72],[2389,82],[2396,90],[2404,96],[2410,99],[2416,102],[2422,102],[2427,103],[2431,104],[2436,105],[2439,105],[2440,108],[2443,110],[2449,118],[2452,123],[2455,128],[2458,130],[2459,134],[2460,136],[2462,140],[2464,146],[2468,156],[2472,163],[2475,168],[2476,169],[2477,169]],"dx":[71,125],"dy":[71,125],"length":183.8573110998215,"timing":[18,68.09999990463257,84.90000009536743,101.5,118,134.7999997138977,152,168.90000009536743,184.90000009536743,201.59999990463257,218.40000009536743,235.09999990463257,251.69999980926514,268.40000009536743,285.09999990463257,301.69999980926514,318.40000009536743,335,351.90000009536743,368.40000009536743,385.2999997138977,402,418.90000009536743,435.09999990463257,451.7999997138977,468.69999980926514,485.09999990463257,501.90000009536743,518.5999999046326,535.1999998092651,551.9000000953674,568.9000000953674,585.1999998092651,602.0999999046326,618.5999999046326,635.2999997138977,651.7999997138977,668.5,685.1999998092651]},{"start":[2476,169],"end":[1154,1123],"points":[[2476,169],[2476,170],[2475,170],[2474,170],[2472,170],[2472,171],[2470,172],[2469,172],[2467,173],[2461,176],[2449,181],[2427,194],[2389,216],[2348,248],[2307,285],[2261,327],[2208,372],[2139,428],[2035,506],[1959,557],[1878,604],[1795,652],[1701,711],[1603,774],[1529,815],[1487,843],[1455,860],[1424,877],[1394,894],[1367,913],[1340,939],[1321,952],[1305,964],[1290,973],[1282,979],[1276,986],[1271,993],[1265,999],[1257,1007],[1249,1014],[1242,1021],[1237,1028],[1235,1031],[1233,1035],[1231,1037],[1230,1039],[1229,1042],[1228,1045],[1224,1049],[1218,1054],[1213,1057],[1209,1061],[1207,1063],[1204,1066],[1200,1070],[1194,1074],[1189,1078],[1187,1080],[1185,1082],[1181,1084],[1179,1086],[1178,1087],[1178,1088],[1177,1088],[1176,1090],[1170,1098],[1165,1105],[1161,1112],[1159,1114],[1158,1115],[1157,1116],[1157,1118],[1156,1119],[1154,1121],[1154,1122],[1154,1123]],"dx":[-1322,954],"dy":[-1322,954],"length":1645.95166367499,"timing":[80.5,96,104.09999990463257,118.30000019073486,135.09999990463257,151.7000002861023,168.30000019073486,185.40000009536743,201.7000002861023,218.30000019073486,235.09999990463257,251.90000009536743,268.80000019073486,285.2000002861023,301.90000009536743,318.40000009536743,335.2000002861023,351.80000019073486,368.59999990463257,385.30000019073486,402,418.5,435.40000009536743,452.09999990463257,468.80000019073486,485.40000009536743,502.2000002861023,518.5999999046326,535.3000001907349,551.9000000953674,568.7000002861023,585.5,602.0999999046326,618.8000001907349,635.5,652.3000001907349,669,685.5999999046326,702.2000002861023,718.9000000953674,735.7000002861023,752.2000002861023,768.9000000953674,785.5999999046326,802.3000001907349,819.0999999046326,835.5999999046326,852.3000001907349,869.0999999046326,885.8000001907349,902.3000001907349,918.9000000953674,935.8000001907349,952.4000000953674,968.9000000953674,985.7000002861023,1002.3000001907349,1019,1035.7000002861023,1052.4000000953674,1069,1086,1102.5,1119.0999999046326,1135.9000000953674,1152.5,1169.0999999046326,1185.8000001907349,1202.4000000953674,1219.3000001907349,1235.8000001907349,1252.5,1269.3000001907349,1285.9000000953674,1302.5,1319.3000001907349]},{"start":[1154,1122],"end":[2383,615],"points":[[1154,1122],[1154,1121],[1155,1120],[1155,1119],[1155,1118],[1155,1116],[1156,1116],[1156,1114],[1157,1113],[1157,1112],[1158,1110],[1158,1108],[1160,1106],[1168,1100],[1182,1090],[1222,1065],[1290,1028],[1430,956],[1538,898],[1662,837],[1775,775],[1884,718],[1992,662],[2091,620],[2185,585],[2258,555],[2309,526],[2347,501],[2388,472],[2405,460],[2413,452],[2416,446],[2418,441],[2422,436],[2427,433],[2430,432],[2430,434],[2429,441],[2427,461],[2426,477],[2426,490],[2429,500],[2430,510],[2430,520],[2428,530],[2425,538],[2421,545],[2418,553],[2417,558],[2417,561],[2416,561],[2415,561],[2415,562],[2413,563],[2412,566],[2410,568],[2409,570],[2406,575],[2401,586],[2392,599],[2384,613],[2383,615]],"dx":[1229,-507],"dy":[1229,-507],"length":1660.8866969490439,"timing":[0.09999990463256836,37.5,54.19999980926514,71.2999997138977,87.5,104.19999980926514,120.7999997138977,137.5,154.2999997138977,170.7999997138977,187.5,204.19999980926514,220.89999961853027,238.19999980926514,254.19999980926514,270.8999996185303,287.5,304.3999996185303,321,337.59999990463257,354.3999996185303,371,387.59999990463257,404.3999996185303,421,437.69999980926514,454.3999996185303,471.09999990463257,487.69999980926514,504.7999997138977,521.0999999046326,537.6999998092651,554.3999996185303,571.0999999046326,587.7999997138977,604.5,654.5999999046326,671.2999997138977,687.8999996185303,704.5999999046326,721.1999998092651,738.3999996185303,754.6999998092651,771.3999996185303,787.8999996185303,804.7999997138977,821.2999997138977,838,854.8999996185303,871.8999996185303,936,943.7999997138977,954.6999998092651,971.2999997138977,988.0999999046326,1004.6999998092651,1021.5,1038.0999999046326,1054.7999997138977,1071.5999999046326,1088.1999998092651,1104.8999996185303]},{"start":[2382,616],"end":[774,339],"points":[[2382,616],[2380,614],[2367,612],[2324,607],[2241,599],[2143,593],[2030,586],[1910,579],[1707,574],[1564,564],[1441,551],[1343,540],[1263,528],[1196,516],[1140,504],[1095,493],[1057,479],[1017,462],[973,441],[935,422],[876,393],[840,375],[821,367],[814,362],[812,361],[812,360],[812,359],[812,358],[812,357],[811,356],[808,353],[794,346],[782,341],[775,339],[774,339]],"dx":[-1608,-277],"dy":[-1608,-277],"length":1654.7623228621705,"timing":[225.69999980926514,236.5,253.09999990463257,269.8999996185303,286.59999990463257,303.19999980926514,319.8999996185303,336.5,353.3999996185303,369.8999996185303,386.59999990463257,403.3999996185303,419.8999996185303,436.59999990463257,453.2999997138977,470,486.69999980926514,503.2999997138977,520.0999999046326,536.7999997138977,553.3999996185303,570,586.7999997138977,603.5,620,636.7999997138977,656.8999996185303,670.0999999046326,688.8999996185303,703.5999999046326,720.1999998092651,736.7999997138977,753.5999999046326,770.1999998092651,786.7999997138977]},{"start":[775,339],"end":[674,572],"points":[[775,339],[776,339],[776,342],[775,345],[772,356],[772,372],[770,389],[765,407],[760,428],[751,443],[740,459],[733,468],[726,474],[722,481],[721,485],[720,489],[719,490],[719,491],[718,494],[715,498],[712,506],[710,513],[705,524],[701,531],[698,537],[692,546],[685,553],[680,561],[677,564],[677,565],[676,567],[675,568],[675,569],[675,570],[674,570],[674,571],[674,572]],"dx":[-101,233],"dy":[-101,233],"length":263.0861253818618,"timing":[161.80000019073486,185.90000009536743,241.80000019073486,252.80000019073486,269.40000009536743,286,302.80000019073486,319.30000019073486,336,352.90000009536743,369.40000009536743,386,402.90000009536743,419.40000009536743,436.1000003814697,452.7000002861023,469.5,486.1000003814697,502.90000009536743,519.5,536.2000002861023,552.9000000953674,569.6000003814697,586.3000001907349,602.9000000953674,619.5,636.2000002861023,653,669.7000002861023,686.4000000953674,703,719.7000002861023,736.3000001907349,753.1000003814697,809.8000001907349,819.7000002861023,841.5]},{"start":[675,571],"end":[187,837],"points":[[675,571],[676,570],[677,569],[678,569],[679,568],[680,567],[681,567],[682,567],[672,574],[647,589],[612,604],[571,622],[528,649],[482,679],[433,716],[381,754],[325,784],[268,803],[223,811],[202,815],[191,819],[190,819],[190,820],[191,820],[192,821],[192,822],[192,824],[192,827],[191,831],[190,834],[188,836],[187,837]],"dx":[-488,266],"dy":[-488,266],"length":588.7145572186395,"timing":[54.60000038146973,63.80000019073486,86.40000009536743,97.10000038146973,118.30000019073486,164,181.40000009536743,197.10000038146973,247.2000002861023,264,280.80000019073486,297.2000002861023,314,330.7000002861023,347.30000019073486,364.2000002861023,380.80000019073486,397.40000009536743,414.1000003814697,430.80000019073486,447.40000009536743,464,486.6000003814697,502.40000009536743,518.4000000953674,534.5,547.4000000953674,564.1000003814697,581,597.5,614.2000002861023,630.9000000953674]},{"start":[194,832],"end":[263,340],"points":[[194,832],[194,831],[195,831],[196,829],[201,827],[206,824],[212,821],[215,819],[217,818],[218,817],[221,815],[230,811],[251,802],[265,792],[273,778],[276,757],[276,727],[275,689],[270,645],[265,594],[257,540],[248,499],[242,471],[242,455],[242,436],[242,431],[242,427],[242,424],[241,420],[241,416],[241,413],[242,410],[242,408],[242,405],[242,403],[244,397],[247,389],[248,383],[249,378],[252,371],[255,363],[259,351],[262,344],[262,342],[262,341],[263,341],[263,340]],"dx":[69,-492],"dy":[69,-492],"length":544.7627535572461,"timing":[1.5,25.299999713897705,34.69999980926514,51.5,68.19999980926514,84.7999997138977,101.40000009536743,118.19999980926514,134.7999997138977,151.40000009536743,168.19999980926514,184.69999980926514,201.5,218.09999990463257,234.7999997138977,251.40000009536743,268.19999980926514,284.7999997138977,301.5,318.19999980926514,334.90000009536743,351.5,368.19999980926514,384.90000009536743,401.59999990463257,418.2999997138977,434.90000009536743,451.59999990463257,468.2999997138977,485,501.59999990463257,518.4000000953674,535.0999999046326,551.6999998092651,568.4000000953674,585.0999999046326,601.6999998092651,618.4000000953674,635.0999999046326,651.7999997138977,668.5,685.1999998092651,701.9000000953674,718.5999999046326,785.6999998092651,802,818.5999999046326]},{"start":[268,345],"end":[1188,262],"points":[[268,345],[271,347],[275,348],[277,349],[280,350],[282,351],[288,352],[307,354],[340,355],[371,355],[392,356],[401,357],[410,358],[427,359],[500,361],[583,361],[676,360],[766,349],[851,334],[932,319],[1001,306],[1057,293],[1111,281],[1153,268],[1183,257],[1209,247],[1223,242],[1234,238],[1239,235],[1241,235],[1239,236],[1233,241],[1223,247],[1216,250],[1213,252],[1212,253],[1211,253],[1208,253],[1203,254],[1196,257],[1189,261],[1188,262]],"dx":[920,-83],"dy":[920,-83],"length":1050.8558312007453,"timing":[17.5,34.10000038146973,51.30000019073486,68.60000038146973,84.30000019073486,100.90000009536743,117.60000038146973,134.2000002861023,150.90000009536743,167.60000038146973,184.30000019073486,200.90000009536743,217.5,234.40000009536743,252.30000019073486,267.6000003814697,284.40000009536743,301,317.7000002861023,334.40000009536743,351,367.80000019073486,384.5,401.1000003814697,417.7000002861023,434.5,451.1000003814697,467.90000009536743,484.6000003814697,501.1000003814697,634.9000000953674,651.4000000953674,668.1000003814697,684.7000002861023,701.3000001907349,718,768,784.9000000953674,801.4000000953674,818.1000003814697,834.8000001907349,851.4000000953674]},{"start":[589,742],"end":[989,380],"points":[[589,742],[589,741],[590,741],[590,740],[591,740],[591,739],[592,739],[593,739],[593,738],[594,738],[594,737],[598,735],[607,728],[625,715],[657,692],[705,655],[765,615],[815,577],[852,552],[870,535],[882,521],[894,503],[902,491],[910,481],[916,470],[918,465],[920,463],[920,462],[921,461],[923,460],[925,457],[927,456],[927,455],[928,455],[930,454],[932,453],[934,451],[942,445],[950,439],[957,431],[964,423],[969,413],[976,403],[981,394],[986,385],[987,384],[987,383],[988,381],[988,380],[989,380]],"dx":[400,-362],"dy":[400,-362],"length":552.1418571024159,"timing":[0.40000009536743164,23.90000009536743,72,96.09999990463257,103.90000009536743,120.09999990463257,134,150.59999990463257,167.19999980926514,191.90000009536743,200.69999980926514,217.30000019073486,234,250.59999990463257,267.40000009536743,284.40000009536743,300.69999980926514,317.30000019073486,334.09999990463257,350.59999990463257,367.40000009536743,384.5,400.80000019073486,417.40000009536743,434.19999980926514,450.90000009536743,467.5,484.40000009536743,501,517.5,534.1999998092651,550.8000001907349,567.5,599.8000001907349,615.6999998092651,623.6999998092651,634.1999998092651,650.9000000953674,667.5999999046326,684.3000001907349,701.0999999046326,717.6999998092651,734.4000000953674,751.0999999046326,767.8000001907349,784.4000000953674,801.0999999046326,817.8000001907349,839.8000001907349,851.0999999046326]},{"start":[989,381],"end":[2233,476],"points":[[989,381],[988,382],[988,383],[988,384],[990,386],[998,389],[1026,398],[1099,415],[1201,433],[1332,446],[1467,452],[1601,459],[1720,466],[1886,470],[1980,470],[2058,471],[2111,471],[2140,472],[2152,472],[2157,472],[2163,472],[2173,472],[2187,472],[2200,472],[2206,472],[2207,472],[2209,472],[2213,472],[2217,472],[2221,472],[2222,472],[2223,472],[2224,473],[2225,474],[2226,474],[2227,474],[2228,475],[2229,475],[2230,475],[2231,476],[2232,476],[2233,476]],"dx":[1244,95],"dy":[1244,95],"length":1257.6207321070415,"timing":[80.90000009536743,118.5,168.59999990463257,200.80000019073486,235.19999980926514,251.90000009536743,268.59999990463257,285.30000019073486,301.90000009536743,318.59999990463257,335.30000019073486,352,368.80000019073486,385.40000009536743,402,418.80000019073486,435.40000009536743,452.09999990463257,469.09999990463257,485.59999990463257,502.09999990463257,518.8000001907349,535.6999998092651,552.1999998092651,569.0999999046326,585.6999998092651,602.3000001907349,619.0999999046326,635.5999999046326,652.3000001907349,669,719,735.5999999046326,752.4000000953674,768.9000000953674,832.9000000953674,869.0999999046326,885.8000001907349,935.8000001907349,952.5,969.1999998092651,1057.0999999046326]},{"start":[2232,476],"end":[456,342],"points":[[2232,476],[2231,476],[2230,476],[2228,476],[2227,476],[2224,476],[2222,476],[2219,476],[2215,476],[2199,476],[2147,476],[1991,478],[1863,477],[1744,478],[1622,478],[1511,478],[1400,477],[1300,477],[1203,476],[1121,472],[1054,470],[997,470],[946,469],[879,465],[833,459],[787,452],[737,445],[682,439],[630,427],[590,418],[568,411],[558,407],[555,406],[554,405],[552,404],[551,403],[549,400],[544,395],[533,387],[516,379],[497,370],[483,363],[473,357],[467,353],[465,351],[463,349],[460,346],[458,343],[457,342],[456,342]],"dx":[-1776,-134],"dy":[-1776,-134],"length":1803.0056483156598,"timing":[100.5,108.2999997138977,124.40000009536743,140.90000009536743,151.90000009536743,168.5,185.19999980926514,201.90000009536743,218.59999990463257,235.40000009536743,252,268.69999980926514,285.40000009536743,302,318.69999980926514,335.5,352.19999980926514,368.59999990463257,385.40000009536743,402,418.7999997138977,435.5,452.19999980926514,468.7999997138977,485.5,502.09999990463257,518.6999998092651,535.5,552.0999999046326,568.7999997138977,585.5,602.2999997138977,618.9000000953674,635.5999999046326,652.2999997138977,668.9000000953674,685.5999999046326,702.1999998092651,718.9000000953674,735.5999999046326,752.5,769,785.6999998092651,802.2999997138977,819,835.7999997138977,852.4000000953674,869.1999998092651,886.6999998092651,903.4000000953674]},{"start":[456,343],"end":[2108,1145],"points":[[456,343],[457,343],[458,344],[459,345],[460,346],[461,346],[473,352],[493,358],[537,372],[611,395],[704,420],[824,456],[949,502],[1095,565],[1259,644],[1416,721],[1631,827],[1743,882],[1836,938],[1916,992],[1976,1035],[2013,1068],[2036,1088],[2048,1101],[2057,1112],[2067,1122],[2074,1131],[2082,1139],[2091,1146],[2102,1154],[2104,1155],[2105,1155],[2106,1154],[2107,1153],[2107,1151],[2107,1150],[2107,1149],[2107,1148],[2107,1146],[2107,1145],[2108,1145]],"dx":[1652,802],"dy":[1652,802],"length":1867.168834456228,"timing":[99.40000009536743,107.30000019073486,152.90000009536743,179.2000002861023,187.09999990463257,202.90000009536743,219.7000002861023,236.5,253,269.80000019073486,286.59999990463257,303.09999990463257,319.80000019073486,336.40000009536743,353.09999990463257,370,387.2000002861023,403.30000019073486,420,436.5,453.2000002861023,470,486.5,503.30000019073486,519.9000000953674,536.5999999046326,553.3000001907349,570.0999999046326,586.7000002861023,603.4000000953674,620.0999999046326,643.2000002861023,686.8000001907349,703.4000000953674,720.0999999046326,736.8000001907349,763.5999999046326,803.5,820.2000002861023,836.8000001907349,867.3000001907349]},{"start":[2107,1145],"end":[1951,969],"points":[[2107,1145],[2106,1144],[2105,1144],[2104,1144],[2103,1143],[2101,1143],[2100,1143],[2099,1142],[2094,1139],[2088,1135],[2081,1129],[2068,1119],[2052,1107],[2036,1093],[2023,1083],[2014,1075],[2010,1070],[2008,1066],[2006,1064],[2005,1062],[2004,1056],[2002,1048],[2000,1041],[1999,1037],[1995,1030],[1993,1022],[1991,1015],[1987,1007],[1985,1003],[1984,1001],[1983,1000],[1982,999],[1979,997],[1977,995],[1974,991],[1970,989],[1967,986],[1963,983],[1960,979],[1955,975],[1953,970],[1951,969]],"dx":[-156,-176],"dy":[-156,-176],"length":245.52310323972597,"timing":[99.69999980926514,107.40000009536743,123.19999980926514,136,152.59999990463257,169.40000009536743,186.09999990463257,202.69999980926514,219.40000009536743,236,252.90000009536743,269.5,286.09999990463257,302.80000019073486,319.90000009536743,336.30000019073486,353.90000009536743,369.5,386.19999980926514,403,419.69999980926514,436.30000019073486,453,469.5,486.30000019073486,503,519.5999999046326,536.3000001907349,553,569.6999998092651,586.3000001907349,603.1999998092651,619.6999998092651,636.4000000953674,653.0999999046326,669.8000001907349,686.4000000953674,703.0999999046326,719.8000001907349,736.5,753.1999998092651,769.9000000953674]},{"start":[1950,969],"end":[918,645],"points":[[1950,969],[1949,969],[1948,968],[1944,968],[1927,965],[1883,962],[1807,948],[1718,930],[1629,905],[1488,855],[1393,819],[1301,781],[1224,748],[1163,719],[1128,700],[1115,688],[1106,677],[1100,668],[1093,659],[1084,651],[1071,644],[1045,632],[1023,625],[1008,620],[996,618],[983,618],[963,618],[943,622],[930,629],[923,633],[918,635],[917,636],[916,637],[916,639],[917,642],[917,644],[918,644],[918,645]],"dx":[-1032,-324],"dy":[-1032,-324],"length":1124.4067656784607,"timing":[127.19999980926514,169.69999980926514,186.69999980926514,203.09999990463257,219.90000009536743,236.5,253.30000019073486,269.80000019073486,286.59999990463257,303.09999990463257,319.80000019073486,336.69999980926514,353.30000019073486,370,386.59999990463257,403.19999980926514,420.09999990463257,436.69999980926514,453.30000019073486,470.59999990463257,486.69999980926514,503.40000009536743,520.0999999046326,536.6999998092651,553.4000000953674,570.6999998092651,586.9000000953674,603.5,620.0999999046326,637,653.5,670.3000001907349,686.9000000953674,703.5,720.4000000953674,737,807.3000001907349,820.3000001907349]},{"start":[919,647],"end":[732,808],"points":[[919,647],[920,647],[922,647],[923,648],[923,649],[921,651],[917,655],[894,672],[851,702],[805,728],[773,744],[758,755],[754,760],[753,765],[753,768],[753,771],[751,775],[750,777],[749,779],[748,782],[746,783],[743,789],[736,796],[733,804],[732,808]],"dx":[-187,161],"dy":[-187,161],"length":263.26821281540094,"timing":[56,67.80000019073486,84.40000009536743,101.09999990463257,215.5,223.30000019073486,235,251.5,268,284.69999980926514,301.30000019073486,317.90000009536743,334.69999980926514,351.40000009536743,368,384.69999980926514,401.40000009536743,417.90000009536743,434.80000019073486,451.40000009536743,468,484.80000019073486,501.5,518.0999999046326,534.8000001907349]},{"start":[733,808],"end":[1990,994],"points":[[733,808],[736,808],[751,810],[798,817],[873,830],[951,845],[1023,858],[1084,869],[1138,879],[1192,886],[1249,889],[1307,892],[1368,896],[1431,897],[1524,899],[1589,899],[1656,900],[1719,900],[1775,903],[1825,906],[1868,910],[1902,914],[1931,916],[1952,918],[1965,919],[1974,920],[1980,920],[1981,920],[1981,921],[1982,922],[1983,924],[1985,928],[1985,938],[1985,949],[1984,965],[1984,972],[1984,974],[1985,975],[1986,976],[1986,977],[1986,978],[1987,978],[1987,979],[1987,980],[1987,982],[1988,984],[1988,987],[1989,989],[1989,991],[1989,992],[1989,993],[1990,993],[1990,994]],"dx":[1257,186],"dy":[1257,186],"length":1334.3432904192352,"timing":[311.8999996185303,319.7999997138977,335.59999990463257,352.3999996185303,368.8999996185303,385.8999996185303,402.5,419.09999990463257,435.7999997138977,452.3999996185303,469.09999990463257,485.8999996185303,502.5,519.0999999046326,535.6999998092651,552.5,569.2999997138977,585.8999996185303,602.5999999046326,619.1999998092651,635.8999996185303,652.5999999046326,669.2999997138977,686.0999999046326,702.6999998092651,719.3999996185303,736,752.7999997138977,839.7999997138977,853.1999998092651,869.3999996185303,886.1999998092651,903,919.6999998092651,936.0999999046326,952.8999996185303,969.5999999046326,986.2999997138977,1003,1031.7999997138977,1079.8999996185303,1143.7999997138977,1319.7999997138977,1336.3999996185303,1353.0999999046326,1369.7999997138977,1386.5,1403.5,1419.8999996185303,1436.5999999046326,1486.5999999046326,1624.1999998092651,1647.7999997138977]},{"start":[1988,995],"end":[1616,506],"points":[[1988,995],[1987,995],[1985,995],[1971,992],[1927,987],[1851,979],[1770,969],[1698,954],[1640,939],[1560,908],[1512,875],[1469,827],[1429,747],[1407,672],[1407,617],[1410,580],[1415,564],[1421,555],[1426,549],[1433,543],[1440,537],[1444,534],[1444,532],[1444,531],[1446,530],[1454,524],[1473,511],[1494,499],[1505,493],[1509,491],[1510,491],[1511,492],[1514,496],[1523,511],[1530,519],[1538,524],[1544,525],[1548,525],[1552,525],[1555,525],[1557,524],[1558,523],[1559,522],[1560,520],[1562,517],[1564,517],[1566,517],[1568,517],[1569,517],[1570,517],[1571,517],[1572,516],[1574,516],[1577,516],[1583,514],[1592,512],[1607,507],[1612,505],[1613,505],[1614,505],[1615,505],[1616,505],[1616,506]],"dx":[-372,-489],"dy":[-372,-489],"length":1089.6944083255896,"timing":[116.69999980926514,124.90000009536743,135.69999980926514,152.59999990463257,169.09999990463257,185.80000019073486,202.59999990463257,219.30000019073486,236.59999990463257,252.59999990463257,269.30000019073486,285.90000009536743,302.59999990463257,319.30000019073486,336,352.69999980926514,369.30000019073486,386.5,402.80000019073486,419.5,436.09999990463257,452.80000019073486,469.40000009536743,492.40000009536743,502.80000019073486,519.5,536.0999999046326,552.8000001907349,569.5,586.0999999046326,602.9000000953674,620.3000001907349,636.0999999046326,652.8000001907349,669.5,686.1999998092651,703.0999999046326,719.5999999046326,736.3000001907349,753,769.5999999046326,786.3000001907349,803.1999998092651,819.6999998092651,836.3000001907349,853,869.6999998092651,886.3000001907349,903.0999999046326,919.8000001907349,936.5,953.3000001907349,969.8000001907349,986.5999999046326,1003.3000001907349,1020,1036.5,1053.3000001907349,1070,1086.6999998092651,1103.3000001907349,1120,1204.8000001907349]},{"start":[1615,506],"end":[2346,147],"points":[[1615,506],[1613,506],[1611,506],[1609,506],[1606,506],[1599,505],[1596,505],[1595,504],[1595,503],[1595,502],[1603,501],[1633,496],[1689,489],[1762,477],[1804,462],[1856,435],[1923,402],[1997,367],[2072,333],[2130,301],[2170,278],[2194,262],[2206,253],[2213,249],[2218,244],[2219,240],[2221,238],[2223,235],[2227,232],[2233,228],[2240,222],[2247,218],[2253,213],[2256,209],[2259,206],[2262,205],[2267,202],[2282,197],[2293,193],[2300,190],[2305,189],[2309,186],[2312,184],[2314,183],[2315,181],[2317,179],[2319,178],[2323,175],[2326,174],[2329,171],[2329,170],[2330,169],[2331,166],[2332,165],[2333,163],[2335,161],[2336,159],[2338,158],[2339,155],[2341,152],[2344,149],[2345,147],[2346,147]],"dx":[731,-359],"dy":[731,-359],"length":872.4681384191489,"timing":[30.299999713897705,68.09999990463257,84.69999980926514,101.39999961853027,118.19999980926514,135,151.39999961853027,168.5,238.39999961853027,251.39999961853027,268.3999996185303,284.8999996185303,301.69999980926514,318.2999997138977,335.3999996185303,351.5,368.5,385.3999996185303,401.59999990463257,418.5,435.09999990463257,451.69999980926514,468.3999996185303,485,502,518.5,535,551.6999998092651,568.5,585.1999998092651,601.7999997138977,618.5999999046326,635.2999997138977,651.7999997138977,668.5999999046326,685.3999996185303,701.8999996185303,718.5999999046326,735.2999997138977,751.8999996185303,768.6999998092651,785.2999997138977,802,818.6999998092651,835.2999997138977,852,868.6999998092651,885.3999996185303,902,918.7999997138977,935.5,952.0999999046326,968.7999997138977,985.6999998092651,1002.1999998092651,1018.8999996185303,1035.5,1052.1999998092651,1069.5,1085.8999996185303,1102.0999999046326,1119.2999997138977,1174.3999996185303]},{"start":[2347,146],"end":[1123,349],"points":[[2347,146],[2348,146],[2346,146],[2342,148],[2328,155],[2294,170],[2238,193],[2158,220],[2048,249],[1915,273],[1775,289],[1647,299],[1512,304],[1434,305],[1371,307],[1322,310],[1287,314],[1259,318],[1237,323],[1221,329],[1206,335],[1184,342],[1156,348],[1127,349],[1123,349]],"dx":[-1224,203],"dy":[-1224,203],"length":1252.7457651244176,"timing":[97.89999961853027,170,241.89999961853027,252.09999990463257,268.7999997138977,285.7999997138977,302.2999997138977,318.8999996185303,335.69999980926514,352.2999997138977,368.8999996185303,385.7999997138977,402.5,419,435.7999997138977,452.2999997138977,469.09999990463257,485.7999997138977,502.3999996185303,519.0999999046326,536,552.5,569.5,585.8999996185303,602.5]},{"start":[1130,340],"end":[1494,1058],"points":[[1130,340],[1131,340],[1135,345],[1155,370],[1201,428],[1271,515],[1336,613],[1400,715],[1471,820],[1546,919],[1612,1009],[1650,1066],[1672,1101],[1678,1116],[1678,1118],[1676,1118],[1672,1119],[1669,1121],[1666,1123],[1661,1127],[1658,1130],[1653,1132],[1647,1132],[1641,1132],[1630,1128],[1586,1109],[1536,1088],[1508,1074],[1501,1070],[1501,1069],[1501,1068],[1501,1067],[1501,1066],[1501,1065],[1501,1064],[1500,1063],[1497,1060],[1495,1058],[1494,1058]],"dx":[364,718],"dy":[364,718],"length":1163.764150903936,"timing":[87.90000009536743,319,335.7000002861023,352.40000009536743,369,385.7000002861023,402.40000009536743,419.1000003814697,435.7000002861023,452.30000019073486,469.2000002861023,486.1000003814697,502.80000019073486,519.2000002861023,535.7000002861023,552.6000003814697,569.1000003814697,585.7000002861023,602.5,619.1000003814697,635.8000001907349,652.4000000953674,669.1000003814697,685.7000002861023,702.5,719.1000003814697,735.8000001907349,752.5,769.2000002861023,790.7000002861023,806.7000002861023,819.7000002861023,847.6000003814697,895,912.7000002861023,919.3000001907349,936.1000003814697,952.8000001907349,1002.9000000953674]},{"start":[1494,1057],"end":[2180,122],"points":[[1494,1057],[1494,1055],[1494,1054],[1495,1051],[1498,1042],[1503,1029],[1518,1004],[1548,958],[1586,890],[1675,747],[1741,654],[1796,567],[1857,476],[1918,413],[1972,368],[2013,337],[2036,317],[2046,308],[2051,302],[2053,299],[2055,297],[2057,294],[2059,291],[2061,288],[2063,284],[2065,279],[2066,276],[2067,270],[2069,266],[2072,261],[2076,254],[2082,243],[2086,237],[2093,232],[2105,227],[2116,220],[2125,214],[2131,210],[2135,207],[2138,205],[2142,202],[2146,199],[2153,195],[2157,189],[2161,181],[2163,176],[2165,171],[2167,167],[2169,162],[2170,156],[2171,150],[2172,146],[2173,143],[2174,142],[2175,141],[2177,137],[2178,133],[2179,129],[2179,125],[2179,123],[2179,122],[2180,122]],"dx":[686,-935],"dy":[686,-935],"length":1181.2070010517398,"timing":[215.59999990463257,231.5,239.40000009536743,251.90000009536743,268.59999990463257,285.40000009536743,302.09999990463257,318.69999980926514,335.5,352.09999990463257,368.80000019073486,386.40000009536743,402.09999990463257,419,435.69999980926514,452.09999990463257,468.90000009536743,485.69999980926514,502.30000019073486,518.9000000953674,535.6999998092651,552.0999999046326,569,585.5999999046326,602.0999999046326,618.9000000953674,636.1999998092651,652.3000001907349,669,686.1999998092651,702.4000000953674,719.9000000953674,735.6999998092651,752.3000001907349,769,785.6999998092651,802.5,819.0999999046326,835.8000001907349,852.4000000953674,869.0999999046326,885.8000001907349,902.4000000953674,919.3000001907349,935.8000001907349,952.5,969.0999999046326,985.9000000953674,1002.5,1019.3000001907349,1035.9000000953674,1052.5999999046326,1069.3000001907349,1086,1102.5999999046326,1119.9000000953674,1136.0999999046326,1152.9000000953674,1171,1186.1999998092651,1272.5999999046326,1367.6999998092651]},{"start":[2179,122],"end":[1836,574],"points":[[2179,122],[2178,122],[2178,121],[2177,121],[2176,121],[2175,121],[2172,124],[2163,135],[2148,160],[2120,195],[2080,235],[2035,284],[2024,310],[2020,331],[2017,348],[2015,365],[2011,378],[2006,394],[1996,411],[1981,438],[1963,458],[1952,469],[1937,484],[1928,490],[1921,493],[1914,493],[1907,493],[1905,494],[1904,494],[1904,495],[1903,496],[1901,500],[1894,506],[1883,514],[1865,528],[1856,537],[1848,546],[1843,552],[1841,557],[1839,560],[1838,563],[1837,565],[1836,567],[1836,569],[1836,570],[1836,571],[1836,572],[1836,573],[1836,574]],"dx":[-343,452],"dy":[-343,452],"length":593.5529013535083,"timing":[159.2000002861023,175.09999990463257,185.30000019073486,202.2000002861023,218.7000002861023,235.30000019073486,252.2000002861023,268.80000019073486,285.5,302.09999990463257,318.80000019073486,335.40000009536743,352.09999990463257,368.7000002861023,385.59999990463257,402.40000009536743,418.80000019073486,435.59999990463257,452,468.7000002861023,485.7000002861023,502.09999990463257,518.8000001907349,535.5999999046326,552.0999999046326,568.9000000953674,585.7000002861023,602.3000001907349,623,635.7000002861023,652.3000001907349,669.2000002861023,685.7000002861023,702.3000001907349,719,735.8000001907349,752.4000000953674,769,785.7000002861023,802.4000000953674,819,835.8000001907349,852.5999999046326,869.2000002861023,885.8000001907349,903.5,991.5,1015,1031.5]},{"start":[1835,573],"end":[756,582],"points":[[1835,573],[1833,573],[1824,572],[1798,571],[1743,570],[1670,570],[1579,567],[1481,563],[1385,561],[1292,556],[1174,547],[1120,545],[1075,542],[1045,542],[1025,541],[999,541],[971,541],[940,541],[919,541],[907,541],[904,541],[903,541],[901,541],[900,542],[899,544],[898,545],[897,547],[897,549],[892,554],[884,559],[872,562],[858,564],[844,565],[821,566],[807,567],[802,567],[801,567],[800,567],[798,567],[793,569],[787,570],[785,572],[784,572],[783,573],[781,575],[778,576],[775,577],[774,578],[773,579],[771,579],[767,580],[761,580],[757,582],[756,582]],"dx":[-1079,9],"dy":[-1079,9],"length":1093.5718482166167,"timing":[226.5,236.30000019073486,252.80000019073486,269.40000009536743,285.90000009536743,302.80000019073486,319.5,336.1000003814697,352.80000019073486,369.5,386.1000003814697,402.90000009536743,419.7000002861023,436,452.80000019073486,469.5,486.2000002861023,502.80000019073486,519.6000003814697,536.2000002861023,552.9000000953674,569.6000003814697,586.2000002861023,603,619.7000002861023,636.2000002861023,653,669.9000000953674,686.3000001907349,703,719.8000001907349,736.4000000953674,753.3000001907349,769.8000001907349,786.4000000953674,803,819.7000002861023,875.4000000953674,886.7000002861023,903.2000002861023,920,936.5,953.2000002861023,1003.2000002861023,1020,1036.6000003814697,1053.3000001907349,1069.9000000953674,1086.7000002861023,1103.3000001907349,1120,1136.6000003814697,1153.3000001907349,1170]},{"start":[755,582],"end":[182,87],"points":[[755,582],[754,581],[752,580],[740,573],[708,551],[656,517],[580,465],[492,403],[409,340],[338,282],[280,231],[239,191],[204,149],[193,128],[186,113],[182,103],[173,82],[172,81],[173,81],[176,84],[179,86],[181,87],[182,87]],"dx":[-573,-495],"dy":[-573,-495],"length":790.6803837080446,"timing":[259.40000009536743,275,285.09999990463257,301.80000019073486,318.30000019073486,335.2000002861023,352,368.40000009536743,385.59999990463257,402.2000002861023,418.7000002861023,435.59999990463257,452.09999990463257,468.59999990463257,485.30000019073486,501.90000009536743,552.0999999046326,568.8000001907349,651.5,669.9000000953674,687.4000000953674,701.9000000953674,752.0999999046326]},{"start":[183,87],"end":[1569,990],"points":[[183,87],[184,88],[185,88],[185,89],[186,89],[189,91],[191,92],[193,93],[194,93],[196,94],[203,99],[232,115],[307,150],[411,193],[533,252],[655,320],[811,434],[912,522],[1011,611],[1094,687],[1159,737],[1209,778],[1244,806],[1269,831],[1288,850],[1301,863],[1311,873],[1322,881],[1340,891],[1395,926],[1434,953],[1466,975],[1484,986],[1492,989],[1494,990],[1496,989],[1498,986],[1499,982],[1500,981],[1502,980],[1512,981],[1526,988],[1546,996],[1565,1003],[1571,1007],[1572,1007],[1572,1006],[1572,1005],[1573,1004],[1573,1003],[1573,1002],[1573,1001],[1573,1000],[1573,999],[1572,997],[1570,994],[1570,993],[1569,992],[1569,991],[1569,990]],"dx":[1386,903],"dy":[1386,903],"length":1712.535743003123,"timing":[36,52.59999990463257,71.2999997138977,85.90000009536743,102.5,119.5,136.2999997138977,152.90000009536743,169.5,186.2999997138977,202.69999980926514,219.40000009536743,236.2999997138977,252.7999997138977,269.40000009536743,286.40000009536743,303.09999990463257,319.90000009536743,336.59999990463257,352.7999997138977,369.5,386.19999980926514,402.7999997138977,419.69999980926514,436.2999997138977,453.09999990463257,469.59999990463257,486.40000009536743,502.90000009536743,519.5999999046326,536.2999997138977,553.0999999046326,569.7999997138977,586.2999997138977,603.0999999046326,619.6999998092651,636.2999997138977,653,669.6999998092651,687.0999999046326,703.0999999046326,720,737.0999999046326,753.1999998092651,769.7999997138977,786.5,836.5,853.1999998092651,871.4000000953674,888.2999997138977,903.9000000953674,953.2999997138977,975.4000000953674,987,1003.2999997138977,1019.9000000953674,1036.9000000953674,1053.4000000953674,1070,1087.7999997138977]},{"start":[1569,989],"end":[1837,149],"points":[[1569,989],[1569,988],[1571,982],[1575,972],[1578,958],[1591,907],[1607,856],[1640,777],[1679,683],[1725,575],[1767,474],[1795,388],[1816,313],[1831,255],[1839,209],[1841,186],[1839,164],[1835,156],[1833,154],[1833,153],[1833,152],[1835,150],[1836,148],[1837,148],[1837,149]],"dx":[268,-840],"dy":[268,-840],"length":893.5933855175232,"timing":[221.30000019073486,235,253.10000038146973,268.40000009536743,285,301.6000003814697,318.30000019073486,335,351.90000009536743,368.40000009536743,385,401.7000002861023,418.30000019073486,435,451.90000009536743,468.40000009536743,485.1000003814697,501.7000002861023,518.4000000953674,535.1000003814697,552,568.4000000953674,585.2000002861023,601.9000000953674,717.5]},{"start":[1837,150],"end":[1385,943],"points":[[1837,150],[1837,151],[1837,152],[1837,153],[1836,155],[1833,162],[1824,180],[1802,224],[1768,296],[1736,382],[1698,473],[1653,563],[1604,648],[1540,743],[1509,783],[1496,804],[1490,815],[1486,822],[1482,829],[1476,838],[1467,852],[1460,863],[1451,871],[1444,875],[1439,877],[1435,881],[1434,882],[1434,883],[1434,884],[1434,888],[1433,891],[1431,895],[1422,902],[1414,910],[1405,919],[1397,924],[1393,926],[1392,927],[1391,928],[1390,930],[1390,931],[1389,931],[1389,932],[1389,934],[1389,936],[1389,937],[1388,939],[1387,942],[1386,943],[1385,943]],"dx":[-452,793],"dy":[-452,793],"length":926.3306229633562,"timing":[152.59999990463257,168.19999980926514,184.69999980926514,201.2999997138977,218.19999980926514,234.7999997138977,251.69999980926514,268.09999990463257,284.69999980926514,301.3999996185303,318.09999990463257,334.7999997138977,351.59999990463257,368.09999990463257,384.8999996185303,401.5,418.19999980926514,434.8999996185303,451.5,468.2999997138977,485,501.8999996185303,518.2999997138977,535,551.7999997138977,568.2999997138977,585.1999998092651,672.5,685.0999999046326,701.6999998092651,718.3999996185303,735.0999999046326,751.7999997138977,768.5,785.0999999046326,801.7999997138977,818.5,835.1999998092651,885.3999996185303,902,918.6999998092651,935.3999996185303,1039.8999996185303,1152.1999998092651,1175.7999997138977,1185.3999996185303,1202.0999999046326,1218.7999997138977,1235.5999999046326,1252.1999998092651]},{"start":[1385,941],"end":[1798,200],"points":[[1385,941],[1385,940],[1385,939],[1385,938],[1384,936],[1382,934],[1381,933],[1379,931],[1376,928],[1373,926],[1373,925],[1372,925],[1371,925],[1371,924],[1371,923],[1371,919],[1375,908],[1395,868],[1422,820],[1464,757],[1517,673],[1582,580],[1646,492],[1689,422],[1719,379],[1736,348],[1747,328],[1753,313],[1761,298],[1771,276],[1777,263],[1783,250],[1787,241],[1789,235],[1789,232],[1789,231],[1790,230],[1790,229],[1791,227],[1792,225],[1792,222],[1794,218],[1795,214],[1795,212],[1796,211],[1796,210],[1796,209],[1796,207],[1796,206],[1796,204],[1797,204],[1797,203],[1798,202],[1798,201],[1798,200]],"dx":[413,-741],"dy":[413,-741],"length":871.1733920832683,"timing":[31.90000009536743,47.69999980926514,72.09999990463257,88.09999990463257,104.19999980926514,120.19999980926514,128.59999990463257,145.40000009536743,162.09999990463257,178.7999997138977,199.90000009536743,212.09999990463257,232,255.7999997138977,264.19999980926514,278.90000009536743,295.5,312.7999997138977,328.90000009536743,345.5,362.19999980926514,378.90000009536743,395.5,412.19999980926514,428.90000009536743,445.59999990463257,462.19999980926514,479,495.59999990463257,512.2999997138977,529.0999999046326,545.9000000953674,562.5,579.4000000953674,596.2999997138977,680,695.7999997138977,712.4000000953674,729.2999997138977,745.7999997138977,762.5999999046326,779.0999999046326,795.9000000953674,812.5999999046326,829.2999997138977,846,864.1999998092651,912.6999998092651,929.2999997138977,1008.0999999046326,1015.7999997138977,1029.5,1046.1999998092651,1064.1999998092651,1112.9000000953674]},{"start":[1621,258],"end":[689,637],"points":[[1621,258],[1620,259],[1618,260],[1606,266],[1575,277],[1525,296],[1459,315],[1346,353],[1250,390],[1129,418],[1016,447],[918,465],[840,481],[787,501],[742,520],[711,538],[691,550],[681,559],[675,568],[672,578],[672,582],[672,585],[673,586],[673,587],[674,589],[675,593],[678,599],[681,606],[684,610],[685,612],[685,613],[686,617],[687,621],[688,624],[689,628],[689,629],[689,630],[689,631],[689,632],[689,634],[689,636],[689,637]],"dx":[-932,379],"dy":[-932,379],"length":1076.5947552093758,"timing":[215,222.7999997138977,235.19999980926514,252,268.59999990463257,285.19999980926514,302.09999990463257,318.69999980926514,335.2999997138977,352,368.69999980926514,385.2999997138977,402,419,435.40000009536743,452.09999990463257,468.7999997138977,485.5,502.19999980926514,518.9000000953674,535.4000000953674,552.0999999046326,568.7999997138977,585.5,602.0999999046326,618.7999997138977,635.5,652.1999998092651,668.7999997138977,685.6999998092651,702.1999998092651,718.7999997138977,735.5999999046326,752.2999997138977,769.0999999046326,786.7999997138977,802.2999997138977,818.9000000953674,835.5999999046326,852.2999997138977,868.9000000953674,885.5999999046326]},{"start":[690,637],"end":[1171,528],"points":[[690,637],[692,636],[696,634],[701,631],[714,627],[751,624],[811,624],[886,623],[962,622],[1028,618],[1084,613],[1143,604],[1159,597],[1168,592],[1170,586],[1171,583],[1171,579],[1172,577],[1173,575],[1174,573],[1175,570],[1175,568],[1175,567],[1175,565],[1174,563],[1173,561],[1172,558],[1171,555],[1171,551],[1170,546],[1170,540],[1170,534],[1170,530],[1170,529],[1171,528]],"dx":[481,-109],"dy":[481,-109],"length":550.7287774699482,"timing":[218.09999990463257,236.5,254.09999990463257,269.09999990463257,285.69999980926514,302.40000009536743,319.09999990463257,335.80000019073486,352.5,369.19999980926514,385.80000019073486,402.5,419.19999980926514,435.90000009536743,452.30000019073486,469.19999980926514,485.90000009536743,502.59999990463257,519.3000001907349,536,552.5999999046326,569.3000001907349,585.9000000953674,602.5999999046326,619.5999999046326,637,652.6999998092651,669.3000001907349,686,702.5999999046326,719.3000001907349,736,752.5999999046326,769.6999998092651,786]},{"start":[1172,528],"end":[2187,574],"points":[[1172,528],[1174,528],[1182,529],[1201,529],[1246,531],[1313,537],[1391,544],[1473,553],[1562,564],[1648,576],[1746,584],[1837,587],[1922,590],[2028,591],[2081,591],[2122,591],[2146,591],[2158,591],[2161,589],[2162,589],[2163,587],[2165,584],[2167,582],[2171,580],[2174,578],[2180,576],[2184,575],[2186,575],[2187,574]],"dx":[1015,46],"dy":[1015,46],"length":1024.3392958411468,"timing":[227.59999990463257,235.30000019073486,252,268.80000019073486,285.5,302.30000019073486,318.80000019073486,335.5,352.19999980926514,368.80000019073486,385.40000009536743,402.30000019073486,419,435.5,452.30000019073486,468.90000009536743,485.69999980926514,502.59999990463257,518.9000000953674,535.9000000953674,553.5,569.1999998092651,585.6999998092651,602.5,619.0999999046326,635.5999999046326,652.3000001907349,669.0999999046326,686.5]},{"start":[2186,574],"end":[1136,524],"points":[[2186,574],[2185,574],[2184,574],[2182,574],[2175,574],[2158,576],[2108,579],[2025,580],[1936,580],[1842,580],[1767,580],[1679,580],[1636,577],[1599,573],[1564,571],[1524,568],[1482,565],[1441,562],[1410,560],[1379,554],[1339,548],[1305,542],[1257,536],[1241,534],[1229,533],[1222,533],[1217,533],[1212,532],[1209,532],[1208,531],[1207,531],[1200,530],[1173,528],[1149,526],[1137,525],[1136,525],[1136,524]],"dx":[-1050,-50],"dy":[-1050,-50],"length":1054.8546724075095,"timing":[87.7000002861023,135.80000019073486,152.5,202.5,219.10000038146973,235.80000019073486,252.5,269.30000019073486,285.90000009536743,302.5,319.2000002861023,335.90000009536743,352.7000002861023,369.2000002861023,386,402.7000002861023,419.40000009536743,436,452.7000002861023,469.5,486,502.80000019073486,519.5,536.1000003814697,552.7000002861023,569.5,586.1000003814697,603.2000002861023,619.6000003814697,636.2000002861023,686.3000001907349,703,719.6000003814697,736.2000002861023,753,769.5,799.6000003814697]},{"start":[1138,524],"end":[1666,711],"points":[[1138,524],[1139,524],[1140,523],[1142,523],[1147,523],[1174,533],[1251,561],[1348,595],[1438,628],[1535,663],[1570,677],[1582,681],[1586,683],[1589,685],[1591,687],[1594,689],[1596,692],[1599,695],[1602,697],[1611,702],[1624,710],[1646,721],[1655,725],[1659,726],[1660,726],[1662,726],[1663,724],[1664,722],[1665,719],[1666,716],[1667,715],[1667,714],[1667,713],[1667,712],[1666,711]],"dx":[528,187],"dy":[528,187],"length":581.9706889442361,"timing":[192,202.30000019073486,218.90000009536743,235.59999990463257,252.30000019073486,269,285.7000002861023,302.5,319.09999990463257,335.7000002861023,352.40000009536743,369,385.80000019073486,402.40000009536743,419,435.7000002861023,452.5,469.09999990463257,485.7000002861023,502.40000009536743,519.0999999046326,535.8000001907349,552.4000000953674,569.2000002861023,585.9000000953674,602.5,619.5,637,652.5,669.2000002861023,685.9000000953674,702.8000001907349,719.3000001907349,736.2000002861023,752.5999999046326]},{"start":[1665,711],"end":[1456,1058],"points":[[1665,711],[1663,712],[1661,713],[1659,717],[1654,724],[1648,735],[1638,752],[1623,782],[1606,815],[1584,852],[1567,883],[1553,914],[1543,941],[1538,953],[1535,962],[1532,969],[1530,974],[1528,977],[1526,979],[1523,981],[1518,984],[1511,990],[1503,996],[1498,1001],[1493,1005],[1491,1007],[1487,1010],[1482,1019],[1475,1030],[1469,1041],[1464,1048],[1462,1051],[1462,1052],[1460,1053],[1460,1054],[1458,1056],[1457,1057],[1456,1057],[1456,1058]],"dx":[-209,347],"dy":[-209,347],"length":412.10197493611264,"timing":[218.40000009536743,234.7999997138977,251.40000009536743,268,284.69999980926514,301.2999997138977,318.19999980926514,334.90000009536743,351.59999990463257,368,384.7999997138977,401.5,418.09999990463257,434.7999997138977,451.40000009536743,468.19999980926514,485.19999980926514,502,518.1999998092651,534.9000000953674,551.7999997138977,568.2999997138977,584.9000000953674,601.5999999046326,618.2999997138977,635.0999999046326,651.5999999046326,668.2999997138977,685,701.6999998092651,718.2999997138977,735.1999998092651,751.6999998092651,842.0999999046326,851.7999997138977,868.5,885.2999997138977,901.7999997138977,978]},{"start":[1457,1055],"end":[1152,119],"points":[[1457,1055],[1458,1054],[1458,1053],[1458,1052],[1458,1051],[1458,1050],[1458,1049],[1458,1048],[1458,1047],[1458,1046],[1457,1044],[1456,1042],[1452,1036],[1446,1024],[1431,1005],[1398,962],[1355,894],[1304,806],[1262,715],[1229,622],[1203,530],[1179,441],[1157,318],[1155,256],[1155,207],[1159,171],[1159,148],[1158,131],[1153,116],[1150,103],[1148,94],[1148,88],[1148,82],[1150,78],[1150,79],[1150,80],[1150,83],[1150,91],[1150,98],[1150,102],[1151,105],[1151,106],[1152,106],[1152,106],[1152,107],[1152,108],[1152,109],[1152,111],[1152,113],[1152,116],[1152,119]],"dx":[-305,-936],"dy":[-305,-936],"length":1091.020698250883,"timing":[33,49.59999990463257,71.5,87.69999980926514,103.2999997138977,119.2999997138977,133.40000009536743,149.7999997138977,166.2999997138977,183.09999990463257,199.90000009536743,216.40000009536743,233.09999990463257,249.7999997138977,266.40000009536743,283.2999997138977,299.90000009536743,316.5,333.19999980926514,349.90000009536743,366.5,383.40000009536743,399.90000009536743,416.59999990463257,433.40000009536743,450,466.69999980926514,483.40000009536743,500,516.6999998092651,533.4000000953674,550.5999999046326,566.7999997138977,583.5,647.5999999046326,655.4000000953674,666.6999998092651,683.5999999046326,700.2999997138977,717,733.5999999046326,751.2999997138977,927.5,1018,1035.0999999046326,1063.5999999046326,1079.2999997138977,1117.1999998092651,1133.7999997138977,1150.5999999046326,1167.1999998092651]},{"start":[1152,120],"end":[155,906],"points":[[1152,120],[1152,121],[1151,124],[1150,126],[1150,128],[1150,130],[1148,132],[1144,139],[1124,157],[1084,192],[1027,232],[961,279],[894,321],[778,391],[694,443],[607,497],[541,549],[503,588],[479,619],[454,652],[428,684],[393,725],[349,770],[301,810],[242,848],[211,862],[186,876],[168,887],[158,895],[154,901],[153,903],[152,903],[152,906],[152,908],[152,910],[152,911],[153,910],[154,909],[155,907],[155,906]],"dx":[-997,786],"dy":[-997,786],"length":1298.65232085447,"timing":[120,135.5,152.30000019073486,168.90000009536743,185.7000002861023,202.2000002861023,218.90000009536743,235.5,252.30000019073486,270,286.7000002861023,302.30000019073486,319,335.7000002861023,352.30000019073486,369,385.90000009536743,402.59999990463257,419.09999990463257,435.80000019073486,452.59999990463257,469.09999990463257,485.90000009536743,502.5,519.0999999046326,535.9000000953674,552.5,569.0999999046326,585.9000000953674,602.5,619.2000002861023,669.2000002861023,686.0999999046326,702.8000001907349,719.4000000953674,736.0999999046326,791.3000001907349,802.5999999046326,819.4000000953674,836.0999999046326]},{"start":[158,901],"end":[1420,498],"points":[[158,901],[160,899],[164,895],[170,891],[178,886],[185,880],[195,873],[206,866],[217,861],[236,851],[264,838],[314,816],[377,789],[440,762],[509,741],[589,719],[681,690],[771,655],[864,621],[948,588],[1051,550],[1102,528],[1145,511],[1175,500],[1191,495],[1197,493],[1200,491],[1203,490],[1213,488],[1227,487],[1242,485],[1253,484],[1257,484],[1261,484],[1270,488],[1283,491],[1295,493],[1304,493],[1313,493],[1320,492],[1329,492],[1338,492],[1343,492],[1346,492],[1347,492],[1348,493],[1350,493],[1352,493],[1355,493],[1356,493],[1357,493],[1357,494],[1358,494],[1360,494],[1363,494],[1369,494],[1372,494],[1374,494],[1377,494],[1380,494],[1388,495],[1404,496],[1415,497],[1419,498],[1420,498]],"dx":[1262,-403],"dy":[1262,-403],"length":1347.013589251538,"timing":[16.59999990463257,33.40000009536743,50,66.7000002861023,83.5,100.30000019073486,116.7000002861023,133.5,150.2000002861023,166.90000009536743,183.5,200.2000002861023,216.90000009536743,233.5,250.5,266.90000009536743,283.59999990463257,300.30000019073486,316.90000009536743,333.59999990463257,350.30000019073486,367,383.7000002861023,400.30000019073486,417,433.7000002861023,450.40000009536743,467,483.7000002861023,500.5,517.0999999046326,533.9000000953674,550.5,567.2000002861023,583.7000002861023,600.4000000953674,617,633.8000001907349,650.5,667.2000002861023,683.8000001907349,700.5999999046326,717.2000002861023,733.9000000953674,750.5999999046326,767.5,784,801.3000001907349,817.3000001907349,834,850.7000002861023,867.4000000953674,886.2000002861023,902.2000002861023,917.4000000953674,934.0999999046326,950.7000002861023,967.4000000953674,984.2000002861023,1000.9000000953674,1017.5999999046326,1034.2000002861023,1050.9000000953674,1067.5999999046326,1084.2000002861023]},{"start":[1419,497],"end":[348,89],"points":[[1419,497],[1418,497],[1417,497],[1416,497],[1415,497],[1412,497],[1410,497],[1406,497],[1400,497],[1392,497],[1380,497],[1365,497],[1335,497],[1279,493],[1193,481],[1079,457],[884,413],[759,383],[654,345],[570,303],[504,234],[431,151],[385,105],[360,74],[350,60],[349,57],[348,57],[347,57],[346,57],[345,57],[343,57],[342,57],[342,58],[342,60],[342,62],[343,65],[343,68],[343,70],[343,71],[344,72],[345,74],[345,76],[345,77],[346,79],[346,81],[346,82],[347,82],[347,83],[347,84],[347,85],[347,86],[347,87],[348,88],[348,89]],"dx":[-1071,-408],"dy":[-1071,-408],"length":1250.2326384017183,"timing":[48.39999961853027,64.19999980926514,102.39999961853027,120.09999990463257,135.7999997138977,152.39999961853027,169,185.7999997138977,202.5,219.09999990463257,235.7999997138977,252.5,269.19999980926514,285.69999980926514,302.5,319.8999996185303,336.8999996185303,352.59999990463257,369.19999980926514,385.8999996185303,402.7999997138977,419.19999980926514,436,452.59999990463257,469.2999997138977,486,512,600.1999998092651,607.8999996185303,619.3999996185303,636.0999999046326,652.7999997138977,669.3999996185303,686.1999998092651,702.7999997138977,719.3999996185303,736.1999998092651,752.7999997138977,769.5,786.1999998092651,802.8999996185303,819.5999999046326,836.2999997138977,853,869.5999999046326,984.2999997138977,1024.0999999046326,1119.8999996185303,1286.6999998092651,1312.1999998092651,1672.3999996185303,1728.2999997138977,1784.2999997138977,1820.3999996185303]},{"start":[349,90],"end":[1659,353],"points":[[349,90],[351,90],[354,92],[383,104],[426,119],[498,145],[594,182],[722,236],[862,296],[973,335],[1074,370],[1154,393],[1223,404],[1274,407],[1317,408],[1376,409],[1402,409],[1416,409],[1423,409],[1424,408],[1425,407],[1428,406],[1433,403],[1442,399],[1449,396],[1456,393],[1463,389],[1499,386],[1543,386],[1592,386],[1629,389],[1648,389],[1659,390],[1660,390],[1661,390],[1661,389],[1661,388],[1661,386],[1662,384],[1663,380],[1663,377],[1663,375],[1663,374],[1662,374],[1662,373],[1662,372],[1661,372],[1661,371],[1661,369],[1660,367],[1659,365],[1658,363],[1658,361],[1658,360],[1659,358],[1659,356],[1659,354],[1659,353]],"dx":[1310,263],"dy":[1310,263],"length":1414.5294336036216,"timing":[211.69999980926514,219.19999980926514,234.80000019073486,251.40000009536743,268.09999990463257,284.69999980926514,301.40000009536743,318.19999980926514,334.80000019073486,351.5,368.09999990463257,384.90000009536743,401.59999990463257,418.19999980926514,435.09999990463257,451.59999990463257,468.19999980926514,484.90000009536743,501.69999980926514,518.3000001907349,535,551.6999998092651,568.5,585,601.6999998092651,618.3000001907349,635.0999999046326,652.0999999046326,668.4000000953674,685,701.8000001907349,718.4000000953674,735.4000000953674,751.8000001907349,768.5,787.5,801.9000000953674,818.6999998092651,835.4000000953674,852,868.5999999046326,885.3000001907349,902,918.5999999046326,971.6999998092651,1018.9000000953674,1035.5,1052.1999998092651,1135.5,1152.1999998092651,1169,1185.5999999046326,1202.3000001907349,1218.9000000953674,1235.5999999046326,1252.3000001907349,1268.9000000953674,1319]},{"start":[1659,354],"end":[92,735],"points":[[1659,354],[1657,355],[1646,362],[1622,376],[1583,399],[1500,429],[1388,464],[1243,501],[1082,538],[918,565],[684,586],[559,601],[450,613],[347,628],[261,645],[183,655],[123,664],[104,672],[100,674],[100,675],[100,676],[100,677],[100,679],[100,682],[100,687],[100,691],[100,694],[100,696],[100,699],[99,705],[97,712],[95,720],[94,727],[94,728],[93,729],[93,730],[93,731],[92,733],[92,734],[92,735]],"dx":[-1567,381],"dy":[-1567,381],"length":1663.95793512211,"timing":[192.19999980926514,202,218.59999990463257,235.5,252,268.69999980926514,285.40000009536743,302.09999990463257,318.7999997138977,335.5,352.19999980926514,368.7999997138977,385.5,402.19999980926514,418.7999997138977,435.7999997138977,453.19999980926514,468.90000009536743,485.69999980926514,502.2999997138977,552.2999997138977,576.0999999046326,585.7999997138977,602.2999997138977,619.1999998092651,635.7999997138977,652.5,669.1999998092651,685.9000000953674,702.4000000953674,719,735.9000000953674,752.4000000953674,816.1999998092651,832,840.1999998092651,852.5999999046326,869.2999997138977,885.9000000953674,1000]},{"start":[93,735],"end":[1858,111],"points":[[93,735],[94,735],[94,734],[95,734],[97,733],[100,731],[107,728],[119,720],[159,707],[272,682],[373,661],[512,642],[672,620],[834,594],[996,560],[1132,517],[1257,473],[1361,426],[1460,378],[1543,333],[1654,269],[1704,229],[1736,201],[1756,179],[1770,168],[1780,159],[1787,153],[1798,146],[1812,138],[1833,129],[1847,122],[1855,118],[1857,116],[1857,114],[1857,113],[1858,112],[1858,111]],"dx":[1765,-624],"dy":[1765,-624],"length":1906.6899237300026,"timing":[83,122.59999990463257,138.5,150.90000009536743,167.40000009536743,184.09999990463257,200.80000019073486,217.5,234.19999980926514,250.90000009536743,267.5,284.09999990463257,300.80000019073486,317.59999990463257,334.30000019073486,350.90000009536743,367.80000019073486,384.19999980926514,400.90000009536743,417.59999990463257,434.30000019073486,451,467.59999990463257,484.30000019073486,501,517.6999998092651,534.4000000953674,551,568.0999999046326,584.5999999046326,601.0999999046326,617.8000001907349,634.5,651.1999998092651,667.9000000953674,684.5,706.6999998092651]},{"start":[1857,111],"end":[643,822],"points":[[1857,111],[1856,111],[1855,111],[1853,112],[1851,114],[1850,114],[1849,115],[1848,116],[1841,120],[1812,134],[1719,184],[1639,227],[1562,276],[1485,333],[1393,405],[1296,474],[1201,539],[1123,585],[1079,618],[1050,642],[1025,660],[1002,677],[957,711],[927,735],[894,755],[862,771],[827,783],[789,795],[756,805],[736,811],[726,813],[720,814],[714,816],[708,817],[689,823],[678,828],[669,831],[664,833],[658,834],[650,835],[635,835],[630,835],[628,835],[630,833],[635,828],[638,826],[639,824],[640,824],[641,823],[641,822],[642,822],[643,822]],"dx":[-1214,711],"dy":[-1214,711],"length":1462.4801013211993,"timing":[91.5,107.30000019073486,117.80000019073486,134.90000009536743,151.2000002861023,167.90000009536743,184.60000038146973,201.30000019073486,217.80000019073486,234.60000038146973,251.10000038146973,267.80000019073486,284.5,301.2000002861023,318,335.1000003814697,351.40000009536743,368,384.7000002861023,401.40000009536743,418.1000003814697,435,451.6000003814697,468.2000002861023,484.80000019073486,501.6000003814697,518.1000003814697,534.9000000953674,551.5,568.2000002861023,585,601.6000003814697,618.2000002861023,635,651.7000002861023,668.4000000953674,685.1000003814697,701.8000001907349,718.4000000953674,735.1000003814697,751.7000002861023,768.3000001907349,785.1000003814697,801.7000002861023,818.5,835.2000002861023,851.7000002861023,868.4000000953674,885.5,907.3000001907349,1123.4000000953674,1171.3000001907349]},{"start":[643,821],"end":[122,177],"points":[[643,821],[643,820],[644,819],[645,818],[645,817],[645,816],[645,815],[646,813],[646,808],[644,796],[635,773],[614,736],[580,686],[527,620],[457,542],[382,470],[324,417],[263,363],[238,338],[228,325],[223,315],[218,308],[212,301],[204,296],[197,288],[189,280],[184,271],[177,263],[175,260],[173,259],[173,258],[172,256],[169,253],[167,250],[163,245],[160,240],[159,236],[158,231],[155,226],[152,219],[148,213],[143,207],[140,204],[139,202],[137,199],[135,196],[134,194],[133,192],[132,191],[131,189],[130,188],[128,187],[127,185],[126,183],[125,182],[124,181],[124,180],[123,180],[123,179],[122,179],[122,178],[122,177]],"dx":[-521,-644],"dy":[-521,-644],"length":846.0662397152449,"timing":[97,133.5,150.30000019073486,166.80000019073486,183.5,216.40000009536743,232.30000019073486,240.40000009536743,250.19999980926514,267,283.69999980926514,300.30000019073486,317,333.59999990463257,350.40000009536743,367.09999990463257,383.80000019073486,401.09999990463257,417.90000009536743,433.90000009536743,451.09999990463257,467.30000019073486,483.69999980926514,500.40000009536743,517.4000000953674,533.9000000953674,550.5,567.4000000953674,583.9000000953674,600.6999998092651,617.1999998092651,634,650.6999998092651,667.4000000953674,684,700.6999998092651,717.5999999046326,734.1999998092651,750.6999998092651,767.4000000953674,784.0999999046326,800.8000001907349,817.4000000953674,834.0999999046326,850.6999998092651,867.6999998092651,884.1999998092651,900.8000001907349,917.5999999046326,934.1999998092651,950.9000000953674,967.5999999046326,984.3000001907349,1000.9000000953674,1032.4000000953674,1048.4000000953674,1064.5,1072.4000000953674,1088.3000001907349,1104.4000000953674,1150.9000000953674,1201]},{"start":[122,177],"end":[1595,1155],"points":[[122,177],[124,177],[129,177],[149,181],[190,195],[234,217],[316,268],[393,327],[441,368],[596,490],[712,566],[834,641],[928,701],[1028,765],[1113,815],[1200,860],[1276,900],[1343,933],[1389,958],[1434,986],[1452,999],[1466,1011],[1478,1024],[1487,1034],[1496,1042],[1501,1048],[1508,1052],[1513,1056],[1515,1058],[1517,1060],[1517,1062],[1519,1066],[1522,1070],[1525,1077],[1528,1084],[1530,1090],[1533,1094],[1537,1099],[1541,1105],[1546,1110],[1549,1113],[1551,1116],[1554,1118],[1556,1120],[1559,1122],[1562,1125],[1565,1129],[1567,1133],[1569,1135],[1571,1136],[1572,1137],[1574,1138],[1575,1139],[1578,1142],[1579,1143],[1580,1144],[1581,1145],[1582,1147],[1583,1148],[1585,1150],[1587,1152],[1588,1152],[1589,1152],[1590,1152],[1591,1152],[1592,1153],[1593,1154],[1594,1154],[1594,1155],[1595,1155]],"dx":[1473,978],"dy":[1473,978],"length":1788.314801181469,"timing":[214.19999980926514,221.90000009536743,235.19999980926514,252,268.5,285.19999980926514,301.90000009536743,318.59999990463257,335.30000019073486,352,368.59999990463257,385.40000009536743,402,418.59999990463257,435.30000019073486,452,468.69999980926514,485.5,502,518.6999998092651,535.5,552.0999999046326,568.5999999046326,585.5,602.1999998092651,618.8000001907349,635.4000000953674,652.0999999046326,668.9000000953674,685.5,702.0999999046326,718.8000001907349,735.5,752.1999998092651,768.8000001907349,785.5,802.1999998092651,818.9000000953674,835.5,852.1999998092651,868.9000000953674,885.5999999046326,902.1999998092651,918.9000000953674,935.5999999046326,952.4000000953674,969.0999999046326,985.6999998092651,1002.4000000953674,1019,1035.6999998092651,1052.5,1069.0999999046326,1085.8000001907349,1102.8000001907349,1119.3000001907349,1135.9000000953674,1152.5999999046326,1169.3000001907349,1185.9000000953674,1202.8000001907349,1219.3000001907349,1235.9000000953674,1252.5999999046326,1269.3000001907349,1286.0999999046326,1302.5999999046326,1319.3000001907349,1336.0999999046326,1357.3000001907349]},{"start":[1595,1155],"end":[370,681],"points":[[1595,1155],[1595,1154],[1594,1152],[1594,1151],[1593,1150],[1592,1147],[1591,1144],[1584,1135],[1576,1127],[1564,1117],[1541,1100],[1503,1078],[1442,1046],[1353,999],[1238,940],[1112,883],[976,822],[860,775],[763,737],[620,685],[548,663],[501,648],[479,641],[470,639],[466,638],[463,638],[459,638],[449,637],[436,634],[421,632],[401,631],[395,631],[393,633],[389,637],[382,643],[375,647],[371,651],[371,654],[371,656],[371,658],[371,659],[371,660],[371,664],[371,667],[370,668],[370,669],[369,669],[369,670],[369,671],[369,671],[369,672],[369,673],[369,674],[369,675],[369,676],[369,677],[369,678],[369,679],[369,680],[369,681],[370,681]],"dx":[-1225,-474],"dy":[-1225,-474],"length":1386.8881974968021,"timing":[35.39999961853027,65.59999990463257,102.19999980926514,118.7999997138977,135.39999961853027,152.19999980926514,168.89999961853027,185.5,202.19999980926514,219.09999990463257,235.59999990463257,252.2999997138977,269,285.59999990463257,302.19999980926514,318.8999996185303,335.59999990463257,352.19999980926514,369.09999990463257,385.69999980926514,402.3999996185303,419,435.7999997138977,452.59999990463257,470.19999980926514,485.69999980926514,502.5,519.0999999046326,535.7999997138977,552.5999999046326,569.1999998092651,585.7999997138977,602.3999996185303,619.1999998092651,635.8999996185303,652.5,669.2999997138977,686,702.5999999046326,719.1999998092651,735.8999996185303,752.5,769.2999997138977,785.8999996185303,802.5999999046326,825.0999999046326,905.2999997138977,919.8999996185303,936.1999998092651,1036.1999998092651,1086.2999997138977,1103,1119.7999997138977,1136.2999997138977,1225.5,1269.6999998092651,1386.5,1403.1999998092651,1419.8999996185303,1529.2999997138977,1537.2999997138977]},{"start":[371,681],"end":[1191,339],"points":[[371,681],[375,679],[379,676],[393,667],[427,650],[484,624],[551,600],[617,576],[689,551],[792,514],[861,488],[918,464],[965,443],[1007,424],[1032,411],[1051,400],[1062,391],[1072,382],[1082,373],[1091,366],[1098,361],[1101,360],[1101,359],[1102,359],[1104,359],[1112,359],[1126,359],[1141,359],[1151,358],[1155,358],[1157,358],[1159,357],[1165,357],[1172,355],[1176,353],[1180,351],[1182,349],[1184,347],[1187,346],[1189,343],[1191,340],[1191,339]],"dx":[820,-342],"dy":[820,-342],"length":899.9541000617595,"timing":[217.09999990463257,224.90000009536743,236.69999980926514,253.09999990463257,269.7999997138977,286.40000009536743,303.2999997138977,319.7999997138977,336.59999990463257,353.2999997138977,370.09999990463257,386.5,403.19999980926514,420,436.5,453.19999980926514,469.90000009536743,486.5,503.2999997138977,520,536.5999999046326,553.2999997138977,570,586.7999997138977,603.4000000953674,620,636.9000000953674,653.4000000953674,670,686.6999998092651,703.4000000953674,720.1999998092651,736.6999998092651,753.4000000953674,770.0999999046326,786.7999997138977,803.5999999046326,820.1999998092651,836.9000000953674,853.5,870.2999997138977,886.9000000953674]},{"start":[1190,339],"end":[1831,744],"points":[[1190,339],[1190,340],[1189,341],[1188,341],[1187,343],[1186,344],[1184,345],[1181,347],[1178,350],[1170,357],[1164,363],[1161,368],[1160,375],[1159,380],[1159,385],[1164,395],[1189,422],[1233,462],[1304,523],[1392,594],[1535,691],[1612,733],[1689,766],[1753,788],[1802,801],[1841,812],[1862,815],[1874,817],[1878,817],[1879,817],[1879,815],[1878,811],[1872,802],[1862,792],[1852,780],[1843,769],[1838,761],[1835,755],[1833,751],[1832,749],[1832,748],[1831,748],[1831,747],[1831,746],[1831,745],[1831,744]],"dx":[641,405],"dy":[641,405],"length":1004.6974797992386,"timing":[1.299999713897705,18,34.69999980926514,51.299999713897705,68,84.59999990463257,101.2999997138977,118,134.7999997138977,151.39999961853027,168,184.69999980926514,201.39999961853027,218.09999990463257,234.7999997138977,251.39999961853027,268.19999980926514,284.7999997138977,301.3999996185303,318.19999980926514,334.8999996185303,351.5,368.3999996185303,385,401.69999980926514,418.3999996185303,434.8999996185303,451.59999990463257,468.3999996185303,484.8999996185303,574.8999996185303,585.0999999046326,601.7999997138977,618.5,635.0999999046326,651.7999997138977,668.5,685.0999999046326,701.8999996185303,718.6999998092651,735.2999997138977,815.0999999046326,822.8999996185303,835.5,852,869.0999999046326]},{"start":[1829,744],"end":[1251,985],"points":[[1829,744],[1828,744],[1825,744],[1816,744],[1781,747],[1733,754],[1682,766],[1622,783],[1560,799],[1505,814],[1466,827],[1442,842],[1429,853],[1419,863],[1411,872],[1403,881],[1387,896],[1375,905],[1361,914],[1349,923],[1340,930],[1334,935],[1331,937],[1330,937],[1329,937],[1328,939],[1325,941],[1319,945],[1317,947],[1315,948],[1313,950],[1306,953],[1298,958],[1290,964],[1283,969],[1278,972],[1273,973],[1266,974],[1259,978],[1254,983],[1251,984],[1251,985]],"dx":[-578,241],"dy":[-578,241],"length":644.3838904937203,"timing":[195.90000009536743,203.5,218.69999980926514,235.59999990463257,252,268.69999980926514,285.59999990463257,302.19999980926514,318.90000009536743,335.5,352.19999980926514,368.7999997138977,385.59999990463257,402.19999980926514,418.90000009536743,435.59999990463257,452.2999997138977,468.90000009536743,485.5,502.40000009536743,519,535.5999999046326,552.4000000953674,569,586,602.4000000953674,619.0999999046326,635.6999998092651,652.9000000953674,669.2999997138977,686.5999999046326,702.5,719.2999997138977,735.7999997138977,752.5999999046326,769.4000000953674,785.9000000953674,802.7999997138977,819.6999998092651,835.9000000953674,853,869.4000000953674]},{"start":[1251,984],"end":[154,859],"points":[[1251,984],[1251,983],[1251,982],[1251,981],[1251,980],[1250,980],[1250,979],[1250,977],[1249,975],[1247,972],[1246,970],[1244,965],[1242,962],[1239,958],[1234,951],[1220,939],[1195,923],[1157,902],[1111,884],[1054,868],[984,857],[898,847],[807,842],[681,834],[617,833],[566,832],[524,832],[488,833],[454,835],[426,837],[402,838],[377,839],[350,839],[329,840],[304,841],[261,841],[242,841],[233,841],[231,841],[230,841],[228,843],[221,844],[208,845],[194,846],[181,846],[172,846],[170,846],[169,847],[168,848],[165,850],[162,852],[159,855],[157,856],[157,857],[156,857],[155,858],[154,859]],"dx":[-1097,-125],"dy":[-1097,-125],"length":1147.203325180148,"timing":[1.9000000953674316,25.90000009536743,35.59999990463257,58,82.2000002861023,89.5,102.2000002861023,118.80000019073486,135.40000009536743,152.30000019073486,169,185.90000009536743,202.30000019073486,219.40000009536743,236.90000009536743,252.30000019073486,269.40000009536743,286,302.30000019073486,319.09999990463257,335.90000009536743,352.40000009536743,369.09999990463257,385.59999990463257,402.59999990463257,419.2000002861023,435.80000019073486,452.7000002861023,469.30000019073486,486.40000009536743,502.40000009536743,519.2000002861023,536.0999999046326,552.4000000953674,569.3000001907349,586.8000001907349,602.5999999046326,619.3000001907349,636,652.5,669.5,686.2000002861023,703.2000002861023,719.3000001907349,735.9000000953674,753,769.7000002861023,786.8000001907349,802.8000001907349,819.5999999046326,837.4000000953674,852.9000000953674,869.4000000953674,886.0999999046326,945.5999999046326,953.7000002861023,970]},{"start":[145,863],"end":[200,107],"points":[[145,863],[144,863],[142,864],[139,864],[138,864],[138,863],[139,862],[139,861],[139,859],[140,852],[143,842],[148,822],[151,779],[156,718],[158,645],[164,516],[177,430],[191,347],[194,283],[193,238],[188,207],[184,190],[182,179],[181,170],[183,162],[184,152],[184,140],[184,137],[184,136],[185,136],[186,134],[189,130],[190,128],[192,126],[192,124],[195,120],[197,117],[200,112],[200,109],[200,108],[200,107]],"dx":[55,-756],"dy":[55,-756],"length":775.6177331683066,"timing":[0.20000028610229492,50.40000009536743,66.90000009536743,83.59999990463257,100.2000002861023,299.30000019073486,322.90000009536743,335.5,350.59999990463257,367.2000002861023,383.80000019073486,400.80000019073486,417.2000002861023,434.09999990463257,450.80000019073486,467.2000002861023,483.90000009536743,500.7000002861023,517.4000000953674,534.2000002861023,550.9000000953674,567.3000001907349,584,600.8000001907349,617.5,634.2000002861023,651.0999999046326,668.4000000953674,684,754.9000000953674,767.5999999046326,784,800.7000002861023,817.5999999046326,834.3000001907349,850.9000000953674,867.5,884.5,900.9000000953674,917.7000002861023,934.3000001907349]},{"start":[202,113],"end":[276,504],"points":[[202,113],[207,117],[209,121],[211,124],[218,131],[230,144],[254,165],[290,199],[351,259],[398,307],[452,354],[502,401],[541,436],[570,463],[595,486],[613,501],[622,514],[625,525],[619,535],[590,550],[560,551],[522,545],[474,531],[434,520],[408,512],[392,508],[378,505],[365,501],[353,500],[342,499],[320,499],[298,500],[282,501],[276,501],[276,502],[276,503],[276,504]],"dx":[74,391],"dy":[74,391],"length":961.1126455777064,"timing":[3.5,20.09999990463257,36.90000009536743,53.59999990463257,70.09999990463257,86.7000002861023,103.59999990463257,120.40000009536743,137,154,170.2000002861023,187,203.7000002861023,220.30000019073486,236.90000009536743,253.59999990463257,270.2000002861023,287,303.80000019073486,320.2000002861023,336.90000009536743,353.80000019073486,370.30000019073486,387,404.09999990463257,420.30000019073486,437,454,470.5,487.2000002861023,504.7000002861023,520.5999999046326,537.0999999046326,554,570.5999999046326,620.5,641.3000001907349]},{"start":[278,504],"end":[1741,111],"points":[[278,504],[278,505],[279,505],[280,505],[282,506],[286,506],[299,507],[336,507],[407,502],[561,477],[690,461],[840,444],[992,419],[1137,391],[1273,355],[1391,312],[1505,274],[1590,240],[1645,216],[1683,198],[1700,188],[1710,176],[1713,171],[1715,167],[1718,163],[1723,159],[1732,154],[1745,147],[1756,141],[1759,139],[1759,138],[1759,137],[1757,135],[1755,133],[1754,130],[1752,128],[1751,125],[1750,122],[1748,118],[1745,115],[1743,112],[1742,111],[1741,111]],"dx":[1463,-393],"dy":[1463,-393],"length":1582.133308523626,"timing":[91.90000009536743,116.2999997138977,123.59999990463257,168.09999990463257,184.69999980926514,201.59999990463257,218,234.59999990463257,251.40000009536743,268.5,284.69999980926514,301.7999997138977,318.09999990463257,334.7999997138977,351.59999990463257,368.19999980926514,384.90000009536743,402,418.2999997138977,434.7999997138977,451.69999980926514,468.2999997138977,485.09999990463257,501.59999990463257,518.4000000953674,535.7999997138977,551.5999999046326,568.2999997138977,585,601.6999998092651,618.4000000953674,668.5,685.4000000953674,701.7999997138977,718.5,735.0999999046326,751.7999997138977,768.4000000953674,785.0999999046326,802,818.5,835.0999999046326,867.6999998092651]},{"start":[1739,112],"end":[433,637],"points":[[1739,112],[1738,112],[1737,113],[1736,115],[1734,118],[1732,121],[1731,123],[1731,124],[1730,125],[1727,128],[1683,154],[1596,187],[1479,228],[1344,277],[1222,326],[1128,367],[1049,407],[979,450],[911,487],[852,517],[806,542],[774,559],[733,581],[699,597],[659,610],[619,618],[587,623],[567,625],[548,628],[524,630],[496,633],[473,635],[458,636],[451,638],[449,639],[447,639],[445,639],[444,639],[441,638],[437,638],[434,638],[433,638],[433,637]],"dx":[-1306,525],"dy":[-1306,525],"length":1425.147012227366,"timing":[68.90000009536743,85.69999980926514,102.2999997138977,118.90000009536743,135.59999990463257,152.19999980926514,169,185.69999980926514,202.40000009536743,219,235.69999980926514,252.40000009536743,268.90000009536743,285.69999980926514,302.40000009536743,319.09999990463257,335.7999997138977,352.5,369.09999990463257,385.7999997138977,402.59999990463257,419.19999980926514,435.7999997138977,452.7999997138977,469.2999997138977,485.90000009536743,502.69999980926514,519.1999998092651,535.7999997138977,552.5999999046326,569.2999997138977,585.9000000953674,602.7999997138977,619.5,636,652.6999998092651,669.4000000953674,686.1999998092651,736.0999999046326,752.9000000953674,769.5,786.0999999046326,836.1999998092651]},{"start":[434,637],"end":[2260,753],"points":[[434,637],[435,637],[436,637],[437,637],[438,637],[441,637],[444,637],[446,636],[448,635],[450,635],[455,635],[471,635],[517,635],[590,634],[737,631],[847,631],[977,630],[1097,635],[1223,646],[1344,654],[1451,661],[1570,669],[1679,671],[1791,679],[1894,683],[1982,686],[2085,689],[2127,690],[2157,690],[2183,690],[2209,690],[2236,691],[2256,691],[2265,692],[2266,692],[2267,692],[2270,693],[2271,695],[2273,697],[2273,699],[2273,702],[2273,707],[2273,714],[2271,722],[2266,731],[2262,739],[2260,744],[2260,749],[2260,751],[2259,751],[2259,752],[2259,753],[2260,753]],"dx":[1826,116],"dy":[1826,116],"length":1904.5183065818205,"timing":[18.09999990463257,68.09999990463257,84.7999997138977,101.59999990463257,118.09999990463257,134.7999997138977,151.40000009536743,168.19999980926514,184.7999997138977,201.5,218.19999980926514,234.90000009536743,251.5,268.19999980926514,284.90000009536743,301.59999990463257,318.2999997138977,335,351.59999990463257,368.40000009536743,385.09999990463257,401.69999980926514,418.5,435.2999997138977,451.7999997138977,468.59999990463257,485.19999980926514,501.90000009536743,518.6999998092651,535.1999998092651,552,568.7999997138977,585.1999998092651,601.9000000953674,618.5999999046326,636.6999998092651,685.2999997138977,702.0999999046326,718.6999998092651,735.2999997138977,752.1999998092651,768.6999998092651,785.4000000953674,802,818.7999997138977,835.4000000953674,852.0999999046326,868.7999997138977,885.5,935.5,985.5,1035.5,1052.4000000953674]},{"start":[2247,781],"end":[1554,276],"points":[[2247,781],[2244,781],[2240,781],[2237,781],[2233,781],[2229,781],[2227,781],[2225,781],[2223,781],[2220,781],[2217,781],[2214,781],[2211,781],[2202,781],[2188,779],[2169,774],[2131,759],[2078,731],[2026,696],[1979,653],[1917,577],[1884,517],[1861,462],[1837,414],[1813,380],[1790,352],[1765,328],[1745,313],[1728,301],[1715,293],[1701,285],[1687,279],[1663,272],[1646,270],[1629,270],[1615,269],[1603,269],[1591,269],[1578,271],[1567,272],[1560,273],[1556,275],[1555,275],[1555,276],[1554,276]],"dx":[-693,-505],"dy":[-693,-505],"length":926.638726677296,"timing":[1.5999999046325684,18.200000286102295,35,51.700000286102295,68.30000019073486,84.90000009536743,101.7000002861023,118.40000009536743,135,151.7000002861023,168.40000009536743,185.30000019073486,201.80000019073486,218.40000009536743,235.09999990463257,251.90000009536743,268.5,285.2000002861023,302,318.5,335.2000002861023,351.90000009536743,368.5,385.2000002861023,401.90000009536743,418.5,435.2000002861023,451.90000009536743,468.59999990463257,485.2000002861023,501.90000009536743,518.5999999046326,535.2000002861023,551.9000000953674,568.5999999046326,585.4000000953674,602.0999999046326,618.7000002861023,635.4000000953674,652,668.7000002861023,685.4000000953674,702.0999999046326,718.8000001907349,735.4000000953674]},{"start":[1554,278],"end":[995,214],"points":[[1554,278],[1554,279],[1553,279],[1553,280],[1552,281],[1550,284],[1548,287],[1545,291],[1535,297],[1520,307],[1467,324],[1412,331],[1363,331],[1321,331],[1285,329],[1256,326],[1225,316],[1200,308],[1178,300],[1158,290],[1140,283],[1124,277],[1109,270],[1100,265],[1094,261],[1087,257],[1078,253],[1071,249],[1064,246],[1057,242],[1049,238],[1040,235],[1032,231],[1023,228],[1011,223],[1009,222],[1008,221],[1006,220],[1004,219],[1000,217],[998,216],[996,214],[995,214]],"dx":[-559,-64],"dy":[-559,-64],"length":598.85403379636,"timing":[35.30000019073486,115.90000009536743,123.59999990463257,135,151.90000009536743,168.69999980926514,185.19999980926514,201.90000009536743,218.59999990463257,235.19999980926514,251.90000009536743,268.59999990463257,285.30000019073486,301.90000009536743,318.59999990463257,335.30000019073486,352,368.80000019073486,385.40000009536743,402,418.80000019073486,435.5,452,468.69999980926514,485.40000009536743,502.09999990463257,518.6999998092651,535.4000000953674,552.0999999046326,568.8000001907349,585.5,602.0999999046326,618.9000000953674,635.5,652.1999998092651,668.8000001907349,685.5,702.1999998092651,718.9000000953674,735.5,752.1999998092651,769,785.5999999046326]},{"start":[995,215],"end":[1951,219],"points":[[995,215],[995,216],[994,216],[994,217],[993,218],[993,220],[990,224],[988,228],[985,231],[983,237],[980,242],[979,247],[981,254],[988,262],[1001,267],[1028,271],[1105,274],[1217,277],[1400,280],[1492,282],[1566,283],[1623,283],[1673,278],[1721,269],[1754,256],[1790,244],[1821,232],[1843,224],[1863,217],[1894,214],[1907,214],[1913,214],[1914,213],[1915,213],[1917,212],[1920,210],[1924,210],[1929,209],[1931,209],[1933,209],[1937,210],[1938,211],[1940,213],[1942,214],[1943,215],[1946,217],[1948,218],[1949,218],[1950,218],[1951,218],[1951,219]],"dx":[956,4],"dy":[956,4],"length":1035.3678714840223,"timing":[21.90000009536743,45.59999990463257,53.80000019073486,68,84.59999990463257,101.30000019073486,118,134.7000002861023,151.30000019073486,167.90000009536743,184.5,201.30000019073486,218,234.7000002861023,251.30000019073486,268.40000009536743,284.80000019073486,301.40000009536743,318.09999990463257,334.80000019073486,351.5,368.2000002861023,384.80000019073486,401.5,418.2000002861023,435,451.59999990463257,468.30000019073486,484.90000009536743,501.7000002861023,518.3000001907349,535,551.5999999046326,568.4000000953674,584.9000000953674,601.7000002861023,618.4000000953674,635,651.7000002861023,701.8000001907349,718.4000000953674,735.0999999046326,751.7000002861023,768.5999999046326,785.0999999046326,801.9000000953674,818.5999999046326,835.2000002861023,852,868.5999999046326,901.5]},{"start":[1932,227],"end":[2346,891],"points":[[1932,227],[1928,230],[1923,233],[1917,237],[1911,241],[1906,244],[1903,246],[1901,248],[1894,252],[1883,257],[1866,262],[1841,269],[1815,273],[1801,277],[1798,279],[1798,281],[1801,284],[1805,290],[1814,300],[1837,337],[1869,384],[1906,429],[1947,474],[1993,519],[2034,556],[2080,596],[2128,630],[2167,658],[2193,679],[2205,691],[2212,699],[2217,709],[2220,715],[2224,723],[2229,734],[2233,748],[2238,761],[2241,771],[2245,779],[2247,786],[2251,792],[2254,798],[2256,804],[2259,810],[2262,815],[2265,822],[2271,832],[2279,843],[2288,850],[2295,855],[2299,857],[2302,858],[2305,861],[2309,864],[2321,872],[2328,877],[2335,881],[2340,883],[2342,886],[2343,888],[2345,889],[2345,891],[2346,891]],"dx":[414,664],"dy":[414,664],"length":984.8374124118765,"timing":[0.19999980926513672,16.699999809265137,33.39999961853027,50.09999990463257,66.7999997138977,83.5,100.2999997138977,116.89999961853027,133.59999990463257,150.19999980926514,166.89999961853027,183.59999990463257,200.19999980926514,216.89999961853027,233.69999980926514,250.2999997138977,266.8999996185303,284,300.5,317,333.69999980926514,350.3999996185303,367,383.7999997138977,400.3999996185303,417.09999990463257,433.8999996185303,450.5,467.09999990463257,483.7999997138977,500.5,517.1999998092651,533.8999996185303,550.5,567.1999998092651,583.7999997138977,600.5,617.2999997138977,634,650.6999998092651,667.3999996185303,684,700.7999997138977,717.3999996185303,734.0999999046326,750.7999997138977,767.3999996185303,784.0999999046326,800.6999998092651,817.5,834.0999999046326,850.7999997138977,867.5,884.1999998092651,900.8999996185303,917.5999999046326,934.2999997138977,950.8999996185303,967.5,984.1999998092651,1001,1017.5999999046326,1037]},{"start":[2341,884],"end":[948,209],"points":[[2341,884],[2339,883],[2337,880],[2334,878],[2332,875],[2326,869],[2323,863],[2319,858],[2314,852],[2310,849],[2307,847],[2303,844],[2297,841],[2287,834],[2267,824],[2219,805],[2088,755],[1971,718],[1829,673],[1681,623],[1546,570],[1444,526],[1355,482],[1289,445],[1235,413],[1199,389],[1178,373],[1158,357],[1125,330],[1098,310],[1067,289],[1038,272],[1018,257],[1005,246],[999,240],[993,234],[988,231],[982,228],[975,224],[967,220],[960,216],[956,213],[955,212],[954,211],[951,209],[949,209],[948,209]],"dx":[-1393,-675],"dy":[-1393,-675],"length":1564.5217313630376,"timing":[5.200000286102295,21.800000190734863,38.40000009536743,55.09999990463257,71.90000009536743,88.5,105.2000002861023,121.90000009536743,138.59999990463257,155.30000019073486,172,188.59999990463257,205.40000009536743,222.09999990463257,238.7000002861023,255.40000009536743,272.40000009536743,288.7000002861023,305.5,322.09999990463257,338.80000019073486,355.5,372.09999990463257,388.7000002861023,405.5,422.2000002861023,438.80000019073486,455.59999990463257,472.2000002861023,488.90000009536743,505.80000019073486,523.2000002861023,539,555.5999999046326,572.3000001907349,588.9000000953674,605.7000002861023,622.4000000953674,639,655.9000000953674,672.4000000953674,689,705.8000001907349,784.5,822.5,839,855.8000001907349]},{"start":[950,209],"end":[1472,660],"points":[[950,209],[952,210],[956,212],[960,216],[975,238],[1004,277],[1044,327],[1099,387],[1147,441],[1195,492],[1235,533],[1272,568],[1307,597],[1334,616],[1360,632],[1376,640],[1393,650],[1404,657],[1419,669],[1439,683],[1455,694],[1466,701],[1472,704],[1473,704],[1475,702],[1477,699],[1478,697],[1479,695],[1479,692],[1479,690],[1479,686],[1477,681],[1476,677],[1475,675],[1474,673],[1474,671],[1473,669],[1472,668],[1472,666],[1472,664],[1472,663],[1472,661],[1472,660]],"dx":[522,451],"dy":[522,451],"length":774.4839920559036,"timing":[221.59999990463257,235.40000009536743,252.2999997138977,269,285.59999990463257,302.19999980926514,319,335.59999990463257,352.2999997138977,368.90000009536743,385.59999990463257,402.40000009536743,419.2999997138977,435.59999990463257,452.2999997138977,469.09999990463257,485.59999990463257,502.40000009536743,519.0999999046326,535.6999998092651,552.4000000953674,569.1999998092651,585.6999998092651,602.5,619.0999999046326,635.6999998092651,652.5999999046326,669.1999998092651,685.7999997138977,702.5,719.1999998092651,735.7999997138977,752.5,769.4000000953674,786,802.5999999046326,819.4000000953674,836.0999999046326,852.6999998092651,869.4000000953674,886.0999999046326,902.5999999046326,919.2999997138977]},{"start":[1473,659],"end":[2466,651],"points":[[1473,659],[1476,658],[1487,653],[1520,646],[1601,642],[1702,642],[1809,643],[1970,652],[2074,657],[2171,657],[2264,657],[2339,651],[2386,642],[2404,636],[2413,630],[2417,624],[2419,619],[2423,614],[2429,611],[2436,607],[2436,606],[2437,606],[2438,606],[2441,609],[2446,613],[2449,618],[2452,622],[2455,626],[2456,629],[2459,634],[2461,638],[2463,642],[2463,645],[2465,650],[2466,651]],"dx":[993,-8],"dy":[993,-8],"length":1037.3217682235388,"timing":[274,285.5,302.30000019073486,318.80000019073486,335.6000003814697,352.2000002861023,368.80000019073486,385.5,402.30000019073486,418.90000009536743,435.6000003814697,452.80000019073486,468.90000009536743,485.7000002861023,502.30000019073486,518.9000000953674,535.6000003814697,553.2000002861023,569.1000003814697,586.1000003814697,602.4000000953674,657.8000001907349,669,685.8000001907349,702.4000000953674,719.2000002861023,735.8000001907349,752.5,769.2000002861023,785.8000001907349,802.6000003814697,819.3000001907349,835.9000000953674,852.6000003814697,869.4000000953674]},{"start":[2462,651],"end":[1898,183],"points":[[2462,651],[2459,651],[2454,651],[2449,651],[2440,650],[2425,646],[2412,642],[2400,639],[2389,636],[2375,632],[2356,628],[2334,622],[2314,617],[2299,612],[2282,603],[2252,589],[2217,571],[2158,539],[2125,511],[2101,484],[2084,451],[2072,408],[2058,369],[2046,336],[2029,304],[2016,279],[2002,258],[1988,239],[1975,227],[1957,212],[1953,207],[1951,205],[1950,204],[1949,203],[1948,203],[1947,203],[1945,203],[1944,203],[1939,203],[1928,199],[1918,195],[1908,191],[1902,187],[1901,186],[1899,184],[1899,183],[1898,183]],"dx":[-564,-468],"dy":[-564,-468],"length":787.8300357819762,"timing":[4.599999904632568,21.399999618530273,38,54.69999980926514,71.89999961853027,88.09999990463257,104.7999997138977,121.39999961853027,138.09999990463257,154.7999997138977,171.39999961853027,188.09999990463257,204.69999980926514,221.39999961853027,238.09999990463257,254.69999980926514,271.5,288.09999990463257,304.7999997138977,321.5,338.19999980926514,355,371.5,388.19999980926514,404.7999997138977,421.69999980926514,438.3999996185303,455,471.7999997138977,488.5,505,521.7999997138977,538.5,555.0999999046326,571.7999997138977,621.7999997138977,640.1999998092651,655.1999998092651,671.8999996185303,688.5999999046326,705.1999998092651,721.7999997138977,738.6999998092651,755.1999998092651,772,789,805.2999997138977]},{"start":[1896,184],"end":[2314,362],"points":[[1896,184],[1894,185],[1890,189],[1881,196],[1866,205],[1854,215],[1852,223],[1855,229],[1858,228],[1867,231],[1884,232],[1910,233],[1954,238],[2013,251],[2094,281],[2141,302],[2178,322],[2211,338],[2238,351],[2259,358],[2269,361],[2277,361],[2279,361],[2280,361],[2281,361],[2283,361],[2286,361],[2289,361],[2294,361],[2299,361],[2302,361],[2304,361],[2306,362],[2307,362],[2309,362],[2313,362],[2314,362]],"dx":[418,178],"dy":[418,178],"length":552.1264974509306,"timing":[129.30000019073486,136.7000002861023,152.90000009536743,169.7000002861023,186.2000002861023,203.10000038146973,219.60000038146973,236.40000009536743,253.10000038146973,269.7000002861023,286.40000009536743,303.1000003814697,319.90000009536743,336.40000009536743,353,369.90000009536743,386.40000009536743,403.2000002861023,419.90000009536743,436.5,453.1000003814697,469.90000009536743,486.6000003814697,561.2000002861023,570,586.6000003814697,603.3000001907349,620,636.7000002861023,653.3000001907349,670.1000003814697,686.7000002861023,703.5,720.3000001907349,736.8000001907349,753.6000003814697,770.2000002861023]},{"start":[2301,362],"end":[1720,950],"points":[[2301,362],[2297,362],[2291,362],[2284,362],[2276,362],[2265,362],[2251,362],[2235,362],[2212,362],[2178,362],[2134,362],[2094,359],[2071,358],[2064,357],[2063,357],[2062,358],[2055,364],[2041,382],[2007,413],[1973,455],[1941,502],[1908,550],[1883,594],[1855,641],[1835,680],[1818,720],[1813,734],[1810,742],[1807,751],[1803,764],[1798,779],[1793,793],[1789,804],[1783,816],[1775,829],[1766,844],[1760,858],[1755,873],[1754,877],[1754,878],[1755,879],[1755,880],[1756,882],[1756,884],[1756,886],[1756,888],[1756,892],[1752,899],[1745,911],[1736,927],[1732,935],[1729,940],[1728,941],[1727,942],[1726,942],[1725,942],[1724,942],[1724,943],[1724,944],[1723,944],[1723,945],[1723,946],[1722,947],[1722,948],[1721,948],[1721,949],[1720,950],[1720,951],[1720,950]],"dx":[-581,588],"dy":[-581,588],"length":939.0205155274156,"timing":[0.09999990463256836,16.90000009536743,33.5,50.09999990463257,66.90000009536743,83.5,100.19999980926514,116.90000009536743,133.5,150.2999997138977,166.90000009536743,183.5,200.09999990463257,216.69999980926514,233.59999990463257,250.19999980926514,266.90000009536743,283.59999990463257,300.19999980926514,317,333.69999980926514,350.19999980926514,366.90000009536743,383.69999980926514,400.2999997138977,417,433.69999980926514,450.40000009536743,467,483.69999980926514,500.40000009536743,517,533.9000000953674,550.5999999046326,567.1999998092651,583.9000000953674,600.6999998092651,617.2999997138977,633.9000000953674,650.5999999046326,681.0999999046326,698,705.0999999046326,717.1999998092651,734,750.9000000953674,767.4000000953674,784.0999999046326,800.6999998092651,817.2999997138977,834,850.9000000953674,867.4000000953674,884.0999999046326,905.0999999046326,917.5,934.0999999046326,950.9000000953674,1017.5,1034.2999997138977,1121.1999998092651,1137,1153.1999998092651,1169,1184.1999998092651,1201,1217.6999998092651,1234.2999997138977,1585.1999998092651]},{"start":[1719,945],"end":[1937,904],"points":[[1719,945],[1719,944],[1719,943],[1719,942],[1719,941],[1719,940],[1719,939],[1719,938],[1719,937],[1719,936],[1720,935],[1721,934],[1725,932],[1735,929],[1750,927],[1766,927],[1777,930],[1790,936],[1800,940],[1817,944],[1841,946],[1875,947],[1910,948],[1928,948],[1935,947],[1935,945],[1936,944],[1937,942],[1937,939],[1937,934],[1937,928],[1936,919],[1935,916],[1935,914],[1935,911],[1935,909],[1936,906],[1937,904]],"dx":[218,-41],"dy":[218,-41],"length":274.2773021128977,"timing":[8.5,25.09999990463257,48,96.09999990463257,112.09999990463257,127.90000009536743,141.90000009536743,158.69999980926514,175.40000009536743,240.09999990463257,248,258.59999990463257,275.40000009536743,292,308.59999990463257,325.2999997138977,342,358.69999980926514,375.40000009536743,392,408.69999980926514,425.40000009536743,442.09999990463257,458.90000009536743,475.5,492.19999980926514,509.09999990463257,525.9000000953674,542.2999997138977,559,575.5999999046326,592.4000000953674,609,625.5999999046326,642.2999997138977,659,675.7999997138977,692.2999997138977]},{"start":[1936,903],"end":[1466,832],"points":[[1936,903],[1935,903],[1933,902],[1932,901],[1931,900],[1929,898],[1926,897],[1923,896],[1919,894],[1916,893],[1909,891],[1901,890],[1885,888],[1847,887],[1783,883],[1702,877],[1651,873],[1605,867],[1591,867],[1585,867],[1581,867],[1579,867],[1578,867],[1577,867],[1575,867],[1571,867],[1562,867],[1550,864],[1537,860],[1510,851],[1491,844],[1474,836],[1466,832]],"dx":[-470,-71],"dy":[-470,-71],"length":480.6373117709433,"timing":[18.59999990463257,39.200000286102295,55.09999990463257,102,118.7000002861023,135.30000019073486,152,168.7000002861023,185.30000019073486,202,218.7000002861023,235.40000009536743,252.09999990463257,269,285.5,302.59999990463257,318.90000009536743,335.59999990463257,352.30000019073486,369,385.59999990463257,402.30000019073486,423.30000019073486,435.59999990463257,452.2000002861023,469,485.80000019073486,502.30000019073486,519.0999999046326,535.5999999046326,552.3000001907349,569,585.7000002861023]},{"start":[1465,831],"end":[2470,486],"points":[[1465,831],[1465,830],[1465,829],[1465,828],[1466,826],[1472,822],[1488,812],[1525,795],[1592,777],[1737,739],[1848,715],[1973,691],[2081,663],[2169,636],[2245,606],[2313,573],[2381,540],[2440,508],[2490,488],[2523,472],[2544,461],[2559,450],[2559,445],[2559,444],[2558,444],[2557,443],[2556,442],[2553,442],[2546,442],[2534,442],[2521,442],[2511,442],[2507,442],[2506,442],[2506,443],[2505,444],[2504,447],[2504,450],[2503,451],[2502,454],[2499,459],[2494,468],[2484,477],[2474,483],[2471,486],[2470,486]],"dx":[1005,-345],"dy":[1005,-345],"length":1288.0682458226454,"timing":[110,152.60000038146973,169.30000019073486,186,202.7000002861023,219.30000019073486,236,252.60000038146973,269.30000019073486,286,302.80000019073486,319.40000009536743,336.2000002861023,352.80000019073486,369.40000009536743,386.2000002861023,402.90000009536743,419.5,436.1000003814697,453,469.5,486.2000002861023,503,519.6000003814697,569.5,619.7000002861023,637.7000002861023,653.6000003814697,669.7000002861023,686.3000001907349,703.1000003814697,719.6000003814697,736.4000000953674,753.2000002861023,838,853.7000002861023,869.9000000953674,886.5,903.2000002861023,919.9000000953674,936.5,953.2000002861023,969.9000000953674,986.6000003814697,1003.4000000953674,1020]},{"start":[2469,486],"end":[1562,760],"points":[[2469,486],[2467,485],[2461,485],[2435,484],[2370,484],[2284,484],[2198,483],[2112,483],[1995,484],[1933,488],[1887,492],[1863,503],[1855,511],[1854,521],[1853,530],[1850,539],[1844,549],[1835,556],[1823,564],[1809,573],[1776,590],[1748,604],[1716,615],[1678,624],[1650,630],[1637,638],[1625,645],[1615,653],[1604,661],[1593,669],[1583,675],[1574,682],[1571,688],[1570,694],[1570,698],[1571,701],[1572,703],[1573,706],[1575,711],[1575,716],[1576,722],[1577,738],[1573,746],[1566,754],[1562,759],[1560,760],[1561,760],[1562,760]],"dx":[-907,274],"dy":[-907,274],"length":1053.2486913685461,"timing":[350.80000019073486,358.5,370,386.80000019073486,403.59999990463257,421.19999980926514,437,453.59999990463257,470.19999980926514,486.90000009536743,503.5,520.1999998092651,536.9000000953674,553.5999999046326,570.3000001907349,586.9000000953674,603.6999998092651,620.3000001907349,637.0999999046326,653.8000001907349,670.3000001907349,687.0999999046326,703.6999998092651,720.4000000953674,737,753.6999998092651,770.4000000953674,787.0999999046326,803.8000001907349,820.5,837.0999999046326,853.9000000953674,870.5,887.0999999046326,903.8000001907349,920.5999999046326,937.3000001907349,953.9000000953674,970.5999999046326,987.4000000953674,1004.0999999046326,1054.0999999046326,1070.6999998092651,1087.4000000953674,1104.1999998092651,1120.8000001907349,1190.1999998092651,1302.3000001907349]},{"start":[1561,758],"end":[869,760],"points":[[1561,758],[1561,757],[1561,756],[1560,756],[1560,755],[1560,754],[1560,753],[1559,753],[1559,752],[1559,751],[1557,750],[1545,750],[1504,749],[1432,740],[1331,728],[1201,715],[1083,707],[992,699],[939,695],[919,694],[914,694],[911,699],[906,703],[897,708],[887,711],[877,713],[870,717],[867,720],[867,723],[867,725],[870,727],[873,730],[873,734],[873,739],[873,741],[873,744],[873,746],[873,750],[872,754],[871,758],[869,759],[868,761],[869,761],[869,760]],"dx":[-692,2],"dy":[-692,2],"length":760.0043871549733,"timing":[7.400000095367432,24.100000381469727,56.200000286102295,64.10000038146973,80.2000002861023,96.2000002861023,120.2000002861023,128.10000038146973,176.30000019073486,192.10000038146973,240.90000009536743,257.6000003814697,274.30000019073486,291,307.6000003814697,324.30000019073486,341,357.7000002861023,374.40000009536743,391,407.7000002861023,424.30000019073486,441,457.80000019073486,474.40000009536743,491.1000003814697,507.80000019073486,524.5,541.2000002861023,557.9000000953674,574.5,591.2000002861023,607.9000000953674,624.6000003814697,641.2000002861023,657.9000000953674,674.6000003814697,691.3000001907349,707.9000000953674,724.6000003814697,741.3000001907349,757.9000000953674,808.3000001907349,880.9000000953674]},{"start":[873,754],"end":[2196,1242],"points":[[873,754],[875,751],[880,746],[883,743],[884,741],[884,740],[884,739],[884,738],[885,736],[889,734],[900,728],[920,725],[964,725],[1075,739],[1164,753],[1253,777],[1320,798],[1384,819],[1453,835],[1547,848],[1672,868],[1812,902],[1909,945],[1978,986],[2024,1019],[2088,1062],[2161,1100],[2225,1146],[2267,1205],[2290,1252],[2202,1252],[2198,1247],[2194,1244],[2194,1243],[2195,1243],[2195,1242],[2196,1242]],"dx":[1323,488],"dy":[1323,488],"length":1681.074423984969,"timing":[17.59999990463257,67.59999990463257,84.2999997138977,101.09999990463257,117.69999980926514,134.5,155.5,171.40000009536743,184.5,201.09999990463257,217.7999997138977,234.59999990463257,251.2999997138977,267.90000009536743,284.5,301.19999980926514,317.90000009536743,334.5,351.19999980926514,367.90000009536743,384.59999990463257,401.2999997138977,418,434.59999990463257,451.2999997138977,468,484.69999980926514,501.7999997138977,518.0999999046326,534.7999997138977,907.9000000953674,918.4000000953674,935.0999999046326,963.5,971.5,1018.4000000953674,1195.6999998092651]},{"start":[2192,1228],"end":[403,540],"points":[[2192,1228],[2191,1228],[2182,1224],[2125,1204],[1997,1161],[1799,1088],[1585,1008],[1275,873],[1100,785],[965,709],[896,671],[856,649],[840,640],[829,636],[814,630],[793,622],[764,613],[727,601],[687,592],[632,573],[598,560],[570,549],[550,543],[540,538],[531,536],[524,534],[511,533],[495,531],[477,529],[464,527],[457,527],[456,529],[453,531],[450,533],[447,536],[444,537],[442,538],[440,540],[436,540],[433,540],[422,541],[415,541],[410,540],[409,540],[407,540],[404,540],[403,540]],"dx":[-1789,-688],"dy":[-1789,-688],"length":1937.7964448491582,"timing":[289.5,301.3999996185303,318,334.69999980926514,351.2999997138977,368.09999990463257,384.69999980926514,401.3999996185303,418,434.7999997138977,451.5,468.2999997138977,484.7999997138977,501.5,518.0999999046326,534.8999996185303,551.5,568.2999997138977,584.8999996185303,601.5999999046326,618.1999998092651,634.8999996185303,651.5,668.2999997138977,685,701.5999999046326,718.3999996185303,735,751.6999998092651,768.5,785.2999997138977,835,851.6999998092651,868.3999996185303,885.2999997138977,901.8999996185303,918.5,935.0999999046326,951.7999997138977,968.5,985.0999999046326,1001.7999997138977,1018.5,1073.1999998092651,1089.0999999046326,1102,1118.5999999046326]},{"start":[404,540],"end":[490,334],"points":[[404,540],[405,540],[407,539],[409,538],[412,536],[414,534],[417,529],[420,523],[425,514],[434,500],[445,483],[462,460],[474,442],[480,424],[482,414],[485,404],[489,394],[491,386],[492,379],[492,377],[492,376],[491,375],[491,374],[491,373],[491,371],[491,369],[492,364],[493,358],[493,354],[493,349],[492,346],[492,344],[491,342],[491,339],[491,337],[490,335],[490,334]],"dx":[86,-206],"dy":[86,-206],"length":233.79671037279363,"timing":[145.40000009536743,185.5,202.09999990463257,218.80000019073486,235.5,252.30000019073486,268.80000019073486,285.5,302.30000019073486,319,335.59999990463257,352.30000019073486,369,385.7000002861023,402.5,419,435.7000002861023,452.40000009536743,469,485.7000002861023,502.40000009536743,519.2000002861023,545.0999999046326,553.0999999046326,569,585.7000002861023,602.7000002861023,619.2000002861023,635.8000001907349,652.5,669.0999999046326,685.8000001907349,702.5999999046326,719.0999999046326,735.8000001907349,752.5999999046326,769.0999999046326]},{"start":[491,334],"end":[755,438],"points":[[491,334],[492,334],[493,335],[494,336],[496,337],[499,338],[500,339],[502,340],[504,341],[509,343],[513,345],[517,347],[533,355],[560,370],[587,387],[614,401],[632,410],[644,414],[651,415],[656,415],[658,415],[660,416],[664,417],[669,418],[672,420],[674,420],[675,420],[676,421],[677,422],[678,423],[682,426],[692,429],[700,429],[710,429],[715,429],[720,429],[725,429],[732,431],[738,433],[742,434],[745,435],[749,436],[752,436],[754,436],[754,437],[755,437],[755,438]],"dx":[264,104],"dy":[264,104],"length":291.1425541177209,"timing":[65.80000019073486,73.5,84.80000019073486,101.5,118.30000019073486,134.90000009536743,151.5,168.30000019073486,185,201.5,218.30000019073486,234.80000019073486,251.5,268.30000019073486,285,301.7000002861023,318.40000009536743,335,351.7000002861023,368.7000002861023,418.5,435.2000002861023,451.90000009536743,468.59999990463257,485.2000002861023,501.90000009536743,518.5,545.5999999046326,553.8000001907349,568.7000002861023,585.4000000953674,602,618.5999999046326,635.3000001907349,652,668.8000001907349,685.4000000953674,702,718.7000002861023,735.4000000953674,752.0999999046326,768.8000001907349,785.4000000953674,802.0999999046326,817.5,841.5,852.2000002861023]},{"start":[748,438],"end":[2044,401],"points":[[748,438],[746,438],[744,438],[741,438],[738,436],[737,436],[736,435],[735,435],[734,435],[734,434],[740,437],[754,444],[788,454],[843,459],[965,460],[1065,455],[1180,450],[1305,443],[1432,439],[1537,438],[1620,436],[1670,433],[1700,431],[1726,429],[1749,426],[1764,422],[1778,419],[1784,418],[1788,418],[1793,417],[1801,417],[1814,417],[1826,417],[1830,416],[1833,415],[1850,415],[1868,415],[1888,416],[1906,416],[1921,416],[1936,416],[1949,414],[1960,413],[1967,412],[1969,412],[1970,412],[1972,412],[1974,409],[1979,408],[1981,407],[1982,407],[1983,407],[1985,406],[1989,405],[1995,403],[1999,402],[2002,402],[2003,402],[2007,402],[2014,402],[2018,402],[2022,402],[2026,402],[2030,402],[2034,402],[2040,401],[2043,401],[2044,401]],"dx":[1296,-37],"dy":[1296,-37],"length":1335.4345874914836,"timing":[1.5,18.200000286102295,34.90000009536743,51.700000286102295,68.40000009536743,84.90000009536743,116.09999990463257,132.30000019073486,140,151.7000002861023,201.7000002861023,218.40000009536743,235.09999990463257,251.80000019073486,268.40000009536743,285.09999990463257,301.80000019073486,318.40000009536743,335.2000002861023,351.80000019073486,368.5,385.2000002861023,401.90000009536743,418.59999990463257,435.30000019073486,452,468.59999990463257,485.40000009536743,502,518.7000002861023,535.3000001907349,551.9000000953674,568.8000001907349,585.4000000953674,635.4000000953674,652,668.9000000953674,685.5,702.0999999046326,718.8000001907349,735.5999999046326,752.0999999046326,768.9000000953674,785.5,802.2000002861023,818.9000000953674,835.5999999046326,852.0999999046326,869,885.5999999046326,902.2000002861023,918.9000000953674,935.7000002861023,952.4000000953674,969,985.7000002861023,1002.4000000953674,1019,1035.8000001907349,1052.4000000953674,1069.0999999046326,1085.8000001907349,1102.4000000953674,1119,1135.8000001907349,1152.3000001907349,1169,1185.8000001907349]},{"start":[912,787],"end":[1904,1187],"points":[[912,787],[912,786],[912,785],[912,783],[912,781],[912,779],[912,778],[912,777],[912,776],[912,775],[911,774],[911,773],[911,770],[913,766],[924,760],[951,758],[994,758],[1083,775],[1142,795],[1205,824],[1279,861],[1365,901],[1455,942],[1541,984],[1626,1025],[1707,1066],[1771,1105],[1809,1129],[1833,1143],[1848,1153],[1852,1156],[1853,1157],[1853,1159],[1855,1160],[1856,1161],[1858,1162],[1861,1164],[1866,1167],[1872,1170],[1880,1174],[1887,1179],[1895,1183],[1897,1183],[1898,1183],[1899,1184],[1900,1185],[1902,1186],[1903,1187],[1904,1187]],"dx":[992,400],"dy":[992,400],"length":1117.2153780976578,"timing":[16.800000190734863,33.40000009536743,50.10000038146973,66.80000019073486,83.60000038146973,100.2000002861023,116.80000019073486,140.2000002861023,156.10000038146973,180.40000009536743,188.2000002861023,200.2000002861023,217.10000038146973,233.7000002861023,250.30000019073486,266.90000009536743,283.6000003814697,300.30000019073486,317,333.6000003814697,350.40000009536743,367.1000003814697,383.90000009536743,400.40000009536743,417.1000003814697,433.80000019073486,450.40000009536743,467.2000002861023,483.90000009536743,500.5,517.2000002861023,533.8000001907349,550.5,567.3000001907349,583.9000000953674,600.6000003814697,617.2000002861023,634,650.7000002861023,667.3000001907349,684,700.6000003814697,717.3000001907349,734,751,767.3000001907349,784.1000003814697,801.3000001907349,817.4000000953674]},{"start":[1902,1183],"end":[1548,1008],"points":[[1902,1183],[1900,1180],[1896,1177],[1890,1173],[1883,1168],[1873,1163],[1859,1152],[1847,1145],[1833,1136],[1824,1130],[1818,1125],[1813,1121],[1808,1117],[1799,1110],[1785,1103],[1760,1090],[1741,1083],[1730,1080],[1727,1080],[1727,1081],[1727,1082],[1726,1082],[1724,1083],[1721,1083],[1714,1083],[1703,1083],[1680,1081],[1647,1070],[1617,1058],[1596,1050],[1584,1042],[1582,1040],[1582,1039],[1582,1038],[1580,1036],[1577,1031],[1571,1025],[1565,1018],[1558,1013],[1554,1010],[1553,1010],[1552,1010],[1552,1009],[1551,1009],[1550,1008],[1549,1008],[1548,1008]],"dx":[-354,-175],"dy":[-354,-175],"length":410.7776572271889,"timing":[3.1999998092651367,20,36.69999980926514,53.39999961853027,70,86.69999980926514,103.2999997138977,119.89999961853027,136.69999980926514,153.2999997138977,170.09999990463257,186.7999997138977,203.5,220.09999990463257,236.7999997138977,253.5,270.09999990463257,286.7999997138977,303.5,335.09999990463257,343,353.5,370.19999980926514,386.7999997138977,403.59999990463257,420.2999997138977,436.8999996185303,453.59999990463257,470.19999980926514,487.09999990463257,503.69999980926514,520.2999997138977,537,553.6999998092651,570.2999997138977,587.0999999046326,603.6999998092651,620.3999996185303,637,653.7999997138977,670.3999996185303,687.0999999046326,743.3999996185303,753.8999996185303,770.5,775.2999997138977,787.1999998092651]},{"start":[1709,679],"end":[1926,970],"points":[[1709,679],[1708,680],[1706,682],[1704,683],[1702,685],[1698,687],[1695,689],[1693,690],[1690,691],[1689,693],[1688,693],[1686,695],[1682,697],[1676,700],[1671,703],[1664,707],[1660,710],[1653,715],[1648,721],[1643,730],[1639,748],[1638,775],[1637,806],[1638,834],[1646,856],[1663,882],[1687,908],[1710,931],[1741,965],[1759,988],[1776,1011],[1793,1032],[1817,1053],[1837,1069],[1852,1078],[1864,1086],[1873,1091],[1878,1093],[1879,1093],[1880,1093],[1881,1093],[1882,1092],[1884,1089],[1888,1081],[1892,1069],[1895,1056],[1898,1047],[1900,1038],[1902,1032],[1904,1024],[1906,1017],[1908,1012],[1909,1009],[1910,1007],[1911,1005],[1913,1004],[1914,1002],[1915,998],[1917,994],[1918,992],[1919,989],[1921,986],[1922,983],[1924,979],[1925,973],[1926,971],[1926,970]],"dx":[217,291],"dy":[217,291],"length":683.9965646142981,"timing":[54,67.40000009536743,84.09999990463257,100.80000019073486,117.5,134.09999990463257,150.7000002861023,167.5,184.2000002861023,200.90000009536743,217.5,234.2000002861023,250.90000009536743,267.59999990463257,284.2000002861023,300.90000009536743,317.7000002861023,334.2000002861023,351,367.7000002861023,384.40000009536743,401.09999990463257,417.7000002861023,434.30000019073486,451,467.7000002861023,484.5,501.09999990463257,517.9000000953674,534.5,551.0999999046326,567.8000001907349,584.5,601.2000002861023,617.8000001907349,634.5,651.2000002861023,667.8000001907349,684.5,701.3000001907349,718.0999999046326,734.5999999046326,751.3000001907349,768,784.7000002861023,801.4000000953674,818,834.7000002861023,851.4000000953674,868,884.7000002861023,901.5,918.0999999046326,934.7000002861023,951.4000000953674,968.0999999046326,984.8000001907349,1001.5,1018.2000002861023,1034.8000001907349,1051.5,1068.2000002861023,1084.9000000953674,1101.5,1118.3000001907349,1134.9000000953674,1157.9000000953674]},{"start":[238,570],"end":[380,573],"points":[[238,570],[239,570],[241,572],[242,573],[242,574],[244,575],[253,580],[266,586],[280,592],[296,596],[309,598],[320,598],[325,598],[329,597],[332,596],[339,587],[344,581],[347,578],[349,577],[349,576],[349,575],[350,575],[351,575],[352,574],[353,574],[353,575],[354,575],[355,575],[356,575],[357,575],[359,575],[361,575],[366,575],[369,575],[372,574],[374,574],[376,573],[377,573],[378,573],[380,573]],"dx":[142,3],"dy":[142,3],"length":161.75773009839122,"timing":[258.1000003814697,268.1000003814697,284.80000019073486,305.90000009536743,318.1000003814697,634.2000002861023,652.3000001907349,669.3000001907349,685.2000002861023,703.1000003814697,718.4000000953674,735.1000003814697,751.8000001907349,768.7000002861023,785.2000002861023,802,819.6000003814697,835.2000002861023,851.9000000953674,868.7000002861023,890.1000003814697,901.9000000953674,918.8000001907349,935.3000001907349,1146,1161.9000000953674,1178,1210.2000002861023,1218.8000001907349,1235.5,1252.1000003814697,1268.9000000953674,1285.6000003814697,1302.2000002861023,1318.9000000953674,1335.7000002861023,1352.3000001907349,1369.1000003814697,1385.7000002861023,1402.3000001907349]},{"start":[1557,841],"end":[2013,505],"points":[[1557,841],[1555,841],[1554,841],[1552,841],[1551,841],[1550,841],[1547,841],[1537,842],[1523,842],[1504,845],[1489,845],[1478,845],[1470,842],[1470,841],[1470,836],[1475,827],[1488,816],[1516,798],[1563,776],[1618,752],[1686,724],[1760,693],[1843,661],[1921,637],[2037,608],[2097,592],[2149,579],[2187,568],[2220,557],[2252,548],[2281,541],[2304,534],[2326,530],[2348,526],[2362,522],[2372,518],[2375,515],[2374,514],[2366,512],[2351,511],[2318,511],[2263,511],[2189,514],[2130,516],[2091,516],[2068,516],[2056,514],[2048,512],[2045,511],[2042,511],[2040,511],[2039,511],[2038,511],[2038,510],[2037,510],[2035,510],[2031,508],[2025,508],[2018,507],[2014,505],[2013,505]],"dx":[456,-336],"dy":[456,-336],"length":1427.07786724515,"timing":[92.90000009536743,109.19999980926514,125.90000009536743,142.5,164.5,175.90000009536743,192.59999990463257,209.19999980926514,226,242.69999980926514,259.2999997138977,276.09999990463257,292.7999997138977,309.40000009536743,326,342.69999980926514,359.40000009536743,376.09999990463257,392.7999997138977,409.5,426.19999980926514,442.7999997138977,459.5,476.19999980926514,492.90000009536743,509.5,526.0999999046326,542.9000000953674,559.5999999046326,576.2999997138977,593,609.5999999046326,626.2999997138977,643.0999999046326,659.6999998092651,676.2999997138977,693,709.6999998092651,726.2999997138977,743.0999999046326,759.6999998092651,776.5,793.0999999046326,809.9000000953674,826.5999999046326,843.0999999046326,859.7999997138977,876.5999999046326,893.1999998092651,909.9000000953674,926.5999999046326,943.1999998092651,993.2999997138977,1044.6999998092651,1060,1076.6999998092651,1093.4000000953674,1110,1126.6999998092651,1143.2999997138977,1160.0999999046326]},{"start":[2003,520],"end":[757,213],"points":[[2003,520],[1997,527],[1989,535],[1983,543],[1975,549],[1969,559],[1958,567],[1946,576],[1934,585],[1922,595],[1907,606],[1902,610],[1901,612],[1899,614],[1898,616],[1894,620],[1886,627],[1875,638],[1854,654],[1828,668],[1793,675],[1724,662],[1661,629],[1591,586],[1505,533],[1431,491],[1365,452],[1302,417],[1241,383],[1183,352],[1131,323],[1083,289],[1040,264],[992,238],[972,227],[959,221],[952,219],[950,218],[949,218],[948,218],[946,219],[935,223],[914,224],[893,224],[874,224],[853,222],[845,222],[836,221],[829,220],[821,218],[816,216],[813,215],[813,214],[812,214],[806,214],[792,214],[769,214],[759,214],[757,213]],"dx":[-1246,-307],"dy":[-1246,-307],"length":1426.6794494211406,"timing":[8.800000190734863,25.40000009536743,42.09999990463257,58.80000019073486,75.40000009536743,92.19999980926514,108.90000009536743,125.5,142.19999980926514,158.90000009536743,175.69999980926514,192.30000019073486,209,225.69999980926514,242.30000019073486,259,275.69999980926514,292.40000009536743,309,325.69999980926514,342.40000009536743,359,375.69999980926514,392.40000009536743,409.09999990463257,425.80000019073486,442.5,459.19999980926514,475.90000009536743,492.59999990463257,509.19999980926514,525.8000001907349,542.5999999046326,559.1999998092651,575.9000000953674,592.5,609.1999998092651,625.9000000953674,647,663.0999999046326,676,692.6999998092651,709.3000001907349,725.9000000953674,742.6999998092651,759.3000001907349,776,792.6999998092651,809.5,826.0999999046326,842.8000001907349,859.5,876.1999998092651,1087.1999998092651,1109.5999999046326,1126.4000000953674,1143,1159.6999998092651,1176.4000000953674]},{"start":[1920,971],"end":[1558,841],"points":[[1920,971],[1918,972],[1914,972],[1913,974],[1911,975],[1909,976],[1906,977],[1903,978],[1899,979],[1897,979],[1896,979],[1895,979],[1894,979],[1891,979],[1888,978],[1883,977],[1878,977],[1875,976],[1872,976],[1867,974],[1859,972],[1847,967],[1818,957],[1795,949],[1770,940],[1747,934],[1732,929],[1721,927],[1713,924],[1707,924],[1704,924],[1700,924],[1698,924],[1693,923],[1679,920],[1666,915],[1652,909],[1641,902],[1633,893],[1626,881],[1622,870],[1618,858],[1616,853],[1615,851],[1614,851],[1613,851],[1612,851],[1608,850],[1600,850],[1592,850],[1585,849],[1579,848],[1575,848],[1572,847],[1572,846],[1571,846],[1570,846],[1568,845],[1564,843],[1561,842],[1559,841],[1558,841]],"dx":[-362,-130],"dy":[-362,-130],"length":412.42034444379453,"timing":[16.59999990463257,33.39999961853027,50,66.59999990463257,83.2999997138977,100,116.59999990463257,133.39999961853027,150.09999990463257,166.69999980926514,191.09999990463257,207.09999990463257,216.69999980926514,233.39999961853027,250.09999990463257,266.8999996185303,283.3999996185303,300.09999990463257,316.7999997138977,333.5,350.09999990463257,366.8999996185303,383.5,400.19999980926514,416.8999996185303,433.59999990463257,450.19999980926514,466.8999996185303,483.59999990463257,500.2999997138977,517,533.5999999046326,550.2999997138977,567,583.6999998092651,600.2999997138977,617,633.6999998092651,650.3999996185303,667.0999999046326,683.7999997138977,700.5,717.0999999046326,733.7999997138977,750.3999996185303,839.5,850.5,867.1999998092651,883.8999996185303,900.5999999046326,917.1999998092651,933.8999996185303,950.5999999046326,967.3999996185303,984,1000.6999998092651,1017.2999997138977,1034,1050.6999998092651,1067.3999996185303,1084.0999999046326,1100.7999997138977]},{"start":[1546,1008],"end":[1710,679],"points":[[1546,1008],[1545,1008],[1543,1008],[1539,1008],[1538,1007],[1537,1007],[1537,1006],[1535,1004],[1530,996],[1525,986],[1518,964],[1517,945],[1517,921],[1524,894],[1532,876],[1539,866],[1545,859],[1552,854],[1558,850],[1565,846],[1573,841],[1579,838],[1584,834],[1586,832],[1588,829],[1591,824],[1595,816],[1599,806],[1604,798],[1609,788],[1615,776],[1623,765],[1628,754],[1635,746],[1641,737],[1644,732],[1648,727],[1654,723],[1663,718],[1672,713],[1679,709],[1685,705],[1687,703],[1691,700],[1693,699],[1698,697],[1703,694],[1706,691],[1708,687],[1709,682],[1709,680],[1709,679],[1710,679]],"dx":[164,-329],"dy":[164,-329],"length":422.9532980148639,"timing":[145.89999961853027,160.7999997138977,177.5,194.19999980926514,210.7999997138977,297.7999997138977,310.8999996185303,327.5,344.19999980926514,361,377.69999980926514,394.2999997138977,410.8999996185303,427.69999980926514,444.3999996185303,461,477.69999980926514,494.2999997138977,511.09999990463257,527.6999998092651,544.3999996185303,561.0999999046326,577.6999998092651,594.3999996185303,611.0999999046326,627.7999997138977,644.5,661.0999999046326,677.7999997138977,694.5,711.1999998092651,727.8999996185303,744.5,761.2999997138977,777.8999996185303,794.5999999046326,811.1999998092651,828,844.5999999046326,861.2999997138977,878,894.6999998092651,911.3999996185303,928.0999999046326,944.6999998092651,961.3999996185303,978.0999999046326,994.7999997138977,1011.3999996185303,1028.0999999046326,1044.8999996185303,1061.5,1089.5999999046326]},{"start":[820,166],"end":[1355,1095],"points":[[820,166],[821,167],[826,171],[835,178],[845,185],[866,201],[905,237],[984,311],[1045,371],[1119,443],[1191,511],[1265,582],[1345,655],[1428,718],[1506,777],[1563,817],[1602,843],[1619,856],[1628,865],[1635,874],[1640,883],[1643,890],[1643,896],[1641,906],[1640,918],[1639,933],[1639,948],[1635,959],[1631,969],[1623,977],[1612,986],[1588,998],[1561,1011],[1531,1019],[1493,1028],[1454,1033],[1425,1037],[1414,1040],[1409,1042],[1408,1043],[1408,1044],[1408,1047],[1408,1049],[1408,1052],[1408,1055],[1408,1059],[1407,1064],[1404,1068],[1401,1072],[1397,1075],[1392,1077],[1384,1080],[1381,1082],[1368,1085],[1363,1087],[1361,1088],[1360,1088],[1359,1089],[1358,1089],[1356,1091],[1355,1093],[1355,1095]],"dx":[535,929],"dy":[535,929],"length":1504.8404485382805,"timing":[208,219.09999990463257,235.80000019073486,252.5,269.09999990463257,285.80000019073486,302.69999980926514,319.69999980926514,335.90000009536743,352.5,369.30000019073486,386.09999990463257,402.69999980926514,419.5,436,452.90000009536743,469.30000019073486,486,502.69999980926514,519.6999998092651,536,552.6999998092651,569.3000001907349,586.0999999046326,602.8000001907349,619.5,636.0999999046326,652.8000001907349,669.5,686.1999998092651,702.8000001907349,719.5999999046326,737.5,752.8000001907349,769.5,786.5,803,819.6999998092651,836.3000001907349,853,903,919.6999998092651,936.4000000953674,953.0999999046326,969.8000001907349,986.4000000953674,1003.0999999046326,1019.8000001907349,1036.5,1053.1999998092651,1070,1087.5999999046326,1103.1999998092651,1119.8000001907349,1136.5,1153.1999998092651,1169.8000001907349,1191.8000001907349,1203.5,1221.1999998092651,1236.5999999046326,1253.3000001907349]},{"start":[756,213],"end":[257,885],"points":[[756,213],[755,214],[754,214],[753,216],[751,216],[750,217],[750,218],[749,222],[742,249],[722,308],[690,391],[652,480],[613,561],[578,622],[550,661],[534,689],[527,704],[521,715],[519,723],[511,739],[494,758],[471,785],[448,808],[429,822],[417,830],[405,834],[396,834],[389,834],[384,834],[379,834],[374,833],[359,833],[346,833],[331,833],[320,833],[313,832],[306,832],[298,835],[287,841],[276,849],[267,856],[264,861],[262,864],[260,868],[259,871],[258,877],[257,883],[257,885]],"dx":[-499,672],"dy":[-499,672],"length":905.4569489931077,"timing":[125.40000009536743,141.2000002861023,152.40000009536743,168.09999990463257,184.80000019073486,201.5,277.59999990463257,285,301.59999990463257,318.30000019073486,335,351.80000019073486,368.30000019073486,384.90000009536743,401.80000019073486,418.30000019073486,435.2000002861023,451.80000019073486,468.40000009536743,485.09999990463257,501.59999990463257,518.4000000953674,535.0999999046326,551.7000002861023,568.5,585.2000002861023,601.8000001907349,618.5,635.0999999046326,651.8000001907349,668.5999999046326,685.3000001907349,701.9000000953674,718.5,735.2000002861023,752,768.5999999046326,785.5,803,818.7000002861023,835.3000001907349,852,868.7000002861023,885.4000000953674,902.0999999046326,918.7000002861023,935.4000000953674,952.0999999046326]},{"start":[1978,1090],"end":[2038,121],"points":[[1978,1090],[1977,1090],[1976,1090],[1975,1090],[1974,1090],[1974,1089],[1973,1089],[1972,1088],[1971,1088],[1969,1087],[1967,1085],[1965,1083],[1963,1079],[1953,1060],[1940,1032],[1925,997],[1912,943],[1908,884],[1912,809],[1916,725],[1930,634],[1948,538],[1969,450],[2004,330],[2018,301],[2075,232],[2114,198],[2154,174],[2174,164],[2185,159],[2189,157],[2191,154],[2194,151],[2197,146],[2201,142],[2203,136],[2204,131],[2202,125],[2196,121],[2190,119],[2181,118],[2167,118],[2141,118],[2102,120],[2068,121],[2051,121],[2042,121],[2039,121],[2038,121]],"dx":[60,-969],"dy":[60,-969],"length":1252.0396937551043,"timing":[33.30000019073486,49.90000009536743,67.19999980926514,91.40000009536743,139.59999990463257,155.09999990463257,171,183.30000019073486,200,216.69999980926514,233.30000019073486,250,267,284.30000019073486,300.09999990463257,316.69999980926514,333.40000009536743,350.09999990463257,366.69999980926514,383.5,400.19999980926514,416.90000009536743,433.80000019073486,451.09999990463257,466.90000009536743,483.59999990463257,500.30000019073486,517,533.5999999046326,550.4000000953674,568,583.6999998092651,600.4000000953674,617,633.6999998092651,650.4000000953674,667.0999999046326,683.6999998092651,700.4000000953674,717.0999999046326,733.8000001907349,750.5,767.0999999046326,783.9000000953674,800.5999999046326,817.1999998092651,833.9000000953674,850.5999999046326,867.1999998092651]},{"start":[257,884],"end":[237,569],"points":[[257,884],[258,883],[259,883],[262,883],[264,883],[269,882],[271,882],[274,882],[276,882],[277,882],[279,882],[280,882],[282,882],[286,881],[291,880],[303,880],[320,879],[359,878],[384,875],[401,868],[410,861],[414,851],[414,844],[414,833],[406,806],[391,772],[373,739],[349,702],[324,673],[302,650],[295,645],[292,643],[289,641],[287,640],[284,637],[279,632],[273,625],[265,621],[260,617],[256,615],[255,614],[255,613],[254,612],[254,611],[251,602],[249,592],[244,582],[241,576],[239,572],[238,571],[238,570],[237,569]],"dx":[-20,-315],"dy":[-20,-315],"length":512.7486174713035,"timing":[18.699999809265137,68.69999980926514,85.40000009536743,102.09999990463257,119,135.5,152.09999990463257,168.90000009536743,185.59999990463257,202.09999990463257,218.7999997138977,235.40000009536743,252.09999990463257,268.7999997138977,285.5,302.19999980926514,318.90000009536743,335.5,352.19999980926514,368.90000009536743,385.59999990463257,402.40000009536743,418.90000009536743,435.59999990463257,452.2999997138977,469,485.59999990463257,502.2999997138977,519,535.6999998092651,552.4000000953674,569.0999999046326,585.6999998092651,602.4000000953674,619.0999999046326,635.9000000953674,653.9000000953674,669.0999999046326,685.7999997138977,702.7999997138977,719.2999997138977,736,911.5999999046326,919.2999997138977,936.0999999046326,952.6999998092651,969.5,986,1002.7999997138977,1019.5,1039.5,1086.1999998092651]},{"start":[1075,730],"end":[176,1121],"points":[[1075,730],[1072,730],[1068,733],[1050,739],[1005,752],[947,771],[872,801],[786,841],[710,890],[603,951],[547,979],[509,1000],[487,1016],[473,1031],[456,1049],[444,1066],[434,1079],[421,1087],[404,1090],[384,1090],[360,1090],[336,1091],[323,1091],[311,1091],[294,1091],[277,1092],[262,1096],[249,1098],[241,1100],[237,1100],[234,1100],[232,1100],[232,1101],[232,1102],[232,1103],[232,1104],[232,1106],[231,1108],[229,1111],[226,1113],[222,1114],[216,1117],[205,1117],[197,1117],[187,1118],[178,1120],[175,1121],[174,1121],[175,1121],[176,1121]],"dx":[-899,391],"dy":[-899,391],"length":1015.9917941505998,"timing":[315.6000003814697,323.40000009536743,334.5,351.30000019073486,367.80000019073486,384.80000019073486,402.2000002861023,417.90000009536743,434.6000003814697,451.30000019073486,467.90000009536743,484.6000003814697,501.2000002861023,518,534.6000003814697,551.4000000953674,568,584.7000002861023,601.3000001907349,618,634.8000001907349,651.4000000953674,668.1000003814697,684.8000001907349,701.4000000953674,718.2000002861023,734.8000001907349,751.5,768.2000002861023,785.1000003814697,801.5,818.4000000953674,834.9000000953674,851.7000002861023,915.4000000953674,923.3000001907349,935,951.7000002861023,968.4000000953674,985.2000002861023,1001.7000002861023,1018.7000002861023,1035.2000002861023,1051.7000002861023,1068.4000000953674,1085.2000002861023,1103.3000001907349,1118.6000003814697,1179.4000000953674,1187.2000002861023]},{"start":[1898,147],"end":[2331,777],"points":[[1898,147],[1896,148],[1894,149],[1890,151],[1888,153],[1883,156],[1875,160],[1868,163],[1861,166],[1858,167],[1857,167],[1857,168],[1857,169],[1857,171],[1858,174],[1865,195],[1882,237],[1905,293],[1951,376],[1999,457],[2060,541],[2122,609],[2185,661],[2239,700],[2283,731],[2306,747],[2312,750],[2313,751],[2317,756],[2320,761],[2323,764],[2324,766],[2325,767],[2326,769],[2329,774],[2330,776],[2331,777]],"dx":[433,630],"dy":[433,630],"length":836.0797268447715,"timing":[16.5,33.09999990463257,50,66.39999961853027,83.19999980926514,100.2999997138977,116.5,133.19999980926514,149.89999961853027,166.59999990463257,186.2999997138977,210.39999961853027,226.5,234.2999997138977,250.19999980926514,266.69999980926514,283.2999997138977,300,316.69999980926514,333.3999996185303,350.19999980926514,366.69999980926514,383.69999980926514,401.3999996185303,416.69999980926514,433.3999996185303,450.2999997138977,500.09999990463257,516.8999996185303,533.6999998092651,551.1999998092651,566.8999996185303,616.8999996185303,633.5999999046326,650.3999996185303,667.8999996185303,683.5999999046326]},{"start":[2443,659],"end":[721,303],"points":[[2443,659],[2442,658],[2442,657],[2441,657],[2440,657],[2435,656],[2411,654],[2342,650],[2233,644],[2091,629],[1926,608],[1746,567],[1578,528],[1394,462],[1320,429],[1280,412],[1254,401],[1234,395],[1213,391],[1200,389],[1185,387],[1171,385],[1154,383],[1131,381],[1104,377],[1074,371],[1059,369],[1040,367],[1024,365],[1007,365],[988,362],[971,361],[956,358],[943,356],[930,352],[917,351],[905,349],[892,346],[886,344],[876,341],[862,338],[847,335],[835,334],[829,333],[828,331],[827,331],[822,330],[816,329],[809,327],[805,325],[798,324],[783,322],[767,319],[755,316],[748,314],[745,312],[741,310],[734,308],[726,305],[722,304],[721,303]],"dx":[-1722,-356],"dy":[-1722,-356],"length":1771.521812422409,"timing":[30.600000381469727,54.200000286102295,150.40000009536743,166.10000038146973,270.40000009536743,280.90000009536743,297.5,314.30000019073486,330.90000009536743,347.7000002861023,364.30000019073486,381,397.7000002861023,414.30000019073486,430.90000009536743,447.7000002861023,464.30000019073486,481.1000003814697,497.7000002861023,514.5,531.1000003814697,547.6000003814697,564.4000000953674,581.1000003814697,597.7000002861023,614.3000001907349,631,647.8000001907349,664.6000003814697,681.1000003814697,697.8000001907349,714.4000000953674,731.1000003814697,748.2000002861023,764.6000003814697,781.2000002861023,797.9000000953674,814.7000002861023,831.2000002861023,848,864.5,881.3000001907349,897.9000000953674,914.7000002861023,931.3000001907349,948,964.7000002861023,981.4000000953674,998,1014.7000002861023,1031.5,1048.1000003814697,1064.7000002861023,1081.5,1098.1000003814697,1114.7000002861023,1131.5,1148.1000003814697,1164.9000000953674,1181.5,1198.2000002861023]},{"start":[1757,534],"end":[1076,730],"points":[[1757,534],[1754,537],[1748,543],[1744,545],[1738,549],[1732,553],[1726,556],[1723,558],[1721,560],[1720,560],[1720,561],[1719,563],[1712,568],[1692,582],[1646,606],[1580,631],[1508,654],[1437,676],[1376,697],[1325,716],[1271,731],[1226,742],[1180,744],[1144,745],[1131,745],[1121,745],[1110,745],[1098,745],[1085,745],[1074,745],[1070,745],[1070,746],[1069,746],[1069,745],[1069,744],[1070,743],[1071,739],[1073,736],[1073,733],[1074,732],[1074,731],[1076,731],[1076,730]],"dx":[-681,196],"dy":[-681,196],"length":753.3131867207497,"timing":[7,23.700000286102295,40.30000019073486,57,73.7000002861023,90.60000038146973,108.10000038146973,123.7000002861023,140.40000009536743,157.2000002861023,207.10000038146973,224,240.5,257.2000002861023,273.80000019073486,290.5,307.1000003814697,323.90000009536743,340.5,357.30000019073486,373.90000009536743,390.6000003814697,407.30000019073486,424.1000003814697,441.7000002861023,457.30000019073486,474,490.80000019073486,508.90000009536743,524.2000002861023,542.2000002861023,557.5,584.4000000953674,624.1000003814697,640.8000001907349,657.5,674.3000001907349,690.9000000953674,707.8000001907349,724.2000002861023,752.1000003814697,760,776]},{"start":[784,1069],"end":[2449,662],"points":[[784,1069],[784,1067],[784,1066],[784,1063],[783,1059],[783,1055],[783,1054],[783,1053],[783,1049],[785,1043],[793,1032],[810,1017],[861,986],[948,950],[1049,921],[1158,898],[1257,884],[1395,863],[1486,854],[1574,846],[1658,839],[1735,836],[1799,831],[1855,828],[1921,824],[1997,821],[2081,814],[2215,808],[2257,804],[2360,794],[2415,787],[2466,778],[2504,767],[2528,755],[2545,744],[2552,735],[2554,728],[2552,722],[2550,717],[2550,714],[2550,712],[2550,710],[2549,710],[2547,708],[2543,706],[2537,704],[2532,700],[2526,697],[2520,693],[2515,691],[2508,688],[2502,684],[2493,681],[2489,679],[2485,677],[2479,674],[2468,670],[2456,666],[2450,663],[2449,663],[2449,662]],"dx":[1665,-407],"dy":[1665,-407],"length":1984.949460620639,"timing":[97.5,113.5,127.30000019073486,144,160.69999980926514,177.30000019073486,193.90000009536743,210.69999980926514,227.40000009536743,244,260.69999980926514,277.30000019073486,294.09999990463257,310.69999980926514,327.5,344.19999980926514,361,377.5,394.09999990463257,411.30000019073486,429.19999980926514,444.19999980926514,461.09999990463257,477.59999990463257,494.30000019073486,510.90000009536743,527.6999998092651,545.0999999046326,561.0999999046326,577.5999999046326,594.3000001907349,611,627.8000001907349,644.3000001907349,661.0999999046326,677.6999998092651,694.3000001907349,711.1999998092651,727.8000001907349,744.4000000953674,761.1999998092651,779.3000001907349,794.5,811.1999998092651,827.8000001907349,844.5,861.1999998092651,877.9000000953674,894.5999999046326,911.3000001907349,927.9000000953674,944.5999999046326,961.4000000953674,978,994.6999998092651,1011.3000001907349,1028.0999999046326,1044.6999998092651,1061.3000001907349,1078.0999999046326,1137.8000001907349]},{"start":[1801,972],"end":[330,933],"points":[[1801,972],[1799,971],[1797,970],[1793,969],[1789,967],[1784,965],[1779,964],[1779,963],[1778,963],[1777,962],[1776,962],[1774,962],[1768,961],[1744,961],[1690,961],[1543,961],[1386,960],[1208,953],[1017,946],[850,939],[733,939],[663,941],[624,954],[603,965],[592,974],[580,979],[567,981],[534,981],[498,975],[455,967],[416,961],[387,956],[368,952],[355,948],[342,943],[334,937],[330,933]],"dx":[-1471,-39],"dy":[-1471,-39],"length":1491.398861288387,"timing":[4.099999904632568,20.59999990463257,37.299999713897705,54,70.69999980926514,87.40000009536743,104.09999990463257,120.69999980926514,137.40000009536743,154.19999980926514,224.09999990463257,240.09999990463257,254.19999980926514,270.7999997138977,287.59999990463257,304.19999980926514,320.90000009536743,337.59999990463257,354.19999980926514,370.90000009536743,387.59999990463257,404.2999997138977,420.90000009536743,437.69999980926514,454.40000009536743,471,487.7999997138977,504.5,521.0999999046326,537.7999997138977,554.4000000953674,571.0999999046326,587.7999997138977,604.5,621.0999999046326,637.7999997138977,654.5]},{"start":[357,936],"end":[2299,336],"points":[[357,936],[374,936],[396,938],[418,938],[445,938],[487,938],[531,937],[567,934],[588,929],[597,926],[609,923],[627,923],[679,922],[768,915],[882,903],[1014,890],[1149,869],[1287,846],[1418,821],[1545,801],[1650,784],[1747,763],[1844,720],[1889,687],[1918,649],[1942,612],[1965,576],[1988,539],[2014,509],[2033,481],[2048,458],[2060,439],[2078,425],[2138,393],[2198,371],[2251,357],[2281,348],[2291,343],[2293,342],[2295,340],[2296,338],[2297,336],[2298,336],[2299,336]],"dx":[1942,-600],"dy":[1942,-600],"length":2131.424130402958,"timing":[16.59999990463257,33.299999713897705,50,66.69999980926514,83.2999997138977,100,116.59999990463257,133.2999997138977,150,166.7999997138977,183.40000009536743,200,216.69999980926514,233.5,250.09999990463257,266.69999980926514,283.5,300.09999990463257,316.7999997138977,333.59999990463257,350.19999980926514,366.7999997138977,383.5,400.2999997138977,417,433.5,450.2999997138977,466.90000009536743,483.59999990463257,500.2999997138977,517,533.6999998092651,550.4000000953674,567,583.5999999046326,600.2999997138977,617,633.7999997138977,650.4000000953674,667.0999999046326,683.6999998092651,700.5,717.1999998092651,743]},{"start":[2460,79],"end":[1335,38],"points":[[2460,79],[2449,84],[2429,95],[2374,116],[2330,136],[2278,155],[2220,175],[2143,201],[2062,233],[1994,264],[1953,299],[1924,325],[1909,343],[1899,353],[1879,361],[1860,360],[1830,346],[1788,320],[1743,285],[1701,246],[1662,210],[1622,173],[1597,144],[1578,122],[1566,111],[1556,104],[1542,98],[1535,97],[1527,97],[1516,97],[1501,96],[1485,95],[1469,94],[1455,94],[1441,92],[1431,91],[1418,87],[1401,76],[1367,58],[1346,47],[1337,42],[1335,40],[1335,39],[1335,38]],"dx":[-1125,-41],"dy":[-1125,-41],"length":1310.893233311091,"timing":[3.9000000953674316,20.59999990463257,37.40000009536743,54,70.69999980926514,87.30000019073486,104,120.69999980926514,137.40000009536743,154,170.69999980926514,187.40000009536743,204.09999990463257,220.80000019073486,237.40000009536743,254.09999990463257,270.80000019073486,287.40000009536743,304.09999990463257,320.80000019073486,337.59999990463257,354.19999980926514,370.90000009536743,387.59999990463257,404.30000019073486,420.90000009536743,437.59999990463257,454.30000019073486,471,487.69999980926514,504.30000019073486,521,537.5999999046326,554.4000000953674,571.0999999046326,587.8000001907349,604.4000000953674,621,637.8000001907349,654.4000000953674,671.0999999046326,687.8000001907349,704.5,725.4000000953674]},{"start":[1984,474],"end":[1906,135],"points":[[1984,474],[1972,478],[1959,481],[1945,485],[1929,487],[1916,490],[1902,493],[1885,497],[1867,501],[1844,504],[1826,506],[1820,507],[1820,508],[1822,506],[1825,503],[1831,494],[1837,482],[1845,466],[1852,443],[1856,412],[1860,373],[1865,337],[1880,294],[1899,255],[1928,210],[1937,194],[1940,185],[1940,181],[1941,178],[1941,175],[1941,172],[1939,169],[1938,167],[1937,165],[1936,165],[1935,165],[1934,164],[1933,163],[1932,163],[1928,161],[1925,158],[1922,155],[1919,152],[1917,149],[1916,146],[1913,143],[1910,140],[1908,137],[1906,136],[1906,135]],"dx":[-78,-339],"dy":[-78,-339],"length":585.3339730499181,"timing":[14.699999809265137,31.199999809265137,47.80000019073486,64.5,81,97.80000019073486,114.80000019073486,131.09999990463257,147.80000019073486,164.5,181.09999990463257,197.80000019073486,214.5,238.5,247.90000009536743,264.5,281.30000019073486,297.90000009536743,314.59999990463257,331.30000019073486,348,364.69999980926514,381.40000009536743,398.40000009536743,416.09999990463257,431.30000019073486,448.09999990463257,464.69999980926514,481.40000009536743,498.40000009536743,514.6999998092651,531.4000000953674,548.0999999046326,564.8000001907349,581.4000000953674,598.5999999046326,622.8000001907349,638.6999998092651,648.1999998092651,664.9000000953674,681.8000001907349,699.1999998092651,714.9000000953674,731.6999998092651,748.3000001907349,765,781.6999998092651,798.4000000953674,815,838.5999999046326]},{"start":[2149,871],"end":[1006,954],"points":[[2149,871],[2147,871],[2144,870],[2139,870],[2133,870],[2116,870],[2103,870],[2090,870],[2074,870],[2059,870],[2046,870],[2038,869],[2033,869],[2031,869],[2029,868],[2028,868],[2025,866],[2007,859],[1986,854],[1952,849],[1903,843],[1843,837],[1775,826],[1712,819],[1667,815],[1633,811],[1613,811],[1598,810],[1585,809],[1559,809],[1536,809],[1512,810],[1492,813],[1468,816],[1439,821],[1412,825],[1393,828],[1377,833],[1350,838],[1314,844],[1264,846],[1204,849],[1181,852],[1159,857],[1137,865],[1114,873],[1095,878],[1083,882],[1072,887],[1062,894],[1052,904],[1044,911],[1040,918],[1037,924],[1037,926],[1035,929],[1031,933],[1026,939],[1021,943],[1019,945],[1018,946],[1017,948],[1014,950],[1008,953],[1006,953],[1006,954]],"dx":[-1143,83],"dy":[-1143,83],"length":1188.8889326541344,"timing":[0.09999990463256836,16.90000009536743,33.40000009536743,50.299999713897705,66.7999997138977,83.59999990463257,101.19999980926514,116.7999997138977,133.5,150.19999980926514,166.90000009536743,183.69999980926514,200.40000009536743,216.90000009536743,233.59999990463257,250.2999997138977,267.09999990463257,283.59999990463257,300.40000009536743,317,333.7999997138977,350.2999997138977,367.09999990463257,383.69999980926514,400.2999997138977,417.09999990463257,434.09999990463257,450.59999990463257,467.19999980926514,483.7999997138977,500.5,517.1999998092651,533.7999997138977,550.5,567.0999999046326,583.9000000953674,600.5,617.1999998092651,633.9000000953674,650.6999998092651,667.2999997138977,683.9000000953674,700.5999999046326,717.2999997138977,733.9000000953674,750.9000000953674,768.1999998092651,784.1999998092651,802.0999999046326,817.5,834.1999998092651,850.6999998092651,867.5,884.0999999046326,900.7999997138977,917.4000000953674,934.0999999046326,950.7999997138977,967.5,984.2999997138977,1000.9000000953674,1017.5,1034.4000000953674,1051.5,1067.5999999046326,1155.9000000953674]},{"start":[1147,828],"end":[2464,421],"points":[[1147,828],[1147,829],[1147,830],[1148,831],[1149,832],[1150,832],[1152,832],[1155,832],[1186,816],[1276,785],[1437,747],[1620,713],[1891,674],[2049,636],[2191,590],[2315,542],[2411,500],[2472,473],[2493,462],[2500,456],[2506,452],[2514,448],[2525,441],[2534,437],[2548,430],[2556,429],[2559,427],[2558,427],[2556,428],[2552,431],[2542,435],[2531,438],[2523,439],[2520,437],[2518,436],[2516,435],[2510,433],[2500,428],[2489,424],[2477,421],[2469,421],[2465,421],[2464,421]],"dx":[1317,-407],"dy":[1317,-407],"length":1582.8967441259033,"timing":[45.90000009536743,62.5,79.19999980926514,95.90000009536743,119.69999980926514,167.7999997138977,183.5,195.90000009536743,212.90000009536743,229.2999997138977,246,262.69999980926514,279.5,297,312.59999990463257,329.40000009536743,346.09999990463257,362.7999997138977,379.40000009536743,396.09999990463257,412.7999997138977,429.5,446.19999980926514,462.90000009536743,479.5,496.19999980926514,512.9000000953674,583.9000000953674,596.2999997138977,612.9000000953674,629.7999997138977,646.2999997138977,663.0999999046326,679.6999998092651,696.4000000953674,713,729.6999998092651,746.4000000953674,763,779.7999997138977,796.7999997138977,813.1999998092651,829.7999997138977]},{"start":[1481,534],"end":[189,629],"points":[[1481,534],[1481,535],[1481,536],[1481,537],[1481,538],[1480,538],[1479,540],[1479,541],[1479,542],[1479,543],[1479,544],[1477,546],[1472,550],[1465,553],[1456,559],[1434,570],[1400,584],[1356,600],[1292,613],[1202,618],[1102,624],[1005,626],[914,627],[810,627],[761,627],[725,627],[702,627],[688,627],[678,629],[669,633],[658,637],[647,641],[634,644],[622,647],[607,648],[604,648],[603,648],[602,649],[601,649],[599,649],[594,649],[586,649],[575,649],[562,648],[542,642],[528,639],[515,639],[502,638],[490,638],[480,637],[470,637],[460,637],[450,637],[443,637],[435,639],[419,641],[401,642],[366,644],[336,644],[314,645],[301,645],[294,645],[288,644],[283,644],[277,644],[268,644],[260,644],[245,645],[233,645],[223,645],[220,645],[219,645],[218,645],[217,644],[213,641],[209,639],[208,639],[207,638],[204,636],[198,633],[191,630],[189,629]],"dx":[-1292,95],"dy":[-1292,95],"length":1325.7372647325415,"timing":[75.59999990463257,115.5,139.39999961853027,147.09999990463257,163.2999997138977,180,196.69999980926514,227.2999997138977,263.3999996185303,313.5,330.09999990463257,346.8999996185303,363.5,380.09999990463257,396.8999996185303,413.5,430.19999980926514,446.7999997138977,463.59999990463257,480.2999997138977,496.8999996185303,513.6999998092651,530.2999997138977,547.0999999046326,565,580.2999997138977,597,613.5999999046326,630.3999996185303,647.0999999046326,663.6999998092651,680.5,697.1999998092651,713.8999996185303,730.8999996185303,747.0999999046326,763.7999997138977,851.1999998092651,867,880.5,897.2999997138977,913.8999996185303,930.5999999046326,947.3999996185303,964,980.6999998092651,997.2999997138977,1014,1030.6999998092651,1047.3999996185303,1064.0999999046326,1080.7999997138977,1097.3999996185303,1114,1131,1147.3999996185303,1164.0999999046326,1180.7999997138977,1197.5999999046326,1214.5,1231,1247.5999999046326,1264.2999997138977,1280.8999996185303,1297.5,1314.2999997138977,1331,1347.5999999046326,1364.2999997138977,1381,1397.7999997138977,1475.3999996185303,1483.1999998092651,1497.7999997138977,1514.5999999046326,1531.0999999046326,1547.7999997138977,1564.5,1581.0999999046326,1597.7999997138977,1614.5,1631.1999998092651]},{"start":[1945,358],"end":[818,166],"points":[[1945,358],[1943,359],[1941,360],[1938,361],[1933,363],[1929,366],[1923,368],[1920,369],[1919,370],[1918,370],[1917,371],[1891,380],[1833,385],[1742,389],[1635,389],[1526,381],[1414,353],[1331,323],[1272,293],[1239,271],[1227,261],[1219,255],[1210,250],[1202,245],[1190,240],[1176,236],[1150,231],[1113,227],[1070,221],[1036,215],[1015,209],[1000,207],[986,205],[971,205],[955,205],[941,204],[927,199],[918,194],[912,191],[907,189],[898,185],[891,182],[884,179],[880,178],[878,177],[872,175],[861,173],[846,172],[825,168],[819,166],[818,166]],"dx":[-1127,-192],"dy":[-1127,-192],"length":1174.6271925360759,"timing":[13,29.59999990463257,46.30000019073486,62.90000009536743,79.59999990463257,96.30000019073486,113.09999990463257,129.69999980926514,146.30000019073486,196.5,213.19999980926514,230.59999990463257,246.59999990463257,264.59999990463257,279.69999980926514,296.5,313.40000009536743,329.90000009536743,346.5,363.19999980926514,379.90000009536743,396.5,413.19999980926514,430,446.59999990463257,463.30000019073486,480,496.59999990463257,513.3000001907349,529.9000000953674,546.6999998092651,563.5,580.0999999046326,596.6999998092651,613.3000001907349,630.0999999046326,646.8000001907349,663.4000000953674,680.0999999046326,696.9000000953674,713.5,730.1999998092651,746.8000001907349,763.5,780.3000001907349,796.9000000953674,813.5,830.4000000953674,847,863.5999999046326,880.3000001907349]},{"start":[1652,1063],"end":[171,385],"points":[[1652,1063],[1650,1060],[1647,1054],[1644,1045],[1635,1031],[1625,1017],[1616,1008],[1610,1003],[1606,1000],[1605,1000],[1599,997],[1584,992],[1552,978],[1500,955],[1432,922],[1349,885],[1253,837],[1157,788],[1027,722],[944,682],[874,653],[816,628],[769,608],[713,584],[655,560],[584,529],[519,497],[455,464],[406,435],[357,403],[304,371],[285,360],[276,357],[271,355],[269,355],[266,354],[260,353],[254,353],[251,353],[247,354],[238,359],[221,368],[211,374],[206,377],[206,379],[205,379],[205,380],[203,380],[201,381],[199,382],[196,384],[194,384],[191,385],[185,385],[178,385],[173,385],[171,385]],"dx":[-1481,-678],"dy":[-1481,-678],"length":1674.458980313932,"timing":[35.299999713897705,52,68.69999980926514,85.40000009536743,102.09999990463257,118.69999980926514,135.40000009536743,152.09999990463257,168.90000009536743,218.7999997138977,235.5,252.19999980926514,268.7999997138977,285.59999990463257,302.19999980926514,318.90000009536743,335.59999990463257,352.2999997138977,369,385.59999990463257,402.2999997138977,419,435.90000009536743,453.19999980926514,469.09999990463257,485.69999980926514,502.40000009536743,519.0999999046326,535.7999997138977,552.4000000953674,569.0999999046326,585.7999997138977,602.5,619.0999999046326,635.9000000953674,652.5999999046326,669.1999998092651,686,703.4000000953674,719.1999998092651,736,752.6999998092651,769.1999998092651,785.9000000953674,802.5999999046326,819.2999997138977,835.9000000953674,852.5999999046326,869.5,886.9000000953674,902.6999998092651,919.5,969.4000000953674,986.0999999046326,1003.0999999046326,1019.6999998092651,1036.0999999046326]},{"start":[1353,564],"end":[1771,520],"points":[[1353,564],[1352,564],[1350,565],[1348,568],[1346,569],[1344,571],[1344,573],[1344,574],[1344,576],[1344,578],[1347,581],[1357,586],[1376,595],[1411,600],[1436,602],[1469,602],[1516,602],[1571,595],[1626,583],[1670,569],[1698,555],[1718,546],[1735,538],[1749,530],[1761,523],[1767,519],[1768,519],[1769,519],[1770,519],[1771,519],[1771,520]],"dx":[418,-44],"dy":[418,-44],"length":467.9522449933695,"timing":[84.90000009536743,100.90000009536743,117.5,134.19999980926514,150.90000009536743,167.59999990463257,184.40000009536743,200.90000009536743,217.80000019073486,234.30000019073486,251,267.69999980926514,284.30000019073486,301,317.69999980926514,334.40000009536743,351.19999980926514,367.80000019073486,384.69999980926514,401.19999980926514,417.80000019073486,434.69999980926514,451.19999980926514,467.90000009536743,484.59999990463257,501.09999990463257,597.4000000953674,693.0999999046326,701.4000000953674,718,734.8000001907349]},{"start":[1326,62],"end":[2152,872],"points":[[1326,62],[1324,75],[1323,92],[1327,122],[1337,151],[1345,176],[1346,192],[1347,212],[1350,230],[1358,252],[1369,269],[1377,280],[1385,288],[1391,296],[1404,307],[1455,345],[1512,383],[1578,425],[1646,469],[1714,509],[1778,546],[1829,577],[1871,604],[1909,628],[1934,647],[1953,664],[1968,678],[1980,692],[1983,696],[1985,698],[1987,702],[1992,708],[2004,722],[2029,747],[2048,768],[2062,786],[2069,796],[2072,801],[2074,803],[2074,804],[2076,806],[2078,809],[2080,810],[2082,812],[2085,815],[2090,821],[2097,829],[2106,838],[2115,846],[2126,854],[2140,864],[2146,869],[2148,871],[2149,871],[2150,872],[2151,872],[2152,872]],"dx":[826,810],"dy":[826,810],"length":1213.5415737889214,"timing":[6.199999809265137,22.799999713897705,39.5,56.09999990463257,72.7999997138977,89.59999990463257,106.19999980926514,122.90000009536743,139.59999990463257,156.19999980926514,173,189.69999980926514,206.2999997138977,223,239.7999997138977,256.2999997138977,273,289.69999980926514,306.5,323,339.7999997138977,356.5,373.09999990463257,389.90000009536743,406.5,423.09999990463257,440,456.59999990463257,473.19999980926514,489.90000009536743,506.59999990463257,523.1999998092651,539.9000000953674,556.6999998092651,573.2999997138977,589.9000000953674,606.5999999046326,623.2999997138977,640.0999999046326,656.5999999046326,673.4000000953674,690.1999998092651,706.7999997138977,723.4000000953674,740.0999999046326,756.7999997138977,773.5,790.1999998092651,806.9000000953674,823.5,840.1999998092651,856.7999997138977,873.5,890.1999998092651,906.9000000953674,936.0999999046326,973.5999999046326]},{"start":[2294,848],"end":[997,949],"points":[[2294,848],[2266,842],[2222,829],[2170,812],[2118,795],[2070,778],[2032,765],[2010,757],[1995,753],[1984,750],[1975,749],[1965,747],[1957,747],[1942,747],[1912,747],[1860,747],[1798,744],[1728,743],[1660,743],[1583,745],[1506,751],[1420,765],[1335,776],[1277,796],[1265,807],[1253,818],[1244,828],[1230,838],[1208,844],[1181,847],[1148,847],[1110,847],[1078,847],[1058,852],[1048,856],[1042,861],[1039,863],[1035,865],[1030,869],[1026,875],[1025,882],[1025,889],[1026,893],[1027,897],[1029,901],[1029,906],[1026,915],[1026,921],[1025,924],[1024,926],[1024,927],[1021,929],[1015,935],[1009,939],[1002,944],[1001,945],[1000,946],[1000,947],[999,948],[998,949],[997,949]],"dx":[-1297,101],"dy":[-1297,101],"length":1404.4457003453795,"timing":[0.3000001907348633,16.90000009536743,33.59999990463257,50.30000019073486,67.09999990463257,83.69999980926514,100.40000009536743,117,133.69999980926514,150.40000009536743,167.19999980926514,183.69999980926514,200.40000009536743,217.19999980926514,233.90000009536743,250.5,267.19999980926514,283.80000019073486,300.5,317.19999980926514,333.90000009536743,350.59999990463257,367.40000009536743,384,400.59999990463257,417.30000019073486,434,450.69999980926514,467.30000019073486,484,500.69999980926514,517.4000000953674,534.4000000953674,550.8000001907349,567.5999999046326,584,600.8000001907349,617.4000000953674,634.0999999046326,650.8000001907349,667.5,684.3000001907349,700.9000000953674,717.5,734.3000001907349,750.9000000953674,767.5999999046326,784.3000001907349,800.9000000953674,817.6999998092651,834.3000001907349,851,867.5999999046326,884.4000000953674,901,917.6999998092651,934.3000001907349,951.5,967.8000001907349,984.4000000953674,1159.8000001907349]},{"start":[190,629],"end":[2465,76],"points":[[190,629],[192,629],[195,629],[200,630],[225,630],[298,632],[413,634],[543,636],[673,639],[807,637],[997,628],[1129,616],[1251,602],[1362,585],[1457,567],[1539,548],[1617,526],[1696,504],[1785,481],[1869,459],[1955,433],[2043,404],[2168,364],[2246,341],[2312,325],[2367,312],[2409,301],[2452,291],[2498,278],[2540,265],[2559,255],[2559,248],[2559,241],[2559,234],[2559,228],[2559,224],[2559,219],[2559,215],[2559,212],[2556,209],[2551,206],[2545,200],[2536,194],[2525,186],[2513,179],[2500,172],[2498,171],[2497,169],[2497,168],[2496,167],[2495,165],[2494,165],[2493,164],[2492,162],[2491,160],[2491,158],[2490,155],[2490,150],[2491,145],[2492,141],[2492,137],[2492,133],[2490,129],[2488,124],[2486,121],[2485,118],[2482,116],[2482,115],[2481,115],[2480,114],[2478,113],[2477,112],[2476,112],[2476,111],[2475,111],[2474,110],[2473,108],[2471,106],[2468,103],[2467,102],[2466,101],[2466,100],[2466,98],[2466,96],[2466,94],[2466,92],[2466,90],[2466,89],[2465,88],[2465,87],[2465,86],[2465,85],[2465,84],[2465,83],[2465,82],[2465,81],[2465,80],[2465,79],[2465,78],[2465,77],[2465,76]],"dx":[2275,-553],"dy":[2275,-553],"length":2645.31034537357,"timing":[515.7999997138977,531.5999999046326,539.5,551.2999997138977,567.7999997138977,584.5,601.2999997138977,617.7999997138977,634.7999997138977,651.1999998092651,667.7999997138977,684.5,701.1999998092651,717.9000000953674,734.5999999046326,751.1999998092651,767.9000000953674,784.5999999046326,801.1999998092651,817.9000000953674,834.5999999046326,851.2999997138977,868,884.5999999046326,901.2999997138977,918.0999999046326,934.7999997138977,951.4000000953674,968.0999999046326,984.6999998092651,1001.4000000953674,1018.0999999046326,1034.7999997138977,1051.5999999046326,1068.0999999046326,1084.9000000953674,1101.5,1118.1999998092651,1134.9000000953674,1151.5,1168.2999997138977,1184.9000000953674,1201.5999999046326,1218.2999997138977,1234.9000000953674,1251.6999998092651,1268.2999997138977,1285,1301.6999998092651,1318.4000000953674,1335.0999999046326,1351.7999997138977,1368.5,1385,1401.7999997138977,1418.4000000953674,1435.0999999046326,1451.7999997138977,1468.5,1485.0999999046326,1501.7999997138977,1518.5999999046326,1535.1999998092651,1551.9000000953674,1568.5,1585.2999997138977,1602,1627.5,1643.4000000953674,1685.4000000953674,1702,1718.6999998092651,1735.2999997138977,1752,1768.6999998092651,1785.4000000953674,1802,1818.6999998092651,1835.5,1852.0999999046326,1868.7999997138977,1885.5,1902.0999999046326,1918.7999997138977,1935.5,1952.1999998092651,1968.7999997138977,1985.5,2002.1999998092651,2019.5,2043.5999999046326,2052.199999809265,2075.699999809265,2091.5,2107.5,2131.5999999046326,2169,2187.5,2211.5,2219.5,2235.9000000953674]},{"start":[383,574],"end":[1952,353],"points":[[383,574],[391,578],[415,587],[444,599],[487,620],[502,627],[510,633],[513,635],[514,635],[521,635],[536,635],[571,635],[635,637],[728,640],[893,640],[1012,629],[1121,596],[1224,546],[1338,481],[1452,430],[1570,393],[1660,368],[1733,353],[1789,340],[1848,330],[1936,320],[1993,319],[2039,317],[2070,315],[2090,313],[2103,310],[2113,308],[2116,307],[2117,307],[2117,311],[2119,315],[2120,319],[2120,320],[2117,323],[2110,329],[2099,337],[2085,344],[2071,349],[2052,351],[2014,353],[1975,353],[1952,353],[1937,353],[1936,353],[1936,352],[1937,352],[1938,352],[1939,353],[1940,353],[1941,353],[1942,353],[1943,353],[1944,353],[1945,353],[1946,353],[1948,353],[1951,353],[1952,353]],"dx":[1569,-221],"dy":[1569,-221],"length":2031.2199009685187,"timing":[4.800000190734863,18.59999990463257,35.30000019073486,52,68.69999980926514,85.30000019073486,102,118.69999980926514,168.69999980926514,185.40000009536743,202.40000009536743,218.80000019073486,235.5,252.09999990463257,268.90000009536743,285.5,302.09999990463257,318.90000009536743,335.5,352.30000019073486,368.90000009536743,385.80000019073486,403.90000009536743,419,435.69999980926514,452.69999980926514,469,485.69999980926514,502.30000019073486,519,535.9000000953674,552.5999999046326,570,619.0999999046326,635.8000001907349,652.5,669.3000001907349,686.0999999046326,702.5,719.3000001907349,735.9000000953674,752.5,769.1999998092651,786.4000000953674,802.6999998092651,819.3000001907349,836.0999999046326,852.6999998092651,869.3000001907349,886,1087.1999998092651,1105.5999999046326,1119.5999999046326,1136.1999998092651,1153,1169.5,1565,1580.6999998092651,1588.8000001907349,1603.4000000953674,1619.9000000953674,1636.5999999046326,1700.5999999046326]},{"start":[872,444],"end":[1481,533],"points":[[872,444],[872,445],[872,447],[871,448],[871,450],[871,453],[872,454],[873,455],[876,457],[882,462],[905,475],[940,492],[979,512],[1012,527],[1039,539],[1066,549],[1085,553],[1104,553],[1120,553],[1134,553],[1148,553],[1169,552],[1184,552],[1199,552],[1214,552],[1227,552],[1244,552],[1264,552],[1287,551],[1312,551],[1331,551],[1356,551],[1362,551],[1380,550],[1390,549],[1396,548],[1398,548],[1399,548],[1399,547],[1400,547],[1401,546],[1403,546],[1404,545],[1405,544],[1407,544],[1408,543],[1411,541],[1420,539],[1431,535],[1440,532],[1450,530],[1459,529],[1464,529],[1469,529],[1472,529],[1474,530],[1477,532],[1479,533],[1480,533],[1481,533]],"dx":[609,89],"dy":[609,89],"length":649.0325711530121,"timing":[121.7000002861023,209.7000002861023,252.40000009536743,269.09999990463257,285.7000002861023,302.40000009536743,319.09999990463257,335.80000019073486,352.40000009536743,369.30000019073486,386.80000019073486,402.40000009536743,419.09999990463257,435.80000019073486,452.7000002861023,469.09999990463257,485.90000009536743,502.59999990463257,519.2000002861023,535.9000000953674,552.5999999046326,569.3000001907349,585.9000000953674,602.5999999046326,619.2000002861023,636,652.5999999046326,669.5,686,702.7000002861023,719.4000000953674,737.0999999046326,753.0999999046326,771.0999999046326,786.0999999046326,802.8000001907349,819.5,836.2000002861023,852.9000000953674,869.5999999046326,886.2000002861023,902.8000001907349,919.5999999046326,945.5999999046326,969.2000002861023,977.2000002861023,986.2000002861023,1002.8000001907349,1019.5999999046326,1036.4000000953674,1053,1069.5999999046326,1086.3000001907349,1103,1119.9000000953674,1136.4000000953674,1153.2000002861023,1171.0999999046326,1186.4000000953674,1203.0999999046326]},{"start":[2322,774],"end":[784,1070],"points":[[2322,774],[2318,773],[2313,772],[2306,770],[2295,766],[2284,762],[2271,758],[2256,754],[2236,750],[2206,742],[2154,726],[2124,716],[2097,709],[2068,703],[2037,699],[1991,699],[1929,707],[1855,719],[1766,742],[1667,771],[1543,797],[1331,823],[1220,848],[1149,878],[1112,900],[1088,920],[1060,944],[1034,968],[1005,991],[971,1012],[927,1029],[864,1040],[794,1046],[747,1056],[743,1060],[743,1061],[743,1062],[744,1062],[745,1062],[747,1062],[754,1062],[760,1062],[765,1063],[768,1064],[770,1065],[771,1066],[772,1067],[775,1068],[777,1068],[780,1069],[781,1069],[782,1069],[783,1069],[784,1069],[784,1070]],"dx":[-1538,296],"dy":[-1538,296],"length":1709.2462727941227,"timing":[16.90000009536743,33.40000009536743,50,66.7000002861023,83.40000009536743,100,116.80000019073486,133.40000009536743,150.09999990463257,167.09999990463257,183.5,200.09999990463257,216.80000019073486,233.5,250.2000002861023,266.80000019073486,283.59999990463257,300.40000009536743,317.90000009536743,333.59999990463257,350.30000019073486,367,384.59999990463257,400.30000019073486,417,433.7000002861023,450.30000019073486,467.09999990463257,483.80000019073486,500.40000009536743,517.0999999046326,533.9000000953674,551.2000002861023,567.2000002861023,583.8000001907349,600.4000000953674,617.2000002861023,815.5,823.2000002861023,834,850.5999999046326,867.3000001907349,884,900.5999999046326,917.3000001907349,934.0999999046326,950.9000000953674,967.3000001907349,984,1000.8000001907349,1017.4000000953674,1034.0999999046326,1084.0999999046326,1103.2000002861023,1117.5]},{"start":[1708,428],"end":[1903,144],"points":[[1708,428],[1708,429],[1706,429],[1706,430],[1705,430],[1703,430],[1703,431],[1703,430],[1703,429],[1707,423],[1714,415],[1721,403],[1739,385],[1764,365],[1785,349],[1797,338],[1804,331],[1810,327],[1814,324],[1818,322],[1822,319],[1827,315],[1832,311],[1837,304],[1843,297],[1848,290],[1853,283],[1857,275],[1860,268],[1864,260],[1867,254],[1870,248],[1873,241],[1876,236],[1878,231],[1879,227],[1881,224],[1883,220],[1886,215],[1888,211],[1891,206],[1895,198],[1898,190],[1899,179],[1901,169],[1901,160],[1901,152],[1901,148],[1901,146],[1902,145],[1903,144]],"dx":[195,-284],"dy":[195,-284],"length":371.9477880237179,"timing":[44.40000009536743,54.30000019073486,69.60000038146973,92.2000002861023,148.40000009536743,186.40000009536743,203.10000038146973,260.40000009536743,269.80000019073486,286.5,303.2000002861023,320,336.7000002861023,353.2000002861023,370,386.7000002861023,403.30000019073486,420,436.6000003814697,453.30000019073486,470,486.6000003814697,503.6000003814697,520.1000003814697,536.7000002861023,553.4000000953674,570,586.7000002861023,603.4000000953674,620.1000003814697,636.8000001907349,653.5,670.2000002861023,686.8000001907349,703.5,720.2000002861023,736.9000000953674,753.6000003814697,770.3000001907349,787.1000003814697,803.9000000953674,820.3000001907349,836.9000000953674,853.7000002861023,870.6000003814697,886.9000000953674,903.6000003814697,920.3000001907349,937.1000003814697,953.7000002861023,1003.8000001907349]},{"start":[2192,372],"end":[663,960],"points":[[2192,372],[2187,375],[2182,378],[2176,382],[2170,386],[2161,393],[2151,400],[2140,409],[2114,429],[2084,449],[2051,474],[2025,492],[2004,507],[1975,526],[1926,559],[1850,597],[1760,640],[1667,679],[1585,709],[1497,738],[1333,781],[1212,806],[1110,834],[1032,861],[970,882],[917,903],[874,918],[843,931],[820,942],[807,950],[800,953],[795,956],[786,962],[780,965],[775,966],[771,966],[761,966],[748,967],[734,967],[726,967],[720,968],[709,968],[704,968],[699,968],[695,968],[690,967],[680,965],[669,962],[663,961],[663,960]],"dx":[-1529,588],"dy":[-1529,588],"length":1664.643367102756,"timing":[2.9000000953674316,19.5,36.30000019073486,52.90000009536743,69.69999980926514,86.30000019073486,102.90000009536743,119.59999990463257,136.30000019073486,152.90000009536743,169.69999980926514,186.30000019073486,203,219.69999980926514,236.40000009536743,253,269.80000019073486,286.40000009536743,303.09999990463257,319.80000019073486,336.59999990463257,353.19999980926514,369.80000019073486,386.5,403.09999990463257,419.90000009536743,436.59999990463257,453.19999980926514,469.90000009536743,486.59999990463257,503.19999980926514,520,536.5999999046326,553.3000001907349,570,620,636.6999998092651,653.4000000953674,670.0999999046326,686.8000001907349,703.5,720.1999998092651,736.9000000953674,753.4000000953674,770.3000001907349,786.9000000953674,803.5,820.1999998092651,836.9000000953674,853.5999999046326]},{"start":[1007,940],"end":[2244,1227],"points":[[1007,940],[1011,938],[1015,935],[1020,932],[1024,930],[1030,926],[1038,921],[1046,916],[1054,912],[1058,910],[1060,909],[1062,908],[1067,907],[1082,905],[1114,904],[1169,902],[1241,904],[1325,910],[1402,920],[1470,938],[1519,953],[1560,967],[1630,994],[1691,1018],[1751,1044],[1795,1067],[1833,1087],[1871,1109],[1906,1129],[1946,1149],[1983,1170],[2012,1185],[2036,1196],[2061,1206],[2103,1220],[2137,1229],[2179,1241],[2213,1251],[2247,1252],[2249,1251],[2251,1248],[2251,1247],[2251,1246],[2251,1245],[2251,1243],[2248,1239],[2245,1235],[2245,1232],[2244,1232],[2244,1230],[2244,1229],[2244,1227]],"dx":[1237,287],"dy":[1237,287],"length":1348.267716483649,"timing":[8.699999809265137,25.40000009536743,42.09999990463257,58.80000019073486,75.5,92.09999990463257,108.80000019073486,125.5,142.09999990463257,158.90000009536743,175.5,192.19999980926514,208.90000009536743,225.59999990463257,242.19999980926514,259,275.69999980926514,292.40000009536743,308.90000009536743,325.69999980926514,342.40000009536743,359.09999990463257,375.80000019073486,392.40000009536743,409.09999990463257,425.80000019073486,442.40000009536743,459.19999980926514,475.80000019073486,492.5,509.09999990463257,525.8000001907349,542.5,559.1999998092651,575.8000001907349,592.5,609.1999998092651,625.9000000953674,695.8000001907349,709.3000001907349,726,742.6999998092651,759.3000001907349,809.5,826.1999998092651,842.8000001907349,859.5,876.1999998092651,892.8000001907349,909.5999999046326,926.1999998092651,942.9000000953674]},{"start":[1356,1095],"end":[1981,1090],"points":[[1356,1095],[1357,1095],[1358,1094],[1357,1094],[1356,1094],[1356,1092],[1356,1089],[1359,1086],[1366,1083],[1376,1081],[1389,1080],[1404,1078],[1441,1078],[1481,1079],[1528,1081],[1581,1081],[1633,1081],[1676,1079],[1706,1077],[1729,1072],[1749,1067],[1770,1062],[1797,1057],[1829,1056],[1866,1054],[1884,1052],[1898,1052],[1908,1052],[1916,1052],[1922,1052],[1925,1052],[1926,1052],[1926,1053],[1926,1055],[1927,1057],[1927,1058],[1927,1062],[1927,1066],[1925,1069],[1925,1071],[1925,1072],[1924,1072],[1924,1073],[1925,1074],[1926,1075],[1931,1077],[1937,1081],[1942,1083],[1946,1084],[1952,1085],[1956,1086],[1960,1087],[1967,1087],[1972,1088],[1976,1088],[1978,1089],[1980,1090],[1981,1090]],"dx":[625,-5],"dy":[625,-5],"length":667.863874202788,"timing":[0.8000001907348633,26.300000190734863,67.5,250.5,301.09999990463257,317.69999980926514,334.40000009536743,351,367.69999980926514,384.5,401.09999990463257,418.09999990463257,435.40000009536743,451.09999990463257,467.80000019073486,484.5,501.19999980926514,517.9000000953674,534.5,551.1999998092651,567.9000000953674,584.5999999046326,601.1999998092651,618,634.5999999046326,651.4000000953674,668,684.5999999046326,701.4000000953674,718,734.6999998092651,751.4000000953674,801.4000000953674,826.5,842.0999999046326,851.5,868.0999999046326,884.8000001907349,901.5,918.1999998092651,938.0999999046326,954.4000000953674,970.5999999046326,1074.5,1085,1101.6999998092651,1118.3000001907349,1135.0999999046326,1151.6999998092651,1168.5,1185.0999999046326,1202,1218.4000000953674,1235.0999999046326,1251.8000001907349,1268.6999998092651,1286.0999999046326,1354.3000001907349]},{"start":[254,266],"end":[1775,494],"points":[[254,266],[255,266],[256,266],[259,268],[265,270],[276,276],[326,299],[440,343],[600,419],[759,498],[895,565],[1055,626],[1168,655],[1265,666],[1361,667],[1446,667],[1515,667],[1557,667],[1587,668],[1612,669],[1642,670],[1680,671],[1713,672],[1758,674],[1775,675],[1783,675],[1786,674],[1787,672],[1788,666],[1788,658],[1788,647],[1787,634],[1786,623],[1785,611],[1783,594],[1781,583],[1778,575],[1776,569],[1775,565],[1775,563],[1775,562],[1775,561],[1775,558],[1775,555],[1776,551],[1778,544],[1779,535],[1779,527],[1779,519],[1777,510],[1776,504],[1775,499],[1775,497],[1775,495],[1775,494]],"dx":[1521,228],"dy":[1521,228],"length":1797.411773613173,"timing":[35.69999980926514,52.30000019073486,216.5,232.09999990463257,240.09999990463257,252.5,269.09999990463257,285.80000019073486,302.5,319.30000019073486,335.90000009536743,352.59999990463257,369.19999980926514,386,402.69999980926514,419.30000019073486,436,452.59999990463257,469.30000019073486,486,502.69999980926514,519.4000000953674,536,552.6999998092651,569.4000000953674,586.0999999046326,602.8000001907349,619.5,636.0999999046326,652.8000001907349,669.5999999046326,686.1999998092651,702.9000000953674,719.5999999046326,736.1999998092651,752.9000000953674,769.5999999046326,786.3000001907349,803.0999999046326,819.6999998092651,836.1999998092651,920.3000001907349,936.4000000953674,953.0999999046326,969.6999998092651,986.5,1003.0999999046326,1019.6999998092651,1036.5,1053.0999999046326,1069.8000001907349,1086.5,1103.1999998092651,1120,1136.5999999046326]},{"start":[413,802],"end":[2001,464],"points":[[413,802],[416,803],[419,804],[423,805],[426,806],[431,806],[437,807],[448,809],[463,812],[492,817],[514,821],[541,826],[578,827],[639,828],[720,829],[814,829],[928,823],[1052,817],[1184,802],[1316,774],[1446,723],[1590,655],[1645,626],[1670,608],[1688,595],[1713,584],[1738,573],[1764,564],[1787,557],[1802,554],[1816,552],[1830,548],[1852,542],[1868,533],[1883,528],[1896,521],[1908,515],[1921,510],[1933,504],[1939,501],[1941,500],[1941,499],[1942,498],[1945,496],[1949,493],[1955,490],[1960,486],[1967,483],[1975,479],[1989,471],[1997,467],[2001,465],[2001,464]],"dx":[1588,-338],"dy":[1588,-338],"length":1666.4713443454457,"timing":[2.1999998092651367,18.800000190734863,35.5,52.19999980926514,68.90000009536743,85.59999990463257,102.19999980926514,119,135.59999990463257,152.19999980926514,168.90000009536743,185.90000009536743,202.30000019073486,219,235.90000009536743,253.30000019073486,269,285.69999980926514,302.30000019073486,319.09999990463257,336,353.30000019073486,369.09999990463257,385.80000019073486,402.5,419.19999980926514,435.90000009536743,452.5,469.40000009536743,485.90000009536743,502.69999980926514,519.4000000953674,536,553.5999999046326,569.3000001907349,586,602.8000001907349,619.3000001907349,636,652.8000001907349,669.3000001907349,784.3000001907349,819.5999999046326,836.1999998092651,852.9000000953674,869.5999999046326,886.1999998092651,902.8000001907349,919.5999999046326,936.3000001907349,952.9000000953674,969.5,986.1999998092651]},{"start":[2110,764],"end":[652,477],"points":[[2110,764],[2109,765],[2108,765],[2107,765],[2106,765],[2098,765],[2081,766],[2052,767],[1973,763],[1892,751],[1796,734],[1680,708],[1568,680],[1456,651],[1354,623],[1267,601],[1190,586],[1115,573],[1042,559],[942,534],[893,520],[858,513],[831,506],[808,502],[789,497],[776,491],[768,486],[765,483],[763,481],[760,480],[753,478],[741,477],[733,476],[727,476],[717,476],[705,476],[691,476],[678,476],[671,476],[666,476],[662,476],[657,477],[653,477],[652,477]],"dx":[-1458,-287],"dy":[-1458,-287],"length":1494.4507020670624,"timing":[67.19999980926514,77.40000009536743,107,147.2999997138977,160.90000009536743,177.5,194.09999990463257,210.90000009536743,227.5,244.09999990463257,260.7999997138977,277.5,294.2999997138977,310.90000009536743,327.5,344.19999980926514,360.90000009536743,377.59999990463257,394.2999997138977,411,427.69999980926514,444.40000009536743,460.90000009536743,477.59999990463257,494.2999997138977,511,527.7999997138977,544.4000000953674,561,577.6999998092651,594.4000000953674,611.0999999046326,627.6999998092651,644.5,661.0999999046326,677.7999997138977,694.4000000953674,711.0999999046326,727.7999997138977,744.5,761.1999998092651,777.9000000953674,794.5999999046326,811.2999997138977]},{"start":[195,1114],"end":[872,443],"points":[[195,1114],[199,1113],[203,1113],[206,1113],[212,1110],[225,1106],[245,1105],[259,1104],[269,1104],[281,1104],[291,1101],[312,1099],[350,1094],[396,1091],[430,1084],[453,1076],[474,1061],[499,1042],[532,1016],[569,983],[614,931],[633,896],[646,850],[661,807],[681,768],[707,729],[738,696],[755,674],[760,665],[761,659],[764,655],[769,647],[786,626],[797,614],[802,606],[805,600],[808,593],[814,585],[821,576],[826,567],[828,561],[829,557],[830,554],[832,548],[835,539],[837,535],[838,531],[839,528],[841,525],[844,520],[847,514],[849,509],[851,503],[853,498],[857,492],[861,482],[864,475],[866,468],[867,463],[869,461],[870,458],[871,455],[871,452],[871,450],[871,447],[871,446],[872,445],[872,444],[872,443]],"dx":[677,-671],"dy":[677,-671],"length":1040.559865156218,"timing":[9.299999713897705,25.90000009536743,42.5,59.19999980926514,75.90000009536743,92.7999997138977,109.2999997138977,126,142.90000009536743,159.2999997138977,176,192.7999997138977,209.5,226.19999980926514,242.69999980926514,259.40000009536743,276.09999990463257,292.7999997138977,309.5,326.09999990463257,342.7999997138977,359.5,376.19999980926514,392.90000009536743,409.69999980926514,426.2999997138977,442.90000009536743,459.59999990463257,476.2999997138977,493,509.59999990463257,526.5999999046326,543.0999999046326,559.6999998092651,576.4000000953674,593.0999999046326,609.7999997138977,626.5,643,659.9000000953674,676.5,693.1999998092651,709.7999997138977,726.5,743.0999999046326,760,776.7999997138977,793.2999997138977,809.7999997138977,826.5,843.1999998092651,859.9000000953674,876.5999999046326,893.2999997138977,909.9000000953674,926.9000000953674,943.2999997138977,960,976.6999998092651,993.4000000953674,1010,1026.6999998092651,1043.4000000953674,1060.0999999046326,1076.7999997138977,1093.5,1110.2999997138977,1127,1183]},{"start":[1793,550],"end":[1149,824],"points":[[1793,550],[1791,551],[1786,553],[1780,555],[1777,556],[1776,556],[1776,557],[1775,557],[1775,558],[1772,559],[1764,564],[1740,577],[1687,603],[1600,636],[1497,665],[1409,686],[1348,704],[1303,729],[1263,750],[1239,770],[1212,793],[1201,803],[1190,812],[1179,819],[1167,825],[1155,829],[1144,834],[1138,836],[1139,834],[1141,832],[1144,829],[1149,826],[1149,824]],"dx":[-644,274],"dy":[-644,274],"length":741.2504774066408,"timing":[0.09999990463256836,16.800000190734863,33.40000009536743,50.09999990463257,66.80000019073486,83.5,100.2000002861023,159,166.80000019073486,183.5,200.2000002861023,216.90000009536743,233.59999990463257,250.30000019073486,267,283.7000002861023,300.40000009536743,317,333.7000002861023,350.5,367,383.7000002861023,400.40000009536743,417.09999990463257,433.80000019073486,450.5,467.09999990463257,483.80000019073486,679,686.8000001907349,700.5999999046326,717.3000001907349,734]},{"start":[1448,31],"end":[2267,687],"points":[[1448,31],[1445,33],[1443,34],[1441,36],[1440,37],[1439,37],[1439,38],[1438,39],[1438,42],[1438,51],[1441,69],[1449,110],[1471,174],[1529,284],[1585,361],[1638,422],[1682,475],[1720,520],[1760,564],[1802,605],[1849,644],[1893,674],[1934,697],[1965,712],[2000,727],[2029,737],[2062,749],[2090,757],[2108,762],[2123,762],[2137,760],[2150,755],[2160,750],[2168,745],[2177,742],[2187,737],[2203,725],[2209,719],[2211,717],[2212,715],[2213,715],[2215,713],[2220,710],[2226,706],[2232,703],[2238,700],[2242,699],[2244,698],[2249,697],[2254,697],[2257,696],[2260,694],[2262,693],[2264,691],[2265,689],[2267,687]],"dx":[819,656],"dy":[819,656],"length":1228.5004593023116,"timing":[35.19999980926514,85.19999980926514,101.69999980926514,118.5,135.19999980926514,151.89999961853027,168.59999990463257,185.19999980926514,201.89999961853027,218.59999990463257,235.2999997138977,252.09999990463257,268.59999990463257,285.2999997138977,302,318.69999980926514,335.3999996185303,352.09999990463257,368.69999980926514,385.3999996185303,402.19999980926514,418.7999997138977,435.3999996185303,452.09999990463257,468.7999997138977,485.5,502.19999980926514,518.8999996185303,535.5999999046326,552.1999998092651,568.8999996185303,585.5999999046326,602.2999997138977,618.8999996185303,635.5999999046326,652.2999997138977,668.8999996185303,685.5999999046326,702.2999997138977,719,735.6999998092651,752.3999996185303,769.0999999046326,785.6999998092651,802.5,819.0999999046326,835.7999997138977,852.5,869.0999999046326,885.7999997138977,902.5,919.0999999046326,935.8999996185303,952.5999999046326,969.1999998092651,985.8999996185303]},{"start":[687,478],"end":[2346,858],"points":[[687,478],[705,480],[724,483],[733,485],[742,487],[754,488],[769,490],[781,493],[789,496],[793,498],[796,499],[802,502],[814,507],[854,525],[895,545],[945,571],[1012,601],[1105,634],[1222,660],[1352,681],[1479,705],[1595,733],[1683,752],[1762,768],[1835,778],[1931,784],[1985,789],[2023,792],[2055,795],[2088,796],[2123,798],[2162,803],[2202,811],[2231,818],[2251,823],[2264,826],[2273,827],[2287,830],[2298,834],[2308,837],[2313,838],[2317,840],[2321,841],[2327,844],[2333,847],[2338,850],[2341,852],[2342,854],[2343,855],[2344,856],[2345,857],[2346,858]],"dx":[1659,380],"dy":[1659,380],"length":1716.1849788484935,"timing":[6.300000190734863,22.90000009536743,39.5,56.19999980926514,72.80000019073486,89.59999990463257,106.19999980926514,122.80000019073486,139.5,156.30000019073486,173,189.59999990463257,206.30000019073486,223,239.59999990463257,256.30000019073486,273,289.69999980926514,306.40000009536743,323.09999990463257,339.69999980926514,356.40000009536743,373.09999990463257,389.69999980926514,406.40000009536743,423.19999980926514,439.80000019073486,456.40000009536743,473.19999980926514,489.90000009536743,506.5,523.1999998092651,539.9000000953674,556.5999999046326,573.3000001907349,589.9000000953674,606.5999999046326,623.4000000953674,640,656.6999998092651,673.4000000953674,690,706.6999998092651,723.3000001907349,740.0999999046326,756.6999998092651,773.4000000953674,790.0999999046326,806.8000001907349,823.5,840.0999999046326,856.8000001907349]},{"start":[723,305],"end":[1838,711],"points":[[723,305],[724,308],[728,315],[735,323],[745,331],[760,341],[777,352],[789,361],[802,368],[819,377],[848,390],[909,415],[991,446],[1086,483],[1215,533],[1292,572],[1356,607],[1414,642],[1466,677],[1505,707],[1532,725],[1548,736],[1559,741],[1573,747],[1593,753],[1628,762],[1655,771],[1672,779],[1685,784],[1697,789],[1710,795],[1720,799],[1725,801],[1730,801],[1735,801],[1741,795],[1745,789],[1748,780],[1750,774],[1750,768],[1751,762],[1754,753],[1756,745],[1758,740],[1760,737],[1761,737],[1762,737],[1765,737],[1767,737],[1774,736],[1781,732],[1794,727],[1807,721],[1820,716],[1831,711],[1838,709],[1838,710],[1838,711]],"dx":[1115,406],"dy":[1115,406],"length":1293.3304166228809,"timing":[13.400000095367432,30.09999990463257,46.700000286102295,63.40000009536743,80.09999990463257,96.80000019073486,113.5,130.09999990463257,146.80000019073486,163.5,180.2000002861023,196.80000019073486,213.5,230.30000019073486,246.90000009536743,263.59999990463257,280.2000002861023,296.90000009536743,313.5,330.30000019073486,346.90000009536743,363.59999990463257,380.2000002861023,397,413.59999990463257,430.30000019073486,446.90000009536743,463.59999990463257,480.40000009536743,497,513.7000002861023,530.4000000953674,547,563.7000002861023,580.4000000953674,597.0999999046326,613.8000001907349,630.4000000953674,647.0999999046326,663.7000002861023,680.5,697.2000002861023,713.9000000953674,730.5,747.2000002861023,764.0999999046326,780.7000002861023,797.5,814.0999999046326,830.7000002861023,847.5,864,880.5999999046326,897.3000001907349,914,930.7000002861023,982.4000000953674,998.2000002861023]},{"start":[1927,831],"end":[801,155],"points":[[1927,831],[1925,831],[1924,831],[1922,831],[1919,830],[1917,830],[1912,830],[1907,830],[1904,830],[1902,829],[1900,829],[1896,829],[1886,828],[1866,828],[1821,823],[1751,804],[1622,741],[1532,685],[1416,613],[1303,539],[1208,463],[1124,387],[1071,329],[1036,282],[1009,242],[989,212],[975,190],[956,163],[942,147],[929,135],[914,123],[895,110],[879,99],[863,89],[851,83],[846,82],[841,84],[834,91],[828,103],[820,124],[817,132],[813,138],[811,140],[811,143],[810,145],[809,147],[808,150],[806,152],[804,154],[803,154],[802,154],[801,154],[801,155]],"dx":[-1126,-676],"dy":[-1126,-676],"length":1443.9670671170873,"timing":[4.199999809265137,20.90000009536743,37.59999990463257,54.299999713897705,70.90000009536743,87.59999990463257,104.19999980926514,121,137.69999980926514,154.2999997138977,171,187.69999980926514,204.2999997138977,221.09999990463257,237.69999980926514,254.40000009536743,271.09999990463257,287.7999997138977,304.40000009536743,321.09999990463257,337.7999997138977,354.5,371.09999990463257,387.7999997138977,404.5,421.19999980926514,438,454.5,471.2999997138977,487.90000009536743,504.59999990463257,521.2999997138977,538,554.6999998092651,571.2999997138977,588,604.6999998092651,621.4000000953674,638,654.7999997138977,671.4000000953674,688,704.7999997138977,721.5,738.0999999046326,754.7999997138977,771.5,788.0999999046326,804.7999997138977,821.5,838.1999998092651,854.7999997138977,935]},{"start":[1333,148],"end":[1936,834],"points":[[1333,148],[1325,178],[1317,202],[1309,227],[1304,246],[1298,260],[1295,270],[1291,279],[1287,287],[1285,291],[1282,298],[1278,311],[1274,328],[1274,344],[1285,367],[1309,407],[1341,457],[1401,522],[1477,586],[1563,651],[1666,738],[1709,773],[1736,796],[1748,805],[1757,808],[1763,808],[1768,807],[1774,806],[1780,806],[1792,806],[1810,811],[1829,816],[1856,823],[1866,826],[1875,830],[1882,832],[1887,835],[1890,836],[1891,836],[1892,836],[1894,836],[1898,836],[1904,836],[1908,836],[1910,836],[1911,835],[1912,835],[1913,835],[1914,835],[1916,835],[1918,835],[1921,835],[1924,835],[1929,835],[1932,834],[1935,834],[1936,834]],"dx":[603,686],"dy":[603,686],"length":1067.7510462004273,"timing":[2.6999998092651367,19.40000009536743,36.09999990463257,52.69999980926514,69.5,86,102.69999980926514,119.40000009536743,136.09999990463257,152.7999997138977,169.5,186.19999980926514,202.90000009536743,219.5,236.19999980926514,252.90000009536743,269.59999990463257,286.2999997138977,302.90000009536743,319.59999990463257,336.19999980926514,353,369.69999980926514,386.40000009536743,403,419.7999997138977,436.40000009536743,453,469.7999997138977,486.5,503.09999990463257,519.7999997138977,536.5,553.1999998092651,569.9000000953674,586.5999999046326,603.1999998092651,619.7999997138977,636.5,653.1999998092651,669.9000000953674,686.5999999046326,703.2999997138977,720,736.6999998092651,760.0999999046326,776.0999999046326,786.5999999046326,803.4000000953674,820,836.6999998092651,853.4000000953674,870,886.6999998092651,903.4000000953674,920.0999999046326,936.7999997138977]},{"start":[772,928],"end":[1345,50],"points":[[772,928],[790,922],[819,914],[850,908],[862,905],[870,902],[873,900],[880,898],[898,891],[946,882],[989,878],[1009,877],[1017,875],[1023,873],[1034,865],[1063,843],[1150,783],[1219,731],[1254,684],[1271,635],[1280,583],[1292,525],[1310,451],[1341,369],[1371,313],[1387,286],[1388,274],[1388,266],[1394,246],[1400,232],[1403,222],[1406,211],[1407,202],[1407,193],[1407,187],[1407,181],[1408,176],[1406,173],[1405,172],[1403,171],[1400,166],[1396,159],[1393,152],[1388,144],[1380,135],[1376,129],[1372,123],[1370,117],[1366,107],[1362,100],[1359,95],[1357,91],[1355,87],[1355,84],[1355,82],[1355,80],[1355,78],[1355,77],[1355,76],[1354,75],[1354,73],[1353,70],[1352,69],[1351,68],[1350,66],[1349,64],[1349,62],[1347,60],[1347,59],[1347,57],[1347,55],[1346,54],[1346,53],[1346,51],[1346,50],[1345,50]],"dx":[573,-878],"dy":[573,-878],"length":1240.5159723231282,"timing":[0.10000038146972656,16.800000190734863,33.5,50.10000038146973,66.7000002861023,83.30000019073486,100.10000038146973,116.7000002861023,133.5,150.10000038146973,166.80000019073486,183.5,200.2000002861023,216.80000019073486,233.5,250.30000019073486,266.80000019073486,283.5,300.30000019073486,317,333.6000003814697,350.30000019073486,367,383.7000002861023,400.40000009536743,417,433.7000002861023,450.40000009536743,467.2000002861023,483.80000019073486,500.5,517.1000003814697,533.8000001907349,550.5,567.1000003814697,583.8000001907349,600.5,617.2000002861023,634,650.6000003814697,667.2000002861023,683.9000000953674,700.5,717.3000001907349,733.9000000953674,750.6000003814697,767.3000001907349,784,800.7000002861023,817.4000000953674,834,850.7000002861023,867.3000001907349,884,900.7000002861023,917.4000000953674,934.1000003814697,950.8000001907349,1043,1050.8000001907349,1067.5,1084.2000002861023,1100.9000000953674,1117.6000003814697,1134.2000002861023,1151,1167.6000003814697,1184.2000002861023,1201,1217.7000002861023,1234.4000000953674,1251,1267.7000002861023,1284.4000000953674,1301,1317.7000002861023]},{"start":[2456,426],"end":[2114,764],"points":[[2456,426],[2454,428],[2450,429],[2447,430],[2444,431],[2441,432],[2439,432],[2435,432],[2428,433],[2414,436],[2390,440],[2361,446],[2333,454],[2304,465],[2269,486],[2245,507],[2224,531],[2206,557],[2196,576],[2191,590],[2189,602],[2188,615],[2188,626],[2188,639],[2187,649],[2184,657],[2180,671],[2177,679],[2174,685],[2171,692],[2168,696],[2164,701],[2158,707],[2152,713],[2148,718],[2145,722],[2141,727],[2136,731],[2128,739],[2125,743],[2125,744],[2125,745],[2123,749],[2122,754],[2119,758],[2118,761],[2117,761],[2117,762],[2116,762],[2116,763],[2116,764],[2115,764],[2114,764]],"dx":[-342,338],"dy":[-342,338],"length":531.3225600813363,"timing":[6.099999904632568,22.90000009536743,39.40000009536743,56.09999990463257,72.69999980926514,89.40000009536743,106.09999990463257,122.80000019073486,139.90000009536743,156.40000009536743,172.90000009536743,189.69999980926514,206.19999980926514,223.19999980926514,239.69999980926514,256.40000009536743,273,289.69999980926514,306.40000009536743,323.09999990463257,339.80000019073486,356.40000009536743,373,389.69999980926514,406.30000019073486,423,439.80000019073486,456.40000009536743,473.09999990463257,489.69999980926514,506.40000009536743,523.0999999046326,539.8000001907349,556.4000000953674,573.1999998092651,589.8000001907349,606.5,623.3000001907349,640,656.5999999046326,673.3000001907349,723.3000001907349,740,756.6999998092651,773.3000001907349,790,806.5999999046326,856.8000001907349,863.5999999046326,927.5,951.3000001907349,959.3000001907349,975.3000001907349]},{"start":[171,386],"end":[1354,563],"points":[[171,386],[172,386],[173,386],[174,387],[175,387],[176,388],[177,388],[179,389],[180,389],[189,393],[226,402],[274,407],[340,411],[429,412],[543,413],[659,413],[779,415],[884,415],[970,415],[1034,416],[1076,416],[1102,415],[1122,414],[1130,413],[1137,411],[1145,409],[1153,407],[1162,404],[1174,403],[1184,403],[1189,403],[1190,403],[1192,403],[1199,407],[1213,418],[1225,431],[1240,452],[1254,472],[1269,491],[1287,510],[1298,520],[1319,537],[1332,547],[1341,555],[1347,561],[1352,563],[1353,564],[1354,564],[1354,563]],"dx":[1183,177],"dy":[1183,177],"length":1257.5855813184216,"timing":[51.90000009536743,68.5,95.09999990463257,135.2999997138977,223.2999997138977,247.09999990463257,262.7999997138977,270.90000009536743,285.40000009536743,302,318.7999997138977,336.40000009536743,352,368.69999980926514,385.40000009536743,402.09999990463257,418.90000009536743,435.5,452.09999990463257,468.90000009536743,485.5,502.09999990463257,518.9000000953674,535.5,552.1999998092651,569.1999998092651,586.9000000953674,602.2999997138977,619.0999999046326,635.7999997138977,652.2999997138977,669,685.6999998092651,702.4000000953674,719,735.6999998092651,752.4000000953674,769,785.9000000953674,802.4000000953674,819.0999999046326,835.7999997138977,852.5999999046326,869.0999999046326,885.9000000953674,902.6999998092651,919.1999998092651,969.1999998092651,1039.2999997138977]},{"start":[2037,122],"end":[1653,1066],"points":[[2037,122],[2033,127],[2026,140],[2013,165],[1996,206],[1974,265],[1956,328],[1941,390],[1933,450],[1933,513],[1936,574],[1943,629],[1952,697],[1957,728],[1958,753],[1959,772],[1959,787],[1959,801],[1958,811],[1954,817],[1948,824],[1938,831],[1921,842],[1904,856],[1878,890],[1861,907],[1847,917],[1835,925],[1824,930],[1815,936],[1808,943],[1800,953],[1792,961],[1783,969],[1775,975],[1766,981],[1754,990],[1746,996],[1740,1002],[1736,1005],[1734,1009],[1732,1012],[1727,1016],[1722,1021],[1715,1024],[1712,1026],[1711,1026],[1711,1027],[1710,1028],[1706,1030],[1699,1034],[1690,1038],[1684,1041],[1679,1044],[1677,1045],[1674,1046],[1671,1049],[1667,1052],[1663,1056],[1658,1061],[1656,1063],[1654,1064],[1653,1065],[1653,1066]],"dx":[-384,944],"dy":[-384,944],"length":1112.745616518795,"timing":[335,351.30000019073486,367.80000019073486,384.6000003814697,401.30000019073486,417.90000009536743,434.6000003814697,451.2000002861023,468,484.6000003814697,501.40000009536743,518,534.7000002861023,551.4000000953674,568.1000003814697,584.7000002861023,601.6000003814697,618.1000003814697,634.8000001907349,651.5,668.1000003814697,685,701.4000000953674,718.4000000953674,734.8000001907349,751.5,768.2000002861023,785.1000003814697,801.6000003814697,818.4000000953674,834.9000000953674,851.7000002861023,868.6000003814697,885.9000000953674,901.6000003814697,918.4000000953674,935,951.7000002861023,968.4000000953674,985,1001.7000002861023,1018.4000000953674,1035,1051.8000001907349,1068.5,1085.1000003814697,1101.8000001907349,1118.5,1135.1000003814697,1151.9000000953674,1168.8000001907349,1185.2000002861023,1201.9000000953674,1218.6000003814697,1235.3000001907349,1252.1000003814697,1268.6000003814697,1285.5,1302,1318.7000002861023,1335.3000001907349,1352,1368.7000002861023,1385.4000000953674]},{"start":[1835,711],"end":[1804,972],"points":[[1835,711],[1834,711],[1833,711],[1830,711],[1827,711],[1823,711],[1820,711],[1815,711],[1807,712],[1796,716],[1785,724],[1776,740],[1775,756],[1777,769],[1781,779],[1784,788],[1786,797],[1791,808],[1797,820],[1806,834],[1811,844],[1814,852],[1815,858],[1815,864],[1815,870],[1812,877],[1808,886],[1805,898],[1801,909],[1798,918],[1798,923],[1798,927],[1797,930],[1795,938],[1792,947],[1789,957],[1787,965],[1786,969],[1785,969],[1784,969],[1785,969],[1785,970],[1786,970],[1787,970],[1788,971],[1789,971],[1790,971],[1791,971],[1791,972],[1792,972],[1793,972],[1794,972],[1796,972],[1797,972],[1799,972],[1802,972],[1804,972]],"dx":[-31,261],"dy":[-31,261],"length":338.4813774449383,"timing":[56.5,72.30000019073486,85.09999990463257,101.80000019073486,118.5,135.19999980926514,151.90000009536743,168.59999990463257,185.19999980926514,202,218.69999980926514,235.30000019073486,252.09999990463257,268.69999980926514,285.40000009536743,302,318.59999990463257,335.40000009536743,352,368.69999980926514,385.30000019073486,402,418.69999980926514,435.40000009536743,452.09999990463257,468.90000009536743,485.5,502.09999990463257,518.8000001907349,535.5,552.1999998092651,568.8000001907349,585.5,602.1999998092651,618.9000000953674,635.5999999046326,652.1999998092651,669,685.6999998092651,902.5,1048.5,1064.5,1072.4000000953674,1096.5,1104.3000001907349,1120.5,1144.4000000953674,1168.5,1176.3000001907349,1192.3000001907349,1208.3000001907349,1224.6999998092651,1240.3000001907349,1252.8000001907349,1269.4000000953674,1286.1999998092651,1302.8000001907349]},{"start":[2242,1225],"end":[2202,370],"points":[[2242,1225],[2242,1224],[2241,1224],[2240,1223],[2237,1221],[2231,1218],[2227,1215],[2220,1212],[2209,1207],[2196,1201],[2182,1194],[2169,1188],[2154,1180],[2140,1168],[2138,1155],[2141,1138],[2159,1102],[2187,1057],[2224,994],[2264,923],[2310,852],[2353,780],[2383,721],[2395,682],[2393,638],[2386,617],[2381,601],[2376,586],[2373,572],[2368,561],[2362,549],[2355,536],[2346,524],[2339,514],[2332,506],[2327,501],[2320,495],[2314,490],[2309,484],[2302,475],[2296,468],[2289,461],[2285,457],[2281,454],[2277,451],[2274,448],[2271,447],[2269,443],[2265,440],[2261,437],[2258,433],[2254,428],[2251,424],[2249,420],[2247,416],[2244,411],[2241,408],[2235,403],[2230,398],[2227,393],[2223,389],[2222,387],[2220,385],[2217,383],[2212,379],[2206,374],[2203,371],[2202,370]],"dx":[-40,-855],"dy":[-40,-855],"length":1053.2991801224582,"timing":[25.09999990463257,41,50.09999990463257,66.69999980926514,83.5,100.09999990463257,116.80000019073486,133.5,150.19999980926514,166.80000019073486,183.5,200.19999980926514,216.80000019073486,233.5,250.19999980926514,266.80000019073486,283.59999990463257,300.19999980926514,316.90000009536743,333.69999980926514,350.30000019073486,367,383.59999990463257,400.40000009536743,417,433.80000019073486,450.40000009536743,467,483.80000019073486,500.40000009536743,517.0999999046326,533.6999998092651,550.5,567.0999999046326,583.8000001907349,600.5999999046326,617.1999998092651,633.8000001907349,650.5,667.1999998092651,683.9000000953674,700.5999999046326,717.1999998092651,734,750.6999998092651,767.3000001907349,784,800.6999998092651,817.3000001907349,834,850.6999998092651,867.4000000953674,884,900.6999998092651,917.5,934.0999999046326,950.8000001907349,967.5,984.0999999046326,1000.8000001907349,1017.5,1034.0999999046326,1050.9000000953674,1067.5999999046326,1084.3000001907349,1100.9000000953674,1117.6999998092651,1134.3000001907349]},{"start":[2298,336],"end":[1798,549],"points":[[2298,336],[2295,337],[2291,339],[2287,340],[2280,343],[2267,349],[2250,356],[2230,363],[2207,372],[2148,390],[2100,405],[2036,423],[1946,452],[1853,485],[1801,512],[1794,520],[1794,521],[1797,522],[1801,522],[1804,522],[1806,522],[1809,520],[1812,519],[1814,518],[1813,520],[1812,521],[1811,523],[1808,528],[1804,536],[1800,541],[1798,547],[1798,548],[1798,549]],"dx":[-500,213],"dy":[-500,213],"length":596.436162329509,"timing":[1.1000003814697266,17.800000190734863,34.40000009536743,51.200000286102295,67.80000019073486,84.5,101.10000038146973,117.90000009536743,134.5,151.10000038146973,167.80000019073486,184.60000038146973,201.2000002861023,217.80000019073486,234.5,251.2000002861023,267.90000009536743,284.7000002861023,301.30000019073486,318,334.7000002861023,351.30000019073486,368.1000003814697,384.7000002861023,463.40000009536743,471.2000002861023,484.80000019073486,501.5,518.2000002861023,534.8000001907349,551.5,568.2000002861023,631.2000002861023]},{"start":[1032,1028],"end":[392,794],"points":[[1032,1028],[1032,1027],[1032,1026],[1032,1025],[1032,1024],[1032,1023],[1033,1021],[1033,1019],[1033,1018],[1033,1017],[1031,1015],[1020,1011],[994,1001],[954,987],[886,965],[802,942],[660,905],[577,880],[510,857],[464,840],[435,827],[419,821],[411,816],[406,812],[405,812],[404,810],[402,808],[400,804],[394,799],[392,796],[392,795],[392,794]],"dx":[-640,-234],"dy":[-640,-234],"length":696.5286757923311,"timing":[6.900000095367432,23,38.90000009536743,63.10000038146973,101.60000038146973,118.2000002861023,134.90000009536743,151.60000038146973,174.90000009536743,218.30000019073486,235.10000038146973,253.5,268.30000019073486,285.1000003814697,301.7000002861023,318.7000002861023,335,351.80000019073486,368.40000009536743,385.1000003814697,401.80000019073486,418.5,435.2000002861023,452.2000002861023,468.7000002861023,485.2000002861023,501.90000009536743,518.6000003814697,535.3000001907349,551.9000000953674,568.6000003814697,618.8000001907349]},{"start":[802,156],"end":[253,265],"points":[[802,156],[804,157],[814,161],[838,171],[886,189],[957,211],[1048,238],[1124,273],[1180,302],[1211,319],[1227,327],[1236,333],[1239,338],[1240,341],[1240,348],[1233,362],[1215,378],[1178,396],[1120,402],[1050,401],[973,389],[888,370],[762,333],[679,314],[607,308],[537,306],[480,306],[437,307],[396,309],[361,311],[328,311],[300,311],[278,311],[263,311],[253,311],[252,311],[252,310],[251,308],[248,305],[247,301],[247,298],[247,295],[248,290],[249,284],[250,280],[250,275],[252,271],[253,267],[253,265]],"dx":[-549,109],"dy":[-549,109],"length":1552.901199719622,"timing":[31.399999618530273,41.19999980926514,57.89999961853027,74.5,91.19999980926514,107.7999997138977,124.5,141.19999980926514,158,174.59999990463257,191.39999961853027,208,224.69999980926514,241.2999997138977,258,274.59999990463257,291.5,308.09999990463257,324.7999997138977,341.5,358.09999990463257,374.7999997138977,391.5,408.19999980926514,424.7999997138977,441.5,458.19999980926514,474.7999997138977,491.59999990463257,508.2999997138977,524.8999996185303,541.5999999046326,558.2999997138977,575,591.6999998092651,608.2999997138977,625,641.5999999046326,658.2999997138977,675,691.7999997138977,708.3999996185303,725.0999999046326,741.7999997138977,758.5,775.1999998092651,791.7999997138977,808.3999996185303,825.0999999046326]},{"start":[1774,495],"end":[1741,148],"points":[[1774,495],[1773,496],[1772,496],[1769,499],[1768,500],[1766,500],[1760,503],[1755,506],[1751,508],[1750,509],[1752,502],[1758,491],[1763,479],[1769,469],[1774,457],[1779,443],[1783,417],[1786,391],[1786,363],[1781,325],[1768,285],[1753,246],[1743,222],[1736,204],[1734,196],[1734,192],[1734,191],[1734,190],[1734,189],[1734,188],[1735,187],[1736,186],[1739,182],[1740,179],[1741,176],[1742,174],[1742,170],[1742,167],[1741,163],[1741,160],[1741,156],[1741,153],[1741,151],[1741,150],[1741,148]],"dx":[-33,-347],"dy":[-33,-347],"length":407.5567747314666,"timing":[56.19999980926514,64.09999990463257,77.30000019073486,99.5,111.69999980926514,127.30000019073486,143.90000009536743,160.5,177.09999990463257,193.80000019073486,243.90000009536743,260.59999990463257,277.30000019073486,294,310.69999980926514,327.40000009536743,344,360.69999980926514,377.40000009536743,394.09999990463257,410.80000019073486,427.5,444.09999990463257,460.80000019073486,477.5,494.09999990463257,510.90000009536743,527.5,544.1999998092651,679.8000001907349,694.3000001907349,711,727.6999998092651,744.4000000953674,761,777.6999998092651,794.5,811.1999998092651,827.8000001907349,844.5,861.1999998092651,877.8000001907349,894.4000000953674,911.1999998092651,927.8000001907349]},{"start":[1675,160],"end":[2172,780],"points":[[1675,160],[1676,160],[1688,164],[1689,165],[1689,169],[1698,177],[1718,190],[1748,216],[1770,243],[1785,278],[1803,327],[1826,383],[1859,428],[1898,477],[1953,535],[1995,574],[2036,614],[2071,646],[2104,675],[2138,701],[2161,718],[2173,726],[2178,730],[2179,731],[2179,732],[2180,734],[2181,740],[2181,743],[2181,745],[2181,746],[2180,746],[2179,746],[2179,747],[2178,747],[2178,749],[2175,754],[2173,761],[2172,767],[2172,770],[2172,772],[2172,774],[2172,776],[2172,778],[2172,779],[2172,780]],"dx":[497,620],"dy":[497,620],"length":831.7707043241114,"timing":[0.09999990463256836,351.5,367,383.69999980926514,400.2999997138977,417.09999990463257,433.69999980926514,450.3999996185303,467.2999997138977,483.7999997138977,500.3999996185303,517.1999998092651,533.8999996185303,550.7999997138977,567.3999996185303,583.7999997138977,600.5999999046326,617.1999998092651,634.0999999046326,650.5999999046326,667.3999996185303,684,700.6999998092651,717.2999997138977,734.7999997138977,750.6999998092651,767.2999997138977,784,800.6999998092651,823.0999999046326,838.8999996185303,862.8999996185303,871,884.0999999046326,900.6999998092651,917.3999996185303,934.0999999046326,950.7999997138977,967.5,984.0999999046326,1000.8999996185303,1017.5999999046326,1034.2999997138977,1111.5,1151]},{"start":[2162,772],"end":[1991,494],"points":[[2162,772],[2155,768],[2140,762],[2125,758],[2107,753],[2083,746],[2073,743],[2069,741],[2068,740],[2065,739],[2062,737],[2047,727],[2027,708],[1994,672],[1958,624],[1949,606],[1947,596],[1947,588],[1948,581],[1951,577],[1955,571],[1959,567],[1966,560],[1971,554],[1977,547],[1981,537],[1984,531],[1984,528],[1985,526],[1985,524],[1985,521],[1985,519],[1986,517],[1986,514],[1987,511],[1988,508],[1988,504],[1989,501],[1990,499],[1990,498],[1990,497],[1991,496],[1991,495],[1991,494]],"dx":[-171,-278],"dy":[-171,-278],"length":407.2471486629604,"timing":[4.099999904632568,20.700000286102295,37.5,54.09999990463257,70.80000019073486,87.5,104.2000002861023,120.90000009536743,199.90000009536743,207.09999990463257,220.90000009536743,237.59999990463257,254.40000009536743,271.09999990463257,287.7000002861023,304.40000009536743,321.09999990463257,337.80000019073486,354.5,371.2000002861023,387.80000019073486,404.5,421.09999990463257,437.80000019073486,454.5,471.09999990463257,487.90000009536743,504.59999990463257,521.3000001907349,538,554.7000002861023,571.4000000953674,588,604.7000002861023,621.4000000953674,638.0999999046326,654.8000001907349,671.4000000953674,688.0999999046326,704.8000001907349,721.4000000953674,738.0999999046326,754.8000001907349,771.5999999046326]},{"start":[1989,494],"end":[649,150],"points":[[1989,494],[1986,494],[1982,494],[1968,492],[1917,474],[1836,448],[1741,417],[1645,380],[1540,343],[1443,305],[1362,272],[1264,238],[1215,224],[1166,208],[1127,198],[1093,189],[1059,181],[1024,175],[986,168],[945,162],[908,156],[870,150],[825,144],[752,136],[703,126],[669,117],[649,113],[636,111],[629,110],[625,110],[623,110],[620,111],[614,114],[609,117],[604,121],[601,123],[601,124],[603,129],[610,137],[618,142],[628,147],[635,148],[641,149],[645,150],[647,150],[648,150],[649,150]],"dx":[-1340,-344],"dy":[-1340,-344],"length":1509.471942007643,"timing":[328.90000009536743,336.7000002861023,346.80000019073486,363.59999990463257,380.2000002861023,396.90000009536743,413.59999990463257,430.2000002861023,446.80000019073486,463.7000002861023,480.40000009536743,497.09999990463257,513.7000002861023,530.4000000953674,547,563.8000001907349,580.5,597,613.9000000953674,630.5,647.0999999046326,663.8000001907349,680.5,697.2000002861023,713.9000000953674,730.5,747.2000002861023,764,780.5999999046326,797.2000002861023,813.9000000953674,830.7000002861023,847.3000001907349,864,880.7000002861023,897.4000000953674,914,930.8000001907349,947.4000000953674,964,980.8000001907349,997.5,1014.0999999046326,1030.8000001907349,1047.5,1064.2000002861023,1114.3000001907349]},{"start":[650,151],"end":[1558,551],"points":[[650,151],[656,154],[670,163],[719,185],[774,214],[825,240],[872,262],[919,282],[977,303],[1045,326],[1119,351],[1195,378],[1281,410],[1328,429],[1376,450],[1426,471],[1471,486],[1503,495],[1527,499],[1542,500],[1555,501],[1571,502],[1593,504],[1614,508],[1639,508],[1648,508],[1652,507],[1655,506],[1658,504],[1663,502],[1668,500],[1671,499],[1671,498],[1668,498],[1659,498],[1653,498],[1647,498],[1642,498],[1640,498],[1639,498],[1638,499],[1634,500],[1626,506],[1614,514],[1598,523],[1582,530],[1566,538],[1561,542],[1559,546],[1558,549],[1558,551]],"dx":[908,400],"dy":[908,400],"length":1224.8783980041271,"timing":[408.2999997138977,424.59999990463257,441.2999997138977,458.09999990463257,474.69999980926514,491.40000009536743,508,524.7999997138977,541.4000000953674,558.0999999046326,574.7999997138977,591.5,608.0999999046326,624.7999997138977,641.5,658.1999998092651,674.9000000953674,691.5,708.1999998092651,724.9000000953674,741.6999998092651,758.2999997138977,775,791.7999997138977,808.2999997138977,825,841.5999999046326,858.4000000953674,875.0999999046326,891.5999999046326,908.4000000953674,925.0999999046326,941.9000000953674,991.9000000953674,1008.5999999046326,1025.0999999046326,1041.7999997138977,1058.5,1075.1999998092651,1091.9000000953674,1108.5999999046326,1125.1999998092651,1141.9000000953674,1158.5999999046326,1175.1999998092651,1192,1208.6999998092651,1225.4000000953674,1242,1258.6999998092651,1275.2999997138977]},{"start":[1559,551],"end":[2300,157],"points":[[1559,551],[1561,551],[1568,547],[1577,542],[1591,536],[1614,526],[1649,515],[1685,504],[1720,494],[1752,482],[1777,470],[1804,460],[1831,444],[1860,428],[1905,402],[1934,383],[1964,367],[1991,351],[2017,335],[2040,322],[2063,311],[2084,302],[2105,294],[2122,286],[2137,280],[2149,273],[2165,266],[2174,261],[2181,256],[2187,252],[2192,249],[2195,247],[2197,246],[2199,245],[2201,243],[2202,241],[2204,238],[2206,235],[2213,230],[2221,226],[2226,221],[2233,216],[2238,213],[2242,209],[2245,205],[2249,202],[2251,201],[2253,199],[2255,198],[2256,197],[2259,196],[2260,194],[2264,193],[2267,190],[2273,187],[2277,185],[2280,182],[2284,179],[2285,177],[2288,174],[2290,171],[2294,166],[2297,163],[2299,159],[2300,157]],"dx":[741,-394],"dy":[741,-394],"length":850.0360780534852,"timing":[428.69999980926514,436.30000019073486,452.40000009536743,469.19999980926514,485.90000009536743,502.59999990463257,519.1999998092651,536,552.5999999046326,569.3000001907349,585.9000000953674,602.5999999046326,619.4000000953674,636.0999999046326,652.5999999046326,669.3000001907349,686,702.6999998092651,719.4000000953674,736.0999999046326,752.8000001907349,769.4000000953674,786.0999999046326,802.8000001907349,819.5,836.0999999046326,852.8000001907349,869.5999999046326,886.0999999046326,902.8000001907349,919.5,936.3000001907349,952.8000001907349,969.6999998092651,986.1999998092651,1002.9000000953674,1019.6999998092651,1036.4000000953674,1053,1069.6999998092651,1086.4000000953674,1103.0999999046326,1119.6999998092651,1136.5,1153.0999999046326,1169.8000001907349,1186.4000000953674,1203.1999998092651,1219.9000000953674,1236.4000000953674,1253.0999999046326,1269.9000000953674,1286.5,1303.1999998092651,1319.9000000953674,1336.5999999046326,1353.1999998092651,1370,1386.5999999046326,1403.3000001907349,1420,1436.5999999046326,1453.4000000953674,1470,1486.6999998092651]},{"start":[2299,157],"end":[1363,1081],"points":[[2299,157],[2299,158],[2298,158],[2298,159],[2296,159],[2295,160],[2293,161],[2292,162],[2290,163],[2288,165],[2284,168],[2272,180],[2253,202],[2220,243],[2187,292],[2161,344],[2141,389],[2120,438],[2091,485],[2060,532],[2023,572],[1984,615],[1945,654],[1893,704],[1870,724],[1853,738],[1837,749],[1823,758],[1812,766],[1803,771],[1795,776],[1788,780],[1783,784],[1776,788],[1770,792],[1763,798],[1758,801],[1752,805],[1748,809],[1744,812],[1742,816],[1739,822],[1735,829],[1727,837],[1720,843],[1713,850],[1703,857],[1678,878],[1648,900],[1612,925],[1578,944],[1556,957],[1517,974],[1482,997],[1452,1012],[1428,1027],[1410,1036],[1399,1042],[1392,1047],[1392,1048],[1392,1050],[1390,1057],[1387,1067],[1380,1074],[1372,1079],[1366,1081],[1364,1081],[1363,1081]],"dx":[-936,924],"dy":[-936,924],"length":1351.449749252933,"timing":[230.2000002861023,246,270.1000003814697,277.7000002861023,289.2000002861023,305.80000019073486,322.40000009536743,339.1000003814697,355.90000009536743,372.6000003814697,389.30000019073486,405.90000009536743,422.5,439.30000019073486,456,472.6000003814697,489.30000019073486,505.90000009536743,522.6000003814697,539.4000000953674,556.1000003814697,572.7000002861023,589.6000003814697,606.1000003814697,622.7000002861023,639.4000000953674,656,672.9000000953674,689.5,706.1000003814697,722.8000001907349,739.6000003814697,756.2000002861023,772.9000000953674,789.5,806.2000002861023,822.9000000953674,839.6000003814697,856.2000002861023,873,889.7000002861023,906.3000001907349,923,939.7000002861023,956.4000000953674,973.1000003814697,989.8000001907349,1006.4000000953674,1023.1000003814697,1039.7000002861023,1056.4000000953674,1073.1000003814697,1089.7000002861023,1106.5,1123.2000002861023,1139.9000000953674,1156.4000000953674,1173.3000001907349,1189.9000000953674,1206.6000003814697,1374,1390.1000003814697,1406.8000001907349,1423.4000000953674,1440.1000003814697,1456.8000001907349,1473.5,1490.1000003814697]},{"start":[1362,1081],"end":[641,561],"points":[[1362,1081],[1361,1081],[1356,1079],[1326,1066],[1288,1050],[1234,1027],[1170,1002],[1098,974],[1023,947],[947,915],[883,885],[825,846],[782,809],[740,768],[709,731],[680,690],[668,664],[661,641],[654,621],[650,605],[646,591],[641,578],[636,565],[630,554],[627,547],[625,543],[624,541],[623,541],[624,542],[627,546],[629,549],[635,557],[640,561],[641,561]],"dx":[-721,-520],"dy":[-721,-520],"length":989.6818056009608,"timing":[190.5,205.2000002861023,221.90000009536743,238.59999990463257,255.30000019073486,271.90000009536743,288.59999990463257,305.40000009536743,322,338.7000002861023,355.40000009536743,372,388.80000019073486,405.40000009536743,422.09999990463257,438.7000002861023,455.40000009536743,472.09999990463257,488.80000019073486,505.5,522.2000002861023,538.9000000953674,555.5999999046326,572.2000002861023,588.9000000953674,605.5999999046326,622.3000001907349,672.3000001907349,766.7000002861023,774.5,789.0999999046326,805.8000001907349,822.4000000953674,846.5]},{"start":[642,561],"end":[63,205],"points":[[642,561],[647,561],[661,562],[682,562],[718,558],[757,547],[786,528],[795,508],[794,486],[773,452],[739,415],[673,327],[614,283],[546,247],[480,212],[424,189],[373,172],[328,161],[286,158],[242,158],[191,160],[143,162],[81,161],[41,149],[12,137],[3,133],[2,133],[2,134],[2,135],[2,136],[3,141],[11,150],[22,164],[31,172],[38,177],[48,180],[58,181],[66,181],[70,181],[70,182],[70,183],[68,185],[66,190],[64,196],[63,200],[63,202],[63,204],[63,205]],"dx":[-579,-356],"dy":[-579,-356],"length":1229.416946234864,"timing":[207,225.90000009536743,243.40000009536743,258,274.7000002861023,291.40000009536743,308.1000003814697,324.80000019073486,341.5,358.1000003814697,374.80000019073486,391.40000009536743,408.2000002861023,424.90000009536743,441.5,458.2000002861023,474.90000009536743,491.6000003814697,508.30000019073486,524.9000000953674,541.6000003814697,558.3000001907349,575,591.6000003814697,608.4000000953674,625,654.8000001907349,703.1000003814697,710.6000003814697,725,741.8000001907349,758.4000000953674,775.1000003814697,791.8000001907349,808.5,825.1000003814697,841.9000000953674,858.5,875.2000002861023,891.9000000953674,999,1042,1058.7000002861023,1075.4000000953674,1092.1000003814697,1108.8000001907349,1125.5,1142.9000000953674]},{"start":[64,205],"end":[2064,530],"points":[[64,205],[65,206],[66,206],[67,207],[68,207],[69,208],[71,209],[73,211],[78,214],[97,223],[121,235],[158,253],[200,271],[245,290],[292,308],[338,325],[374,341],[401,351],[418,359],[433,364],[448,369],[479,377],[503,382],[528,387],[550,392],[572,395],[591,397],[608,399],[626,402],[642,405],[657,406],[669,407],[686,409],[693,409],[700,410],[708,412],[713,412],[716,413],[717,413],[719,413],[720,413],[721,413],[722,413],[724,413],[725,413],[733,415],[738,416],[743,417],[747,418],[751,419],[756,420],[766,421],[778,423],[791,425],[804,425],[817,427],[832,427],[840,428],[850,428],[858,429],[865,430],[871,430],[874,430],[877,430],[878,430],[881,430],[884,430],[887,430],[893,430],[897,430],[901,430],[905,430],[910,430],[916,431],[924,431],[935,432],[948,432],[963,432],[978,433],[995,433],[1026,433],[1054,433],[1088,433],[1119,433],[1144,432],[1166,432],[1183,432],[1203,431],[1225,430],[1250,430],[1285,429],[1325,427],[1350,427],[1376,426],[1401,426],[1429,426],[1452,426],[1471,426],[1486,426],[1498,426],[1510,426],[1520,426],[1529,426],[1542,426],[1550,426],[1558,426],[1568,426],[1579,427],[1589,427],[1599,427],[1607,427],[1614,427],[1623,427],[1633,427],[1645,427],[1659,427],[1665,427],[1667,427],[1669,427],[1672,427],[1678,427],[1685,427],[1691,427],[1694,427],[1699,428],[1711,434],[1739,451],[1817,491],[1870,512],[1911,526],[1941,531],[1960,532],[1978,533],[1992,534],[2001,534],[2009,536],[2017,536],[2027,536],[2044,536],[2054,536],[2058,534],[2059,533],[2060,533],[2060,532],[2062,532],[2063,531],[2063,530],[2064,530]],"dx":[2000,325],"dy":[2000,325],"length":2067.040643458842,"timing":[98.80000019073486,114.69999980926514,130.59999990463257,146.59999990463257,154.5,168.30000019073486,184.90000009536743,201.59999990463257,218.19999980926514,234.90000009536743,251.59999990463257,268.30000019073486,285,301.69999980926514,318.40000009536743,335,351.80000019073486,368.40000009536743,385.19999980926514,401.80000019073486,418.40000009536743,435.09999990463257,451.80000019073486,468.5,485.19999980926514,501.90000009536743,518.5,535.0999999046326,551.9000000953674,568.5999999046326,585.3000001907349,601.9000000953674,618.6999998092651,635.3000001907349,652,668.6999998092651,685.4000000953674,702,718.9000000953674,735.4000000953674,752.0999999046326,770.6999998092651,786.5,802.8000001907349,818.9000000953674,835.4000000953674,852.1999998092651,868.8000001907349,885.5,902.1999998092651,918.9000000953674,935.5999999046326,952.3000001907349,968.9000000953674,985.5,1002.1999998092651,1019,1035.5999999046326,1052.3000001907349,1069,1085.6999998092651,1102.4000000953674,1119,1135.6999998092651,1152.4000000953674,1169,1185.6999998092651,1202.5,1219.0999999046326,1235.6999998092651,1252.5,1269.0999999046326,1285.9000000953674,1302.5,1319.1999998092651,1335.8000001907349,1352.5,1369.3000001907349,1385.8000001907349,1402.5,1419.3000001907349,1436,1452.5999999046326,1469.3000001907349,1486,1502.5999999046326,1519.4000000953674,1536,1552.6999998092651,1569.5,1586.0999999046326,1602.8000001907349,1619.4000000953674,1636.0999999046326,1652.8000001907349,1669.4000000953674,1686.0999999046326,1702.8000001907349,1719.5,1736.1999998092651,1752.9000000953674,1769.5,1786.1999998092651,1802.9000000953674,1819.5999999046326,1836.3000001907349,1853,1869.6999998092651,1886.4000000953674,1903,1919.8000001907349,1936.4000000953674,1953.0999999046326,1969.6999998092651,1986.4000000953674,2003,2019.6999998092651,2036.4000000953674,2053.0999999046326,2069.800000190735,2086.5,2103.199999809265,2120,2136.5,2153.199999809265,2170,2186.5999999046326,2203.300000190735,2219.9000000953674,2236.5,2253.300000190735,2269.9000000953674,2286.5999999046326,2303.199999809265,2320,2336.699999809265,2353.4000000953674,2370.199999809265,2386.699999809265,2403.4000000953674,2420.0999999046326,2436.699999809265,2453.5,2470.199999809265,2486.800000190735,2503.5,2520.199999809265,2536.9000000953674]},{"start":[2063,530],"end":[2491,242],"points":[[2063,530],[2062,530],[2061,530],[2060,530],[2055,529],[2048,528],[2037,527],[2024,527],[2017,527],[2020,525],[2023,525],[2033,521],[2044,516],[2064,506],[2077,498],[2092,487],[2106,473],[2134,446],[2166,421],[2204,393],[2244,368],[2280,345],[2312,326],[2329,316],[2340,309],[2353,304],[2364,299],[2375,294],[2388,288],[2400,282],[2414,276],[2426,271],[2438,265],[2449,259],[2461,252],[2475,246],[2490,239],[2492,237],[2492,238],[2492,239],[2491,240],[2491,241],[2491,242]],"dx":[428,-288],"dy":[428,-288],"length":612.1995379987867,"timing":[229.2000002861023,269.09999990463257,293,301.09999990463257,317.80000019073486,334.40000009536743,351.2000002861023,367.7000002861023,384.5,437.2000002861023,451.30000019073486,467.90000009536743,484.5,501.2000002861023,518,534.5999999046326,551.3000001907349,567.9000000953674,584.5999999046326,601.2000002861023,618,634.5999999046326,651.4000000953674,668.0999999046326,684.5999999046326,701.3000001907349,718.0999999046326,734.8000001907349,751.5,768.2000002861023,784.7000002861023,801.5,818.0999999046326,834.8000001907349,851.5,868.2000002861023,884.8000001907349,901.4000000953674,1061.0999999046326,1101.5999999046326,1118.3000001907349,1135.0999999046326,1151.8000001907349]},{"start":[2491,243],"end":[1017,954],"points":[[2491,243],[2489,243],[2485,246],[2472,252],[2445,264],[2395,290],[2303,342],[2234,385],[2170,432],[2113,478],[2048,533],[1972,582],[1883,623],[1776,660],[1686,696],[1622,729],[1577,757],[1545,783],[1489,820],[1450,843],[1408,864],[1373,885],[1341,906],[1305,932],[1260,958],[1201,985],[1137,1010],[1091,1026],[1070,1032],[1061,1032],[1057,1032],[1053,1030],[1046,1026],[1043,1023],[1041,1018],[1040,1011],[1037,1004],[1034,1000],[1033,999],[1033,998],[1033,996],[1033,994],[1032,989],[1029,982],[1026,977],[1024,973],[1023,970],[1021,966],[1020,963],[1018,960],[1017,959],[1017,958],[1017,957],[1017,956],[1017,955],[1017,954]],"dx":[-1474,711],"dy":[-1474,711],"length":1740.861460789938,"timing":[247.19999980926514,259.2999997138977,276.19999980926514,292.8999996185303,309.3999996185303,326,342.69999980926514,359.3999996185303,376.09999990463257,392.69999980926514,409.5,426.2999997138977,442.8999996185303,459.3999996185303,476.2999997138977,492.7999997138977,509.59999990463257,526.3999996185303,543,559.5,576.2999997138977,592.8999996185303,609.6999998092651,626.6999998092651,644.3999996185303,659.5999999046326,676.2999997138977,692.8999996185303,709.5999999046326,726.3999996185303,743,759.6999998092651,776.3999996185303,793.0999999046326,809.7999997138977,826.3999996185303,843.0999999046326,859.7999997138977,876.3999996185303,893.0999999046326,909.7999997138977,926.5999999046326,943.2999997138977,959.8999996185303,976.5999999046326,993.1999998092651,1009.7999997138977,1026.5999999046326,1043.2999997138977,1060,1078.5999999046326,1094.5999999046326,1143.3999996185303,1160.0999999046326,1176.6999998092651,1193.3999996185303]},{"start":[1018,953],"end":[1259,725],"points":[[1018,953],[1022,952],[1029,948],[1050,940],[1090,925],[1152,895],[1193,878],[1230,863],[1251,854],[1265,846],[1277,838],[1286,831],[1297,821],[1306,812],[1315,804],[1322,798],[1326,794],[1329,791],[1329,790],[1329,789],[1329,788],[1328,788],[1324,787],[1316,785],[1304,780],[1294,776],[1287,772],[1282,768],[1277,762],[1271,751],[1266,743],[1263,736],[1260,732],[1260,730],[1260,728],[1260,727],[1260,726],[1259,725]],"dx":[241,-228],"dy":[241,-228],"length":458.5235291709416,"timing":[294.59999990463257,302.30000019073486,316.30000019073486,332.90000009536743,349.7000002861023,366.30000019073486,383.09999990463257,399.7000002861023,416.5,433.2000002861023,449.80000019073486,466.5,483.09999990463257,499.80000019073486,516.4000000953674,533.2000002861023,549.9000000953674,566.5,590.4000000953674,614.4000000953674,622.3000001907349,633.3000001907349,649.9000000953674,666.5999999046326,683.3000001907349,700,716.7000002861023,733.4000000953674,750.0999999046326,766.7000002861023,783.3000001907349,800.0999999046326,816.7000002861023,833.4000000953674,850.0999999046326,866.8000001907349,883.5,900.2000002861023]},{"start":[1259,726],"end":[345,437],"points":[[1259,726],[1259,727],[1258,726],[1257,724],[1253,722],[1236,713],[1195,692],[1137,666],[1063,636],[987,606],[910,578],[853,555],[817,541],[798,533],[791,530],[788,529],[783,528],[778,527],[770,525],[759,522],[741,517],[708,508],[667,492],[616,474],[552,453],[520,446],[493,442],[476,442],[464,441],[455,441],[451,440],[448,440],[445,440],[442,440],[441,440],[440,440],[437,440],[434,439],[432,438],[427,438],[415,437],[389,437],[358,437],[346,437],[345,437]],"dx":[-914,-289],"dy":[-914,-289],"length":969.7996546364957,"timing":[17.90000009536743,140.10000038146973,300,307.90000009536743,318.1000003814697,334.80000019073486,351.5,368.2000002861023,384.80000019073486,401.5,418.30000019073486,434.90000009536743,451.6000003814697,468.30000019073486,484.90000009536743,501.6000003814697,518.3000001907349,534.9000000953674,551.7000002861023,568.3000001907349,585,601.6000003814697,618.4000000953674,635,651.7000002861023,668.4000000953674,685,701.7000002861023,718.5,735.1000003814697,751.8000001907349,768.4000000953674,785.1000003814697,801.8000001907349,818.6000003814697,868.5,885.3000001907349,902,918.5,935.3000001907349,952,968.6000003814697,985.3000001907349,1002.1000003814697,1018.7000002861023]},{"start":[353,443],"end":[972,1038],"points":[[353,443],[358,446],[365,451],[382,459],[396,466],[412,473],[432,481],[452,488],[473,496],[498,505],[526,516],[564,528],[596,539],[615,545],[624,550],[625,550],[628,559],[644,587],[674,641],[708,709],[743,776],[774,832],[803,880],[824,917],[835,936],[839,947],[843,958],[847,968],[853,978],[861,991],[872,1005],[886,1022],[895,1034],[902,1042],[905,1044],[906,1045],[910,1045],[916,1044],[927,1037],[934,1034],[938,1032],[940,1031],[943,1031],[945,1031],[947,1031],[949,1031],[952,1031],[956,1031],[961,1033],[964,1034],[969,1037],[971,1037],[971,1038],[972,1038]],"dx":[619,595],"dy":[619,595],"length":936.2230096216153,"timing":[6.599999904632568,23.299999713897705,40,56.59999990463257,73.2999997138977,90,106.69999980926514,123.40000009536743,140.09999990463257,156.7999997138977,173.5,190.09999990463257,206.90000009536743,223.5,240.19999980926514,256.7999997138977,273.40000009536743,290.19999980926514,306.90000009536743,323.5,340.19999980926514,356.90000009536743,373.59999990463257,390.19999980926514,407,423.59999990463257,440.2999997138977,457,473.59999990463257,490.5,507.09999990463257,523.6999998092651,540.4000000953674,557.0999999046326,573.6999998092651,590.4000000953674,607.0999999046326,623.7999997138977,640.5,657.0999999046326,673.7999997138977,690.5999999046326,707.1999998092651,723.9000000953674,740.5,757.2999997138977,773.9000000953674,790.5999999046326,807.4000000953674,824,840.5999999046326,857.1999998092651,874,890.7999997138977]},{"start":[969,1038],"end":[521,628],"points":[[969,1038],[969,1037],[968,1036],[968,1034],[968,1032],[968,1030],[968,1026],[967,1022],[966,1019],[966,1016],[963,1010],[958,1003],[946,992],[920,968],[871,932],[792,881],[708,832],[623,783],[549,740],[496,701],[467,675],[455,661],[450,652],[450,650],[450,649],[451,649],[452,649],[453,649],[456,648],[464,647],[473,646],[483,645],[490,643],[496,640],[499,638],[504,636],[512,633],[517,630],[520,628],[521,628]],"dx":[-448,-410],"dy":[-448,-410],"length":737.2284027991392,"timing":[52.09999990463257,68.69999980926514,85.30000019073486,102.09999990463257,118.80000019073486,135.5,152.09999990463257,168.90000009536743,185.5,202.19999980926514,218.80000019073486,235.5,252.19999980926514,268.90000009536743,285.5,302.30000019073486,319,335.59999990463257,352.30000019073486,369,385.69999980926514,402.40000009536743,419,435.69999980926514,452.30000019073486,469.09999990463257,490.5,502.30000019073486,519.0999999046326,535.6999998092651,552.4000000953674,569.0999999046326,585.8000001907349,602.5,619.0999999046326,635.8000001907349,652.5999999046326,669.3000001907349,686,702.5999999046326]},{"start":[535,637],"end":[1265,276],"points":[[535,637],[555,646],[583,661],[604,674],[615,680],[619,684],[621,685],[623,686],[628,689],[643,695],[652,698],[661,701],[673,705],[687,707],[711,709],[747,708],[794,696],[844,672],[894,644],[939,602],[996,537],[1024,492],[1039,460],[1047,437],[1056,417],[1064,402],[1073,389],[1082,378],[1091,371],[1100,364],[1108,359],[1118,354],[1138,347],[1152,342],[1164,338],[1173,335],[1177,333],[1180,331],[1182,329],[1183,328],[1185,326],[1187,323],[1190,319],[1194,313],[1203,304],[1210,299],[1215,294],[1220,290],[1225,288],[1229,286],[1232,284],[1235,283],[1239,283],[1243,282],[1248,281],[1253,281],[1257,279],[1260,278],[1263,277],[1264,277],[1265,276]],"dx":[730,-361],"dy":[730,-361],"length":935.2708425902246,"timing":[1.4000000953674316,18.09999990463257,34.69999980926514,51.40000009536743,68.19999980926514,84.7999997138977,101.59999990463257,118.19999980926514,135,151.59999990463257,168.19999980926514,184.90000009536743,201.69999980926514,218.2999997138977,235.09999990463257,251.69999980926514,268.2999997138977,285,301.69999980926514,318.40000009536743,335.09999990463257,351.7999997138977,368.5,385.09999990463257,401.7999997138977,418.5,435.09999990463257,451.7999997138977,468.5,485.19999980926514,501.7999997138977,518.5999999046326,535.1999998092651,551.9000000953674,568.5,585.2999997138977,601.9000000953674,618.5999999046326,635.2999997138977,652,668.6999998092651,685.4000000953674,702,718.6999998092651,735.4000000953674,752.0999999046326,768.6999998092651,785.4000000953674,802.1999998092651,818.7999997138977,835.5,852.1999998092651,868.7999997138977,885.5,902.1999998092651,918.7999997138977,935.5,952.2999997138977,969,985.5999999046326,1002.2999997138977]},{"start":[1258,288],"end":[876,434],"points":[[1258,288],[1255,295],[1254,300],[1253,303],[1253,304],[1253,306],[1253,307],[1252,308],[1252,309],[1252,311],[1260,316],[1284,329],[1310,344],[1312,347],[1311,348],[1301,353],[1280,358],[1232,361],[1172,363],[1124,366],[1084,368],[1056,368],[1044,369],[1039,369],[1035,371],[1031,373],[1023,378],[1011,386],[993,394],[974,403],[963,407],[959,410],[958,411],[957,411],[955,412],[948,414],[923,422],[903,428],[888,432],[880,434],[878,434],[877,434],[876,434]],"dx":[-382,146],"dy":[-382,146],"length":547.1928273012657,"timing":[8.099999904632568,24.699999809265137,41.40000009536743,58.09999990463257,74.80000019073486,91.5,108.19999980926514,124.80000019073486,141.59999990463257,158.30000019073486,174.90000009536743,191.59999990463257,208.30000019073486,224.90000009536743,241.59999990463257,258.30000019073486,275,291.59999990463257,308.40000009536743,325.09999990463257,341.69999980926514,358.30000019073486,375,391.80000019073486,408.40000009536743,425.09999990463257,441.80000019073486,458.5,475.09999990463257,491.90000009536743,508.5,525.1999998092651,542,558.5999999046326,575.1999998092651,592,608.5999999046326,625.3000001907349,641.9000000953674,658.6999998092651,675.3000001907349,692,720.0999999046326]},{"start":[1421,449],"end":[2297,600],"points":[[1421,449],[1420,449],[1418,449],[1416,450],[1414,452],[1411,453],[1406,457],[1404,459],[1403,461],[1402,462],[1402,463],[1400,464],[1396,467],[1390,473],[1386,481],[1383,491],[1383,498],[1393,504],[1410,505],[1455,505],[1522,505],[1605,505],[1676,505],[1733,504],[1787,503],[1843,501],[1898,501],[1944,501],[1982,501],[2031,506],[2052,511],[2071,515],[2094,521],[2112,529],[2127,537],[2150,550],[2180,566],[2217,581],[2248,592],[2269,596],[2285,599],[2296,600],[2297,600]],"dx":[876,151],"dy":[876,151],"length":1001.6250904044263,"timing":[16.699999809265137,33.299999713897705,50,66.69999980926514,83.40000009536743,100.09999990463257,116.69999980926514,133.40000009536743,150.09999990463257,166.7999997138977,183.5,200.19999980926514,216.90000009536743,233.59999990463257,250.19999980926514,266.90000009536743,283.69999980926514,300.2999997138977,317,333.59999990463257,350.2999997138977,367,383.59999990463257,400.2999997138977,417.09999990463257,433.69999980926514,450.2999997138977,467,483.7999997138977,500.40000009536743,517,533.7999997138977,550.5,567.1999998092651,583.7999997138977,600.5999999046326,617.0999999046326,633.9000000953674,650.5,667.2999997138977,683.9000000953674,700.5999999046326,717.1999998092651]},{"start":[2296,600],"end":[1861,1077],"points":[[2296,600],[2295,600],[2294,600],[2293,600],[2292,600],[2291,600],[2290,600],[2287,600],[2281,601],[2269,603],[2254,609],[2241,619],[2227,631],[2211,647],[2193,664],[2172,688],[2135,758],[2114,819],[2093,879],[2074,929],[2060,969],[2045,1006],[2033,1044],[2026,1073],[2021,1096],[2017,1109],[2014,1116],[2011,1118],[1996,1118],[1983,1118],[1973,1117],[1969,1115],[1966,1113],[1963,1112],[1962,1112],[1960,1112],[1956,1111],[1946,1107],[1910,1092],[1897,1090],[1895,1089],[1894,1089],[1893,1089],[1892,1089],[1891,1089],[1887,1089],[1871,1088],[1851,1086],[1845,1085],[1846,1085],[1847,1085],[1848,1085],[1849,1084],[1850,1083],[1852,1082],[1854,1081],[1854,1080],[1855,1080],[1856,1080],[1857,1079],[1859,1078],[1860,1077],[1861,1077]],"dx":[-435,477],"dy":[-435,477],"length":809.7663761234832,"timing":[62.69999980926514,70.5,85.09999990463257,102,118.59999990463257,135.19999980926514,151.89999961853027,168.7999997138977,185.2999997138977,201.89999961853027,218.5,235.39999961853027,252.09999990463257,268.59999990463257,285.2999997138977,302,318.59999990463257,335.3999996185303,352.09999990463257,368.59999990463257,385.2999997138977,402,418.69999980926514,435.59999990463257,452.8999996185303,468.69999980926514,485.3999996185303,502.19999980926514,518.7999997138977,535.5,552.1999998092651,569,585.5,602.1999998092651,618.8999996185303,635.5,652.1999998092651,669.0999999046326,686.2999997138977,702.2999997138977,719,735.6999998092651,790.2999997138977,806.3999996185303,819.0999999046326,835.7999997138977,852.3999996185303,869.0999999046326,885.7999997138977,1278.5999999046326,1294.3999996185303,1310.2999997138977,1326.2999997138977,1336.0999999046326,1353,1369.5,1386.1999998092651,1402.8999996185303,1453,1469.5999999046326,1486.2999997138977,1503,1519.5999999046326]},{"start":[1860,1077],"end":[548,1161],"points":[[1860,1077],[1859,1077],[1856,1076],[1850,1075],[1843,1074],[1834,1073],[1828,1072],[1825,1072],[1821,1070],[1816,1068],[1801,1066],[1769,1066],[1713,1063],[1637,1062],[1550,1062],[1452,1061],[1345,1061],[1229,1061],[1125,1061],[1044,1064],[968,1072],[931,1083],[883,1091],[832,1096],[776,1106],[734,1115],[698,1126],[673,1138],[649,1150],[624,1160],[610,1167],[599,1171],[591,1175],[588,1175],[583,1175],[578,1175],[577,1175],[576,1175],[573,1173],[567,1171],[560,1166],[552,1163],[549,1162],[549,1161],[548,1161]],"dx":[-1312,84],"dy":[-1312,84],"length":1335.0308662124423,"timing":[66.90000009536743,77.40000009536743,94.10000038146973,110.80000019073486,127.40000009536743,144.2000002861023,160.80000019073486,177.5,194.40000009536743,211.7000002861023,227.60000038146973,244.2000002861023,260.90000009536743,277.6000003814697,294.2000002861023,310.90000009536743,327.6000003814697,344.2000002861023,360.90000009536743,377.6000003814697,394.40000009536743,411,427.6000003814697,444.40000009536743,461,477.7000002861023,494.40000009536743,511.1000003814697,527.8000001907349,544.5,561.4000000953674,577.8000001907349,594.6000003814697,611.2000002861023,628,644.5,661.2000002861023,711.4000000953674,728,744.7000002861023,761.3000001907349,778,794.7000002861023,811.3000001907349,842.7000002861023]},{"start":[553,1158],"end":[82,1044],"points":[[553,1158],[556,1157],[563,1153],[574,1147],[590,1142],[614,1133],[645,1125],[668,1118],[683,1113],[693,1108],[703,1102],[710,1098],[722,1092],[737,1086],[759,1075],[771,1059],[773,1042],[763,1027],[739,1015],[698,1008],[654,1008],[602,1011],[516,1019],[465,1029],[429,1040],[393,1054],[362,1066],[333,1071],[294,1072],[246,1072],[189,1069],[130,1062],[81,1058],[44,1052],[30,1051],[31,1051],[32,1050],[40,1050],[53,1050],[64,1048],[69,1046],[71,1045],[74,1045],[77,1045],[80,1045],[82,1044]],"dx":[-471,-114],"dy":[-471,-114],"length":1077.6696000453503,"timing":[0.09999990463256836,16.699999809265137,33.5,50.09999990463257,66.7999997138977,83.59999990463257,100.19999980926514,116.7999997138977,133.5,150.19999980926514,166.89999961853027,183.5,200.19999980926514,216.89999961853027,233.59999990463257,250.2999997138977,267,283.59999990463257,300.3999996185303,317.19999980926514,333.69999980926514,350.3999996185303,367.09999990463257,383.7999997138977,400.3999996185303,417.09999990463257,433.69999980926514,450.3999996185303,467.09999990463257,483.7999997138977,500.5,517.1999998092651,533.8999996185303,550.6999998092651,567.1999998092651,743.1999998092651,750.7999997138977,768.3999996185303,784.0999999046326,800.6999998092651,817.3999996185303,834.0999999046326,850.6999998092651,867.7999997138977,884.1999998092651,900.8999996185303]},{"start":[83,1044],"end":[440,744],"points":[[83,1044],[84,1043],[88,1041],[93,1039],[104,1036],[118,1034],[134,1032],[144,1032],[147,1030],[148,1030],[150,1029],[154,1028],[165,1025],[186,1018],[209,1007],[236,994],[258,979],[286,956],[317,930],[348,894],[384,852],[398,824],[406,806],[411,792],[416,784],[420,776],[422,770],[424,765],[424,761],[424,758],[424,756],[427,753],[430,750],[432,749],[433,749],[433,748],[436,747],[438,745],[440,744]],"dx":[357,-300],"dy":[357,-300],"length":494.95633270997234,"timing":[1.5999999046325684,18.300000190734863,34.90000009536743,51.59999990463257,68.30000019073486,84.90000009536743,101.59999990463257,118.30000019073486,134.90000009536743,158.69999980926514,174.69999980926514,185,201.59999990463257,218.30000019073486,235,251.69999980926514,268.30000019073486,285.09999990463257,301.80000019073486,318.40000009536743,335.09999990463257,351.90000009536743,368.5,385.09999990463257,401.90000009536743,418.5,435.19999980926514,452,468.59999990463257,485.19999980926514,501.90000009536743,518.5999999046326,535.3000001907349,551.9000000953674,607.0999999046326,618.6999998092651,635.4000000953674,652.0999999046326,668.6999998092651]},{"start":[442,751],"end":[2048,323],"points":[[442,751],[444,754],[446,756],[450,759],[456,763],[463,768],[472,774],[484,782],[505,796],[517,803],[530,810],[545,816],[566,823],[596,830],[642,832],[702,832],[779,822],[868,805],[973,776],[1100,736],[1316,654],[1473,576],[1622,496],[1761,432],[1882,382],[1983,345],[2064,313],[2114,288],[2146,270],[2159,261],[2163,255],[2166,249],[2168,246],[2170,244],[2173,242],[2176,240],[2175,240],[2172,241],[2161,246],[2143,259],[2125,273],[2117,278],[2112,282],[2106,286],[2099,290],[2091,296],[2080,302],[2068,310],[2059,316],[2053,320],[2050,321],[2049,321],[2049,322],[2049,323],[2048,323]],"dx":[1606,-428],"dy":[1606,-428],"length":2036.4313241741156,"timing":[10.5,27.300000190734863,43.90000009536743,60.59999990463257,77.2000002861023,93.90000009536743,110.59999990463257,127.40000009536743,143.90000009536743,160.7000002861023,177.30000019073486,194,210.7000002861023,227.40000009536743,244.09999990463257,260.7000002861023,277.5,294.09999990463257,310.7000002861023,327.40000009536743,344.09999990463257,360.80000019073486,377.59999990463257,394.2000002861023,410.90000009536743,427.5,444.2000002861023,460.90000009536743,477.5,494.30000019073486,510.90000009536743,527.5999999046326,544.3000001907349,561,577.7000002861023,594.5,663.8000001907349,677.7000002861023,694.4000000953674,711.0999999046326,727.8000001907349,744.4000000953674,761.2000002861023,777.8000001907349,794.5,811.2000002861023,828,844.5999999046326,861.2000002861023,877.9000000953674,894.5999999046326,911.5999999046326,928,1015.5999999046326,1072]},{"start":[2047,325],"end":[1028,285],"points":[[2047,325],[2045,326],[2041,329],[2029,335],[2013,345],[1989,360],[1927,387],[1871,406],[1794,421],[1709,428],[1618,428],[1527,426],[1438,413],[1358,397],[1296,378],[1248,361],[1202,346],[1156,333],[1100,318],[1065,308],[1048,303],[1040,299],[1039,298],[1039,297],[1038,296],[1038,295],[1037,293],[1034,290],[1028,285]],"dx":[-1019,-40],"dy":[-1019,-40],"length":1063.9770961940658,"timing":[150.90000009536743,158.59999990463257,172,188.7000002861023,205.40000009536743,222.09999990463257,238.7000002861023,255.40000009536743,272.09999990463257,288.80000019073486,305.5,322.2000002861023,338.80000019073486,355.5,372.30000019073486,388.90000009536743,405.59999990463257,422.2000002861023,438.90000009536743,455.59999990463257,472.30000019073486,489,505.7000002861023,526.5999999046326,572.4000000953674,589.0999999046326,605.7000002861023,622.4000000953674,639.0999999046326]},{"start":[1028,291],"end":[1764,936],"points":[[1028,291],[1028,293],[1028,297],[1029,300],[1031,305],[1034,310],[1035,313],[1036,315],[1037,316],[1037,318],[1037,321],[1040,330],[1046,341],[1056,359],[1073,379],[1094,402],[1121,430],[1161,474],[1206,520],[1254,571],[1299,616],[1341,655],[1370,682],[1400,708],[1415,720],[1430,731],[1443,738],[1454,746],[1467,754],[1487,763],[1519,778],[1556,795],[1593,811],[1610,819],[1615,822],[1617,822],[1618,823],[1619,824],[1620,825],[1621,826],[1623,828],[1628,833],[1635,840],[1641,847],[1647,853],[1654,859],[1661,869],[1666,875],[1670,881],[1673,886],[1676,889],[1680,892],[1687,896],[1697,902],[1707,908],[1715,912],[1720,914],[1723,915],[1729,916],[1732,917],[1736,918],[1741,920],[1744,922],[1747,924],[1750,926],[1752,926],[1754,928],[1756,928],[1757,929],[1758,930],[1760,932],[1761,933],[1762,933],[1762,934],[1762,935],[1763,936],[1764,936]],"dx":[736,645],"dy":[736,645],"length":1004.0233820890318,"timing":[8.199999809265137,24.899999618530273,41.59999990463257,58.19999980926514,74.89999961853027,91.59999990463257,108.2999997138977,125,141.59999990463257,158.39999961853027,175.09999990463257,191.59999990463257,208.2999997138977,225,241.69999980926514,258.3999996185303,275.09999990463257,291.69999980926514,308.3999996185303,325.09999990463257,341.7999997138977,358.5,375.19999980926514,391.7999997138977,408.5,425.19999980926514,442,458.5,475.19999980926514,492,508.69999980926514,525.2999997138977,542,558.6999998092651,575.2999997138977,592.0999999046326,608.6999998092651,625.3999996185303,642.0999999046326,658.7999997138977,675.3999996185303,692.0999999046326,708.7999997138977,725.3999996185303,742.1999998092651,758.7999997138977,775.5,792.1999998092651,808.7999997138977,825.5999999046326,842.2999997138977,859,875.6999998092651,892.2999997138977,908.8999996185303,925.5999999046326,942.3999996185303,959.0999999046326,975.6999998092651,992.3999996185303,1009,1025.7999997138977,1042.5,1059.1999998092651,1075.6999998092651,1092.5,1109.0999999046326,1125.7999997138977,1142.5,1159.1999998092651,1175.7999997138977,1192.5,1223.3999996185303,1231.3999996185303,1247.5,1271.5,1327.5]},{"start":[1763,933],"end":[914,35],"points":[[1763,933],[1762,933],[1762,932],[1761,930],[1760,928],[1755,925],[1749,920],[1743,917],[1739,916],[1736,914],[1733,913],[1727,909],[1717,902],[1703,893],[1684,879],[1647,853],[1583,809],[1479,730],[1370,639],[1261,537],[1159,441],[1038,324],[993,272],[970,241],[969,228],[976,218],[985,204],[996,189],[1002,175],[1003,163],[998,147],[983,128],[969,111],[964,95],[962,90],[960,84],[957,79],[950,73],[942,65],[931,57],[922,52],[919,50],[919,49],[918,48],[918,47],[917,45],[916,42],[915,40],[914,38],[914,37],[914,36],[914,35]],"dx":[-849,-898],"dy":[-849,-898],"length":1307.2738081815178,"timing":[1.200000286102295,17.90000009536743,34.5,51.200000286102295,67.90000009536743,84.60000038146973,101.2000002861023,118,134.60000038146973,151.30000019073486,167.90000009536743,184.60000038146973,201.2000002861023,218.10000038146973,234.7000002861023,251.40000009536743,268.1000003814697,284.80000019073486,301.40000009536743,318,334.7000002861023,351.40000009536743,368,384.7000002861023,401.40000009536743,418.2000002861023,434.80000019073486,451.6000003814697,468.2000002861023,484.80000019073486,501.6000003814697,518.4000000953674,535,551.6000003814697,568.3000001907349,584.9000000953674,601.7000002861023,618.3000001907349,635,651.7000002861023,668.4000000953674,685.1000003814697,759.1000003814697,775.1000003814697,785.1000003814697,801.8000001907349,818.5,835.2000002861023,851.9000000953674,868.5,885.3000001907349,902]},{"start":[932,72],"end":[238,1215],"points":[[932,72],[940,86],[950,102],[964,121],[977,141],[992,164],[998,177],[1002,185],[1006,193],[1014,205],[1030,226],[1048,250],[1066,272],[1075,284],[1079,292],[1078,299],[1059,335],[1034,384],[995,444],[931,510],[849,576],[772,636],[690,697],[612,762],[537,816],[464,859],[413,892],[376,919],[342,946],[330,959],[319,970],[311,981],[302,992],[296,1005],[290,1016],[283,1027],[269,1044],[244,1070],[238,1083],[236,1092],[235,1107],[235,1115],[235,1119],[235,1125],[237,1133],[238,1142],[239,1151],[241,1156],[242,1158],[243,1158],[243,1159],[243,1160],[244,1161],[244,1163],[246,1166],[246,1169],[247,1174],[247,1176],[247,1178],[247,1180],[246,1185],[244,1192],[241,1201],[238,1210],[238,1211],[238,1212],[238,1213],[238,1214],[238,1215]],"dx":[-694,1143],"dy":[-694,1143],"length":1575.3671273185564,"timing":[5.300000190734863,22,38.59999990463257,55.30000019073486,72,88.7000002861023,105.40000009536743,122,138.7000002861023,155.40000009536743,172.09999990463257,188.7000002861023,205.59999990463257,222.2000002861023,238.80000019073486,255.40000009536743,272.2000002861023,288.80000019073486,305.5,322.09999990463257,338.90000009536743,355.59999990463257,372.2000002861023,388.90000009536743,405.59999990463257,422.2000002861023,439,455.7000002861023,472.40000009536743,489,505.59999990463257,522.3000001907349,539,555.8000001907349,572.4000000953674,589.0999999046326,605.8000001907349,622.5,639.2000002861023,655.9000000953674,672.5,689.2000002861023,705.9000000953674,722.5,739.0999999046326,755.9000000953674,772.5999999046326,789.3000001907349,805.9000000953674,822.5999999046326,848.2000002861023,872.0999999046326,880.2000002861023,889.3000001907349,906,922.7000002861023,939.4000000953674,956,972.7000002861023,989.4000000953674,1006.0999999046326,1022.7000002861023,1039.4000000953674,1056.0999999046326,1120.4000000953674,1136.3000001907349,1152.0999999046326,1168.0999999046326,1176.0999999046326]},{"start":[427,1147],"end":[1782,410],"points":[[427,1147],[473,1132],[525,1116],[573,1096],[618,1076],[666,1050],[735,1008],[779,983],[814,964],[841,946],[860,936],[876,928],[892,920],[913,911],[947,897],[999,870],[1083,817],[1222,728],[1317,673],[1414,621],[1512,569],[1596,529],[1669,493],[1736,459],[1802,424],[1854,390],[1890,365],[1906,348],[1914,335],[1923,322],[1926,317],[1928,312],[1928,311],[1927,311],[1924,311],[1916,314],[1903,319],[1890,328],[1882,335],[1873,345],[1870,351],[1868,353],[1865,356],[1857,362],[1841,372],[1820,389],[1806,399],[1802,402],[1801,403],[1800,403],[1799,403],[1797,403],[1795,403],[1792,403],[1789,404],[1788,406],[1784,408],[1783,410],[1782,410]],"dx":[1355,-737],"dy":[1355,-737],"length":1911.5106221350954,"timing":[0.09999990463256836,16.700000286102295,33.40000009536743,50.09999990463257,66.80000019073486,83.40000009536743,100.09999990463257,116.80000019073486,133.40000009536743,150.2000002861023,166.90000009536743,183.5,200.2000002861023,216.80000019073486,233.5,250.30000019073486,266.90000009536743,283.59999990463257,300.30000019073486,317,333.59999990463257,350.40000009536743,367,383.59999990463257,400.30000019073486,417,433.7000002861023,450.40000009536743,467.09999990463257,483.7000002861023,500.40000009536743,517.0999999046326,533.8000001907349,587.8000001907349,600.5,617.2000002861023,633.9000000953674,650.5,667.4000000953674,683.9000000953674,700.5999999046326,717.2000002861023,733.9000000953674,750.5999999046326,767.4000000953674,784,800.7000002861023,817.3000001907349,834,850.7000002861023,883.8000001907349,891.7000002861023,900.7000002861023,917.4000000953674,934.0999999046326,950.8000001907349,967.5,984.0999999046326,1000.9000000953674]},{"start":[1781,411],"end":[1182,849],"points":[[1781,411],[1780,412],[1779,413],[1777,414],[1772,418],[1762,424],[1747,435],[1738,441],[1730,448],[1716,456],[1685,475],[1642,503],[1595,533],[1554,560],[1514,583],[1474,608],[1434,640],[1403,668],[1370,707],[1360,722],[1346,737],[1327,756],[1305,776],[1283,790],[1270,798],[1261,802],[1256,805],[1254,806],[1252,807],[1249,808],[1247,809],[1246,809],[1245,810],[1243,811],[1238,813],[1231,817],[1223,821],[1216,824],[1210,828],[1204,831],[1197,836],[1189,842],[1186,844],[1184,846],[1183,847],[1182,848],[1182,849]],"dx":[-599,438],"dy":[-599,438],"length":748.7029608343253,"timing":[56.69999980926514,80.40000009536743,88.40000009536743,102.59999990463257,119.19999980926514,135.90000009536743,152.5,169.19999980926514,185.90000009536743,202.59999990463257,219.2999997138977,236,252.69999980926514,269.40000009536743,286,302.69999980926514,319.2999997138977,336.09999990463257,352.7999997138977,369.5,386.09999990463257,402.7999997138977,419.40000009536743,436.19999980926514,452.7999997138977,469.5,486.09999990463257,502.90000009536743,519.5999999046326,536.2999997138977,552.9000000953674,569.5999999046326,586.2999997138977,602.9000000953674,619.5999999046326,636.2999997138977,653,669.7999997138977,686.4000000953674,703.0999999046326,719.7999997138977,736.5,753,769.6999998092651,786.5,803.1999998092651,832.5999999046326]},{"start":[1197,833],"end":[1159,194],"points":[[1197,833],[1201,829],[1209,825],[1216,820],[1223,814],[1227,810],[1231,807],[1235,804],[1239,800],[1245,795],[1250,791],[1251,789],[1251,788],[1251,786],[1251,777],[1250,757],[1237,709],[1210,643],[1170,568],[1153,511],[1151,469],[1155,417],[1163,388],[1173,363],[1180,343],[1185,327],[1189,309],[1190,294],[1190,282],[1190,274],[1190,267],[1190,260],[1190,257],[1190,252],[1190,250],[1188,248],[1185,245],[1182,241],[1177,234],[1172,225],[1167,214],[1163,207],[1162,204],[1161,202],[1161,199],[1160,195],[1160,194],[1159,194]],"dx":[-38,-639],"dy":[-38,-639],"length":700.0017645668814,"timing":[16.699999809265137,33.5,50,66.69999980926514,83.39999961853027,100.09999990463257,116.7999997138977,133.5,150.19999980926514,166.89999961853027,183.5,200.19999980926514,223.19999980926514,233.5,250.19999980926514,266.7999997138977,283.69999980926514,300.2999997138977,316.8999996185303,333.59999990463257,350.2999997138977,367,383.59999990463257,400.2999997138977,417.09999990463257,433.69999980926514,450.3999996185303,467,483.69999980926514,500.3999996185303,517.0999999046326,533.7999997138977,550.5,567.0999999046326,583.7999997138977,600.5999999046326,617.1999998092651,633.8999996185303,650.5,667.1999998092651,683.8999996185303,700.5999999046326,717.1999998092651,733.8999996185303,750.6999998092651,767.2999997138977,784,903.1999998092651]},{"start":[1166,343],"end":[2047,775],"points":[[1166,343],[1165,363],[1160,391],[1157,408],[1155,426],[1152,444],[1149,459],[1149,474],[1147,487],[1147,502],[1147,513],[1147,519],[1150,524],[1156,532],[1180,550],[1227,580],[1281,610],[1346,638],[1413,659],[1477,667],[1543,673],[1606,679],[1649,682],[1686,684],[1719,684],[1753,685],[1805,687],[1836,692],[1866,697],[1887,703],[1905,706],[1920,707],[1932,708],[1942,709],[1951,711],[1957,712],[1961,713],[1961,714],[1962,714],[1962,715],[1965,719],[1970,724],[1974,730],[1977,734],[1978,737],[1980,739],[1981,740],[1985,745],[1989,748],[1994,752],[1998,754],[2001,755],[2008,757],[2019,758],[2028,758],[2036,759],[2039,759],[2041,760],[2044,761],[2046,762],[2047,763],[2048,763],[2049,763],[2049,764],[2049,765],[2049,766],[2049,767],[2049,768],[2049,769],[2049,770],[2049,771],[2048,771],[2048,772],[2048,773],[2048,774],[2047,774],[2047,775]],"dx":[881,432],"dy":[881,432],"length":1157.1753759396042,"timing":[4.699999809265137,21.399999618530273,38,54.69999980926514,71.39999961853027,87.89999961853027,104.69999980926514,121.2999997138977,138,154.69999980926514,171.39999961853027,188.09999990463257,204.69999980926514,221.39999961853027,238,254.7999997138977,271.3999996185303,288.19999980926514,304.7999997138977,321.59999990463257,338.19999980926514,354.7999997138977,371.5,388.19999980926514,404.8999996185303,421.59999990463257,438.19999980926514,454.8999996185303,471.59999990463257,488.3999996185303,504.8999996185303,521.6999998092651,538.2999997138977,555,571.6999998092651,588.3999996185303,605.0999999046326,638.0999999046326,646.0999999046326,655.0999999046326,671.7999997138977,688.5,705.1999998092651,721.8999996185303,738.5,755.0999999046326,771.7999997138977,788.5,805.1999998092651,822,838.5999999046326,855.2999997138977,872,888.5999999046326,905.2999997138977,922.0999999046326,938.6999998092651,955.2999997138977,972,988.6999998092651,1005.3999996185303,1022.0999999046326,1094.0999999046326,1188.8999996185303,1214.1999998092651,1230.0999999046326,1246,1255.5999999046326,1278,1302,1326.0999999046326,1342,1358,1430.2999997138977,1454.1999998092651,1462,1505.7999997138977]},{"start":[2034,776],"end":[1849,522],"points":[[2034,776],[2029,776],[2021,776],[2015,776],[2010,776],[2007,776],[2003,775],[1998,773],[1982,771],[1968,771],[1961,771],[1959,771],[1956,769],[1949,763],[1933,748],[1898,716],[1864,678],[1852,656],[1847,628],[1847,613],[1849,602],[1852,593],[1853,586],[1855,579],[1855,575],[1855,572],[1855,570],[1855,568],[1855,565],[1854,561],[1852,556],[1852,555],[1851,554],[1851,552],[1851,550],[1850,539],[1849,529],[1849,523],[1849,522]],"dx":[-185,-254],"dy":[-185,-254],"length":370.3423364845355,"timing":[0.09999990463256836,16.699999809265137,33.40000009536743,50.09999990463257,66.69999980926514,83.5,100.19999980926514,116.90000009536743,133.40000009536743,150.09999990463257,166.90000009536743,183.59999990463257,233.59999990463257,250.30000019073486,266.90000009536743,283.59999990463257,300.40000009536743,317.09999990463257,333.69999980926514,350.40000009536743,367,383.80000019073486,400.40000009536743,417.09999990463257,433.69999980926514,450.40000009536743,467.09999990463257,483.80000019073486,500.5,517.1999998092651,533.8000001907349,550.5,581.4000000953674,589.3000001907349,600.5999999046326,617.3000001907349,633.9000000953674,650.5,667.3000001907349]},{"start":[1883,202],"end":[464,736],"points":[[1883,202],[1883,203],[1883,204],[1883,205],[1882,206],[1881,208],[1880,211],[1878,215],[1876,219],[1873,225],[1868,233],[1863,239],[1850,246],[1816,262],[1755,276],[1669,285],[1557,289],[1440,294],[1323,301],[1218,314],[1117,332],[980,367],[900,389],[841,412],[800,434],[774,451],[756,467],[737,482],[713,499],[686,516],[655,529],[632,539],[614,549],[593,559],[581,564],[573,569],[569,571],[565,575],[561,578],[557,583],[552,589],[547,594],[542,598],[539,601],[538,603],[533,610],[529,615],[524,619],[518,624],[513,629],[508,635],[503,641],[498,645],[494,648],[486,651],[467,659],[459,662],[450,672],[447,676],[447,679],[447,683],[448,688],[450,695],[452,702],[454,711],[457,721],[461,730],[462,734],[463,736],[464,736]],"dx":[-1419,534],"dy":[-1419,534],"length":1631.0560601103352,"timing":[20.5,28.300000190734863,44.40000009536743,60.5,72.80000019073486,89.5,106.19999980926514,122.80000019073486,139.5,156.19999980926514,172.90000009536743,189.69999980926514,206.19999980926514,223,239.59999990463257,256.30000019073486,273,289.59999990463257,306.30000019073486,323,339.69999980926514,356.40000009536743,373,389.69999980926514,406.5,423.09999990463257,439.80000019073486,456.5,473.19999980926514,489.90000009536743,506.59999990463257,523.3000001907349,539.9000000953674,556.5,573.1999998092651,590,606.5999999046326,623.1999998092651,640,656.6999998092651,673.3000001907349,690,706.6999998092651,723.4000000953674,740,756.6999998092651,773.4000000953674,790.0999999046326,806.8000001907349,823.5,840.1999998092651,856.8000001907349,873.5,890.0999999046326,906.8000001907349,923.5,940.1999998092651,956.9000000953674,973.6999998092651,990.3000001907349,1007,1023.5999999046326,1040.4000000953674,1057,1073.6999998092651,1090.4000000953674,1107,1123.6999998092651,1140.4000000953674,1157.0999999046326]},{"start":[481,714],"end":[389,64],"points":[[481,714],[486,712],[492,709],[501,704],[512,698],[525,693],[537,688],[554,680],[565,677],[574,673],[585,672],[599,669],[616,665],[635,655],[646,643],[648,623],[644,593],[629,558],[597,502],[556,440],[486,349],[407,252],[344,174],[307,124],[285,91],[279,70],[278,57],[283,50],[291,46],[297,42],[303,39],[305,38],[307,36],[310,35],[314,33],[321,33],[334,33],[347,40],[359,47],[366,54],[371,59],[375,61],[379,62],[382,62],[384,62],[386,63],[388,64],[389,64]],"dx":[-92,-650],"dy":[-92,-650],"length":1015.510184829618,"timing":[3.8999996185302734,20.399999618530273,37.19999980926514,53.799999713897705,70.5,87.19999980926514,103.89999961853027,120.59999990463257,137.2999997138977,153.89999961853027,170.5,187.2999997138977,203.89999961853027,220.69999980926514,237.2999997138977,254,270.7999997138977,287.3999996185303,304.09999990463257,320.69999980926514,337.3999996185303,354.19999980926514,370.8999996185303,387.5,404.09999990463257,420.7999997138977,437.5,454.19999980926514,470.8999996185303,487.59999990463257,504.19999980926514,520.8999996185303,537.5999999046326,554.2999997138977,570.8999996185303,587.5999999046326,604.3999996185303,621,637.5999999046326,654.2999997138977,671,687.6999998092651,704.2999997138977,721.0999999046326,737.7999997138977,754.5,771.0999999046326,864.2999997138977]},{"start":[389,68],"end":[1674,296],"points":[[389,68],[389,69],[390,72],[396,75],[430,96],[512,139],[636,198],[786,264],[927,310],[1058,341],[1161,353],[1301,356],[1379,356],[1439,354],[1482,354],[1504,354],[1516,354],[1524,353],[1530,353],[1538,353],[1550,353],[1564,353],[1580,353],[1611,352],[1642,352],[1676,352],[1695,352],[1702,352],[1703,351],[1703,349],[1698,344],[1692,338],[1689,333],[1689,330],[1689,327],[1689,323],[1687,319],[1685,313],[1681,306],[1676,299],[1674,296]],"dx":[1285,228],"dy":[1285,228],"length":1438.2629494651567,"timing":[79.7999997138977,119.59999990463257,207.69999980926514,218.2999997138977,235,251.59999990463257,268.40000009536743,285,301.69999980926514,318.40000009536743,335.09999990463257,351.69999980926514,368.40000009536743,385.09999990463257,401.7999997138977,418.59999990463257,435.19999980926514,451.90000009536743,468.5,485.2999997138977,501.90000009536743,518.5999999046326,535.4000000953674,551.9000000953674,568.5999999046326,585.2999997138977,601.9000000953674,618.5999999046326,635.2999997138977,652,668.6999998092651,685.4000000953674,702,718.6999998092651,735.5,752.0999999046326,768.7999997138977,785.4000000953674,802.0999999046326,818.7999997138977,835.5]},{"start":[1651,352],"end":[358,917],"points":[[1651,352],[1643,362],[1636,372],[1628,382],[1621,393],[1614,403],[1608,413],[1604,420],[1601,429],[1597,435],[1591,445],[1587,448],[1575,456],[1550,470],[1499,496],[1440,533],[1377,571],[1302,612],[1224,648],[1151,682],[1084,716],[1038,740],[983,770],[947,791],[909,811],[868,836],[834,858],[805,872],[783,880],[764,885],[743,891],[715,897],[683,904],[629,914],[594,919],[563,923],[527,926],[491,928],[463,931],[445,935],[435,935],[429,936],[424,936],[415,936],[401,936],[391,936],[389,936],[388,936],[387,936],[382,931],[373,926],[364,921],[359,917],[358,917]],"dx":[-1293,565],"dy":[-1293,565],"length":1466.3491549930748,"timing":[0,16.800000190734863,33.40000009536743,50,66.69999980926514,83.40000009536743,100,116.69999980926514,133.5,150.19999980926514,166.80000019073486,183.5,200.19999980926514,216.80000019073486,233.5,250.19999980926514,266.90000009536743,283.5,300.19999980926514,316.90000009536743,333.59999990463257,350.19999980926514,366.90000009536743,383.59999990463257,400.30000019073486,417,433.69999980926514,450.30000019073486,467,483.69999980926514,500.40000009536743,517.0999999046326,533.8000001907349,550.4000000953674,567.0999999046326,583.8000001907349,600.5,617.0999999046326,633.8000001907349,650.5999999046326,667.1999998092651,683.9000000953674,700.5999999046326,717.3000001907349,733.9000000953674,750.5999999046326,767.3000001907349,783.9000000953674,834.0999999046326,850.6999998092651,867.4000000953674,884,900.6999998092651,917.3000001907349]},{"start":[387,910],"end":[1383,1204],"points":[[387,910],[418,902],[464,900],[509,898],[533,897],[562,893],[597,886],[646,875],[712,860],[791,843],[862,827],[920,811],[972,795],[1024,781],[1084,771],[1168,772],[1198,782],[1209,789],[1214,801],[1221,820],[1230,845],[1243,871],[1255,896],[1265,920],[1271,935],[1279,949],[1288,961],[1300,976],[1305,983],[1309,990],[1314,999],[1319,1008],[1326,1019],[1333,1031],[1337,1041],[1339,1048],[1339,1055],[1339,1060],[1339,1065],[1339,1072],[1339,1079],[1340,1089],[1342,1101],[1345,1114],[1352,1135],[1363,1160],[1372,1186],[1380,1201],[1386,1208],[1388,1208],[1389,1202],[1391,1195],[1392,1194],[1392,1193],[1391,1194],[1390,1196],[1387,1201],[1385,1205],[1383,1205],[1383,1204]],"dx":[996,294],"dy":[996,294],"length":1337.317266112048,"timing":[3.5,20.199999809265137,36.799999713897705,53.59999990463257,70.19999980926514,86.7999997138977,103.5,120.19999980926514,136.90000009536743,153.59999990463257,170.19999980926514,186.90000009536743,203.59999990463257,220.19999980926514,237,253.59999990463257,270.2999997138977,287,303.69999980926514,320.2999997138977,337,353.69999980926514,370.5,387.09999990463257,403.69999980926514,420.40000009536743,437.19999980926514,453.90000009536743,470.5,487.19999980926514,503.7999997138977,520.5999999046326,537.1999998092651,554,570.6999998092651,587.2999997138977,603.9000000953674,620.5999999046326,637.2999997138977,654,670.5999999046326,687.2999997138977,704,720.7999997138977,737.4000000953674,754.0999999046326,770.6999998092651,787.4000000953674,804,820.7999997138977,837.5,854.0999999046326,870.7999997138977,933.7999997138977,1038,1054.2999997138977,1071,1087.6999998092651,1104.4000000953674,1213.6999998092651]},{"start":[1382,1196],"end":[190,574],"points":[[1382,1196],[1382,1195],[1381,1194],[1380,1191],[1378,1187],[1377,1180],[1376,1174],[1376,1170],[1376,1164],[1376,1160],[1374,1155],[1371,1150],[1371,1146],[1370,1138],[1369,1121],[1364,1099],[1353,1073],[1336,1054],[1295,1030],[1149,978],[1001,938],[813,883],[629,833],[502,804],[425,783],[399,772],[394,769],[394,768],[395,767],[395,764],[394,758],[376,739],[358,724],[334,708],[314,694],[305,685],[300,679],[297,674],[291,668],[281,659],[266,649],[249,636],[242,630],[241,627],[241,626],[240,625],[239,624],[237,621],[233,616],[225,608],[218,599],[215,595],[214,594],[213,594],[212,593],[210,592],[210,591],[207,590],[206,588],[203,586],[199,582],[193,577],[190,575],[190,574]],"dx":[-1192,-622],"dy":[-1192,-622],"length":1430.4652780469253,"timing":[2.5999999046325684,19.300000190734863,36,52.700000286102295,69.30000019073486,86,102.7000002861023,119.30000019073486,136,152.5,169.30000019073486,185.90000009536743,202.59999990463257,219.30000019073486,236,252.80000019073486,269.5,286.09999990463257,302.80000019073486,319.40000009536743,336.09999990463257,352.80000019073486,369.5,386.2000002861023,402.80000019073486,419.5,436.09999990463257,455.5,469.5,486.30000019073486,503.2000002861023,519.5999999046326,536.2000002861023,552.9000000953674,569.5999999046326,586.3000001907349,603,619.7000002861023,636.4000000953674,653,669.7000002861023,686.4000000953674,703,719.7000002861023,736.4000000953674,786.5,803.2000002861023,819.9000000953674,836.5,853.2000002861023,869.9000000953674,886.5999999046326,903.3000001907349,935.5,943.5,959.4000000953674,969.9000000953674,986.7000002861023,1003.3000001907349,1020,1036.5999999046326,1053.3000001907349,1070.0999999046326,1086.7000002861023]},{"start":[1362,708],"end":[973,642],"points":[[1362,708],[1359,708],[1355,707],[1350,706],[1345,704],[1339,703],[1336,702],[1333,701],[1330,701],[1327,701],[1325,701],[1323,701],[1322,702],[1322,702],[1320,703],[1312,706],[1303,708],[1286,709],[1271,710],[1253,708],[1235,705],[1222,704],[1212,703],[1198,702],[1189,702],[1178,702],[1157,702],[1133,702],[1107,697],[1067,680],[1055,672],[1045,665],[1037,659],[1034,658],[1032,657],[1030,657],[1027,657],[1024,657],[1020,655],[1013,651],[1004,647],[999,646],[994,646],[991,646],[990,646],[988,646],[985,646],[983,646],[978,644],[975,643],[974,642],[973,642],[973,642]],"dx":[-389,-66],"dy":[-389,-66],"length":406.38419304764625,"timing":[23,39,55,72,89,105,122,139,155,172,188,204,223,239,255,274,289,306,323,337,354,371,389,405,422,438,454,472,488,505,520,537,556,572,587,605,621,639,655,671,689,705,722,738,755,771,788,804,820,838,855,872,905]},{"start":[1173,660],"end":[467,356],"points":[[1173,660],[1173,660],[1167,661],[1154,662],[1142,662],[1118,662],[1079,655],[1059,648],[946,599],[883,565],[831,536],[777,508],[753,497],[729,487],[719,483],[710,480],[702,478],[693,474],[671,457],[635,432],[592,404],[573,393],[557,382],[550,379],[539,372],[532,369],[524,364],[515,359],[505,352],[497,347],[489,342],[484,341],[478,340],[476,340],[475,340],[475,341],[475,342],[475,344],[475,346],[475,347],[475,348],[475,349],[474,350],[473,351],[471,353],[470,355],[468,356],[468,356],[467,356],[467,356]],"dx":[-706,-304],"dy":[-706,-304],"length":799.5108859291927,"timing":[216,239,264,280,297,314,330,346,363,379,397,413,430,447,463,480,497,514,530,545,564,580,596,613,630,647,664,680,697,713,730,747,764,780,796,814,830,847,863,880,897,913,930,947,963,980,996,1013,1030,1063]},{"start":[467,356],"end":[117,307],"points":[[467,356],[467,356],[466,355],[462,354],[452,353],[434,353],[408,353],[380,354],[364,357],[350,360],[344,360],[344,360],[331,360],[314,360],[291,355],[267,348],[252,342],[226,331],[208,323],[195,317],[178,311],[165,307],[156,306],[144,306],[137,306],[133,306],[128,306],[124,306],[121,306],[119,306],[117,306],[117,306],[117,306],[117,306],[117,307],[117,307],[117,307]],"dx":[-350,-49],"dy":[-350,-49],"length":361.82572405206224,"timing":[316,331,347,364,380,397,414,431,447,464,480,721,747,763,780,797,814,829,847,864,881,896,913,930,947,964,979,997,1013,1030,1047,1063,1081,1097,1114,1130,1163]},{"start":[117,307],"end":[812,643],"points":[[117,307],[130,307],[172,310],[250,331],[416,390],[560,452],[615,478],[677,506],[702,516],[719,523],[732,530],[747,539],[769,558],[792,580],[808,596],[817,605],[824,612],[826,615],[827,616],[827,617],[827,618],[825,620],[824,622],[822,626],[822,628],[820,631],[819,634],[818,636],[817,637],[817,637],[816,638],[815,638],[814,640],[813,641],[812,643],[812,643],[812,643],[812,643]],"dx":[695,336],"dy":[695,336],"length":818.6977669247548,"timing":[275,295,313,329,346,362,379,396,412,429,446,463,479,496,511,529,546,563,579,595,612,628,645,663,679,696,712,729,745,762,778,796,812,829,846,862,879,912]},{"start":[812,643],"end":[1172,731],"points":[[812,643],[815,643],[825,643],[850,643],[909,657],[937,662],[959,665],[986,669],[998,670],[1007,671],[1012,672],[1018,673],[1027,676],[1043,682],[1063,689],[1078,694],[1087,698],[1094,701],[1097,702],[1100,704],[1103,706],[1136,734],[1151,746],[1165,757],[1178,766],[1183,770],[1185,772],[1186,772],[1186,772],[1186,772],[1185,771],[1183,769],[1181,767],[1178,763],[1175,760],[1173,757],[1171,755],[1171,755],[1170,754],[1170,753],[1170,753],[1170,753],[1170,751],[1170,749],[1170,746],[1170,744],[1170,742],[1170,740],[1170,738],[1171,735],[1171,733],[1172,732],[1172,731],[1172,731],[1172,731]],"dx":[360,88],"dy":[360,88],"length":454.34547813185986,"timing":[310,331,346,363,380,397,413,430,447,463,481,497,514,529,547,563,579,597,613,631,646,664,680,696,713,731,747,763,817,898,913,930,946,963,979,996,1014,1031,1047,1063,1081,1098,1113,1129,1146,1164,1180,1197,1213,1230,1247,1264,1279,1296,1329]},{"start":[1172,731],"end":[835,804],"points":[[1172,731],[1165,735],[1156,742],[1139,754],[1123,764],[1102,772],[1067,783],[1007,796],[978,803],[945,809],[924,812],[904,814],[895,814],[887,814],[882,814],[877,814],[873,814],[870,813],[867,813],[866,812],[864,812],[863,811],[862,811],[862,811],[861,810],[859,809],[857,808],[851,806],[847,805],[843,804],[840,804],[837,804],[836,804],[835,804],[835,804]],"dx":[-337,73],"dy":[-337,73],"length":355.8275489272507,"timing":[342,361,379,396,412,428,446,462,479,495,512,528,546,562,579,596,612,629,644,663,679,696,714,729,745,763,778,796,812,828,846,863,879,895,979]},{"start":[836,802],"end":[1292,350],"points":[[836,802],[841,795],[858,770],[890,732],[934,689],[967,662],[1005,638],[1037,623],[1060,616],[1094,605],[1118,593],[1142,574],[1162,553],[1179,529],[1187,516],[1195,503],[1201,492],[1205,486],[1211,479],[1216,473],[1221,467],[1225,460],[1230,451],[1237,436],[1250,411],[1259,399],[1265,389],[1271,381],[1274,377],[1276,376],[1277,373],[1280,369],[1284,363],[1286,359],[1289,354],[1291,352],[1292,351],[1292,350],[1292,350]],"dx":[456,-452],"dy":[456,-452],"length":661.6063226411804,"timing":[269,281,298,314,330,348,365,381,398,415,431,447,465,481,497,514,531,547,564,581,598,614,631,647,665,681,697,715,731,748,764,781,798,814,831,847,864,881,898]},{"start":[1291,350],"end":[943,680],"points":[[1291,350],[1288,352],[1271,362],[1261,367],[1216,394],[1181,415],[1156,431],[1126,454],[1103,475],[1085,493],[1071,510],[1056,528],[1042,551],[1027,574],[1018,589],[1009,603],[1005,611],[998,621],[994,627],[984,638],[980,643],[975,649],[972,651],[971,653],[969,655],[965,661],[959,669],[951,681],[946,688],[941,693],[939,696],[939,696],[938,696],[938,695],[938,694],[938,694],[938,694],[938,694],[939,692],[939,692],[940,689],[940,686],[941,683],[942,682],[942,681],[943,680],[943,680]],"dx":[-348,330],"dy":[-348,330],"length":521.2758752843241,"timing":[248,262,280,295,312,329,345,362,379,396,411,429,445,462,479,495,513,529,545,563,580,596,612,628,645,663,678,696,711,729,746,763,779,797,812,829,846,862,879,895,913,929,945,962,979,995,1013]},{"start":[943,680],"end":[910,582],"points":[[943,680],[942,680],[942,680],[942,680],[942,679],[942,679],[942,677],[940,672],[936,655],[932,634],[929,618],[925,605],[923,594],[920,589],[919,587],[918,586],[917,585],[916,585],[915,584],[914,584],[912,583],[911,582],[910,582],[910,582]],"dx":[-33,-98],"dy":[-33,-98],"length":108.24754542181077,"timing":[149,172,254,294,315,334,349,366,383,399,416,432,450,466,482,500,516,533,548,566,583,600,616,649]},{"start":[115,785],"end":[1231,104],"points":[[115,785],[116,785],[116,784],[119,783],[126,779],[144,765],[187,725],[219,694],[409,525],[561,412],[725,313],[830,261],[969,202],[1027,179],[1080,157],[1115,141],[1139,129],[1158,119],[1170,113],[1184,107],[1196,101],[1215,93],[1235,83],[1262,73],[1280,68],[1292,66],[1302,65],[1307,65],[1309,65],[1309,65],[1308,66],[1303,69],[1300,70],[1298,71],[1294,73],[1285,77],[1272,84],[1258,91],[1247,96],[1238,101],[1233,103],[1231,104],[1231,104],[1231,104]],"dx":[1116,-681],"dy":[1116,-681],"length":1498.4129207573785,"timing":[213,220,230,247,264,281,297,314,332,348,365,381,398,414,431,448,463,481,497,514,531,548,564,582,598,614,631,648,665,681,696,715,731,748,765,781,797,815,831,847,865,882,898,914]},{"start":[1230,104],"end":[950,814],"points":[[1230,104],[1230,104],[1224,114],[1215,128],[1196,161],[1171,206],[1138,273],[1106,346],[1082,413],[1063,469],[1050,518],[1039,566],[1028,617],[1021,651],[1014,687],[1012,707],[1008,727],[1002,745],[993,766],[982,781],[977,787],[972,793],[967,798],[965,800],[961,805],[958,809],[957,811],[956,812],[956,812],[955,813],[955,813],[955,813],[953,813],[952,814],[951,814],[951,814],[950,814],[950,814]],"dx":[-280,710],"dy":[-280,710],"length":774.3775211020123,"timing":[260,274,292,308,325,342,358,375,392,408,425,442,458,474,492,507,525,542,558,576,592,609,625,642,658,676,692,709,725,742,759,775,792,807,825,842,857,892]},{"start":[950,814],"end":[1369,755],"points":[[950,814],[952,807],[957,800],[964,794],[972,789],[988,787],[1009,787],[1049,787],[1094,790],[1148,791],[1185,791],[1225,792],[1250,794],[1257,794],[1266,796],[1273,798],[1276,798],[1278,799],[1279,799],[1282,797],[1287,794],[1291,793],[1295,791],[1298,790],[1300,788],[1301,785],[1302,783],[1305,777],[1309,772],[1315,766],[1321,761],[1328,758],[1334,756],[1341,755],[1349,755],[1359,755],[1364,755],[1367,755],[1369,755],[1369,755]],"dx":[419,-59],"dy":[419,-59],"length":450.4367672541317,"timing":[275,299,315,332,348,364,382,397,415,431,448,465,482,500,515,533,548,565,581,598,614,632,647,665,681,699,715,732,747,765,782,797,815,832,847,865,881,899,914,932]},{"start":[1365,755],"end":[1026,494],"points":[[1365,755],[1364,755],[1364,755],[1364,755],[1364,755],[1363,755],[1363,755],[1361,755],[1359,754],[1355,753],[1349,753],[1341,753],[1326,753],[1312,753],[1288,750],[1268,745],[1256,739],[1226,723],[1192,697],[1162,669],[1128,638],[1095,609],[1081,595],[1074,588],[1067,580],[1064,574],[1061,570],[1059,563],[1059,556],[1059,548],[1057,542],[1056,537],[1055,533],[1053,531],[1052,530],[1051,529],[1049,527],[1048,525],[1047,522],[1046,521],[1045,520],[1044,518],[1043,516],[1042,514],[1040,513],[1040,512],[1039,511],[1038,510],[1038,510],[1038,510],[1038,509],[1037,508],[1036,506],[1035,504],[1033,501],[1030,497],[1028,495],[1028,495],[1027,494],[1026,494]],"dx":[-339,-261],"dy":[-339,-261],"length":459.44187412606993,"timing":[73,80,95,113,129,146,162,179,196,213,229,246,261,279,296,312,329,346,363,380,396,413,429,446,462,479,495,513,529,546,563,579,596,612,629,646,663,679,696,713,729,746,763,779,796,813,830,846,862,879,896,913,930,946,963,979,996,1012,1029,1047]},{"start":[1026,494],"end":[1323,108],"points":[[1026,494],[1031,484],[1040,466],[1056,443],[1078,419],[1113,391],[1135,379],[1155,368],[1180,354],[1204,338],[1223,316],[1234,298],[1245,278],[1251,265],[1259,249],[1265,235],[1274,214],[1282,194],[1288,178],[1291,169],[1293,162],[1294,159],[1294,159],[1294,158],[1295,157],[1297,153],[1304,144],[1308,137],[1311,133],[1314,127],[1317,122],[1319,119],[1320,116],[1321,113],[1322,111],[1322,109],[1323,108],[1323,108],[1323,108],[1323,108]],"dx":[297,-386],"dy":[297,-386],"length":503.3875287319362,"timing":[312,331,346,363,379,398,414,431,447,463,481,497,513,529,547,563,581,597,614,630,647,663,680,1016,1030,1047,1065,1080,1097,1114,1131,1147,1163,1180,1196,1213,1231,1247,1263,1297]},{"start":[1323,108],"end":[123,30],"points":[[1323,108],[1321,109],[1317,111],[1307,116],[1276,127],[1194,151],[1129,167],[977,195],[869,207],[700,217],[584,218],[436,208],[350,182],[268,146],[234,127],[199,111],[182,105],[165,101],[153,98],[146,96],[137,95],[133,95],[125,94],[121,92],[116,88],[111,82],[108,75],[107,68],[107,62],[108,55],[112,49],[117,41],[119,38],[120,34],[121,32],[121,31],[121,30],[121,30],[121,30],[121,30],[122,30],[123,30]],"dx":[-1200,-78],"dy":[-1200,-78],"length":1310.1655506484328,"timing":[233,241,253,269,286,302,319,336,353,369,386,402,420,436,452,469,485,503,519,536,552,570,587,603,619,635,653,670,686,702,718,736,753,770,786,803,820,837,898,930,953,985]},{"start":[123,30],"end":[1037,275],"points":[[123,30],[123,30],[124,30],[125,30],[126,30],[127,31],[128,31],[129,31],[131,32],[134,32],[137,33],[143,35],[155,38],[181,44],[233,57],[302,83],[409,128],[537,182],[659,237],[736,268],[812,298],[849,310],[887,320],[907,324],[928,325],[944,326],[955,326],[974,326],[987,329],[994,330],[1000,331],[1004,331],[1005,325],[1006,316],[1007,303],[1008,297],[1010,291],[1012,288],[1014,287],[1017,286],[1020,285],[1023,284],[1025,283],[1027,282],[1029,281],[1033,278],[1036,277],[1037,275],[1037,275]],"dx":[914,245],"dy":[914,245],"length":1010.2220034136019,"timing":[90,97,110,127,144,163,178,193,210,227,244,261,276,292,310,327,344,361,377,394,410,428,444,460,477,493,510,527,544,561,577,593,610,627,644,660,676,694,711,726,744,760,777,794,811,827,844,861,927]},{"start":[1037,275],"end":[475,28],"points":[[1037,275],[1037,275],[1037,275],[1036,276],[1032,277],[1028,279],[1021,283],[1013,286],[1000,292],[972,301],[935,311],[906,315],[886,316],[861,316],[846,308],[822,286],[751,223],[701,175],[669,145],[618,95],[573,39],[565,26],[555,12],[547,3],[532,1],[517,12],[513,14],[496,23],[489,26],[483,28],[480,28],[477,28],[476,28],[476,28],[475,28]],"dx":[-562,-247],"dy":[-562,-247],"length":707.778119592328,"timing":[126,134,148,163,182,198,214,231,248,264,281,298,314,331,348,365,381,397,414,432,448,463,481,498,764,781,797,815,830,846,865,881,897,914,931]},{"start":[475,29],"end":[1445,822],"points":[[475,29],[475,29],[475,29],[476,29],[476,30],[476,30],[476,30],[477,30],[478,32],[484,38],[518,68],[625,151],[793,266],[996,395],[1177,515],[1279,588],[1348,637],[1429,693],[1466,717],[1487,729],[1510,744],[1524,756],[1534,767],[1540,777],[1544,784],[1547,789],[1550,794],[1553,799],[1555,807],[1556,816],[1556,827],[1556,834],[1551,844],[1550,846],[1546,848],[1545,849],[1541,851],[1538,853],[1535,855],[1531,857],[1526,857],[1521,857],[1516,857],[1512,856],[1508,854],[1505,853],[1501,852],[1494,849],[1486,845],[1477,839],[1468,835],[1464,832],[1458,829],[1454,826],[1452,825],[1449,824],[1448,823],[1446,823],[1445,822],[1445,822],[1445,822]],"dx":[970,793],"dy":[970,793],"length":1496.3629890519276,"timing":[121,129,145,161,177,195,212,229,245,262,277,295,311,328,345,362,378,395,411,428,445,462,478,495,511,529,545,561,579,595,612,628,645,662,679,694,711,728,745,761,778,794,811,828,845,862,878,896,912,929,945,962,978,996,1011,1029,1044,1062,1078,1094,1111]},{"start":[1444,822],"end":[695,289],"points":[[1444,822],[1444,822],[1442,822],[1435,822],[1413,817],[1353,798],[1265,762],[1200,736],[1155,716],[1109,695],[1090,684],[1080,676],[1069,662],[1059,642],[1046,618],[1033,594],[1024,580],[1011,560],[1001,545],[986,526],[974,511],[961,495],[947,477],[932,458],[924,447],[897,415],[883,402],[866,391],[848,382],[842,379],[834,374],[830,370],[827,367],[824,364],[822,363],[819,361],[817,360],[816,358],[816,358],[800,351],[772,336],[748,321],[730,311],[718,303],[709,298],[704,295],[701,293],[700,292],[698,291],[697,290],[696,290],[695,289],[695,289]],"dx":[-749,-533],"dy":[-749,-533],"length":953.7797031574594,"timing":[229,237,248,265,282,298,315,333,348,365,382,399,416,432,449,466,482,498,516,533,549,565,582,599,615,632,649,666,682,698,715,732,749,765,781,798,816,832,1096,1116,1132,1148,1165,1182,1199,1214,1232,1249,1265,1282,1298,1315,1331]},{"start":[694,289],"end":[396,199],"points":[[694,289],[681,288],[655,285],[627,281],[604,275],[580,267],[566,261],[563,260],[563,260],[559,260],[548,256],[540,253],[510,244],[499,242],[466,232],[451,227],[435,219],[422,212],[413,207],[408,204],[403,201],[400,199],[398,199],[397,199],[397,199],[397,199],[396,199]],"dx":[-298,-90],"dy":[-298,-90],"length":314.216637272341,"timing":[334,349,366,382,400,415,433,448,669,682,699,716,733,749,766,783,800,816,832,849,865,883,900,915,932,949,966]},{"start":[390,260],"end":[129,806],"points":[[390,260],[390,265],[384,288],[372,333],[354,399],[334,474],[316,544],[305,583],[294,611],[277,643],[268,654],[263,659],[259,663],[257,666],[256,670],[256,675],[256,681],[255,686],[255,693],[254,699],[252,706],[249,718],[245,732],[241,746],[237,762],[235,770],[232,779],[229,779],[225,780],[210,785],[201,788],[175,795],[157,800],[143,804],[136,805],[131,806],[129,807],[129,807],[129,807],[129,806]],"dx":[-261,546],"dy":[-261,546],"length":655.3324868618625,"timing":[336,348,363,381,397,415,431,447,463,481,497,514,531,547,564,581,598,614,630,647,664,681,697,714,731,748,764,1034,1048,1064,1080,1097,1114,1131,1147,1164,1181,1198,1276,1296]},{"start":[129,806],"end":[538,550],"points":[[129,806],[129,806],[129,806],[129,805],[129,805],[130,804],[130,804],[130,803],[130,803],[130,803],[132,800],[152,782],[185,757],[261,707],[317,679],[393,647],[435,631],[459,623],[472,618],[482,614],[490,610],[494,606],[500,600],[508,588],[518,575],[526,566],[531,560],[535,554],[538,551],[538,550],[539,550],[539,550],[539,550],[538,550]],"dx":[409,-256],"dy":[409,-256],"length":494.52880410413167,"timing":[132,157,166,184,199,217,234,251,266,285,301,317,334,351,367,385,401,417,434,451,468,484,501,516,534,551,567,584,601,617,634,658,691,751]},{"start":[541,770],"end":[1441,264],"points":[[541,770],[558,751],[609,696],[722,593],[815,518],[911,444],[973,395],[1047,341],[1112,296],[1153,274],[1196,255],[1231,246],[1247,244],[1277,240],[1293,238],[1301,236],[1306,235],[1309,234],[1311,233],[1312,233],[1315,233],[1317,233],[1324,233],[1345,236],[1363,240],[1382,245],[1398,250],[1415,255],[1425,258],[1434,260],[1438,261],[1440,262],[1440,262],[1441,262],[1441,263],[1441,263],[1441,263],[1441,264],[1441,264],[1441,264],[1441,264]],"dx":[900,-506],"dy":[900,-506],"length":1090.513162394091,"timing":[278,299,315,332,349,366,382,399,415,433,449,467,482,500,516,532,549,565,583,599,616,632,649,666,683,699,715,732,748,766,782,799,815,833,849,865,882,899,916,932,965]},{"start":[1440,264],"end":[260,119],"points":[[1440,264],[1439,264],[1436,264],[1432,265],[1428,266],[1424,267],[1420,268],[1418,269],[1415,270],[1411,271],[1406,272],[1398,274],[1385,275],[1344,279],[1268,281],[1109,281],[998,278],[851,266],[724,248],[618,229],[517,211],[449,200],[368,184],[329,172],[305,161],[290,153],[279,146],[275,143],[272,140],[269,136],[267,133],[266,130],[265,127],[263,125],[262,123],[261,121],[260,120],[260,119],[260,119]],"dx":[-1180,-145],"dy":[-1180,-145],"length":1212.278219040413,"timing":[56,67,84,101,117,134,151,167,185,201,218,234,250,267,283,301,318,334,350,367,385,401,418,434,451,468,484,500,517,534,551,567,583,601,617,635,651,667,684]},{"start":[260,119],"end":[150,405],"points":[[260,119],[260,119],[260,120],[260,120],[260,120],[261,120],[261,121],[261,124],[262,133],[262,149],[261,169],[259,182],[253,198],[245,214],[233,235],[220,258],[209,280],[202,295],[192,315],[184,331],[180,339],[176,347],[171,354],[168,360],[165,368],[161,378],[157,389],[156,395],[153,400],[153,401],[152,402],[152,403],[152,403],[152,404],[152,404],[151,405],[150,405],[150,405]],"dx":[-110,286],"dy":[-110,286],"length":314.1754946978559,"timing":[176,192,200,216,229,246,262,280,297,313,330,346,362,379,395,412,428,446,463,479,496,512,529,546,563,580,596,613,630,646,663,679,696,712,728,746,763,797]},{"start":[151,404],"end":[1055,339],"points":[[151,404],[155,402],[182,391],[251,366],[345,337],[532,301],[608,294],[663,291],[714,291],[739,291],[764,291],[783,291],[798,292],[813,292],[824,292],[834,292],[839,293],[843,294],[847,294],[853,295],[864,298],[890,310],[924,325],[942,331],[961,336],[969,337],[976,337],[981,338],[986,338],[992,338],[996,338],[1001,338],[1004,338],[1006,338],[1008,338],[1009,338],[1009,338],[1010,337],[1013,337],[1023,336],[1028,336],[1038,336],[1048,337],[1052,337],[1053,338],[1054,339],[1055,339],[1055,339],[1055,339],[1055,339]],"dx":[904,-65],"dy":[904,-65],"length":928.8867790319197,"timing":[288,301,318,335,351,368,384,401,418,434,450,468,484,501,518,534,551,568,585,601,618,635,651,668,685,700,718,735,751,768,784,800,817,834,851,868,884,901,918,936,951,967,985,1001,1018,1033,1051,1067,1084,1124]},{"start":[1055,339],"end":[1203,73],"points":[[1055,339],[1054,339],[1053,339],[1051,339],[1051,339],[1050,339],[1050,339],[1049,339],[1047,339],[1045,339],[1043,339],[1042,339],[1041,339],[1041,339],[1041,338],[1046,331],[1053,317],[1066,294],[1080,267],[1100,236],[1120,206],[1143,180],[1157,166],[1170,154],[1176,148],[1180,143],[1182,140],[1183,136],[1184,130],[1184,123],[1184,111],[1184,100],[1184,96],[1185,91],[1187,88],[1190,85],[1193,83],[1196,81],[1198,79],[1199,78],[1200,77],[1201,75],[1202,74],[1202,73],[1202,73],[1203,73],[1203,73]],"dx":[148,-266],"dy":[148,-266],"length":335.4047302954291,"timing":[40,50,66,84,101,118,134,150,168,184,200,217,234,251,283,300,317,334,350,367,384,401,417,434,450,468,484,500,516,533,550,568,583,600,618,634,650,667,683,700,717,733,749,767,784,800,834]},{"start":[1199,73],"end":[1356,820],"points":[[1199,73],[1197,73],[1195,73],[1192,73],[1189,73],[1184,75],[1178,76],[1171,78],[1164,81],[1155,84],[1146,87],[1138,91],[1131,94],[1126,97],[1119,101],[1116,103],[1109,121],[1106,175],[1116,271],[1139,360],[1155,432],[1172,527],[1175,568],[1178,603],[1183,640],[1190,680],[1193,689],[1192,689],[1192,689],[1191,689],[1191,689],[1191,690],[1191,691],[1193,694],[1196,697],[1199,699],[1207,704],[1241,743],[1259,767],[1302,819],[1322,842],[1331,853],[1338,860],[1341,862],[1341,863],[1342,863],[1342,863],[1342,863],[1342,863],[1343,863],[1343,861],[1344,859],[1345,855],[1345,852],[1345,845],[1346,839],[1346,836],[1348,831],[1350,829],[1352,825],[1353,823],[1354,821],[1355,820],[1356,820],[1356,820],[1356,820]],"dx":[157,747],"dy":[157,747],"length":967.4850713770974,"timing":[15,32,49,66,82,98,116,133,149,165,181,199,215,232,249,264,282,299,316,332,348,366,387,398,415,432,449,671,683,699,715,732,749,766,782,799,815,833,848,865,882,899,916,931,949,965,1010,1034,1049,1065,1082,1098,1116,1131,1149,1165,1182,1199,1216,1231,1249,1266,1281,1299,1315,1348]},{"start":[1356,820],"end":[721,310],"points":[[1356,820],[1355,820],[1355,820],[1354,820],[1353,820],[1352,820],[1351,820],[1349,820],[1347,820],[1345,820],[1342,820],[1338,820],[1331,820],[1320,820],[1289,809],[1194,759],[1142,725],[1075,681],[1015,642],[977,618],[936,591],[914,577],[894,562],[874,546],[835,506],[814,474],[790,441],[770,407],[753,374],[746,358],[741,347],[736,338],[734,334],[733,332],[732,330],[731,329],[731,326],[730,323],[729,322],[728,321],[728,320],[727,319],[727,318],[725,316],[724,313],[723,312],[722,310],[722,310],[721,310],[721,310]],"dx":[-635,-510],"dy":[-635,-510],"length":845.5804918438284,"timing":[80,87,97,114,130,147,164,179,197,214,231,247,265,280,297,315,331,347,363,380,397,414,430,448,463,480,498,513,530,547,564,581,596,613,630,648,664,680,697,713,730,748,764,780,796,814,831,846,864,898]},{"start":[720,311],"end":[109,672],"points":[[720,311],[707,324],[688,345],[649,381],[591,428],[529,472],[476,505],[411,542],[373,567],[338,594],[323,609],[308,626],[290,656],[288,656],[278,656],[263,658],[241,661],[217,663],[192,666],[176,667],[165,668],[156,669],[149,670],[141,671],[136,672],[130,672],[125,672],[122,672],[119,672],[116,672],[112,672],[110,672],[110,672],[109,672]],"dx":[-611,361],"dy":[-611,361],"length":738.2096740346134,"timing":[265,281,298,314,330,348,364,380,396,414,430,447,464,761,781,798,814,830,847,864,881,898,913,930,947,964,981,998,1014,1031,1047,1065,1081,1114]},{"start":[109,672],"end":[225,32],"points":[[109,672],[109,659],[113,627],[126,566],[147,482],[175,399],[209,325],[209,325],[209,318],[209,307],[209,293],[210,274],[212,258],[217,237],[223,220],[229,199],[233,183],[238,158],[239,145],[240,132],[241,121],[241,114],[242,107],[243,97],[243,84],[245,54],[246,28],[249,9],[249,5],[244,3],[241,6],[240,8],[239,10],[237,11],[236,12],[235,14],[232,18],[230,22],[227,28],[226,30],[225,31],[225,32],[225,32]],"dx":[116,-640],"dy":[116,-640],"length":728.2115472217424,"timing":[290,313,330,346,362,379,396,727,745,763,778,797,813,828,846,862,879,896,913,930,946,962,980,997,1012,1029,1046,1063,1074,1346,1362,1379,1396,1413,1428,1446,1463,1480,1496,1512,1529,1547,1580]},{"start":[226,32],"end":[445,69],"points":[[226,32],[236,34],[250,38],[267,43],[285,48],[300,50],[317,55],[332,57],[345,59],[358,60],[375,62],[393,63],[402,64],[412,65],[419,66],[426,67],[432,68],[437,68],[441,69],[444,69],[445,69],[445,69],[445,69],[445,69]],"dx":[219,37],"dy":[219,37],"length":222.9349976254178,"timing":[270,295,314,330,346,363,380,397,412,430,446,464,480,497,513,529,547,563,580,597,613,629,646,663]},{"start":[445,70],"end":[1624,647],"points":[[445,70],[447,73],[464,98],[530,176],[639,280],[693,324],[756,371],[767,379],[770,379],[786,383],[828,391],[916,406],[1032,424],[1148,448],[1215,467],[1266,483],[1320,502],[1358,517],[1379,524],[1402,531],[1412,533],[1422,535],[1427,536],[1430,536],[1432,536],[1439,539],[1449,545],[1467,555],[1489,565],[1515,574],[1541,581],[1565,589],[1585,597],[1602,606],[1618,619],[1628,628],[1634,634],[1640,640],[1642,644],[1642,646],[1643,647],[1643,648],[1643,649],[1643,649],[1643,649],[1642,650],[1640,650],[1637,650],[1631,650],[1627,650],[1626,649],[1625,649],[1624,648],[1624,648],[1624,647],[1624,647],[1624,647],[1624,647]],"dx":[1179,577],"dy":[1179,577],"length":1400.470809235636,"timing":[285,300,316,332,349,366,383,400,683,699,716,732,749,766,783,798,815,832,849,866,883,900,915,933,949,965,982,999,1016,1032,1048,1066,1083,1099,1116,1133,1150,1166,1183,1199,1217,1233,1249,1265,1283,1300,1322,1332,1349,1366,1383,1399,1416,1433,1450,1465,1483,1550]},{"start":[1621,647],"end":[997,174],"points":[[1621,647],[1621,647],[1620,647],[1619,646],[1618,646],[1616,645],[1610,643],[1599,641],[1583,637],[1553,624],[1500,584],[1437,521],[1366,441],[1318,384],[1256,315],[1207,257],[1165,209],[1140,180],[1112,149],[1099,137],[1091,130],[1084,124],[1081,122],[1079,121],[1078,121],[1076,121],[1073,121],[1070,123],[1065,126],[1059,128],[1053,131],[1045,135],[1035,140],[1026,146],[1019,153],[1015,156],[1009,162],[1005,167],[1002,170],[1000,172],[999,174],[998,175],[997,175],[997,175],[997,175],[996,175],[997,175],[997,175],[997,175],[997,175],[997,174],[997,174]],"dx":[-624,-473],"dy":[-624,-473],"length":869.1560659803155,"timing":[121,133,151,168,184,201,218,234,250,268,284,301,317,334,351,367,384,400,418,434,451,467,484,501,518,534,550,568,584,601,617,634,651,668,684,701,718,736,751,767,784,804,817,835,851,868,938,950,967,984,1001,1035]},{"start":[999,176],"end":[1576,499],"points":[[999,176],[1026,194],[1062,214],[1107,237],[1142,255],[1183,276],[1220,295],[1263,323],[1281,337],[1283,337],[1295,338],[1314,342],[1339,347],[1366,354],[1391,362],[1416,371],[1432,377],[1448,384],[1465,393],[1469,395],[1478,402],[1483,405],[1489,409],[1495,413],[1501,417],[1508,423],[1511,426],[1515,429],[1519,434],[1523,438],[1533,449],[1545,465],[1556,479],[1563,488],[1569,494],[1572,497],[1573,498],[1574,498],[1574,498],[1575,499],[1575,499],[1575,499],[1576,499],[1576,499],[1576,499]],"dx":[577,323],"dy":[577,323],"length":674.2435707700222,"timing":[309,333,350,366,383,399,415,432,450,763,783,799,817,834,850,867,883,899,917,932,949,966,984,999,1016,1032,1050,1067,1083,1100,1117,1133,1150,1166,1182,1200,1217,1232,1249,1267,1282,1300,1316,1332,1350]},{"start":[48,490],"end":[1356,834],"points":[[48,490],[52,490],[62,488],[92,485],[199,484],[297,504],[403,531],[475,551],[594,583],[630,588],[717,601],[770,607],[822,614],[899,636],[972,668],[1021,695],[1065,719],[1089,732],[1135,758],[1162,772],[1179,781],[1207,795],[1216,800],[1227,804],[1238,807],[1248,808],[1257,809],[1264,809],[1269,810],[1277,811],[1284,811],[1288,811],[1293,811],[1296,810],[1298,810],[1300,809],[1302,808],[1304,808],[1310,808],[1313,808],[1314,808],[1315,808],[1316,809],[1317,809],[1319,812],[1325,822],[1329,828],[1335,838],[1338,843],[1339,845],[1339,843],[1335,838],[1335,838],[1336,838],[1337,838],[1340,838],[1343,838],[1346,837],[1348,836],[1350,836],[1352,835],[1354,835],[1356,834],[1356,834],[1356,834]],"dx":[1308,344],"dy":[1308,344],"length":1401.9693531192977,"timing":[276,297,314,331,348,364,381,398,415,431,447,464,482,497,514,531,548,565,581,597,614,631,648,664,681,697,715,731,747,764,781,797,814,831,848,863,882,897,914,931,948,964,981,998,1013,1031,1049,1064,1081,1097,1114,1130,1895,1914,1931,1948,1964,1981,1997,2015,2030,2047,2065,2081,2115]},{"start":[1356,834],"end":[906,111],"points":[[1356,834],[1356,834],[1355,834],[1354,834],[1353,834],[1352,833],[1351,833],[1350,833],[1350,833],[1349,832],[1345,829],[1337,824],[1323,812],[1293,786],[1239,732],[1187,671],[1149,621],[1108,559],[1085,519],[1062,477],[1046,444],[1031,409],[1009,357],[996,321],[996,320],[992,308],[979,280],[959,230],[948,205],[940,188],[933,175],[930,168],[928,166],[927,164],[926,161],[924,157],[922,153],[920,149],[918,146],[917,145],[917,145],[917,144],[916,144],[916,142],[915,140],[914,135],[912,126],[911,121],[909,117],[908,114],[907,112],[907,111],[906,111],[906,111]],"dx":[-450,-723],"dy":[-450,-723],"length":868.6132076135281,"timing":[94,101,114,131,148,163,180,198,215,231,248,263,280,298,313,331,347,364,381,398,414,430,447,463,725,748,764,781,797,814,831,847,863,881,898,914,931,946,964,980,998,1014,1031,1047,1063,1081,1098,1114,1131,1147,1164,1181,1197,1231]},{"start":[906,111],"end":[913,742],"points":[[906,111],[906,111],[906,112],[906,112],[906,112],[906,112],[906,113],[906,113],[905,115],[904,123],[901,139],[898,161],[893,205],[891,253],[891,281],[891,318],[891,354],[892,388],[897,424],[903,460],[909,494],[914,524],[916,542],[918,562],[919,576],[920,587],[920,597],[920,607],[920,615],[921,621],[922,625],[923,628],[923,630],[923,631],[923,636],[923,642],[924,647],[924,656],[924,663],[924,672],[924,683],[920,694],[919,700],[918,706],[917,710],[917,713],[916,715],[916,717],[915,720],[914,722],[914,724],[914,728],[914,732],[914,736],[914,739],[914,740],[914,741],[914,741],[913,742],[913,742],[913,742]],"dx":[7,631],"dy":[7,631],"length":636.7022596000796,"timing":[152,161,178,195,211,228,243,261,278,294,312,328,344,360,377,394,411,428,444,462,477,494,511,527,544,561,576,595,610,627,643,661,678,695,711,727,744,761,778,794,810,827,845,861,878,894,911,928,945,961,977,995,1010,1028,1044,1061,1077,1093,1112,1128,1144]},{"start":[913,742],"end":[285,131],"points":[[913,742],[912,742],[912,741],[912,741],[912,741],[912,741],[912,741],[912,740],[912,740],[909,732],[885,691],[853,650],[808,610],[778,587],[743,564],[713,546],[671,520],[631,493],[525,414],[485,381],[424,325],[394,295],[366,262],[353,244],[342,228],[337,220],[333,215],[331,213],[329,211],[327,209],[324,201],[319,186],[312,165],[307,150],[301,133],[298,124],[293,115],[291,110],[289,108],[288,107],[288,107],[287,107],[286,107],[286,108],[285,110],[285,112],[285,117],[285,120],[285,122],[285,125],[285,127],[285,128],[285,130],[285,131],[285,131],[285,131]],"dx":[-628,-611],"dy":[-628,-611],"length":938.0812163469845,"timing":[105,130,142,158,179,210,235,243,258,275,292,309,324,341,358,375,392,407,425,442,458,475,492,508,525,542,558,575,592,609,624,642,658,676,691,708,725,741,759,775,792,807,825,842,859,874,891,909,925,942,958,975,991,1008,1024,1057]},{"start":[285,131],"end":[777,131],"points":[[285,131],[285,131],[285,131],[285,130],[285,130],[287,129],[288,129],[291,128],[295,128],[300,128],[305,128],[309,128],[313,128],[319,128],[331,128],[339,128],[394,128],[450,128],[493,129],[521,130],[549,131],[567,131],[580,131],[596,127],[615,122],[640,116],[669,112],[702,110],[731,110],[749,110],[767,110],[775,110],[784,110],[786,110],[786,110],[787,110],[787,110],[788,110],[788,111],[788,111],[788,111],[788,112],[787,113],[786,117],[784,120],[782,124],[780,126],[779,128],[778,130],[777,131],[777,131]],"dx":[492,0],"dy":[492,0],"length":530.9597962554082,"timing":[45,61,71,87,104,121,138,154,171,187,205,221,238,254,272,287,304,320,337,355,371,387,403,421,437,455,471,488,504,520,538,554,571,587,605,620,638,653,693,703,721,738,754,770,787,804,821,839,854,870,905]},{"start":[1003,280],"end":[595,868],"points":[[1003,280],[1003,280],[1002,280],[1001,281],[999,282],[996,283],[992,285],[986,287],[981,288],[976,290],[971,290],[968,291],[964,291],[957,292],[949,296],[939,301],[922,312],[898,332],[865,361],[821,400],[772,447],[728,493],[704,522],[679,556],[649,603],[642,619],[635,632],[629,643],[627,649],[627,649],[626,654],[622,662],[615,681],[606,713],[602,737],[601,760],[600,776],[600,794],[600,810],[600,825],[600,837],[599,843],[599,849],[598,855],[598,858],[597,862],[597,864],[597,866],[597,867],[596,868],[596,868],[596,868],[595,868],[595,868],[595,868],[595,868]],"dx":[-408,588],"dy":[-408,588],"length":765.5282602490893,"timing":[36,49,63,79,97,113,130,146,164,179,197,213,230,247,264,280,297,313,330,347,364,380,397,414,430,447,464,481,497,758,779,797,814,830,847,863,880,897,913,930,947,963,980,996,1013,1030,1047,1063,1080,1097,1113,1130,1146,1164,1179,1213]},{"start":[915,861],"end":[1350,60],"points":[[915,861],[915,861],[917,853],[926,831],[943,793],[978,724],[1019,653],[1065,569],[1114,473],[1166,382],[1222,295],[1247,263],[1274,227],[1293,202],[1306,183],[1314,164],[1326,127],[1333,100],[1343,66],[1346,56],[1350,44],[1352,38],[1353,37],[1353,36],[1354,36],[1354,36],[1354,37],[1354,37],[1353,37],[1352,38],[1351,41],[1350,43],[1349,45],[1349,46],[1348,48],[1348,52],[1348,55],[1349,58],[1350,60],[1350,60]],"dx":[435,-801],"dy":[435,-801],"length":967.2164166594388,"timing":[89,332,351,368,385,402,418,435,450,468,485,502,518,535,551,568,584,600,618,635,651,667,684,701,745,842,868,885,901,918,934,952,968,985,1000,1017,1035,1052,1068,1101]},{"start":[1350,60],"end":[388,787],"points":[[1350,60],[1350,60],[1350,60],[1349,60],[1349,59],[1349,59],[1348,59],[1347,59],[1341,59],[1330,65],[1301,83],[1262,112],[1212,151],[1129,213],[1055,262],[970,317],[879,378],[817,423],[743,479],[683,529],[633,573],[591,614],[566,638],[548,657],[537,669],[525,683],[514,695],[504,705],[495,712],[488,719],[483,723],[477,727],[471,732],[465,737],[460,741],[454,745],[449,749],[443,753],[432,758],[428,761],[422,765],[415,770],[412,772],[408,775],[404,777],[401,779],[398,781],[396,782],[394,783],[392,784],[391,785],[390,786],[389,786],[388,787],[388,787]],"dx":[-962,727],"dy":[-962,727],"length":1213.4999463762654,"timing":[141,157,165,181,197,214,231,247,264,280,296,314,331,347,364,380,398,414,430,446,464,480,497,514,530,547,564,580,597,613,630,647,664,679,697,713,731,747,764,780,797,814,830,847,863,880,897,914,930,947,964,980,997,1014,1047]},{"start":[388,787],"end":[305,313],"points":[[388,787],[388,786],[388,786],[388,786],[388,786],[388,785],[388,785],[388,785],[388,784],[388,784],[388,782],[387,778],[385,773],[383,767],[379,755],[374,739],[365,705],[355,657],[340,588],[331,550],[324,524],[317,499],[314,489],[311,481],[310,476],[309,473],[308,469],[308,466],[308,462],[308,460],[308,455],[308,450],[308,440],[308,426],[309,403],[309,388],[310,369],[311,352],[311,338],[311,330],[311,324],[309,321],[309,319],[308,318],[307,317],[306,315],[305,314],[305,313],[305,313]],"dx":[-83,-474],"dy":[-83,-474],"length":486.5271864655043,"timing":[138,162,177,185,202,215,232,248,266,281,298,314,332,349,366,382,398,416,432,448,465,482,498,516,531,549,565,582,599,615,632,648,665,682,698,715,732,749,765,782,798,815,832,849,865,883,899,915,933]},{"start":[306,313],"end":[825,75],"points":[[306,313],[306,313],[306,313],[306,313],[307,313],[308,313],[310,313],[315,312],[326,309],[350,299],[382,286],[436,269],[501,252],[604,224],[640,209],[652,202],[670,191],[679,184],[685,178],[689,173],[695,165],[703,155],[726,134],[755,109],[768,98],[781,91],[792,85],[799,84],[804,84],[810,83],[814,82],[818,80],[822,77],[823,76],[824,75],[825,75],[825,75],[825,75]],"dx":[519,-238],"dy":[519,-238],"length":583.9963808135127,"timing":[189,204,221,231,249,265,281,298,314,331,348,365,381,399,415,431,448,464,481,498,515,532,547,565,580,599,614,631,648,664,681,698,715,732,748,764,782,803]},{"start":[824,75],"end":[1035,97],"points":[[824,75],[824,75],[823,76],[821,81],[818,86],[816,90],[814,95],[813,97],[812,99],[812,99],[812,100],[812,100],[813,99],[821,99],[834,99],[857,99],[886,99],[919,106],[950,113],[977,120],[1001,127],[1015,132],[1031,136],[1040,139],[1048,141],[1050,141],[1053,142],[1054,142],[1054,142],[1054,142],[1054,140],[1052,137],[1049,135],[1047,132],[1045,129],[1042,124],[1040,120],[1039,114],[1038,110],[1036,106],[1036,103],[1036,102],[1036,101],[1035,100],[1035,99],[1035,98],[1035,98],[1035,97]],"dx":[211,22],"dy":[211,22],"length":326.85270842351724,"timing":[120,130,146,164,179,197,213,230,246,264,280,314,330,347,364,379,397,413,429,447,463,479,496,514,530,547,562,581,596,638,663,679,696,713,730,745,762,780,796,814,830,846,862,879,897,914,930,962]},{"start":[1035,97],"end":[796,120],"points":[[1035,97],[1034,97],[1033,97],[1029,98],[1021,100],[1007,105],[985,111],[959,118],[931,123],[903,126],[876,127],[858,128],[829,128],[819,128],[811,127],[805,126],[802,125],[800,124],[800,123],[799,122],[798,121],[797,120],[796,120],[796,120]],"dx":[-239,23],"dy":[-239,23],"length":245.4001743020568,"timing":[255,281,297,314,331,347,364,381,398,414,431,448,464,482,498,514,530,547,564,581,598,614,632,664]},{"start":[796,120],"end":[906,418],"points":[[796,120],[796,120],[796,120],[796,126],[797,139],[802,170],[812,212],[826,261],[835,292],[842,312],[846,323],[850,332],[852,335],[854,337],[855,338],[857,339],[858,341],[860,342],[862,343],[863,345],[866,348],[868,351],[872,357],[875,360],[877,365],[882,373],[889,387],[894,396],[897,402],[899,407],[901,410],[902,411],[902,412],[902,412],[902,412],[902,412],[903,413],[903,413],[903,413],[904,414],[904,416],[905,417],[906,418]],"dx":[110,298],"dy":[110,298],"length":324.46478665785355,"timing":[226,275,299,315,332,349,366,382,399,416,432,449,465,482,502,515,532,549,566,582,599,614,632,649,666,682,699,716,732,749,765,782,799,816,832,848,865,882,899,915,932,949,999]},{"start":[905,418],"end":[848,553],"points":[[905,418],[905,418],[904,417],[904,416],[902,415],[902,414],[901,414],[900,414],[900,414],[899,415],[898,418],[894,428],[885,447],[873,472],[863,500],[857,518],[853,531],[851,542],[850,547],[849,550],[849,551],[849,551],[849,551],[849,552],[849,552],[849,552],[849,553],[849,553],[849,553],[848,553],[848,553]],"dx":[-57,135],"dy":[-57,135],"length":157.50065869167895,"timing":[66,79,95,112,129,145,162,179,218,235,245,262,279,295,312,328,345,362,379,395,412,429,446,461,478,496,512,529,545,562,595]},{"start":[848,553],"end":[734,124],"points":[[848,553],[848,552],[848,549],[845,534],[836,500],[806,412],[795,382],[769,320],[758,295],[745,267],[736,247],[730,231],[726,217],[723,205],[722,199],[722,194],[722,191],[722,190],[722,190],[722,189],[722,188],[722,187],[722,186],[722,185],[722,184],[722,183],[723,182],[730,160],[731,156],[732,148],[733,139],[734,134],[734,129],[734,127],[734,125],[734,124],[734,124],[734,124]],"dx":[-114,-429],"dy":[-114,-429],"length":453.6817114709194,"timing":[269,285,298,316,332,348,364,382,398,415,432,448,466,482,498,516,532,549,564,582,599,615,632,649,664,682,698,754,765,782,799,815,831,849,865,882,898,916]},{"start":[734,124],"end":[1348,498],"points":[[734,124],[734,124],[734,125],[734,125],[734,125],[734,125],[734,126],[735,127],[743,139],[771,177],[805,216],[877,286],[921,319],[976,352],[1011,367],[1074,393],[1104,403],[1125,410],[1182,423],[1199,425],[1217,426],[1218,427],[1223,432],[1229,436],[1234,441],[1239,446],[1245,451],[1253,457],[1268,467],[1284,476],[1296,483],[1306,488],[1315,491],[1322,492],[1326,493],[1328,494],[1331,495],[1334,495],[1336,496],[1341,497],[1344,497],[1346,498],[1347,498],[1348,498]],"dx":[614,374],"dy":[614,374],"length":742.6953017851849,"timing":[142,149,174,189,198,215,237,263,281,298,315,330,348,365,381,398,415,431,448,464,481,797,814,832,848,864,882,897,915,931,948,964,982,998,1014,1031,1048,1064,1081,1097,1115,1131,1147,1163]},{"start":[1347,498],"end":[1179,864],"points":[[1347,498],[1347,498],[1346,498],[1343,499],[1339,502],[1334,505],[1324,513],[1313,524],[1287,551],[1258,585],[1239,611],[1219,645],[1204,674],[1192,702],[1186,718],[1180,738],[1176,754],[1173,770],[1172,786],[1172,794],[1172,802],[1172,807],[1172,812],[1172,816],[1172,825],[1172,837],[1172,849],[1175,860],[1176,863],[1177,864],[1177,864],[1178,864],[1178,864],[1178,864],[1179,864]],"dx":[-168,366],"dy":[-168,366],"length":428.0376894903414,"timing":[230,237,249,266,282,299,316,332,350,366,383,400,416,433,450,466,482,499,516,533,549,566,583,598,615,633,649,666,683,699,716,733,763,804,828]},{"start":[1179,864],"end":[1339,383],"points":[[1179,864],[1179,863],[1179,858],[1185,836],[1193,799],[1199,755],[1204,700],[1207,640],[1211,581],[1217,543],[1230,500],[1244,468],[1254,452],[1265,437],[1271,430],[1277,426],[1281,423],[1285,421],[1290,418],[1300,412],[1314,403],[1321,398],[1327,394],[1331,392],[1333,390],[1335,389],[1336,387],[1337,386],[1338,385],[1339,384],[1339,383],[1339,383]],"dx":[160,-481],"dy":[160,-481],"length":534.1610796966135,"timing":[249,262,280,296,312,330,346,362,380,395,413,429,446,462,479,497,513,530,546,562,579,596,613,629,646,663,679,696,713,729,747,799]},{"start":[1339,383],"end":[346,432],"points":[[1339,383],[1339,383],[1338,384],[1338,384],[1336,385],[1327,389],[1310,396],[1251,414],[1190,427],[1086,448],[1022,461],[939,479],[889,491],[824,506],[779,511],[742,514],[713,514],[661,514],[608,505],[570,496],[527,484],[509,479],[477,466],[453,458],[442,454],[435,454],[427,454],[423,454],[419,454],[417,454],[413,454],[410,455],[405,455],[399,456],[393,456],[387,456],[382,456],[375,452],[369,446],[363,440],[358,437],[353,434],[351,433],[349,433],[348,433],[347,432],[346,432],[346,432]],"dx":[-993,49],"dy":[-993,49],"length":1026.0676695656334,"timing":[204,216,233,250,266,283,300,316,332,350,366,383,400,416,432,449,466,483,498,516,533,550,566,583,600,616,632,649,665,683,700,716,733,749,766,783,800,817,833,849,865,885,900,916,933,948,967,983]},{"start":[346,432],"end":[718,34],"points":[[346,432],[347,432],[348,431],[350,430],[352,429],[354,428],[357,428],[360,426],[365,424],[376,415],[401,391],[436,358],[483,316],[539,266],[596,215],[633,182],[655,159],[667,144],[676,128],[682,111],[689,90],[694,69],[700,55],[706,43],[710,38],[713,35],[716,33],[717,33],[718,33],[718,33],[718,33],[718,33],[718,34],[718,34],[718,34]],"dx":[372,-398],"dy":[372,-398],"length":559.2984508580257,"timing":[156,164,180,197,214,230,247,264,280,297,314,331,347,364,380,398,414,430,446,463,480,497,514,530,547,563,581,598,613,631,681,714,737,764,813]},{"start":[718,34],"end":[1594,816],"points":[[718,34],[717,34],[717,34],[717,34],[717,34],[716,35],[716,35],[716,35],[716,38],[718,53],[734,101],[773,192],[840,311],[894,386],[957,461],[1016,517],[1050,550],[1092,593],[1125,633],[1162,678],[1208,724],[1263,762],[1317,790],[1355,805],[1400,819],[1422,826],[1436,830],[1448,833],[1455,834],[1460,834],[1466,833],[1473,831],[1485,826],[1493,824],[1500,822],[1506,820],[1511,819],[1520,818],[1528,817],[1538,817],[1548,817],[1559,817],[1564,817],[1571,817],[1575,817],[1578,817],[1580,817],[1582,817],[1584,817],[1588,817],[1590,817],[1592,817],[1593,816],[1593,816],[1594,816]],"dx":[876,782],"dy":[876,782],"length":1275.6731128992028,"timing":[152,201,233,257,268,284,301,316,333,350,368,384,401,417,434,451,468,484,500,517,534,550,567,585,601,617,634,651,668,684,700,717,735,751,766,784,801,817,834,851,867,883,901,918,934,951,967,984,1000,1018,1034,1051,1067,1083,1100]},{"start":[1593,816],"end":[1382,827],"points":[[1593,816],[1592,816],[1585,815],[1576,814],[1565,814],[1556,813],[1548,812],[1543,812],[1539,811],[1533,809],[1525,808],[1513,806],[1500,804],[1493,804],[1487,804],[1484,804],[1483,804],[1483,804],[1482,804],[1481,806],[1480,809],[1477,814],[1473,819],[1470,821],[1467,823],[1464,825],[1460,826],[1456,826],[1453,827],[1448,827],[1441,827],[1438,827],[1432,827],[1423,827],[1416,827],[1411,827],[1403,827],[1396,827],[1391,827],[1386,827],[1383,827],[1382,827],[1382,827]],"dx":[-211,11],"dy":[-211,11],"length":222.8069449113785,"timing":[102,117,133,150,166,184,200,217,233,249,266,283,299,315,333,350,367,383,399,416,433,450,466,482,500,515,532,549,567,582,600,615,633,650,666,683,700,716,733,750,765,783,817]},{"start":[1381,827],"end":[603,92],"points":[[1381,827],[1379,827],[1378,827],[1377,827],[1376,827],[1375,827],[1375,827],[1375,827],[1375,827],[1375,827],[1374,827],[1374,828],[1374,828],[1374,828],[1371,828],[1367,828],[1357,828],[1334,816],[1275,775],[1177,699],[1108,645],[1050,597],[966,516],[889,434],[839,368],[803,318],[774,266],[764,242],[755,219],[749,205],[744,196],[739,190],[736,184],[733,179],[731,175],[730,170],[728,166],[727,164],[726,161],[725,159],[724,155],[724,149],[726,144],[726,144],[719,143],[704,139],[681,132],[656,124],[639,117],[620,109],[614,105],[607,102],[604,99],[603,97],[603,96],[603,95],[603,94],[603,94],[603,93],[603,92],[603,92],[603,92]],"dx":[-778,-735],"dy":[-778,-735],"length":1114.7923627619632,"timing":[0,16,31,48,65,82,99,116,132,149,166,182,199,215,232,249,265,282,299,316,332,349,366,382,399,415,433,448,466,483,499,515,532,548,565,582,599,616,633,649,665,682,698,941,966,983,1000,1016,1032,1050,1066,1082,1098,1115,1133,1149,1166,1182,1199,1215,1233,1282]},{"start":[604,92],"end":[1546,190],"points":[[604,92],[617,97],[652,116],[677,130],[747,169],[795,194],[834,211],[883,229],[911,236],[964,246],[994,249],[1033,251],[1065,253],[1075,254],[1090,254],[1097,249],[1100,249],[1152,257],[1241,272],[1296,281],[1341,287],[1401,295],[1442,298],[1471,300],[1486,300],[1501,300],[1511,299],[1521,296],[1532,292],[1544,288],[1552,285],[1560,283],[1564,281],[1566,280],[1566,279],[1567,268],[1567,251],[1566,237],[1561,222],[1558,214],[1554,206],[1551,199],[1550,198],[1549,196],[1548,195],[1547,193],[1547,192],[1547,191],[1546,191],[1546,190]],"dx":[942,98],"dy":[942,98],"length":1100.4611437576582,"timing":[251,268,284,300,318,334,351,368,385,400,418,435,451,468,484,501,759,784,801,818,835,851,867,884,901,918,934,951,968,985,1001,1018,1034,1051,1068,1085,1100,1118,1134,1152,1167,1191,1201,1217,1234,1251,1267,1284,1301,1317]},{"start":[1545,191],"end":[1029,224],"points":[[1545,191],[1529,204],[1512,215],[1491,227],[1469,236],[1442,244],[1399,251],[1370,255],[1332,259],[1300,262],[1274,263],[1258,263],[1241,262],[1218,256],[1206,252],[1190,246],[1176,242],[1153,236],[1135,233],[1110,231],[1083,229],[1066,228],[1051,225],[1044,224],[1039,223],[1036,223],[1034,223],[1033,223],[1032,223],[1031,224],[1030,224],[1029,224],[1029,224]],"dx":[-516,33],"dy":[-516,33],"length":536.3698940693141,"timing":[259,282,300,317,333,349,366,383,400,416,433,449,466,484,500,516,533,550,567,583,600,616,634,650,666,683,699,717,733,750,767,782,816]},{"start":[1029,224],"end":[299,739],"points":[[1029,224],[1018,241],[1003,262],[975,300],[957,324],[918,371],[881,416],[810,486],[736,546],[638,622],[532,702],[464,748],[413,781],[377,799],[348,812],[337,815],[328,816],[323,816],[319,815],[318,815],[318,814],[318,814],[318,814],[318,811],[318,802],[317,792],[314,778],[310,765],[308,756],[305,750],[303,746],[302,744],[301,743],[300,742],[300,740],[299,739],[299,739],[299,739]],"dx":[-730,515],"dy":[-730,515],"length":1019.6788360765057,"timing":[276,301,316,334,350,367,384,400,417,434,451,467,483,500,518,534,550,567,584,601,616,673,683,700,717,734,750,767,783,801,817,834,851,867,884,901,917,967]},{"start":[299,739],"end":[990,396],"points":[[299,739],[300,739],[302,739],[306,738],[313,736],[324,733],[328,731],[347,727],[366,723],[386,720],[408,717],[436,713],[473,707],[505,700],[529,691],[550,680],[578,659],[610,632],[677,577],[761,521],[859,466],[898,452],[935,441],[954,436],[969,434],[976,434],[981,434],[983,434],[985,433],[986,431],[986,428],[987,422],[989,416],[990,411],[992,408],[993,406],[993,404],[993,402],[992,400],[991,398],[990,396],[990,396],[990,396]],"dx":[691,-343],"dy":[691,-343],"length":806.6318390319574,"timing":[53,66,83,99,116,133,149,166,183,200,216,233,249,266,283,300,316,333,349,367,382,399,417,433,448,465,482,499,515,533,549,566,583,600,616,633,649,666,683,698,715,733,766]},{"start":[990,396],"end":[179,204],"points":[[990,396],[990,396],[990,396],[990,396],[990,396],[990,397],[990,397],[990,398],[985,402],[976,410],[954,422],[918,428],[842,431],[784,425],[674,394],[617,369],[548,334],[494,293],[463,264],[441,243],[424,224],[417,216],[408,204],[406,204],[399,204],[386,204],[371,203],[335,201],[293,201],[271,201],[256,201],[247,202],[239,204],[232,207],[221,209],[210,210],[202,211],[194,211],[189,211],[185,210],[182,208],[180,206],[179,205],[179,204],[179,204]],"dx":[-811,-192],"dy":[-811,-192],"length":895.3210119364768,"timing":[126,141,157,165,181,198,213,230,247,263,280,297,313,330,347,363,380,397,414,430,446,464,480,733,747,764,779,796,814,830,847,863,881,897,913,930,946,964,980,996,1014,1031,1047,1063,1079]},{"start":[179,204],"end":[320,413],"points":[[179,204],[179,204],[180,204],[180,204],[180,204],[182,204],[186,204],[196,202],[218,202],[238,202],[250,205],[263,213],[272,223],[278,233],[284,244],[288,254],[294,264],[298,274],[302,285],[307,297],[311,307],[314,316],[318,323],[320,328],[323,333],[327,342],[329,350],[330,359],[332,370],[333,379],[333,385],[333,391],[333,397],[331,402],[329,405],[326,408],[323,410],[322,412],[320,413],[320,413],[320,413]],"dx":[141,209],"dy":[141,209],"length":308.6172085404055,"timing":[122,137,145,159,176,192,209,224,242,259,275,293,309,325,342,359,375,392,409,425,442,459,476,492,509,525,542,559,576,592,609,625,643,659,675,692,708,725,742,759,792]},{"start":[320,411],"end":[849,48],"points":[[320,411],[320,411],[320,411],[320,410],[323,408],[327,403],[339,391],[352,379],[373,364],[411,338],[506,274],[555,237],[598,204],[641,169],[662,151],[680,135],[693,125],[703,117],[717,107],[726,101],[734,97],[740,93],[746,91],[750,90],[753,89],[757,89],[765,89],[771,89],[779,89],[792,89],[803,86],[814,83],[822,79],[828,74],[834,69],[838,62],[842,56],[846,51],[848,49],[848,48],[849,48],[849,48]],"dx":[529,-363],"dy":[529,-363],"length":654.7248225106616,"timing":[15,120,152,165,181,198,214,231,248,265,281,298,315,332,348,365,381,397,415,431,448,465,481,497,514,531,548,564,581,598,615,632,647,664,680,698,715,731,748,764,782,815]},{"start":[849,48],"end":[1454,558],"points":[[849,48],[853,58],[883,100],[932,158],[1004,238],[1091,316],[1173,387],[1225,429],[1263,461],[1290,482],[1291,482],[1312,492],[1334,504],[1367,523],[1387,534],[1407,544],[1415,549],[1424,552],[1426,553],[1430,554],[1434,554],[1439,555],[1444,555],[1448,556],[1451,556],[1453,557],[1453,557],[1454,557],[1454,558]],"dx":[605,510],"dy":[605,510],"length":805.3033254091333,"timing":[279,295,312,329,346,361,379,396,412,430,709,728,746,762,778,796,813,829,846,862,879,895,913,929,945,962,979,996,1012]},{"start":[1454,558],"end":[138,343],"points":[[1454,558],[1453,558],[1449,559],[1443,561],[1438,562],[1432,564],[1425,565],[1422,565],[1414,565],[1406,565],[1396,565],[1384,564],[1372,564],[1353,564],[1318,564],[1247,564],[1103,563],[974,554],[909,549],[755,535],[690,530],[648,527],[615,524],[597,520],[596,520],[579,514],[547,500],[492,475],[429,448],[392,434],[368,426],[346,420],[338,418],[325,415],[314,411],[302,408],[282,402],[269,398],[255,395],[235,388],[222,383],[207,376],[194,369],[184,361],[175,355],[166,350],[159,347],[153,346],[148,345],[143,344],[141,344],[139,343],[138,343],[138,343]],"dx":[-1316,-215],"dy":[-1316,-215],"length":1354.5262254132826,"timing":[59,67,83,100,117,134,150,166,183,201,217,234,249,265,283,300,317,333,349,367,383,400,417,433,731,751,766,783,800,817,834,850,866,882,900,916,933,950,967,984,1000,1016,1034,1050,1067,1083,1099,1117,1134,1149,1166,1183,1200,1217]},{"start":[144,343],"end":[450,150],"points":[[144,343],[146,343],[148,343],[150,343],[154,343],[159,343],[167,343],[175,343],[179,343],[185,343],[189,343],[196,343],[202,342],[215,341],[225,339],[236,337],[246,334],[263,327],[292,314],[314,303],[342,290],[358,282],[372,274],[380,268],[391,257],[398,248],[404,239],[409,230],[414,220],[419,205],[421,197],[423,190],[424,186],[425,184],[425,183],[425,183],[425,182],[427,182],[429,182],[431,181],[433,181],[434,181],[435,181],[435,181],[435,180],[437,173],[439,166],[442,159],[443,156],[444,155],[444,154],[445,154],[445,154],[446,154],[447,153],[448,152],[449,151],[449,150],[450,150],[450,150]],"dx":[306,-193],"dy":[306,-193],"length":398.76443449728373,"timing":[1,16,33,50,68,84,101,117,134,152,167,184,200,217,234,251,267,284,301,317,334,350,367,383,401,417,434,451,467,484,500,517,534,550,567,584,600,618,634,650,668,684,700,717,1052,1067,1084,1100,1117,1134,1151,1167,1184,1199,1217,1234,1251,1267,1284,1316]},{"start":[450,150],"end":[594,624],"points":[[450,150],[450,150],[450,151],[450,152],[450,153],[450,154],[451,155],[452,156],[453,158],[454,160],[455,162],[457,166],[463,174],[480,198],[502,232],[518,264],[536,303],[551,352],[556,370],[563,399],[569,422],[574,445],[579,461],[587,484],[593,503],[597,519],[599,534],[600,548],[600,561],[600,572],[600,582],[600,587],[600,595],[600,599],[600,604],[599,610],[599,614],[598,616],[598,617],[598,618],[598,618],[598,618],[597,619],[596,621],[595,623],[594,624],[594,624]],"dx":[144,474],"dy":[144,474],"length":508.03270392943386,"timing":[73,81,97,114,130,148,164,181,197,214,231,247,264,280,296,314,330,347,364,380,398,414,431,448,464,480,497,514,531,547,564,580,597,614,629,646,664,681,698,713,730,793,812,831,848,864,896]},{"start":[597,614],"end":[1493,465],"points":[[597,614],[597,612],[598,611],[598,610],[598,610],[598,609],[598,609],[598,609],[599,608],[599,608],[599,607],[599,607],[599,607],[600,604],[608,590],[621,572],[648,538],[680,508],[723,478],[778,453],[851,433],[939,420],[1032,413],[1105,413],[1118,413],[1162,418],[1172,420],[1174,420],[1179,420],[1196,420],[1236,421],[1291,432],[1350,446],[1385,456],[1407,464],[1420,469],[1433,475],[1437,476],[1439,478],[1442,479],[1446,480],[1449,480],[1452,480],[1454,480],[1455,480],[1457,480],[1460,479],[1468,475],[1475,472],[1482,469],[1487,467],[1489,466],[1491,466],[1492,465],[1492,465],[1493,465]],"dx":[896,-149],"dy":[896,-149],"length":981.241062855139,"timing":[0,16,33,50,67,83,99,116,134,149,166,182,200,216,233,250,267,283,300,317,334,350,366,383,400,417,433,687,699,716,733,749,766,783,800,816,833,850,866,882,900,916,933,949,967,982,1000,1016,1033,1049,1067,1083,1100,1116,1133,1166]},{"start":[1492,465],"end":[1341,357],"points":[[1492,465],[1492,465],[1490,465],[1486,467],[1479,470],[1468,472],[1454,472],[1442,471],[1433,468],[1422,462],[1416,457],[1411,453],[1405,448],[1399,443],[1390,438],[1381,433],[1375,429],[1369,425],[1363,419],[1360,415],[1357,410],[1354,403],[1350,395],[1347,390],[1344,385],[1343,381],[1341,377],[1341,372],[1340,367],[1339,361],[1339,357],[1339,352],[1339,349],[1339,347],[1339,345],[1339,343],[1340,339],[1340,335],[1341,334],[1341,332],[1341,332],[1341,332],[1341,339],[1341,345],[1341,349],[1341,353],[1341,356],[1341,357],[1341,357]],"dx":[-151,-108],"dy":[-151,-108],"length":265.0265041299209,"timing":[181,197,213,229,247,263,280,297,313,329,347,363,380,396,414,430,447,462,480,496,514,530,546,563,580,597,613,630,646,663,680,697,712,730,746,763,780,797,812,829,846,1704,1730,1747,1763,1779,1796,1814,1829]},{"start":[1341,358],"end":[1486,460],"points":[[1341,358],[1342,364],[1347,377],[1355,392],[1367,409],[1380,424],[1390,433],[1409,448],[1421,456],[1438,466],[1457,476],[1481,487],[1488,490],[1493,493],[1496,494],[1497,494],[1497,490],[1496,487],[1496,486],[1496,483],[1493,477],[1491,470],[1489,467],[1488,463],[1487,461],[1486,461],[1486,460],[1486,460]],"dx":[145,102],"dy":[145,102],"length":252.07157218139182,"timing":[346,357,373,390,407,423,440,457,474,490,507,524,539,557,573,590,607,623,1003,1024,1040,1057,1074,1090,1107,1123,1140,1207]},{"start":[1486,460],"end":[1541,764],"points":[[1486,460],[1486,460],[1485,460],[1485,460],[1484,460],[1484,460],[1483,460],[1483,460],[1482,460],[1482,461],[1481,461],[1481,462],[1480,464],[1479,470],[1477,482],[1476,502],[1475,529],[1476,560],[1483,590],[1498,626],[1516,667],[1526,692],[1539,726],[1541,737],[1542,750],[1542,756],[1542,760],[1541,762],[1541,763],[1541,763],[1541,763],[1541,764]],"dx":[55,304],"dy":[55,304],"length":321.9082330871036,"timing":[111,125,134,150,166,182,200,216,232,250,266,283,300,316,333,349,366,383,400,416,433,449,466,482,499,516,533,550,566,583,636,660]},{"start":[1541,764],"end":[353,498],"points":[[1541,764],[1540,764],[1538,764],[1537,764],[1535,764],[1532,764],[1530,764],[1529,764],[1528,764],[1527,764],[1526,764],[1522,764],[1515,764],[1506,764],[1483,764],[1437,750],[1322,703],[1094,609],[978,572],[882,545],[786,524],[737,519],[689,515],[664,515],[640,515],[625,515],[613,514],[601,512],[589,510],[577,508],[560,505],[548,504],[532,502],[517,502],[496,502],[466,502],[439,505],[412,505],[394,502],[375,496],[360,491],[348,488],[342,488],[337,488],[335,488],[334,488],[335,488],[336,488],[338,490],[340,492],[343,494],[347,497],[349,497],[350,498],[352,498],[352,498],[353,498],[353,498]],"dx":[-1188,-266],"dy":[-1188,-266],"length":1275.2710398637216,"timing":[99,114,132,148,164,181,198,214,231,248,263,281,298,315,331,348,364,382,398,414,431,448,464,480,498,515,531,548,564,582,598,615,631,648,664,681,698,714,731,748,765,781,798,814,831,847,885,898,915,930,948,964,981,997,1014,1031,1049,1081]},{"start":[353,498],"end":[463,418],"points":[[353,498],[353,497],[355,494],[357,492],[359,490],[360,488],[364,485],[370,479],[383,469],[403,454],[427,439],[443,430],[462,423],[470,422],[475,422],[478,422],[478,422],[478,422],[478,423],[476,424],[475,424],[473,424],[472,424],[468,424],[465,422],[464,420],[463,419],[463,418],[463,418]],"dx":[110,-80],"dy":[110,-80],"length":169.84709276285892,"timing":[144,148,165,181,199,214,231,248,265,282,297,315,331,349,365,382,398,415,432,448,465,481,498,515,532,547,564,581,598]},{"start":[442,848],"end":[1061,241],"points":[[442,848],[451,838],[473,811],[505,781],[542,747],[604,698],[648,666],[697,629],[748,592],[796,554],[827,529],[857,501],[881,478],[893,466],[906,451],[920,434],[929,419],[942,394],[953,371],[968,340],[980,322],[993,303],[1004,292],[1012,286],[1018,282],[1021,280],[1023,279],[1024,278],[1024,278],[1025,277],[1027,275],[1032,272],[1035,269],[1039,265],[1044,260],[1049,256],[1053,250],[1056,247],[1059,244],[1060,242],[1060,241],[1061,241],[1061,241],[1061,241]],"dx":[619,-607],"dy":[619,-607],"length":878.0627422124138,"timing":[296,313,329,346,362,379,396,412,428,445,462,478,495,512,529,546,562,579,595,613,630,645,662,679,695,712,729,746,762,778,796,812,829,846,862,879,895,913,930,946,962,978,996,1029]},{"start":[915,290],"end":[1390,462],"points":[[915,290],[944,293],[986,306],[1044,329],[1100,355],[1133,372],[1178,394],[1214,408],[1249,421],[1282,433],[1312,444],[1329,450],[1350,456],[1364,460],[1375,461],[1380,462],[1384,462],[1386,462],[1387,462],[1388,462],[1388,462],[1389,462],[1389,462],[1390,462],[1390,462]],"dx":[475,172],"dy":[475,172],"length":508.0699049420075,"timing":[315,331,347,365,381,396,414,431,448,464,481,497,514,531,548,565,581,598,615,632,648,664,681,697,731]},{"start":[1390,462],"end":[562,831],"points":[[1390,462],[1390,462],[1389,462],[1388,462],[1388,462],[1387,462],[1387,462],[1387,462],[1386,462],[1383,463],[1374,466],[1360,471],[1331,483],[1292,497],[1175,542],[1083,578],[1018,609],[941,651],[881,688],[845,711],[808,732],[778,749],[762,756],[745,765],[731,771],[718,779],[700,790],[683,799],[671,805],[654,811],[641,814],[629,818],[624,819],[616,821],[611,823],[607,824],[602,825],[598,825],[592,826],[586,827],[581,828],[576,829],[571,830],[567,831],[565,831],[563,831],[562,831],[562,831]],"dx":[-828,369],"dy":[-828,369],"length":911.9446307217005,"timing":[112,128,146,163,179,195,212,246,263,280,297,312,329,346,363,384,395,412,429,446,462,479,496,512,529,546,562,579,597,613,629,646,664,679,696,712,729,746,762,782,798,812,830,847,864,881,896,929]},{"start":[562,831],"end":[437,182],"points":[[562,831],[562,831],[562,830],[562,830],[562,830],[562,830],[562,829],[561,824],[558,811],[550,775],[533,698],[511,610],[493,543],[473,491],[452,439],[436,405],[429,389],[422,372],[418,360],[415,350],[414,340],[414,328],[414,309],[414,297],[414,288],[415,263],[425,231],[435,199],[449,163],[453,153],[457,142],[458,138],[458,138],[458,140],[453,152],[448,164],[447,166],[444,172],[442,175],[441,176],[441,176],[440,176],[440,177],[439,177],[439,178],[438,180],[438,180],[438,181],[437,181],[437,181],[437,181],[437,182]],"dx":[-125,-649],"dy":[-125,-649],"length":775.1128950543236,"timing":[169,182,215,232,249,265,281,298,315,332,349,365,382,398,415,432,448,465,482,499,515,531,549,566,582,599,615,632,648,665,682,699,715,732,748,767,782,797,815,832,849,865,882,898,915,932,949,965,982,1015,1032,1065]},{"start":[438,182],"end":[1011,779],"points":[[438,182],[449,184],[499,208],[574,253],[627,290],[694,341],[750,385],[793,426],[831,462],[869,498],[897,522],[928,549],[948,565],[965,579],[976,590],[983,597],[993,609],[1008,625],[1025,644],[1049,674],[1057,686],[1062,697],[1065,703],[1065,709],[1064,714],[1061,718],[1058,723],[1054,727],[1049,734],[1043,745],[1042,749],[1036,761],[1033,767],[1031,771],[1029,773],[1027,774],[1024,775],[1021,777],[1016,778],[1014,779],[1013,779],[1012,779],[1012,779],[1012,779],[1011,779],[1011,779]],"dx":[573,597],"dy":[573,597],"length":923.6324354853494,"timing":[295,313,328,344,360,377,395,411,428,444,461,479,494,511,527,544,561,579,594,611,628,645,661,678,694,710,727,744,761,777,794,811,827,844,862,878,894,911,929,945,961,977,994,1011,1027,1077]},{"start":[1011,778],"end":[1363,238],"points":[[1011,778],[1011,761],[1011,731],[1017,691],[1023,653],[1026,635],[1045,568],[1058,542],[1077,507],[1095,476],[1108,451],[1119,428],[1126,407],[1132,392],[1141,373],[1150,359],[1159,348],[1169,339],[1177,333],[1182,330],[1198,323],[1212,316],[1229,306],[1233,302],[1237,299],[1238,297],[1241,295],[1245,293],[1255,288],[1264,284],[1271,281],[1279,279],[1284,278],[1292,276],[1303,273],[1313,269],[1324,263],[1332,259],[1339,256],[1346,251],[1351,248],[1354,246],[1355,245],[1357,244],[1357,244],[1359,242],[1360,240],[1362,239],[1363,238],[1363,238]],"dx":[352,-540],"dy":[352,-540],"length":697.3906002009427,"timing":[311,328,345,361,377,394,411,427,445,461,477,494,511,528,544,561,577,594,611,628,644,660,679,694,711,727,744,761,778,793,810,828,844,861,877,894,911,928,945,961,978,994,1011,1027,1044,1062,1078,1094,1111,1153]},{"start":[1363,238],"end":[274,329],"points":[[1363,238],[1359,238],[1350,238],[1336,239],[1313,244],[1270,255],[1158,283],[1095,299],[1016,320],[968,332],[917,345],[881,354],[848,361],[804,370],[776,376],[741,383],[722,385],[689,390],[661,394],[632,398],[603,400],[584,400],[557,394],[538,387],[516,381],[479,375],[464,372],[446,370],[433,369],[420,369],[407,369],[396,370],[384,371],[373,371],[365,371],[360,369],[356,367],[352,365],[349,363],[346,361],[344,360],[342,358],[340,358],[339,358],[336,357],[335,356],[331,356],[327,356],[323,355],[319,354],[310,351],[304,348],[301,346],[292,341],[289,339],[285,336],[282,335],[281,334],[279,334],[277,333],[276,331],[275,330],[275,329],[274,329],[274,329]],"dx":[-1089,91],"dy":[-1089,91],"length":1123.766872978138,"timing":[243,261,278,295,311,328,344,361,377,394,411,428,444,460,477,494,511,527,544,561,578,594,611,628,645,661,677,694,710,728,744,761,777,795,810,828,843,860,878,894,910,927,944,960,978,994,1294,1310,1328,1343,1364,1377,1394,1411,1428,1444,1461,1478,1494,1511,1528,1544,1561,1578,1594]},{"start":[274,329],"end":[353,215],"points":[[274,329],[274,329],[274,329],[274,329],[275,329],[275,329],[275,329],[277,327],[282,323],[291,312],[299,302],[309,289],[317,278],[323,268],[331,257],[336,247],[339,243],[346,228],[349,223],[351,219],[352,218],[353,218],[353,218],[353,217],[353,216],[353,216],[353,216],[353,215],[353,215]],"dx":[79,-114],"dy":[79,-114],"length":140.9671211715786,"timing":[180,197,230,247,262,298,314,330,347,364,381,397,414,430,447,473,479,497,514,529,547,565,580,633,647,662,681,698,714]},{"start":[357,214],"end":[957,384],"points":[[357,214],[378,211],[417,211],[498,220],[631,274],[656,288],[695,308],[724,322],[739,329],[754,333],[762,334],[780,338],[792,342],[808,349],[821,354],[843,363],[866,369],[883,374],[896,376],[907,377],[917,378],[924,378],[932,379],[937,380],[944,381],[948,381],[950,382],[953,383],[954,383],[955,384],[956,384],[956,384],[957,384]],"dx":[600,170],"dy":[600,170],"length":633.1136884566572,"timing":[280,296,316,330,376,379,396,413,430,446,463,479,496,514,530,546,563,580,597,613,630,646,663,680,696,714,730,747,762,780,797,814,830]},{"start":[956,384],"end":[292,47],"points":[[956,384],[950,384],[938,382],[920,378],[896,374],[865,367],[814,354],[759,337],[662,304],[597,274],[519,235],[478,210],[441,183],[423,169],[408,155],[397,145],[387,136],[380,130],[369,121],[362,114],[356,107],[349,100],[345,95],[341,91],[339,88],[338,87],[337,86],[335,85],[332,83],[329,80],[326,76],[323,71],[320,67],[315,62],[308,57],[304,55],[302,53],[297,50],[295,49],[293,48],[293,48],[292,48],[292,47],[292,47]],"dx":[-664,-337],"dy":[-664,-337],"length":761.7730137433069,"timing":[246,262,279,297,313,329,345,362,379,397,413,429,446,463,480,496,513,530,546,563,580,596,613,630,646,662,680,696,713,729,746,764,780,796,812,830,847,863,879,897,912,930,946,979]},{"start":[295,48],"end":[923,443],"points":[[295,48],[298,50],[302,51],[308,54],[314,57],[321,60],[328,63],[336,67],[344,70],[362,77],[395,89],[470,124],[563,173],[625,210],[672,242],[714,274],[732,292],[754,319],[758,325],[776,349],[783,358],[793,370],[803,380],[811,387],[815,391],[820,393],[823,395],[828,398],[832,401],[837,407],[844,414],[851,420],[855,424],[858,426],[861,428],[864,429],[869,429],[875,430],[882,431],[891,434],[901,438],[909,440],[916,442],[919,443],[921,443],[922,443],[922,443],[923,443],[923,443],[923,443],[923,443]],"dx":[628,395],"dy":[628,395],"length":756.8652690757305,"timing":[97,113,130,146,163,180,197,213,229,247,263,280,296,313,330,347,363,380,397,413,429,446,463,480,496,512,530,546,563,580,596,613,630,646,663,680,696,713,730,746,763,779,797,813,829,847,863,880,896,913,947]},{"start":[933,459],"end":[1189,805],"points":[[933,459],[965,504],[998,548],[1049,614],[1058,627],[1072,647],[1087,668],[1100,686],[1107,697],[1107,698],[1111,701],[1117,707],[1124,714],[1131,722],[1138,730],[1148,743],[1154,753],[1162,765],[1169,779],[1173,784],[1178,794],[1180,797],[1181,799],[1182,799],[1182,800],[1183,800],[1184,801],[1185,802],[1187,803],[1188,804],[1189,805],[1189,805],[1189,805]],"dx":[256,346],"dy":[256,346],"length":433.0007446129874,"timing":[329,345,363,396,413,430,447,463,480,779,796,813,830,846,862,879,896,912,929,949,962,980,997,1012,1028,1063,1079,1097,1113,1130,1146,1162,1180]},{"start":[1189,801],"end":[916,132],"points":[[1189,801],[1185,787],[1172,759],[1148,705],[1122,643],[1099,583],[1076,522],[1043,444],[1010,361],[996,327],[988,305],[981,289],[979,283],[979,281],[978,280],[978,280],[978,279],[978,279],[978,279],[977,276],[975,266],[972,250],[968,231],[965,215],[962,198],[956,182],[949,174],[941,167],[933,159],[926,150],[921,141],[919,136],[917,131],[916,129],[916,129],[916,129],[916,129],[916,129],[916,130],[916,131],[916,131],[916,132],[916,132],[916,132],[916,132]],"dx":[-273,-669],"dy":[-273,-669],"length":733.5624275995873,"timing":[397,413,430,447,463,480,497,513,530,546,563,579,596,613,630,647,663,680,696,714,730,747,763,780,796,813,830,846,863,880,897,913,930,947,963,980,1019,1029,1047,1063,1080,1096,1112,1130,1163]},{"start":[916,133],"end":[1152,546],"points":[[916,133],[918,142],[923,158],[931,191],[939,219],[956,271],[975,315],[995,358],[1011,386],[1029,416],[1040,434],[1052,450],[1060,462],[1069,472],[1081,481],[1097,492],[1119,508],[1134,522],[1145,532],[1151,539],[1154,543],[1155,544],[1155,545],[1155,545],[1154,545],[1153,545],[1152,545],[1152,546],[1152,546]],"dx":[236,413],"dy":[236,413],"length":492.9609952315296,"timing":[296,312,329,345,362,379,396,413,429,447,463,479,496,513,529,546,563,580,596,612,629,646,663,679,696,713,729,746,763]},{"start":[1151,546],"end":[968,359],"points":[[1151,546],[1150,546],[1149,546],[1145,544],[1137,537],[1125,524],[1111,507],[1101,494],[1092,481],[1077,461],[1066,446],[1058,436],[1053,431],[1047,423],[1043,419],[1028,406],[1012,390],[1000,379],[987,365],[980,358],[974,353],[970,349],[969,348],[969,347],[968,347],[968,347],[968,347],[968,348],[968,349],[968,350],[968,351],[968,351],[968,352],[968,353],[968,354],[968,355],[968,356],[968,357],[968,358],[968,358],[968,359],[968,359],[968,359]],"dx":[-183,-187],"dy":[-183,-187],"length":284.8061133021691,"timing":[249,266,284,299,316,332,350,367,383,400,417,433,450,467,482,499,516,534,550,567,584,600,617,635,650,667,716,1016,1034,1050,1067,1100,1117,1133,1150,1166,1183,1200,1217,1233,1249,1267,1300]},{"start":[968,359],"end":[479,780],"points":[[968,359],[968,359],[968,358],[965,361],[954,371],[938,386],[916,407],[895,428],[874,449],[852,469],[818,500],[794,521],[765,549],[736,578],[710,602],[688,624],[665,645],[645,663],[624,678],[602,692],[588,699],[580,703],[573,706],[567,707],[560,709],[553,711],[545,714],[535,719],[524,726],[513,733],[503,741],[495,748],[490,752],[486,756],[484,758],[483,760],[483,762],[483,766],[482,770],[481,771],[479,776],[479,777],[479,778],[479,778],[479,779],[479,779],[479,780],[479,780],[479,780]],"dx":[-489,421],"dy":[-489,421],"length":657.3803043812651,"timing":[248,315,331,914,931,948,964,981,998,1014,1031,1047,1065,1081,1097,1115,1132,1148,1165,1181,1198,1214,1231,1247,1264,1281,1298,1314,1331,1348,1364,1382,1399,1415,1431,1448,1465,1481,1498,1514,1532,1548,1565,1581,1598,1615,1631,1648,1682]},{"start":[479,780],"end":[748,235],"points":[[479,780],[479,780],[479,780],[479,779],[479,779],[479,777],[499,721],[520,669],[548,614],[580,557],[613,505],[635,471],[656,433],[672,401],[686,372],[697,348],[709,325],[718,310],[726,294],[731,282],[734,272],[737,264],[740,254],[744,246],[747,240],[750,234],[750,234],[751,233],[751,233],[750,233],[750,234],[750,234],[750,234],[750,234],[749,234],[748,234],[748,235],[748,235]],"dx":[269,-545],"dy":[269,-545],"length":618.0341782827215,"timing":[179,196,229,246,263,280,312,329,346,362,379,396,412,429,446,463,479,496,512,530,546,563,580,596,613,629,646,663,712,729,746,763,779,795,812,830,846,880]},{"start":[748,235],"end":[1460,758],"points":[[748,235],[751,235],[765,240],[817,271],[863,306],[906,338],[947,371],[975,398],[997,424],[1025,464],[1045,490],[1065,512],[1093,543],[1116,564],[1132,577],[1146,588],[1166,603],[1186,618],[1223,645],[1261,671],[1304,704],[1336,726],[1369,749],[1386,757],[1398,763],[1411,767],[1416,768],[1420,768],[1424,768],[1427,768],[1430,768],[1433,767],[1435,767],[1436,767],[1436,767],[1436,767],[1437,766],[1437,765],[1438,764],[1439,763],[1439,762],[1441,762],[1441,761],[1442,761],[1443,761],[1445,761],[1448,761],[1451,760],[1454,759],[1457,759],[1459,758],[1460,758],[1460,758],[1460,758],[1460,758]],"dx":[712,523],"dy":[712,523],"length":913.0715620693876,"timing":[379,397,412,430,447,463,480,496,513,530,547,563,580,596,613,630,646,663,680,696,712,729,746,763,780,796,813,829,846,863,880,895,913,930,946,1013,1030,1046,1064,1080,1098,1113,1130,1147,1163,1180,1196,1214,1230,1247,1263,1279,1296,1330,1363]},{"start":[1460,758],"end":[303,101],"points":[[1460,758],[1459,757],[1458,756],[1457,755],[1456,754],[1455,754],[1453,754],[1451,753],[1449,753],[1447,753],[1446,753],[1442,753],[1437,753],[1426,753],[1409,752],[1369,746],[1324,735],[1238,708],[1150,678],[1042,636],[933,593],[868,567],[795,535],[730,505],[668,475],[614,449],[565,422],[518,392],[478,358],[445,321],[413,277],[398,256],[385,237],[376,225],[369,216],[360,209],[346,198],[333,188],[325,178],[314,166],[309,159],[304,154],[301,151],[299,150],[299,150],[299,149],[299,149],[299,149],[300,147],[300,144],[302,139],[303,132],[304,124],[305,119],[305,114],[305,112],[305,110],[305,109],[305,108],[305,107],[305,107],[305,106],[305,106],[304,104],[304,103],[304,101],[303,101],[303,101]],"dx":[-1157,-657],"dy":[-1157,-657],"length":1397.3242008779662,"timing":[64,81,97,114,131,147,163,181,197,214,231,247,264,281,298,314,331,347,364,380,397,415,431,448,464,480,498,515,531,547,564,581,599,614,630,647,666,681,697,714,731,747,764,781,798,814,831,865,881,897,914,930,948,965,980,997,1014,1031,1048,1065,1081,1098,1115,1131,1147,1164,1181,1197]},{"start":[303,102],"end":[303,498],"points":[[303,102],[300,116],[293,136],[289,153],[284,172],[278,198],[275,218],[272,240],[271,262],[270,286],[270,312],[270,350],[272,369],[274,387],[276,397],[278,407],[279,412],[281,419],[283,426],[286,435],[290,445],[293,455],[295,460],[298,465],[299,470],[300,474],[301,478],[302,481],[303,484],[303,488],[303,491],[303,494],[303,496],[303,497],[303,498],[303,498]],"dx":[0,396],"dy":[0,396],"length":404.62722545288483,"timing":[316,333,350,367,383,400,418,435,449,466,483,500,517,533,549,567,584,602,617,633,649,666,683,700,716,733,750,766,784,800,816,832,850,866,884,900]},{"start":[303,498],"end":[1184,176],"points":[[303,498],[304,496],[307,490],[320,471],[345,442],[382,408],[430,372],[484,337],[544,305],[604,279],[700,252],[768,242],[837,237],[905,235],[967,235],[1007,235],[1047,233],[1067,232],[1088,230],[1102,227],[1113,225],[1123,222],[1132,219],[1141,217],[1150,216],[1155,215],[1160,215],[1163,214],[1164,214],[1165,212],[1167,209],[1171,201],[1175,191],[1178,185],[1181,180],[1183,178],[1184,177],[1184,176],[1184,176]],"dx":[881,-322],"dy":[881,-322],"length":988.3813217581993,"timing":[265,281,297,313,331,347,363,380,396,414,431,447,464,480,498,514,530,546,564,581,597,614,631,648,665,681,697,713,731,746,764,780,798,814,831,847,864,880,897]},{"start":[1184,176],"end":[640,136],"points":[[1184,176],[1182,176],[1169,181],[1153,185],[1117,192],[1078,193],[1035,194],[988,191],[943,182],[912,178],[871,172],[833,169],[796,167],[759,167],[726,164],[706,162],[687,158],[671,153],[659,147],[652,144],[644,140],[641,139],[640,139],[640,139],[640,138],[640,138],[640,137],[640,137],[640,136],[640,136],[640,136]],"dx":[-544,-40],"dy":[-544,-40],"length":555.5263770893043,"timing":[234,250,267,283,300,318,334,350,367,384,400,417,434,450,468,484,501,517,534,550,568,584,600,617,633,650,667,683,700,717,767]},{"start":[644,137],"end":[928,510],"points":[[644,137],[657,145],[676,161],[724,207],[759,247],[799,297],[841,349],[868,381],[889,404],[902,418],[910,428],[914,431],[916,432],[916,433],[916,433],[917,433],[917,433],[917,434],[917,436],[919,443],[920,450],[924,460],[927,471],[930,479],[932,486],[933,491],[934,494],[934,495],[934,497],[933,499],[932,502],[931,505],[930,508],[929,509],[929,510],[928,510]],"dx":[284,373],"dy":[284,373],"length":486.51871643763974,"timing":[299,316,332,349,366,383,400,416,433,450,466,482,499,516,533,549,565,600,616,632,649,666,683,700,716,732,750,766,783,799,816,833,850,865,883,900]},{"start":[1159,671],"end":[417,261],"points":[[1159,671],[1159,671],[1158,671],[1158,672],[1157,672],[1157,672],[1155,673],[1153,674],[1150,675],[1143,676],[1128,677],[1098,676],[1059,666],[1005,648],[917,612],[865,583],[799,544],[745,507],[698,476],[667,459],[632,438],[617,430],[565,400],[540,383],[498,350],[477,329],[464,315],[451,302],[443,295],[440,292],[435,288],[433,287],[433,286],[433,285],[430,282],[428,278],[425,273],[422,268],[419,265],[418,263],[418,262],[417,262],[417,262],[417,261],[417,261]],"dx":[-742,-410],"dy":[-742,-410],"length":872.388000526086,"timing":[130,146,166,180,198,213,229,247,264,280,296,314,329,347,362,380,396,413,430,446,463,480,497,515,529,546,562,580,595,611,629,646,663,679,697,713,729,746,762,780,797,813,880,895,912]},{"start":[420,261],"end":[841,544],"points":[[420,261],[430,266],[458,282],[496,308],[547,345],[595,382],[627,409],[663,438],[714,476],[751,501],[771,514],[795,528],[806,533],[813,536],[817,537],[818,537],[820,538],[822,539],[825,541],[828,542],[832,543],[835,544],[836,544],[837,544],[838,544],[838,544],[839,544],[840,544],[840,544],[841,544],[841,544],[841,544],[841,544]],"dx":[421,283],"dy":[421,283],"length":510.42300840821093,"timing":[314,330,347,363,380,398,414,430,447,464,480,497,514,530,547,562,581,597,614,629,647,664,680,696,714,730,746,764,780,797,813,830,847]},{"start":[841,543],"end":[811,84],"points":[[841,543],[841,538],[841,525],[841,494],[825,423],[811,370],[801,321],[790,271],[785,232],[784,210],[784,195],[784,183],[784,171],[785,162],[786,157],[787,152],[788,147],[789,140],[792,133],[794,128],[796,123],[797,119],[797,117],[798,117],[799,115],[800,113],[801,110],[803,104],[804,100],[805,95],[806,93],[807,91],[807,90],[808,89],[809,88],[809,87],[810,86],[811,84],[811,84],[811,84]],"dx":[-30,-459],"dy":[-30,-459],"length":471.2106547103446,"timing":[284,301,318,334,351,369,385,401,418,434,450,467,484,501,517,534,550,568,584,601,617,634,651,667,684,700,717,734,751,767,784,801,817,834,850,867,884,901,918,952]},{"start":[811,85],"end":[1378,374],"points":[[811,85],[811,85],[811,85],[811,85],[811,86],[811,86],[811,86],[811,89],[818,98],[831,114],[879,158],[902,175],[960,216],[1006,245],[1042,268],[1081,289],[1141,308],[1163,313],[1182,317],[1202,320],[1216,321],[1227,321],[1238,323],[1253,330],[1256,330],[1268,331],[1286,336],[1316,346],[1333,353],[1350,362],[1363,368],[1369,371],[1373,373],[1375,374],[1376,374],[1377,374],[1377,374],[1377,374],[1377,374],[1378,374],[1378,374],[1378,374],[1378,374]],"dx":[567,289],"dy":[567,289],"length":653.7612166651314,"timing":[149,165,182,199,216,249,265,283,299,316,332,349,366,382,399,415,449,466,482,499,515,532,549,565,865,882,899,916,932,949,965,982,999,1016,1032,1048,1066,1082,1099,1115,1132,1150,1199]},{"start":[1377,374],"end":[331,720],"points":[[1377,374],[1371,378],[1350,389],[1324,400],[1292,410],[1239,425],[1191,438],[1107,463],[1048,483],[972,512],[903,545],[847,572],[792,597],[743,618],[709,633],[667,648],[634,660],[607,666],[581,670],[566,672],[540,673],[524,676],[512,680],[499,685],[494,688],[479,696],[469,700],[465,702],[453,707],[447,709],[442,711],[437,713],[431,715],[426,716],[420,716],[416,716],[409,716],[403,715],[401,714],[389,717],[377,719],[364,721],[356,721],[349,721],[345,721],[342,721],[339,721],[336,721],[334,720],[331,720],[331,720],[331,720]],"dx":[-1046,346],"dy":[-1046,346],"length":1111.8314476111495,"timing":[267,284,301,317,334,350,367,384,401,418,434,450,467,484,500,517,534,552,568,584,601,618,635,651,668,684,701,718,734,751,768,785,800,818,835,850,868,884,901,1201,1218,1234,1251,1267,1284,1301,1318,1334,1351,1367,1384,1401]},{"start":[331,719],"end":[369,104],"points":[[331,719],[332,719],[332,718],[332,718],[333,718],[333,717],[334,715],[336,710],[340,698],[348,669],[358,632],[367,587],[373,551],[380,507],[384,469],[389,435],[395,399],[407,350],[421,307],[434,275],[443,257],[439,253],[428,244],[415,231],[404,220],[392,208],[384,196],[380,191],[378,187],[378,184],[377,180],[376,172],[375,162],[374,151],[373,145],[373,139],[373,136],[373,134],[373,132],[373,128],[373,123],[373,118],[373,113],[372,110],[371,107],[371,106],[370,106],[370,106],[369,105],[369,104]],"dx":[38,-615],"dy":[38,-615],"length":660.2093115762668,"timing":[181,198,214,230,248,264,281,298,314,331,348,365,381,397,415,431,448,464,481,498,514,781,797,815,832,848,864,882,898,914,931,947,965,981,998,1014,1030,1048,1064,1082,1098,1115,1131,1147,1165,1181,1198,1214,1231,1248]},{"start":[368,106],"end":[1432,409],"points":[[368,106],[366,110],[365,112],[364,114],[364,114],[363,116],[362,118],[361,119],[361,121],[360,121],[360,122],[360,122],[360,122],[371,122],[447,156],[608,254],[765,355],[870,422],[944,467],[982,489],[1026,506],[1059,513],[1087,516],[1102,516],[1110,514],[1110,514],[1121,510],[1140,504],[1170,497],[1219,489],[1273,481],[1306,475],[1344,468],[1372,460],[1385,453],[1400,444],[1405,439],[1422,426],[1437,416],[1442,414],[1451,412],[1455,411],[1456,411],[1457,411],[1458,411],[1458,411],[1458,411],[1458,411],[1458,410],[1458,410],[1458,410],[1456,410],[1454,410],[1453,410],[1450,410],[1448,411],[1447,411],[1445,412],[1442,412],[1439,412],[1436,411],[1434,411],[1433,411],[1433,410],[1432,410],[1432,410],[1432,409],[1432,409]],"dx":[1064,303],"dy":[1064,303],"length":1273.7287455525354,"timing":[130,146,163,179,196,212,229,246,262,279,296,312,363,380,396,412,429,447,463,480,496,512,529,546,562,779,796,812,829,846,862,879,896,913,929,948,965,979,995,1012,1029,1045,1062,1080,1096,1146,1216,1232,1245,1263,1534,1546,1562,1579,1596,1614,1629,1645,1663,1679,1696,1712,1732,1745,1762,1779,1813,1863]},{"start":[1432,409],"end":[609,84],"points":[[1432,409],[1427,409],[1418,409],[1379,405],[1324,392],[1254,371],[1165,345],[1002,291],[881,251],[781,212],[687,166],[650,141],[629,122],[619,110],[612,101],[611,99],[611,97],[611,92],[610,89],[610,85],[609,84],[609,84]],"dx":[-823,-325],"dy":[-823,-325],"length":904.4707498939651,"timing":[265,282,298,315,331,348,365,381,397,415,431,448,464,482,498,514,815,831,848,865,881,898]},{"start":[609,85],"end":[1641,120],"points":[[609,85],[610,87],[612,89],[617,95],[620,99],[623,104],[628,108],[637,115],[657,124],[694,135],[775,153],[860,169],[957,188],[1060,209],[1166,237],[1234,254],[1316,274],[1380,280],[1411,280],[1439,270],[1456,253],[1477,225],[1493,208],[1510,196],[1522,189],[1530,186],[1542,182],[1549,180],[1555,179],[1561,176],[1568,171],[1574,165],[1578,159],[1583,153],[1588,147],[1594,141],[1602,138],[1608,137],[1615,136],[1618,136],[1621,135],[1623,134],[1626,133],[1631,129],[1635,126],[1638,122],[1640,121],[1641,120],[1641,120],[1641,120]],"dx":[1032,35],"dy":[1032,35],"length":1124.6873957245286,"timing":[130,147,164,180,197,213,231,247,263,282,296,313,330,347,363,380,397,414,431,447,463,480,497,513,530,547,563,580,597,614,630,646,664,680,696,714,731,747,763,781,797,814,830,846,863,880,897,913,930,964]},{"start":[1612,120],"end":[809,216],"points":[[1612,120],[1592,123],[1578,126],[1547,137],[1532,143],[1524,146],[1511,151],[1497,154],[1479,157],[1448,161],[1415,167],[1395,172],[1376,178],[1362,182],[1357,184],[1324,196],[1310,201],[1226,225],[1215,227],[1159,235],[1129,237],[1099,237],[1067,237],[1037,237],[1009,237],[983,238],[957,240],[932,243],[906,245],[889,245],[870,244],[851,237],[838,227],[831,221],[824,216],[820,213],[819,212],[819,212],[818,212],[818,212],[818,213],[817,213],[815,214],[814,214],[813,214],[812,215],[810,216],[810,216],[809,216]],"dx":[-803,96],"dy":[-803,96],"length":831.2206918328059,"timing":[12,29,46,62,79,96,111,129,146,162,179,195,212,229,246,263,281,295,312,329,346,362,379,395,412,429,445,462,480,496,512,528,546,563,579,595,611,628,645,662,679,695,713,729,745,762,777,795,829]},{"start":[810,216],"end":[624,646],"points":[[810,216],[811,217],[812,225],[809,241],[800,265],[787,294],[759,357],[738,403],[717,452],[704,484],[689,521],[682,539],[672,559],[665,574],[659,587],[655,597],[652,603],[648,611],[647,615],[645,619],[644,622],[643,623],[642,623],[642,623],[641,623],[640,626],[638,629],[637,631],[636,633],[634,634],[632,636],[630,638],[628,641],[627,643],[626,645],[625,646],[625,646],[624,646],[624,646]],"dx":[-186,430],"dy":[-186,430],"length":474.2157460949991,"timing":[245,262,279,296,313,329,346,362,379,396,413,429,445,462,479,495,512,529,546,563,580,596,613,629,646,663,679,695,712,729,746,763,779,796,813,829,846,863,895]},{"start":[624,646],"end":[365,207],"points":[[624,646],[624,646],[624,645],[624,645],[624,645],[624,643],[624,642],[623,636],[620,622],[612,568],[607,533],[603,493],[593,479],[581,465],[571,455],[559,443],[546,430],[539,420],[531,410],[521,395],[512,381],[505,369],[496,355],[486,342],[476,332],[464,325],[452,318],[435,307],[425,299],[418,291],[410,283],[406,277],[399,270],[395,267],[391,263],[388,261],[385,260],[384,259],[383,258],[382,258],[382,257],[382,255],[381,252],[381,248],[379,242],[378,238],[377,235],[376,230],[375,227],[374,224],[372,222],[371,220],[370,219],[369,217],[369,216],[368,214],[368,214],[367,213],[367,212],[366,209],[366,207],[365,207]],"dx":[-259,-439],"dy":[-259,-439],"length":537.3192912636758,"timing":[129,162,196,228,245,262,279,296,312,330,346,362,645,663,679,696,713,730,745,762,778,795,813,829,846,862,879,896,912,929,945,962,979,996,1012,1028,1046,1063,1079,1095,1112,1129,1146,1162,1179,1196,1211,1228,1245,1262,1279,1294,1312,1329,1346,1363,1378,1394,1413,1428,1446,1478]},{"start":[368,207],"end":[527,264],"points":[[368,207],[377,207],[391,207],[403,210],[418,216],[430,222],[437,226],[443,229],[448,231],[452,234],[458,237],[465,240],[473,245],[483,249],[493,252],[505,256],[515,259],[521,261],[526,264],[526,264],[527,264]],"dx":[159,57],"dy":[159,57],"length":171.3103643095532,"timing":[266,282,299,314,332,349,366,382,398,415,432,449,465,483,499,516,532,549,566,582,598]},{"start":[527,264],"end":[866,381],"points":[[527,264],[535,264],[563,273],[606,289],[653,308],[699,328],[730,342],[766,357],[795,370],[810,376],[833,381],[836,381],[846,382],[850,382],[851,382],[852,382],[853,382],[855,382],[858,381],[861,381],[863,381],[865,381],[866,381],[866,381],[866,381]],"dx":[339,117],"dy":[339,117],"length":361.8461257281112,"timing":[297,313,330,346,363,380,396,412,430,446,463,479,496,514,529,546,563,581,597,613,630,647,663,680,696]},{"start":[866,398],"end":[976,824],"points":[[866,398],[863,428],[858,470],[857,520],[857,577],[877,636],[910,695],[934,727],[952,749],[962,760],[970,768],[974,771],[975,771],[975,767],[975,762],[974,759],[974,758],[974,757],[974,758],[975,764],[976,773],[977,784],[977,796],[977,807],[977,818],[976,826],[976,833],[976,840],[976,843],[976,845],[976,846],[976,847],[976,844],[976,840],[976,836],[976,834],[976,831],[976,828],[976,826],[976,825],[976,824],[976,824],[976,824],[976,824]],"dx":[110,426],"dy":[110,426],"length":537.368807609485,"timing":[316,333,350,367,382,400,416,433,450,466,483,501,517,533,550,566,583,600,650,667,684,700,716,733,750,766,784,800,816,834,850,866,1167,1183,1200,1216,1233,1250,1267,1283,1298,1316,1383,1433]},{"start":[976,823],"end":[597,229],"points":[[976,823],[976,823],[976,823],[975,822],[973,820],[965,816],[931,790],[871,735],[797,656],[737,586],[693,532],[650,475],[621,434],[603,405],[595,388],[588,369],[583,352],[581,336],[578,316],[577,303],[576,289],[576,281],[576,273],[575,269],[575,268],[575,267],[576,264],[577,260],[578,256],[579,254],[581,250],[584,245],[586,243],[587,240],[589,239],[591,236],[593,233],[594,231],[595,229],[596,229],[596,229],[597,229],[597,229]],"dx":[-379,-594],"dy":[-379,-594],"length":751.3915104759185,"timing":[167,184,201,218,235,250,267,284,301,318,334,350,367,384,401,418,434,450,467,484,502,518,534,551,568,684,701,718,735,751,768,783,801,818,834,851,867,884,901,917,934,951,1001]},{"start":[598,229],"end":[1489,528],"points":[[598,229],[606,233],[649,253],[732,296],[847,355],[921,388],[975,411],[1023,428],[1030,430],[1030,430],[1047,430],[1139,452],[1193,469],[1234,481],[1275,492],[1295,499],[1318,506],[1333,510],[1340,512],[1351,514],[1359,514],[1373,513],[1389,513],[1404,513],[1415,516],[1424,518],[1430,519],[1434,520],[1436,519],[1439,516],[1441,515],[1447,511],[1452,509],[1456,507],[1459,506],[1460,506],[1461,505],[1462,505],[1463,504],[1463,503],[1464,503],[1466,503],[1468,503],[1470,504],[1474,507],[1480,513],[1482,516],[1485,520],[1486,523],[1488,526],[1488,527],[1489,528],[1489,528]],"dx":[891,299],"dy":[891,299],"length":966.7554013326891,"timing":[261,277,294,311,328,345,362,377,395,661,678,694,712,728,745,761,778,795,811,828,844,861,878,895,913,928,944,962,978,994,1011,1028,1045,1061,1077,1094,1111,1128,1144,1162,1178,1194,1211,1228,1244,1261,1277,1294,1311,1328,1344,1361,1377]},{"start":[1488,528],"end":[985,551],"points":[[1488,528],[1488,528],[1487,529],[1487,529],[1485,529],[1484,529],[1480,531],[1467,538],[1451,544],[1429,551],[1403,557],[1382,561],[1356,567],[1328,576],[1315,580],[1284,586],[1248,586],[1188,568],[1146,555],[1114,544],[1084,533],[1072,530],[1063,528],[1059,528],[1055,528],[1053,528],[1048,530],[1044,530],[1042,531],[1040,531],[1038,531],[1038,531],[1036,532],[1032,535],[1024,540],[1015,546],[1004,550],[999,551],[994,552],[990,552],[987,552],[985,552],[985,552],[985,551]],"dx":[-503,23],"dy":[-503,23],"length":528.15605723732,"timing":[178,195,212,229,245,261,278,295,312,328,345,362,378,394,412,428,445,462,479,495,512,529,545,562,580,596,612,628,646,662,678,695,712,729,745,762,779,795,812,829,846,862,879,912]},{"start":[982,548],"end":[840,329],"points":[[982,548],[969,534],[948,510],[918,475],[900,450],[881,418],[873,402],[866,384],[861,371],[859,366],[857,362],[855,358],[853,356],[852,355],[851,354],[850,353],[848,350],[847,346],[846,341],[845,337],[843,333],[843,332],[842,331],[841,331],[841,330],[840,330],[840,329]],"dx":[-142,-219],"dy":[-142,-219],"length":265.4823407322411,"timing":[297,314,331,348,364,381,398,414,431,448,463,481,497,515,531,547,564,581,598,614,631,647,665,681,698,714,731]},{"start":[840,329],"end":[137,236],"points":[[840,329],[821,330],[772,335],[689,346],[608,364],[546,376],[514,384],[494,385],[488,385],[484,385],[474,384],[464,381],[455,378],[433,371],[412,364],[386,354],[359,343],[330,331],[303,321],[278,311],[255,303],[242,297],[218,285],[207,278],[202,276],[188,271],[180,269],[176,268],[171,268],[168,267],[165,267],[163,266],[161,265],[159,264],[157,262],[155,261],[153,259],[151,259],[150,258],[149,257],[148,255],[146,248],[144,244],[142,240],[139,238],[137,237],[137,236]],"dx":[-703,-93],"dy":[-703,-93],"length":747.512089541589,"timing":[314,332,348,363,380,396,413,431,447,697,714,730,747,763,781,796,814,830,847,863,881,897,914,930,946,964,980,997,1013,1030,1047,1063,1080,1097,1113,1130,1147,1164,1180,1197,1213,1230,1247,1263,1280,1297,1313]},{"start":[137,236],"end":[993,236],"points":[[137,236],[142,236],[160,233],[219,227],[369,226],[563,232],[643,244],[722,260],[779,275],[833,289],[864,297],[903,304],[923,307],[943,307],[961,307],[976,304],[990,301],[1002,299],[1010,299],[1016,299],[1018,299],[1020,299],[1020,298],[1020,289],[1018,279],[1017,273],[1015,267],[1015,264],[1014,262],[1014,262],[1013,260],[1009,256],[1004,249],[1000,244],[996,239],[994,237],[994,236],[993,236],[993,236]],"dx":[856,0],"dy":[856,0],"length":964.4879445846296,"timing":[249,265,281,298,315,332,348,365,381,399,415,431,448,465,482,498,515,532,548,565,581,598,614,632,648,665,681,698,716,732,748,765,782,799,816,832,848,865,899]},{"start":[997,244],"end":[1566,516],"points":[[997,244],[1020,287],[1055,336],[1102,400],[1129,432],[1138,442],[1150,458],[1158,458],[1181,459],[1214,464],[1253,472],[1343,493],[1395,505],[1430,514],[1462,522],[1480,526],[1491,529],[1502,530],[1515,531],[1528,532],[1534,533],[1542,534],[1543,534],[1545,534],[1547,534],[1549,534],[1551,534],[1552,534],[1554,533],[1556,530],[1558,527],[1560,525],[1562,523],[1563,522],[1563,522],[1563,521],[1564,520],[1565,518],[1565,517],[1566,516],[1566,516],[1566,516]],"dx":[569,272],"dy":[569,272],"length":697.5163627002843,"timing":[315,331,348,364,382,398,414,648,665,681,697,715,731,748,764,781,798,815,831,848,865,881,897,915,931,948,964,980,998,1015,1031,1047,1064,1082,1099,1115,1131,1147,1165,1181,1198,1214]},{"start":[1564,517],"end":[1193,639],"points":[[1564,517],[1558,522],[1547,531],[1537,537],[1520,549],[1503,559],[1489,567],[1468,582],[1449,591],[1429,597],[1401,599],[1383,600],[1366,601],[1343,603],[1324,606],[1302,611],[1278,615],[1262,617],[1246,620],[1234,623],[1225,626],[1217,629],[1213,631],[1208,632],[1205,633],[1201,635],[1198,636],[1194,638],[1193,639],[1193,639],[1193,639]],"dx":[-371,122],"dy":[-371,122],"length":399.452880880933,"timing":[281,297,314,331,347,364,380,398,415,431,447,464,480,497,514,530,547,564,581,597,614,631,647,666,681,697,714,730,747,763,797]},{"start":[1195,638],"end":[1527,672],"points":[[1195,638],[1202,633],[1211,627],[1228,620],[1247,618],[1301,635],[1363,672],[1414,697],[1461,715],[1494,723],[1515,727],[1530,727],[1538,727],[1541,721],[1541,715],[1542,711],[1542,707],[1543,706],[1543,705],[1542,701],[1538,695],[1534,688],[1531,683],[1529,679],[1528,676],[1528,674],[1528,673],[1528,673],[1527,673],[1527,672],[1527,672],[1527,672],[1527,672]],"dx":[332,34],"dy":[332,34],"length":432.29012801021616,"timing":[299,316,333,349,366,383,400,415,432,449,466,483,498,516,532,549,566,583,599,633,649,666,682,699,716,732,749,765,782,799,815,832,866]},{"start":[1527,672],"end":[1182,219],"points":[[1527,672],[1526,674],[1526,675],[1524,676],[1522,676],[1521,677],[1517,677],[1513,677],[1508,675],[1496,667],[1470,649],[1421,608],[1379,569],[1328,516],[1297,480],[1266,442],[1253,422],[1240,403],[1232,387],[1222,365],[1209,331],[1204,316],[1198,298],[1195,286],[1193,279],[1192,273],[1191,269],[1191,268],[1191,267],[1191,267],[1191,264],[1191,256],[1191,246],[1190,236],[1190,234],[1189,231],[1189,231],[1188,230],[1187,229],[1186,228],[1185,226],[1184,223],[1183,220],[1182,219],[1182,219],[1182,219]],"dx":[-345,-453],"dy":[-345,-453],"length":602.0239575234029,"timing":[178,196,212,229,246,263,279,295,312,329,345,363,379,396,412,429,446,462,480,495,512,529,546,562,579,594,612,629,644,661,694,711,731,745,761,778,795,813,829,845,862,879,896,911,928,995]},{"start":[1183,223],"end":[240,422],"points":[[1183,223],[1184,225],[1184,226],[1184,227],[1184,228],[1177,230],[1159,232],[1132,235],[1081,243],[1002,259],[904,284],[772,319],[679,341],[574,372],[528,396],[512,407],[488,432],[476,450],[465,450],[451,449],[437,449],[416,449],[398,449],[385,449],[373,449],[355,447],[339,445],[327,443],[313,441],[302,439],[291,436],[280,434],[270,432],[265,430],[257,428],[253,426],[250,425],[246,423],[243,422],[241,422],[240,422]],"dx":[-943,199],"dy":[-943,199],"length":999.7969157067869,"timing":[366,384,401,417,434,451,467,484,500,517,534,551,568,584,601,617,634,651,917,933,951,967,983,1001,1017,1034,1051,1067,1084,1100,1116,1135,1150,1168,1184,1201,1217,1233,1250,1266,1284]},{"start":[240,422],"end":[1481,286],"points":[[240,422],[240,422],[240,423],[240,423],[240,423],[240,424],[240,425],[240,425],[240,425],[242,425],[247,422],[276,408],[381,380],[626,375],[861,397],[986,409],[1108,413],[1159,413],[1208,410],[1238,404],[1263,393],[1302,373],[1342,347],[1372,328],[1382,323],[1395,314],[1401,311],[1403,310],[1404,309],[1406,307],[1409,303],[1411,299],[1412,298],[1413,297],[1414,297],[1416,297],[1419,296],[1423,295],[1426,295],[1429,295],[1433,295],[1437,294],[1440,294],[1443,293],[1447,292],[1451,292],[1455,291],[1459,291],[1464,291],[1466,290],[1467,290],[1469,289],[1472,288],[1474,287],[1477,287],[1478,286],[1480,286],[1480,286],[1481,286]],"dx":[1241,-136],"dy":[1241,-136],"length":1288.0484130461662,"timing":[129,162,195,211,229,245,261,279,296,312,329,346,362,379,395,412,429,446,461,479,495,513,529,544,562,579,595,613,629,645,662,679,696,712,728,745,762,779,795,812,829,846,863,878,894,912,929,945,962,979,995,1013,1028,1045,1062,1078,1096,1112,1129]},{"start":[1372,574],"end":[1258,815],"points":[[1372,574],[1372,574],[1372,574],[1371,573],[1371,572],[1370,571],[1370,570],[1368,567],[1366,565],[1364,563],[1362,561],[1357,561],[1349,568],[1338,583],[1328,604],[1321,619],[1313,640],[1308,657],[1301,680],[1296,700],[1291,714],[1286,732],[1284,741],[1280,752],[1278,759],[1275,768],[1272,775],[1270,780],[1268,784],[1267,787],[1266,788],[1263,795],[1261,802],[1260,807],[1259,812],[1258,814],[1258,814],[1258,815]],"dx":[-114,241],"dy":[-114,241],"length":297.43059453849446,"timing":[101,116,130,146,163,180,196,213,230,245,263,279,296,312,329,345,363,379,396,412,429,446,462,479,496,512,529,546,562,580,596,612,629,645,662,680,695,713]},{"start":[1258,814],"end":[1548,478],"points":[[1258,814],[1260,812],[1272,794],[1287,772],[1303,745],[1320,716],[1336,689],[1353,658],[1373,630],[1391,601],[1408,577],[1422,554],[1434,534],[1441,521],[1449,508],[1456,500],[1460,496],[1466,491],[1472,488],[1482,483],[1490,481],[1494,480],[1500,479],[1507,477],[1512,475],[1522,475],[1528,475],[1535,479],[1539,482],[1544,485],[1546,487],[1548,487],[1549,488],[1550,488],[1551,488],[1551,488],[1550,488],[1550,488],[1549,486],[1548,483],[1548,480],[1548,479],[1548,478]],"dx":[290,-336],"dy":[290,-336],"length":488.6974352491089,"timing":[298,313,330,347,364,379,396,413,428,447,463,479,496,514,529,546,563,579,596,613,630,647,663,680,697,712,730,746,765,779,797,813,829,847,862,879,1135,1147,1164,1180,1197,1214,1230]},{"start":[1544,478],"end":[259,582],"points":[[1544,478],[1542,478],[1540,478],[1539,478],[1537,478],[1535,478],[1533,478],[1531,479],[1529,480],[1528,480],[1527,481],[1526,481],[1526,481],[1525,481],[1525,482],[1523,482],[1518,484],[1506,488],[1484,495],[1436,500],[1319,500],[1043,480],[850,469],[723,467],[623,465],[549,464],[506,463],[471,463],[454,462],[453,462],[436,473],[417,487],[394,502],[367,519],[349,528],[330,537],[317,544],[310,547],[300,552],[295,555],[287,561],[282,565],[278,567],[274,569],[272,571],[271,571],[269,573],[266,575],[263,576],[261,578],[260,580],[259,581],[259,582],[259,582]],"dx":[-1285,104],"dy":[-1285,104],"length":1326.393112887744,"timing":[0,15,31,48,64,81,97,114,131,147,165,182,198,215,232,247,264,281,298,315,332,348,364,381,398,416,431,447,465,722,746,765,780,798,813,831,847,865,880,898,915,931,948,964,982,998,1014,1031,1048,1065,1081,1098,1114,1148]},{"start":[259,582],"end":[1051,181],"points":[[259,582],[264,576],[282,559],[359,500],[453,451],[588,405],[685,383],[745,372],[784,365],[816,357],[839,348],[858,335],[868,326],[879,314],[889,304],[897,296],[905,289],[914,281],[920,277],[925,273],[930,270],[933,269],[937,267],[943,263],[950,259],[954,258],[958,255],[964,252],[970,248],[977,241],[988,232],[997,223],[1002,217],[1007,212],[1014,203],[1025,189],[1038,168],[1044,158],[1051,147],[1055,141],[1057,138],[1057,138],[1057,138],[1057,138],[1057,138],[1058,138],[1058,138],[1058,139],[1058,142],[1058,146],[1058,150],[1058,152],[1058,153],[1058,154],[1058,155],[1057,157],[1055,162],[1053,168],[1052,172],[1051,176],[1051,179],[1051,181],[1051,181]],"dx":[792,-401],"dy":[792,-401],"length":988.582560858556,"timing":[276,299,314,331,348,364,381,397,414,431,448,464,482,498,514,531,548,565,581,598,615,631,646,665,681,698,714,732,748,764,781,797,814,831,847,864,880,898,914,930,948,964,980,998,1014,1030,1272,1280,1298,1315,1331,1348,1364,1381,1398,1414,1431,1447,1465,1481,1498,1515,1565]},{"start":[1050,181],"end":[1139,218],"points":[[1050,181],[1050,181],[1050,181],[1050,181],[1050,182],[1050,183],[1052,186],[1055,191],[1060,197],[1063,200],[1067,203],[1070,205],[1072,205],[1075,206],[1081,207],[1099,212],[1109,215],[1115,217],[1120,218],[1123,219],[1125,219],[1126,219],[1127,219],[1129,219],[1131,219],[1133,219],[1135,219],[1136,219],[1137,219],[1138,219],[1138,219],[1138,219],[1138,219],[1138,219],[1139,218],[1139,218]],"dx":[89,37],"dy":[89,37],"length":103.46189925691678,"timing":[66,73,89,122,266,286,304,320,337,354,369,385,403,420,436,453,469,487,502,520,537,553,570,586,603,619,637,653,670,686,703,720,737,752,770,785]},{"start":[1139,218],"end":[1028,83],"points":[[1139,218],[1138,218],[1138,218],[1137,218],[1137,218],[1133,215],[1114,198],[1089,165],[1014,47],[996,23],[988,14],[980,5],[1005,32],[1014,48],[1019,57],[1024,65],[1028,70],[1029,71],[1030,73],[1030,74],[1030,75],[1030,77],[1030,78],[1030,79],[1029,80],[1029,82],[1028,82],[1028,83],[1028,83],[1028,83]],"dx":[-111,-135],"dy":[-111,-135],"length":364.14803766654023,"timing":[280,302,317,334,351,368,383,400,418,434,451,466,718,733,751,768,790,800,817,834,851,867,884,901,917,934,951,967,984,1017]},{"start":[1028,83],"end":[101,781],"points":[[1028,83],[1009,97],[979,122],[945,150],[878,204],[800,264],[659,368],[567,434],[491,490],[406,550],[337,596],[273,640],[235,664],[207,681],[184,696],[171,705],[156,716],[144,726],[136,733],[130,740],[127,744],[124,748],[123,750],[122,753],[120,755],[119,758],[118,760],[118,761],[117,762],[117,762],[117,762],[117,762],[117,762],[117,763],[117,763],[116,765],[113,768],[111,771],[108,774],[106,776],[104,777],[103,777],[102,778],[102,779],[102,780],[101,780],[101,781],[101,781]],"dx":[-927,698],"dy":[-927,698],"length":1166.5162101041308,"timing":[303,330,346,362,379,396,413,429,445,463,480,496,513,528,546,562,579,596,613,628,646,662,679,695,713,728,746,763,779,804,830,845,862,880,1160,1179,1196,1213,1229,1246,1262,1280,1296,1313,1329,1345,1362,1396]},{"start":[101,780],"end":[1257,111],"points":[[101,780],[101,780],[101,780],[101,780],[101,780],[101,779],[102,777],[107,771],[124,755],[171,718],[280,647],[424,577],[549,526],[694,462],[774,421],[859,367],[923,316],[979,276],[1029,244],[1060,227],[1091,209],[1116,194],[1142,178],[1156,170],[1167,163],[1179,159],[1188,156],[1197,153],[1203,152],[1208,151],[1211,150],[1215,149],[1220,145],[1226,141],[1229,139],[1233,137],[1234,137],[1235,136],[1236,136],[1237,135],[1240,133],[1245,130],[1247,128],[1249,126],[1251,124],[1251,122],[1252,122],[1252,121],[1252,121],[1253,120],[1253,118],[1254,116],[1255,114],[1256,112],[1257,111],[1257,111]],"dx":[1156,-669],"dy":[1156,-669],"length":1348.6360417958178,"timing":[161,184,198,217,232,249,265,282,298,315,332,349,365,382,398,415,431,448,464,480,498,515,532,548,565,582,599,615,632,648,665,682,699,716,731,749,765,781,799,815,831,849,866,881,899,914,932,947,965,982,999,1015,1030,1048,1066,1098]},{"start":[1257,111],"end":[693,615],"points":[[1257,111],[1252,115],[1221,142],[1181,176],[1131,216],[1081,258],[1005,322],[959,364],[904,419],[875,452],[843,489],[818,518],[806,532],[790,550],[779,562],[769,573],[764,578],[756,586],[750,592],[739,603],[734,608],[729,612],[727,614],[726,614],[725,614],[723,615],[718,619],[710,624],[704,629],[699,632],[695,634],[694,634],[693,634],[693,634],[693,633],[693,633],[693,632],[693,632],[693,631],[693,627],[693,625],[693,621],[693,619],[693,618],[693,617],[693,617],[693,616],[693,616],[693,615],[693,615],[693,615]],"dx":[-564,504],"dy":[-564,504],"length":791.4913850631762,"timing":[273,296,313,330,346,362,380,397,412,429,447,464,479,497,512,530,546,563,580,597,612,630,645,663,680,697,714,730,746,763,779,797,814,828,845,879,1084,1097,1114,1130,1147,1163,1180,1196,1214,1231,1246,1269,1285,1301,1346]},{"start":[693,614],"end":[1221,167],"points":[[693,614],[740,581],[811,529],[898,470],[955,434],[1001,406],[1017,398],[1038,386],[1046,382],[1048,381],[1052,380],[1060,380],[1069,378],[1083,375],[1103,368],[1119,359],[1137,347],[1158,331],[1179,312],[1194,298],[1206,285],[1212,280],[1216,274],[1220,269],[1222,265],[1225,259],[1229,252],[1231,247],[1233,243],[1234,241],[1234,241],[1234,240],[1234,236],[1232,229],[1230,219],[1229,211],[1228,203],[1226,197],[1226,194],[1225,191],[1225,189],[1224,186],[1223,182],[1222,178],[1222,174],[1221,170],[1221,168],[1221,167],[1221,167],[1221,167],[1221,167]],"dx":[528,-447],"dy":[528,-447],"length":743.2297441347263,"timing":[1622,1648,1665,1681,1699,1716,1732,1749,1765,1781,1799,1816,1832,1848,1865,1882,1898,1915,1932,1949,1965,1982,1998,2015,2032,2048,2065,2081,2099,2115,2132,2148,2165,2181,2199,2215,2232,2249,2265,2282,2298,2315,2331,2348,2365,2382,2398,2415,2432,2463,2496]},{"start":[1221,167],"end":[814,284],"points":[[1221,167],[1219,167],[1210,171],[1188,182],[1163,195],[1127,212],[1093,227],[1031,251],[989,264],[941,280],[911,289],[891,294],[877,297],[866,300],[861,300],[858,301],[856,301],[855,301],[854,300],[851,300],[847,300],[840,300],[834,300],[828,300],[823,298],[820,295],[820,294],[819,292],[818,291],[817,291],[816,291],[815,290],[814,289],[814,288],[814,287],[814,285],[814,284],[814,284],[814,284]],"dx":[-407,117],"dy":[-407,117],"length":442.9819253299534,"timing":[262,283,299,316,333,349,366,382,399,416,432,449,466,483,499,515,532,549,565,583,599,616,632,648,665,682,699,716,732,749,766,782,799,816,832,849,866,883,899]},{"start":[815,284],"end":[1591,254],"points":[[815,284],[815,284],[815,284],[815,284],[816,284],[816,284],[816,284],[818,283],[854,275],[904,269],[970,267],[1044,266],[1092,266],[1138,266],[1162,266],[1190,266],[1211,266],[1236,266],[1259,266],[1275,267],[1286,267],[1296,267],[1306,267],[1315,266],[1325,263],[1334,259],[1342,255],[1348,252],[1355,249],[1362,246],[1369,245],[1376,244],[1383,244],[1396,245],[1419,255],[1429,261],[1437,265],[1445,270],[1449,272],[1451,273],[1451,273],[1452,273],[1454,273],[1465,273],[1484,273],[1508,274],[1526,275],[1545,276],[1553,276],[1559,277],[1562,277],[1562,277],[1562,277],[1563,277],[1563,277],[1563,276],[1564,276],[1565,275],[1566,273],[1567,272],[1569,271],[1571,269],[1573,268],[1574,267],[1575,266],[1576,265],[1577,264],[1579,263],[1581,262],[1582,260],[1584,259],[1585,258],[1587,257],[1589,255],[1590,255],[1591,254]],"dx":[776,-30],"dy":[776,-30],"length":798.7953235966843,"timing":[106,122,145,178,235,259,284,657,684,700,717,734,750,766,785,801,818,834,850,868,884,901,917,933,951,967,983,1000,1017,1034,1051,1067,1083,1100,1117,1133,1151,1167,1184,1200,1217,1234,1451,1468,1483,1500,1517,1533,1551,1567,1584,1601,1617,1637,1653,1666,1684,1700,1717,1734,1751,1767,1784,1801,1817,1834,1850,1867,1884,1900,1917,1933,1951,1966,1984,2017]},{"start":[1590,254],"end":[607,785],"points":[[1590,254],[1589,255],[1588,256],[1586,259],[1582,263],[1577,267],[1531,296],[1498,313],[1323,391],[1231,424],[1135,457],[1067,486],[1016,517],[970,554],[939,583],[905,617],[887,635],[867,654],[852,668],[833,685],[805,707],[773,731],[741,750],[720,764],[712,769],[692,781],[680,789],[670,794],[663,796],[657,798],[649,799],[644,799],[639,799],[633,799],[630,799],[626,799],[623,798],[620,797],[618,795],[616,793],[614,791],[613,790],[612,789],[611,788],[610,787],[609,787],[607,786],[607,785],[607,785]],"dx":[-983,531],"dy":[-983,531],"length":1148.8667649421477,"timing":[197,204,218,234,251,268,284,300,318,334,351,368,384,401,418,434,452,468,485,500,517,535,551,568,583,607,618,633,651,668,684,700,718,735,751,768,785,800,816,834,851,868,884,901,918,935,951,967,1000]},{"start":[607,785],"end":[1017,728],"points":[[607,785],[613,778],[629,763],[652,747],[679,733],[705,721],[731,714],[755,709],[791,706],[803,706],[825,706],[839,706],[850,706],[860,706],[870,705],[883,703],[896,703],[907,703],[917,703],[925,705],[932,706],[938,706],[942,706],[945,706],[947,706],[950,706],[954,706],[959,706],[965,706],[966,707],[969,708],[971,708],[974,710],[984,716],[993,720],[1001,723],[1008,726],[1012,728],[1014,728],[1016,728],[1017,728],[1017,728],[1017,728],[1017,728]],"dx":[410,-57],"dy":[410,-57],"length":437.62929002121456,"timing":[247,266,283,300,316,332,350,366,383,399,416,433,450,466,482,499,516,533,548,566,583,600,615,633,650,667,683,700,716,733,749,767,782,800,817,832,849,866,883,899,916,933,949,983]},{"start":[1017,727],"end":[1206,75],"points":[[1017,727],[1020,719],[1027,705],[1043,676],[1064,637],[1089,587],[1114,525],[1146,426],[1169,341],[1184,286],[1187,273],[1199,231],[1203,220],[1205,212],[1208,208],[1210,205],[1212,203],[1213,201],[1213,199],[1214,198],[1214,196],[1214,191],[1213,180],[1211,164],[1209,151],[1207,135],[1206,122],[1205,111],[1205,103],[1205,96],[1205,89],[1205,83],[1205,75],[1205,72],[1205,70],[1206,70],[1206,71],[1206,74],[1206,75],[1206,75]],"dx":[189,-652],"dy":[189,-652],"length":702.061648299976,"timing":[292,317,333,351,367,384,400,417,434,451,466,484,501,517,534,551,567,583,601,617,634,650,667,684,700,717,734,751,767,784,801,817,833,850,867,884,907,934,951,1017]},{"start":[1206,75],"end":[1277,47],"points":[[1206,75],[1205,75],[1205,76],[1204,76],[1204,78],[1202,79],[1201,80],[1200,81],[1200,82],[1200,83],[1200,83],[1200,83],[1200,82],[1200,81],[1202,80],[1204,79],[1207,77],[1223,71],[1242,62],[1258,54],[1275,45],[1282,41],[1288,38],[1291,37],[1292,36],[1293,36],[1293,36],[1293,36],[1292,36],[1292,36],[1291,36],[1290,38],[1288,40],[1287,42],[1286,42],[1285,43],[1284,43],[1283,43],[1282,44],[1280,45],[1278,46],[1277,47],[1277,47]],"dx":[71,-28],"dy":[71,-28],"length":138.74020637184697,"timing":[130,146,163,180,196,214,230,247,263,279,296,332,346,363,380,397,414,430,446,463,480,497,513,530,546,564,580,641,664,680,697,714,730,745,764,780,796,814,830,847,863,880,914]},{"start":[1277,47],"end":[1398,351],"points":[[1277,47],[1277,47],[1277,48],[1277,48],[1277,48],[1277,51],[1277,61],[1277,90],[1282,128],[1300,179],[1314,212],[1323,229],[1333,247],[1346,266],[1355,282],[1361,293],[1368,307],[1372,313],[1375,319],[1376,322],[1377,323],[1377,324],[1378,324],[1378,324],[1378,324],[1379,324],[1381,328],[1383,332],[1386,336],[1388,341],[1391,345],[1393,348],[1395,349],[1396,351],[1397,351],[1397,351],[1398,351]],"dx":[121,304],"dy":[121,304],"length":336.54899612628344,"timing":[221,237,250,267,283,299,317,333,350,367,384,400,417,433,450,466,483,499,516,534,550,566,584,627,650,666,683,700,717,733,750,767,783,800,817,832,850]},{"start":[1398,351],"end":[366,331],"points":[[1398,351],[1395,351],[1387,352],[1376,352],[1358,350],[1334,345],[1283,337],[1193,328],[1123,325],[1031,320],[944,316],[865,311],[799,308],[744,308],[689,308],[636,311],[579,318],[522,324],[466,329],[445,330],[423,331],[409,332],[398,333],[388,334],[382,336],[376,337],[371,338],[369,338],[367,338],[365,336],[364,334],[364,333],[364,332],[364,332],[364,332],[365,332],[366,331],[366,331]],"dx":[-1032,-20],"dy":[-1032,-20],"length":1044.49220302095,"timing":[244,266,283,300,316,333,349,367,382,399,416,433,449,466,483,500,516,533,550,566,583,599,616,633,649,666,683,699,716,733,749,766,783,800,816,833,849,883]},{"start":[366,331],"end":[572,702],"points":[[366,331],[366,331],[367,331],[371,331],[388,332],[420,349],[467,386],[498,423],[527,465],[530,473],[543,502],[545,513],[546,525],[546,536],[545,553],[545,580],[545,599],[545,608],[547,619],[548,631],[551,645],[555,665],[560,678],[565,688],[569,696],[571,700],[572,701],[572,702],[572,702]],"dx":[206,371],"dy":[206,371],"length":462.8413930278244,"timing":[248,265,281,298,315,332,347,364,382,398,414,431,448,465,481,498,515,531,548,565,581,598,615,631,648,665,681,698,714]},{"start":[572,702],"end":[386,564],"points":[[572,702],[572,701],[572,701],[571,700],[570,700],[567,698],[561,696],[548,692],[527,686],[506,679],[501,677],[467,659],[449,645],[439,635],[427,624],[420,617],[414,611],[411,608],[409,607],[408,605],[407,605],[406,604],[406,603],[405,602],[404,600],[401,597],[400,594],[397,587],[395,583],[392,576],[390,573],[389,570],[388,569],[387,567],[387,566],[386,565],[386,564],[386,564],[386,564]],"dx":[-186,-138],"dy":[-186,-138],"length":243.10743421532868,"timing":[304,315,331,347,365,381,398,415,430,447,465,481,498,514,531,548,564,581,597,614,631,648,664,683,698,714,730,748,764,781,798,814,831,848,865,880,897,913,948]},{"start":[387,563],"end":[879,204],"points":[[387,563],[392,559],[464,501],[565,426],[680,347],[751,304],[805,274],[857,247],[881,237],[894,232],[904,229],[908,227],[910,227],[910,226],[911,226],[911,225],[911,225],[910,225],[909,225],[908,225],[906,225],[905,225],[903,224],[899,221],[893,216],[886,210],[883,207],[880,205],[879,204],[879,204]],"dx":[492,-359],"dy":[492,-359],"length":666.9212689209756,"timing":[315,329,346,363,380,396,413,429,447,463,480,497,512,529,547,563,579,598,613,629,646,663,679,697,712,729,747,763,780,795]},{"start":[879,204],"end":[340,781],"points":[[879,204],[879,204],[875,210],[862,226],[841,253],[812,291],[762,356],[705,423],[629,507],[545,597],[497,650],[466,684],[449,705],[438,716],[430,723],[424,726],[418,727],[414,728],[410,730],[409,730],[407,730],[404,732],[401,734],[400,735],[395,738],[386,742],[383,744],[375,749],[369,752],[364,754],[361,755],[357,756],[354,758],[351,760],[348,762],[346,764],[345,766],[344,768],[344,770],[344,771],[344,773],[344,775],[343,777],[342,779],[341,780],[340,781],[340,781]],"dx":[-539,577],"dy":[-539,577],"length":800.4422103897303,"timing":[267,283,299,316,332,349,366,383,399,416,432,449,466,483,499,516,533,549,565,795,817,833,850,866,883,900,915,933,950,966,983,999,1016,1033,1049,1066,1083,1099,1116,1133,1149,1166,1183,1200,1216,1233,1266]},{"start":[340,780],"end":[1526,117],"points":[[340,780],[340,778],[347,769],[365,748],[396,720],[439,684],[492,646],[553,614],[623,586],[691,563],[731,552],[775,540],[788,537],[799,534],[805,533],[809,531],[818,527],[829,521],[845,512],[868,500],[927,466],[994,423],[995,422],[1016,411],[1076,389],[1185,354],[1269,332],[1358,305],[1432,280],[1454,271],[1468,265],[1478,260],[1485,255],[1490,243],[1498,224],[1503,204],[1507,191],[1510,179],[1512,172],[1514,161],[1514,145],[1516,133],[1519,125],[1521,120],[1523,117],[1524,117],[1525,117],[1526,117],[1526,117],[1526,117]],"dx":[1186,-663],"dy":[1186,-663],"length":1424.5678542652572,"timing":[14,30,46,63,80,97,114,130,146,163,179,197,213,230,246,263,279,296,313,330,346,363,643,663,680,697,712,730,747,763,780,796,813,830,847,863,880,896,914,929,947,963,980,997,1013,1030,1047,1064,1080,1103]},{"start":[1525,118],"end":[1405,331],"points":[[1525,118],[1522,122],[1515,129],[1511,134],[1501,143],[1484,157],[1463,173],[1436,196],[1419,212],[1403,230],[1397,238],[1393,245],[1392,249],[1392,251],[1392,253],[1393,254],[1394,256],[1395,261],[1395,267],[1395,275],[1396,284],[1398,295],[1400,306],[1402,316],[1403,321],[1404,325],[1404,328],[1405,329],[1405,329],[1405,330],[1405,330],[1405,330],[1405,331]],"dx":[-120,213],"dy":[-120,213],"length":272.26154332021645,"timing":[172,181,197,214,231,247,264,281,297,313,330,348,363,381,397,414,430,447,464,480,497,513,530,547,564,580,597,614,631,646,664,681,697]},{"start":[1405,331],"end":[1032,252],"points":[[1405,331],[1405,330],[1406,330],[1404,330],[1399,330],[1388,330],[1370,331],[1330,334],[1286,337],[1236,339],[1187,339],[1137,339],[1117,337],[1098,332],[1084,327],[1075,322],[1066,317],[1063,315],[1059,311],[1055,307],[1052,304],[1048,299],[1044,292],[1040,285],[1037,278],[1034,271],[1032,264],[1031,261],[1031,256],[1031,255],[1031,254],[1031,254],[1032,254],[1032,254],[1032,253],[1032,253],[1032,252]],"dx":[-373,-79],"dy":[-373,-79],"length":423.84967370546764,"timing":[141,149,164,967,979,996,1013,1029,1046,1063,1079,1096,1111,1129,1146,1161,1179,1195,1212,1229,1246,1263,1279,1294,1313,1329,1348,1363,1379,1396,1413,1435,1445,1462,1479,1496,1529]},{"start":[1032,252],"end":[657,406],"points":[[1032,252],[1025,260],[1012,274],[997,290],[980,309],[964,324],[948,338],[929,351],[908,362],[891,370],[858,385],[846,391],[823,400],[810,406],[786,415],[771,421],[753,427],[739,431],[725,434],[710,436],[695,436],[683,436],[676,435],[671,434],[669,433],[666,430],[664,426],[663,421],[660,413],[659,409],[658,406],[657,406],[657,406]],"dx":[-375,154],"dy":[-375,154],"length":451.37333667630566,"timing":[261,280,297,314,331,347,364,380,397,414,430,447,464,480,498,514,530,547,564,580,597,614,631,647,664,681,697,713,731,747,764,781,831]},{"start":[657,406],"end":[517,438],"points":[[657,406],[656,406],[653,408],[643,414],[633,419],[616,426],[604,429],[587,431],[573,433],[563,433],[557,433],[552,434],[548,434],[545,434],[542,433],[539,432],[537,431],[535,431],[534,431],[533,431],[532,431],[531,431],[530,431],[530,431],[529,431],[529,431],[529,431],[528,432],[528,433],[527,433],[526,434],[525,435],[523,435],[522,435],[522,436],[520,437],[520,437],[518,438],[518,438],[517,438]],"dx":[-140,32],"dy":[-140,32],"length":149.83568598625965,"timing":[385,400,417,433,450,467,483,500,516,534,550,566,583,600,616,633,650,666,684,700,716,733,750,767,784,800,816,833,850,867,883,900,916,933,950,967,983,1000,1016,1050]},{"start":[518,438],"end":[662,734],"points":[[518,438],[522,438],[538,444],[574,461],[599,476],[627,500],[652,537],[657,552],[660,564],[663,578],[664,587],[664,598],[664,612],[663,626],[662,635],[661,645],[660,651],[659,659],[657,668],[656,679],[655,690],[655,697],[655,703],[655,708],[655,711],[655,716],[656,722],[658,727],[660,731],[661,733],[661,734],[662,734],[662,734],[662,734]],"dx":[144,296],"dy":[144,296],"length":372.9134894185355,"timing":[333,345,363,379,395,412,429,446,462,479,496,512,529,545,562,579,595,612,629,646,662,679,696,714,729,745,762,779,796,813,829,846,909,946]},{"start":[662,733],"end":[970,410],"points":[[662,733],[676,719],[702,694],[735,663],[777,629],[796,614],[815,601],[828,592],[842,581],[854,570],[868,554],[883,535],[892,521],[904,501],[913,486],[920,473],[925,463],[928,458],[931,453],[934,449],[936,446],[942,438],[946,433],[949,430],[953,427],[955,424],[957,423],[959,422],[960,420],[963,417],[964,415],[966,413],[968,412],[968,411],[969,411],[969,410],[970,410]],"dx":[308,-323],"dy":[308,-323],"length":452.9492366066156,"timing":[291,313,330,347,363,379,396,413,430,446,463,480,495,513,529,546,562,579,597,613,630,646,663,680,697,713,729,746,762,779,796,813,829,847,863,880,946]},{"start":[970,411],"end":[1631,534],"points":[[970,411],[970,411],[975,414],[984,419],[993,424],[1001,428],[1003,428],[1025,428],[1067,434],[1159,450],[1263,470],[1377,492],[1447,505],[1502,515],[1555,524],[1581,529],[1603,532],[1611,533],[1618,534],[1624,534],[1625,534],[1626,534],[1627,534],[1627,534],[1627,534],[1628,534],[1628,534],[1629,534],[1629,534],[1630,534],[1630,534],[1631,534],[1631,534]],"dx":[661,123],"dy":[661,123],"length":674.8535149127845,"timing":[168,330,347,363,380,397,654,680,696,713,729,747,763,779,797,814,830,847,863,880,897,913,930,946,963,980,996,1013,1030,1046,1063,1079,1115]},{"start":[1630,535],"end":[1362,633],"points":[[1630,535],[1630,536],[1626,542],[1621,552],[1611,568],[1602,584],[1589,596],[1577,605],[1565,611],[1546,617],[1534,619],[1520,623],[1500,629],[1489,634],[1477,637],[1464,640],[1449,642],[1430,642],[1413,643],[1401,643],[1386,643],[1380,643],[1375,643],[1372,641],[1369,639],[1366,637],[1364,635],[1362,633],[1362,633],[1362,633]],"dx":[-268,98],"dy":[-268,98],"length":313.686062340135,"timing":[270,285,301,316,334,351,367,384,401,417,434,451,467,484,501,517,535,550,567,584,601,618,634,651,667,684,701,718,734,769]},{"start":[1362,633],"end":[1393,26],"points":[[1362,633],[1362,628],[1360,600],[1359,528],[1363,428],[1370,389],[1376,364],[1383,337],[1391,313],[1396,295],[1401,272],[1406,245],[1407,227],[1409,208],[1410,192],[1412,171],[1413,154],[1414,131],[1416,116],[1417,107],[1417,100],[1417,97],[1417,95],[1417,93],[1414,85],[1412,77],[1410,71],[1408,64],[1407,61],[1406,59],[1405,57],[1405,56],[1404,55],[1403,54],[1403,54],[1402,53],[1402,53],[1402,53],[1402,53],[1401,53],[1401,53],[1401,53],[1400,53],[1400,53],[1399,53],[1399,53],[1399,53],[1399,52],[1398,47],[1397,43],[1397,41],[1397,39],[1397,37],[1396,35],[1396,33],[1395,31],[1395,30],[1395,29],[1394,27],[1394,26],[1393,26]],"dx":[31,-607],"dy":[31,-607],"length":621.0605570745919,"timing":[345,358,375,391,408,425,441,457,475,492,508,525,542,559,575,591,608,625,641,658,675,692,708,725,742,758,775,792,808,825,842,858,875,891,909,925,942,968,992,1008,1025,1042,1059,1075,1091,1108,1124,1383,1408,1425,1441,1458,1475,1491,1508,1525,1542,1558,1575,1591,1608]},{"start":[1392,28],"end":[489,444],"points":[[1392,28],[1374,47],[1347,71],[1308,102],[1255,136],[1168,175],[1114,191],[1032,212],[964,223],[900,235],[844,249],[792,270],[758,288],[699,325],[653,353],[623,369],[585,387],[564,395],[544,402],[531,408],[524,413],[519,419],[516,423],[513,427],[510,429],[508,430],[507,430],[505,430],[504,430],[503,430],[503,430],[503,430],[502,430],[502,430],[502,431],[502,432],[502,434],[501,435],[499,437],[497,439],[495,441],[494,443],[492,444],[491,444],[490,444],[489,444]],"dx":[-903,416],"dy":[-903,416],"length":1014.8139771368,"timing":[248,266,283,299,316,333,350,366,383,400,416,433,450,466,483,499,516,533,550,567,583,600,616,633,649,666,683,700,717,733,750,766,783,832,850,866,883,901,915,933,950,967,983,999,1016,1049]},{"start":[488,444],"end":[139,436],"points":[[488,444],[475,444],[463,444],[453,444],[447,444],[446,444],[442,444],[424,446],[401,450],[369,454],[339,458],[322,461],[295,464],[266,466],[235,465],[209,459],[196,456],[186,454],[181,454],[179,454],[179,454],[179,453],[178,453],[178,453],[178,453],[176,452],[173,451],[167,448],[161,446],[156,444],[152,442],[149,440],[147,440],[145,439],[142,438],[140,437],[139,437],[139,436]],"dx":[-349,-8],"dy":[-349,-8],"length":357.2357704550878,"timing":[342,362,379,395,412,667,678,695,712,728,745,762,779,795,811,828,845,862,878,895,911,928,945,962,979,995,1012,1028,1045,1061,1078,1095,1111,1128,1145,1161,1178,1228]},{"start":[140,437],"end":[143,687],"points":[[140,437],[142,440],[145,444],[149,452],[153,467],[157,486],[161,511],[165,539],[170,571],[173,592],[176,608],[179,622],[181,634],[183,648],[185,656],[187,664],[189,671],[189,671],[187,671],[185,672],[182,674],[176,677],[169,679],[161,682],[155,683],[149,685],[146,686],[143,687],[143,687],[143,687]],"dx":[3,250],"dy":[3,250],"length":289.4768524139643,"timing":[338,359,375,391,408,424,441,457,475,491,508,525,541,558,575,592,608,857,875,891,908,925,942,957,975,992,1008,1024,1041,1058]},{"start":[143,687],"end":[1369,760],"points":[[143,687],[154,678],[196,654],[319,610],[509,590],[655,590],[840,591],[941,595],[1056,599],[1134,601],[1195,602],[1232,603],[1268,605],[1296,608],[1305,610],[1312,611],[1315,613],[1317,615],[1318,619],[1321,629],[1324,646],[1327,668],[1331,685],[1334,696],[1338,705],[1340,709],[1343,713],[1347,716],[1350,721],[1354,725],[1359,733],[1363,739],[1365,742],[1366,744],[1367,745],[1367,745],[1367,746],[1368,747],[1368,748],[1369,751],[1369,754],[1369,758],[1369,759],[1369,760]],"dx":[1226,73],"dy":[1226,73],"length":1352.5900524621272,"timing":[247,264,280,297,313,331,347,364,380,397,414,431,447,464,480,497,514,530,548,564,581,597,614,631,647,664,681,697,713,731,747,764,780,798,814,830,847,864,880,897,914,931,947,980]},{"start":[1351,744],"end":[1133,62],"points":[[1351,744],[1338,719],[1317,671],[1298,625],[1275,577],[1242,492],[1219,428],[1196,344],[1187,299],[1184,272],[1181,249],[1181,234],[1181,223],[1181,211],[1181,193],[1181,174],[1179,150],[1178,133],[1177,122],[1176,111],[1175,108],[1175,108],[1174,108],[1174,108],[1172,107],[1170,100],[1164,87],[1159,74],[1154,59],[1150,52],[1147,47],[1146,45],[1145,45],[1145,45],[1144,45],[1144,45],[1143,46],[1142,48],[1142,50],[1141,52],[1140,54],[1139,56],[1137,57],[1136,59],[1135,60],[1133,61],[1133,62]],"dx":[-218,-682],"dy":[-218,-682],"length":761.6482410617191,"timing":[270,283,300,317,333,350,367,383,401,416,433,450,467,484,500,517,534,551,566,584,600,617,634,651,667,684,701,717,734,751,767,783,801,817,834,860,883,901,916,933,950,966,983,1000,1017,1034,1067]},{"start":[1133,62],"end":[1422,581],"points":[[1133,62],[1134,66],[1145,87],[1205,191],[1250,259],[1283,305],[1316,349],[1338,377],[1352,396],[1361,415],[1368,436],[1373,460],[1374,474],[1375,483],[1376,491],[1376,494],[1377,497],[1377,501],[1378,504],[1379,508],[1380,513],[1383,522],[1387,535],[1389,545],[1392,554],[1395,564],[1397,569],[1400,572],[1403,574],[1405,576],[1408,577],[1411,579],[1415,580],[1418,581],[1419,581],[1421,581],[1421,581],[1422,581]],"dx":[289,519],"dy":[289,519],"length":608.9637593071006,"timing":[297,312,329,345,361,378,396,411,428,445,462,479,496,512,529,546,562,579,596,612,628,646,662,678,695,712,729,746,762,779,795,812,828,845,862,879,895,912]},{"start":[1421,581],"end":[852,819],"points":[[1421,581],[1421,581],[1420,581],[1420,581],[1417,581],[1412,581],[1408,581],[1401,581],[1393,581],[1385,582],[1374,585],[1358,592],[1323,606],[1282,616],[1225,624],[1151,632],[1083,645],[1019,664],[980,682],[952,698],[926,715],[908,728],[889,742],[874,752],[856,760],[841,766],[832,770],[826,773],[820,778],[814,787],[810,795],[807,802],[805,807],[804,810],[804,812],[804,813],[804,815],[804,817],[805,818],[807,819],[808,819],[808,819],[809,819],[809,819],[810,819],[810,819],[812,819],[816,819],[823,819],[833,819],[839,819],[845,819],[848,819],[850,819],[850,819],[851,819],[851,819],[852,819]],"dx":[-569,238],"dy":[-569,238],"length":734.7025099033277,"timing":[109,125,133,148,164,181,198,213,231,247,264,280,297,314,331,347,364,380,397,414,431,447,463,480,497,514,530,547,564,580,597,614,630,647,663,679,698,714,731,747,763,781,797,814,831,847,864,880,896,913,931,947,964,980,998,1014,1030,1047]},{"start":[852,818],"end":[700,67],"points":[[852,818],[850,802],[839,763],[827,733],[801,673],[769,606],[720,501],[682,409],[662,347],[648,297],[640,262],[635,245],[632,233],[632,229],[632,226],[632,224],[632,217],[638,199],[642,185],[646,173],[648,167],[651,159],[655,153],[661,142],[667,132],[673,118],[676,109],[679,101],[680,96],[681,93],[681,92],[681,91],[681,91],[682,89],[688,81],[691,76],[694,72],[696,69],[698,67],[699,67],[699,67],[700,67],[700,67],[700,67]],"dx":[-152,-751],"dy":[-152,-751],"length":810.5475904090291,"timing":[280,296,313,329,347,362,379,396,413,430,446,463,480,495,513,530,546,563,580,596,612,630,646,663,679,696,713,730,746,763,779,796,813,830,847,863,880,896,913,930,946,963,979,1013]},{"start":[700,67],"end":[181,472],"points":[[700,67],[700,68],[700,68],[700,68],[700,69],[700,71],[697,75],[688,87],[668,111],[638,145],[553,242],[515,286],[466,343],[421,394],[381,438],[357,463],[339,481],[321,497],[308,504],[302,505],[293,506],[293,506],[287,506],[276,506],[266,504],[253,501],[237,497],[223,491],[211,487],[205,485],[200,483],[193,480],[188,478],[186,476],[184,475],[183,474],[182,474],[182,473],[181,473],[181,473],[181,472],[181,472]],"dx":[-519,405],"dy":[-519,405],"length":724.539828913098,"timing":[164,188,229,245,266,282,299,316,332,349,366,383,398,416,432,449,466,481,498,515,532,755,765,782,799,816,832,849,866,882,899,915,932,949,965,982,999,1016,1033,1049,1065,1099]},{"start":[181,472],"end":[1194,491],"points":[[181,472],[192,470],[238,464],[362,463],[483,466],[651,490],[799,512],[885,527],[974,546],[1041,561],[1080,568],[1099,573],[1120,579],[1132,582],[1141,586],[1149,588],[1155,589],[1163,589],[1171,586],[1176,583],[1183,578],[1187,574],[1190,568],[1193,562],[1195,556],[1196,551],[1198,546],[1199,541],[1199,535],[1199,524],[1199,515],[1198,507],[1197,499],[1195,494],[1195,492],[1195,491],[1195,491],[1194,491],[1194,491]],"dx":[1013,19],"dy":[1013,19],"length":1110.0310166514362,"timing":[264,283,299,316,332,349,366,382,399,416,432,449,466,483,499,516,533,549,567,582,599,615,633,650,666,683,700,716,733,749,766,781,799,816,832,849,865,883,899]},{"start":[1194,491],"end":[927,760],"points":[[1194,491],[1194,491],[1194,492],[1194,493],[1194,494],[1194,495],[1194,496],[1194,496],[1194,496],[1194,496],[1194,497],[1194,497],[1194,498],[1193,500],[1191,503],[1184,513],[1169,534],[1155,555],[1139,578],[1124,601],[1110,624],[1097,647],[1084,671],[1067,694],[1054,710],[1030,735],[1017,746],[1003,756],[992,763],[984,770],[971,782],[962,790],[950,800],[938,808],[932,810],[929,811],[926,811],[925,811],[924,810],[924,809],[924,808],[924,807],[924,806],[924,805],[924,802],[924,798],[924,792],[924,783],[925,774],[926,768],[927,762],[927,761],[927,760]],"dx":[-267,269],"dy":[-267,269],"length":478.88344690938465,"timing":[23,30,47,63,80,97,114,130,146,183,196,213,229,247,263,280,297,314,329,345,363,380,396,413,430,447,463,480,496,513,530,547,564,580,597,613,630,646,663,679,697,713,730,746,763,780,796,813,829,846,863,880,947]},{"start":[926,760],"end":[785,851],"points":[[926,760],[926,760],[923,760],[918,764],[910,772],[898,780],[884,788],[872,792],[858,796],[847,798],[840,800],[831,803],[826,805],[819,810],[813,814],[806,817],[800,821],[794,826],[790,829],[788,833],[786,836],[785,838],[785,840],[785,842],[785,844],[785,846],[785,848],[785,849],[785,850],[785,851]],"dx":[-141,91],"dy":[-141,91],"length":178.56963967715686,"timing":[286,312,329,346,362,379,395,412,429,446,463,478,496,512,529,546,562,579,595,613,629,645,662,679,696,713,729,746,762,779]},{"start":[785,850],"end":[1541,151],"points":[[785,850],[785,850],[785,850],[785,850],[785,849],[785,849],[785,848],[785,847],[785,846],[786,845],[787,844],[791,839],[807,824],[855,778],[960,683],[1050,609],[1170,512],[1278,423],[1347,365],[1419,306],[1451,280],[1471,264],[1487,251],[1500,239],[1506,231],[1515,216],[1522,198],[1531,177],[1537,161],[1544,142],[1551,127],[1555,119],[1559,112],[1561,108],[1562,106],[1562,106],[1562,106],[1562,107],[1558,116],[1553,125],[1550,131],[1547,137],[1545,140],[1544,142],[1544,143],[1543,144],[1542,146],[1542,149],[1541,150],[1541,151],[1541,151]],"dx":[756,-699],"dy":[756,-699],"length":1140.108718187189,"timing":[125,156,173,189,197,211,228,244,262,278,295,311,328,345,362,378,394,412,428,445,462,478,494,511,528,544,561,578,594,611,628,645,661,678,694,711,771,795,811,828,845,861,878,894,911,928,945,961,977,994,1028]},{"start":[1541,151],"end":[1583,371],"points":[[1541,151],[1541,151],[1540,152],[1539,154],[1538,157],[1536,160],[1533,165],[1531,170],[1529,178],[1529,192],[1529,201],[1536,214],[1549,227],[1570,241],[1584,249],[1599,257],[1612,263],[1617,266],[1623,270],[1627,272],[1629,275],[1630,277],[1631,281],[1631,286],[1631,290],[1630,294],[1626,300],[1616,314],[1609,324],[1603,333],[1599,338],[1594,347],[1590,353],[1588,359],[1586,364],[1585,368],[1584,370],[1583,371],[1583,371]],"dx":[42,220],"dy":[42,220],"length":290.14518094234586,"timing":[176,185,197,214,231,247,264,281,297,314,330,347,364,380,397,414,430,447,463,481,497,514,530,547,564,581,597,614,631,647,664,680,697,713,731,747,764,780,797]},{"start":[1583,371],"end":[291,827],"points":[[1583,371],[1582,371],[1576,374],[1556,381],[1529,389],[1459,406],[1333,427],[1145,456],[1000,486],[843,531],[721,574],[659,594],[615,603],[588,607],[570,609],[551,610],[551,610],[546,613],[531,625],[500,651],[464,681],[433,705],[382,743],[357,763],[337,779],[324,792],[310,806],[298,819],[288,831],[283,835],[279,839],[277,842],[275,843],[274,843],[274,843],[274,843],[274,842],[275,841],[276,840],[276,838],[277,838],[278,837],[279,836],[281,835],[283,833],[286,832],[288,830],[289,829],[290,828],[290,828],[291,827],[291,827]],"dx":[-1292,456],"dy":[-1292,456],"length":1450.4389909322265,"timing":[251,265,281,298,315,330,348,364,380,397,414,431,447,465,481,497,759,781,798,814,831,848,864,881,898,914,930,948,965,981,998,1015,1030,1048,1065,1132,1148,1164,1181,1197,1214,1231,1247,1264,1280,1298,1314,1331,1347,1365,1381,1414]},{"start":[291,827],"end":[948,646],"points":[[291,827],[293,826],[306,817],[374,778],[448,741],[521,715],[614,691],[688,678],[727,676],[754,676],[780,676],[795,676],[805,678],[814,680],[823,684],[832,687],[842,689],[856,692],[870,693],[887,694],[907,696],[920,697],[927,697],[932,696],[937,691],[938,685],[938,682],[939,678],[939,676],[939,674],[940,673],[941,670],[942,667],[943,664],[944,661],[946,656],[947,652],[948,648],[948,646],[948,646],[948,646]],"dx":[657,-181],"dy":[657,-181],"length":728.4382852314325,"timing":[267,282,299,315,331,348,364,381,398,415,431,447,465,481,498,514,532,548,564,582,598,615,631,648,665,682,698,714,731,748,764,782,798,814,830,848,864,881,898,914,965]},{"start":[946,647],"end":[627,776],"points":[[946,647],[935,658],[918,674],[895,693],[853,720],[824,735],[793,749],[767,759],[752,763],[735,767],[725,769],[714,770],[706,770],[699,770],[691,771],[682,772],[672,773],[662,775],[653,776],[648,777],[643,778],[638,778],[634,778],[632,778],[630,778],[629,778],[628,777],[628,776],[628,776],[627,776]],"dx":[-319,129],"dy":[-319,129],"length":356.45055684962534,"timing":[357,380,397,413,430,446,463,479,496,513,530,546,563,579,596,613,630,646,663,679,696,713,730,746,763,780,796,813,830,863]},{"start":[627,775],"end":[1148,406],"points":[[627,775],[627,775],[627,775],[628,774],[630,772],[653,750],[708,708],[780,665],[832,641],[899,617],[957,594],[988,581],[1017,565],[1030,556],[1042,544],[1049,536],[1053,527],[1057,518],[1059,508],[1061,502],[1062,497],[1064,493],[1065,490],[1067,486],[1068,483],[1069,480],[1070,478],[1072,476],[1074,472],[1077,466],[1081,462],[1084,457],[1088,453],[1092,450],[1095,449],[1101,446],[1107,442],[1114,438],[1119,435],[1124,431],[1130,427],[1137,420],[1140,416],[1144,412],[1146,409],[1147,408],[1148,407],[1148,407],[1148,406],[1148,406]],"dx":[521,-369],"dy":[521,-369],"length":660.8377315314325,"timing":[238,270,286,301,318,335,351,368,385,402,418,434,451,468,485,502,518,535,552,568,585,602,618,635,651,668,685,701,718,735,751,768,785,801,819,835,851,868,884,902,918,935,952,968,984,1002,1019,1035,1051,1068]},{"start":[880,855],"end":[1488,43],"points":[[880,855],[882,850],[888,836],[912,781],[941,726],[981,662],[1045,579],[1083,534],[1162,448],[1206,401],[1260,342],[1289,306],[1317,268],[1330,251],[1343,233],[1353,221],[1359,215],[1364,209],[1367,206],[1370,203],[1374,194],[1377,181],[1383,159],[1386,140],[1389,128],[1392,118],[1393,113],[1395,109],[1398,105],[1402,100],[1408,93],[1413,86],[1419,78],[1422,74],[1426,70],[1429,67],[1431,65],[1438,62],[1445,58],[1447,58],[1454,55],[1458,54],[1462,52],[1464,51],[1467,50],[1470,49],[1473,48],[1477,47],[1480,46],[1484,45],[1487,44],[1488,43],[1488,43]],"dx":[608,-812],"dy":[608,-812],"length":1036.717393423684,"timing":[321,335,351,368,385,401,418,435,451,467,485,501,518,535,552,568,585,602,618,635,652,668,684,701,718,734,751,768,785,801,818,835,851,868,885,901,918,934,951,968,984,1002,1018,1034,1051,1068,1085,1101,1118,1135,1152,1168,1201]},{"start":[1482,43],"end":[1206,568],"points":[[1482,43],[1480,45],[1475,49],[1472,52],[1469,55],[1467,56],[1464,59],[1453,71],[1430,97],[1383,156],[1352,198],[1333,227],[1302,279],[1276,329],[1249,387],[1236,424],[1223,465],[1218,483],[1214,501],[1212,513],[1207,528],[1203,544],[1199,562],[1196,571],[1194,582],[1193,587],[1193,589],[1193,588],[1195,584],[1200,578],[1202,574],[1204,570],[1205,569],[1205,568],[1206,568]],"dx":[-276,525],"dy":[-276,525],"length":654.027865966082,"timing":[162,173,191,207,224,241,258,273,290,307,324,340,357,374,390,407,423,440,457,474,490,507,524,540,557,574,590,607,624,640,657,673,689,707,723]},{"start":[1206,568],"end":[242,48],"points":[[1206,568],[1171,568],[1076,549],[933,494],[797,438],[691,393],[588,357],[511,337],[445,326],[382,315],[342,307],[313,297],[290,287],[278,278],[273,271],[272,263],[272,250],[272,250],[270,237],[267,217],[265,209],[251,157],[246,134],[241,121],[237,110],[236,106],[236,105],[236,105],[236,103],[236,100],[236,91],[237,83],[238,72],[239,66],[240,61],[241,57],[241,54],[241,53],[241,52],[241,51],[241,50],[242,48],[242,48]],"dx":[-964,-520],"dy":[-964,-520],"length":1215.4856737566731,"timing":[360,384,400,417,433,450,467,484,500,517,533,550,566,583,599,616,634,878,901,917,932,951,967,984,1000,1017,1033,1161,1183,1200,1217,1234,1250,1267,1284,1300,1317,1333,1351,1367,1384,1400,1417]},{"start":[240,49],"end":[784,627],"points":[[240,49],[241,49],[241,49],[242,49],[242,49],[242,49],[242,49],[242,49],[244,50],[247,54],[256,63],[274,84],[298,113],[345,173],[403,236],[456,288],[521,348],[558,382],[596,415],[621,439],[637,458],[646,473],[654,490],[661,505],[664,517],[666,530],[667,536],[669,542],[675,550],[689,558],[703,565],[713,569],[721,573],[726,574],[727,574],[728,575],[728,575],[729,575],[730,576],[732,578],[734,581],[736,585],[740,592],[742,597],[743,600],[744,602],[745,603],[747,608],[749,614],[753,621],[756,626],[758,629],[761,631],[763,632],[766,632],[770,631],[773,629],[777,629],[779,628],[782,628],[783,628],[784,627],[784,627]],"dx":[544,578],"dy":[544,578],"length":822.6751053067891,"timing":[152,164,181,197,214,231,248,264,280,298,314,330,347,364,380,397,414,431,447,464,480,498,514,531,547,564,581,597,614,631,646,664,680,697,714,731,747,764,780,798,814,831,848,864,880,897,914,930,947,964,980,997,1014,1031,1046,1064,1081,1097,1114,1131,1147,1164,1180]},{"start":[789,629],"end":[624,197],"points":[[789,629],[790,630],[790,630],[790,630],[788,622],[777,593],[743,522],[714,465],[693,418],[678,386],[669,366],[664,350],[662,343],[662,341],[662,339],[662,336],[662,333],[662,329],[662,324],[662,318],[662,312],[662,305],[662,297],[662,289],[662,282],[662,274],[662,258],[662,237],[661,207],[659,176],[656,157],[654,145],[652,137],[651,134],[651,134],[651,134],[651,137],[650,139],[650,141],[649,143],[648,145],[646,148],[645,150],[642,154],[640,158],[638,163],[634,169],[631,177],[628,185],[627,189],[626,193],[625,196],[625,197],[624,197],[624,197]],"dx":[-165,-432],"dy":[-165,-432],"length":596.1501374994232,"timing":[13,30,47,447,463,479,497,513,530,546,563,580,596,613,629,646,663,680,696,713,729,747,763,779,796,812,829,846,863,880,896,913,930,946,963,1004,1030,1046,1063,1079,1096,1113,1129,1146,1162,1180,1196,1213,1229,1246,1263,1280,1296,1313,1330]},{"start":[625,197],"end":[1490,645],"points":[[625,197],[629,198],[667,211],[786,263],[891,315],[987,362],[1131,432],[1185,458],[1251,493],[1311,528],[1363,559],[1385,572],[1404,583],[1412,587],[1419,591],[1423,594],[1426,596],[1430,598],[1434,600],[1440,605],[1450,614],[1458,622],[1465,628],[1471,634],[1474,636],[1476,638],[1476,639],[1478,639],[1479,639],[1482,640],[1485,642],[1487,643],[1489,644],[1489,644],[1490,645]],"dx":[865,448],"dy":[865,448],"length":978.3977905999831,"timing":[286,297,314,331,347,364,381,397,414,431,446,464,481,496,513,530,547,564,580,597,614,630,647,663,680,697,713,730,747,764,779,797,813,829,847]},{"start":[1461,621],"end":[437,173],"points":[[1461,621],[1461,622],[1460,623],[1460,624],[1459,624],[1458,625],[1457,626],[1456,626],[1455,627],[1454,627],[1454,627],[1454,627],[1453,627],[1452,627],[1443,627],[1406,616],[1330,591],[1191,535],[1032,460],[910,402],[822,357],[676,277],[614,239],[568,208],[510,170],[475,145],[460,133],[451,126],[443,119],[438,115],[436,113],[433,112],[430,110],[428,109],[425,109],[424,109],[424,109],[423,109],[423,110],[423,111],[423,111],[423,113],[423,117],[423,124],[424,133],[426,140],[427,146],[429,152],[430,155],[431,158],[432,159],[432,159],[433,160],[433,162],[434,163],[434,165],[434,167],[435,168],[435,169],[436,170],[436,171],[436,172],[437,173],[437,173],[437,173]],"dx":[-1024,-448],"dy":[-1024,-448],"length":1238.8959734448124,"timing":[71,80,96,113,129,146,163,179,196,213,228,246,263,279,296,313,329,346,362,380,396,412,429,445,462,479,496,513,530,546,563,579,596,612,630,645,663,679,696,713,729,745,763,779,796,813,829,846,862,879,896,913,929,946,962,979,996,1012,1029,1046,1063,1079,1096,1113,1146]},{"start":[437,173],"end":[1388,484],"points":[[437,173],[455,169],[539,173],[698,224],[825,269],[920,298],[1016,326],[1080,343],[1132,364],[1182,389],[1230,415],[1256,429],[1274,437],[1294,445],[1308,449],[1314,451],[1324,454],[1331,457],[1340,462],[1349,468],[1357,473],[1366,480],[1375,485],[1379,488],[1382,489],[1384,490],[1385,490],[1386,490],[1386,490],[1386,489],[1387,488],[1387,488],[1387,487],[1388,485],[1388,484],[1388,484],[1388,484]],"dx":[951,311],"dy":[951,311],"length":1017.369694568696,"timing":[310,334,350,366,383,400,416,433,450,467,483,500,517,534,550,566,583,601,617,633,650,667,683,700,717,734,750,766,783,800,817,833,850,867,883,900,934]},{"start":[1388,484],"end":[766,611],"points":[[1388,484],[1387,484],[1387,484],[1386,484],[1386,484],[1385,484],[1385,484],[1384,484],[1381,484],[1376,484],[1367,485],[1351,487],[1334,493],[1312,503],[1286,520],[1247,551],[1231,565],[1214,580],[1202,591],[1195,600],[1184,612],[1176,618],[1165,627],[1149,634],[1133,635],[1110,635],[1065,627],[1019,620],[986,618],[952,618],[923,618],[882,618],[845,610],[798,595],[780,589],[769,586],[760,584],[757,584],[755,584],[755,584],[755,584],[756,585],[756,586],[757,586],[757,587],[757,587],[757,588],[757,588],[758,591],[759,596],[760,599],[761,603],[762,607],[763,608],[763,609],[764,609],[764,610],[764,610],[765,610],[765,611],[766,611],[766,611]],"dx":[-622,127],"dy":[-622,127],"length":722.4367076389051,"timing":[131,149,165,181,197,214,231,248,265,281,298,314,331,348,365,384,400,417,433,448,465,481,497,514,531,548,564,581,598,615,631,648,666,683,700,717,732,748,764,780,829,848,865,881,897,914,931,947,964,981,997,1014,1031,1048,1064,1081,1097,1114,1130,1147,1164,1198]},{"start":[766,611],"end":[1039,172],"points":[[766,611],[769,606],[777,595],[789,577],[804,551],[830,507],[855,470],[884,429],[923,379],[951,346],[968,329],[984,312],[996,299],[1003,290],[1009,281],[1015,271],[1022,259],[1027,250],[1030,242],[1033,237],[1035,233],[1036,229],[1039,225],[1041,219],[1043,216],[1044,212],[1045,211],[1045,211],[1045,210],[1045,210],[1045,209],[1045,208],[1045,205],[1044,202],[1042,192],[1041,186],[1040,179],[1039,175],[1039,173],[1039,172],[1039,172],[1039,172],[1039,172],[1039,172]],"dx":[273,-439],"dy":[273,-439],"length":529.9753254512732,"timing":[289,300,317,335,351,368,384,401,417,434,451,467,484,501,517,534,551,566,584,601,617,634,650,667,684,701,716,734,758,784,800,817,835,850,867,884,900,916,934,951,1008,1034,1051,1101]},{"start":[1039,172],"end":[1159,661],"points":[[1039,172],[1039,172],[1039,174],[1039,186],[1046,233],[1074,323],[1120,429],[1161,501],[1211,580],[1227,606],[1243,636],[1250,653],[1251,660],[1252,666],[1252,669],[1252,670],[1251,671],[1251,671],[1250,671],[1249,672],[1247,674],[1245,676],[1242,679],[1239,682],[1235,683],[1229,684],[1221,684],[1217,684],[1211,683],[1206,682],[1199,682],[1188,680],[1180,677],[1171,671],[1165,667],[1161,664],[1159,662],[1159,661],[1159,661]],"dx":[120,489],"dy":[120,489],"length":652.6788780269851,"timing":[302,313,329,346,363,380,396,413,430,446,463,479,496,513,530,546,562,579,596,612,630,646,663,679,696,713,729,746,763,779,795,813,830,846,863,879,896,913,946]},{"start":[1160,661],"end":[460,821],"points":[[1160,661],[1162,661],[1163,661],[1163,661],[1164,661],[1164,661],[1165,661],[1165,661],[1165,661],[1165,661],[1159,662],[1140,666],[1104,671],[996,687],[917,708],[821,732],[712,755],[675,759],[635,764],[602,766],[576,768],[572,768],[569,769],[568,769],[561,775],[548,783],[537,789],[522,796],[508,801],[497,803],[486,805],[478,807],[470,810],[466,813],[463,815],[461,815],[460,815],[460,816],[460,816],[460,817],[460,819],[460,820],[460,821],[460,821],[460,821]],"dx":[-700,160],"dy":[-700,160],"length":738.1376032717537,"timing":[12,29,45,62,79,95,112,128,145,273,296,311,328,345,361,378,395,411,428,445,472,478,495,759,778,795,811,828,845,861,878,895,911,929,945,962,978,995,1012,1028,1045,1062,1079,1095,1145]},{"start":[510,860],"end":[604,117],"points":[[510,860],[511,860],[511,859],[511,859],[511,859],[511,858],[511,856],[513,847],[519,820],[523,777],[528,722],[531,657],[536,583],[544,496],[554,407],[559,359],[561,336],[561,323],[561,313],[561,308],[558,306],[557,303],[557,295],[559,281],[566,261],[571,247],[577,231],[580,219],[581,213],[581,206],[583,196],[587,182],[592,171],[598,158],[602,151],[604,147],[605,145],[605,144],[604,144],[603,144],[602,144],[602,144],[601,144],[600,142],[600,141],[600,140],[600,139],[599,139],[599,138],[599,138],[599,138],[599,138],[599,138],[600,137],[600,137],[600,137],[600,137],[601,129],[602,125],[604,120],[604,118],[604,117],[604,117]],"dx":[94,-743],"dy":[94,-743],"length":763.4582711111002,"timing":[183,207,223,248,266,282,300,316,332,350,366,383,400,416,432,450,466,483,499,516,533,550,566,583,600,617,633,649,667,682,700,716,733,749,766,783,800,817,847,866,883,900,916,933,950,967,983,1000,1016,1033,1052,1073,1100,1117,1132,1149,1373,1400,1416,1433,1450,1466,1483]},{"start":[604,117],"end":[1431,326],"points":[[604,117],[611,122],[636,135],[707,160],[805,187],[879,208],[969,236],[1039,261],[1077,276],[1119,292],[1141,299],[1163,308],[1184,316],[1200,321],[1214,325],[1226,329],[1239,333],[1251,336],[1269,342],[1282,344],[1293,345],[1302,344],[1312,339],[1321,333],[1330,328],[1339,323],[1349,319],[1358,315],[1363,313],[1371,309],[1376,306],[1378,304],[1380,302],[1383,302],[1386,302],[1393,302],[1400,306],[1406,310],[1413,315],[1418,319],[1423,321],[1427,323],[1429,324],[1430,325],[1431,326],[1431,326],[1431,326],[1431,326]],"dx":[827,209],"dy":[827,209],"length":883.7342423623471,"timing":[284,300,316,333,350,367,383,400,416,433,449,467,483,499,516,534,550,566,583,600,616,633,650,666,684,700,716,733,750,766,783,800,817,833,850,867,884,899,917,933,950,967,984,1000,1016,1034,1050,1069]},{"start":[1431,326],"end":[1091,590],"points":[[1431,326],[1431,326],[1430,326],[1430,326],[1429,326],[1428,326],[1427,326],[1425,326],[1423,326],[1417,327],[1410,329],[1397,336],[1370,350],[1336,368],[1294,394],[1261,414],[1218,442],[1186,466],[1163,487],[1146,506],[1138,519],[1129,535],[1123,549],[1119,559],[1117,564],[1114,570],[1113,574],[1111,578],[1111,578],[1110,579],[1110,579],[1108,580],[1107,580],[1104,581],[1102,583],[1099,585],[1096,587],[1093,589],[1091,590],[1091,590],[1091,590]],"dx":[-340,264],"dy":[-340,264],"length":444.95497372222485,"timing":[93,100,113,130,146,163,180,197,213,229,246,263,280,295,313,329,346,363,380,397,413,430,446,463,480,496,513,529,546,563,580,596,613,629,646,663,679,696,713,730,763]},{"start":[1090,590],"end":[622,331],"points":[[1090,590],[1082,590],[1068,590],[1023,583],[985,570],[937,552],[854,521],[794,492],[727,454],[692,428],[660,399],[646,383],[637,373],[630,363],[627,359],[626,354],[626,349],[626,343],[625,338],[624,334],[624,332],[623,331],[623,331],[622,331],[622,331]],"dx":[-468,-259],"dy":[-468,-259],"length":559.6763415610473,"timing":[261,284,300,317,334,350,366,383,400,417,434,450,467,484,500,517,534,549,567,583,600,617,641,690,701]},{"start":[622,331],"end":[701,234],"points":[[622,331],[623,330],[626,324],[633,314],[642,301],[654,282],[662,271],[669,262],[677,254],[684,246],[689,241],[695,237],[697,234],[699,233],[700,233],[700,233],[700,233],[700,234],[701,234],[701,234]],"dx":[79,-97],"dy":[79,-97],"length":128.68343515289575,"timing":[303,316,333,349,366,383,399,416,433,450,466,482,499,516,533,549,597,616,632,650]},{"start":[702,236],"end":[974,680],"points":[[702,236],[718,263],[752,332],[787,414],[815,477],[849,548],[869,585],[884,612],[903,639],[910,648],[914,652],[916,653],[918,654],[919,655],[920,655],[920,657],[922,659],[925,663],[928,669],[932,676],[935,681],[939,685],[940,687],[941,687],[943,688],[946,688],[953,685],[959,684],[964,684],[968,683],[970,683],[972,683],[973,683],[973,682],[973,682],[974,682],[974,681],[974,681],[974,680],[974,680]],"dx":[272,444],"dy":[272,444],"length":551.4138940744073,"timing":[377,397,413,429,447,464,480,497,513,531,547,564,580,597,614,631,647,663,680,697,714,730,746,764,781,797,814,830,847,863,880,897,914,929,947,964,980,997,1012,1046]},{"start":[974,680],"end":[156,508],"points":[[974,680],[969,680],[951,676],[892,657],[797,627],[733,613],[659,604],[593,602],[525,602],[460,602],[420,602],[376,597],[354,592],[340,587],[331,582],[326,578],[321,575],[318,574],[315,573],[313,572],[310,570],[306,567],[302,561],[298,554],[295,548],[292,543],[290,539],[288,535],[287,531],[287,531],[277,531],[254,531],[234,531],[218,531],[199,526],[189,523],[180,520],[174,518],[170,516],[166,514],[162,513],[159,511],[157,510],[156,509],[156,508],[156,508],[156,508],[156,508]],"dx":[-818,-172],"dy":[-818,-172],"length":862.6440328688468,"timing":[310,329,344,362,378,395,411,429,444,462,479,495,512,528,545,561,578,596,612,627,644,662,679,695,712,728,745,762,777,1040,1061,1079,1096,1112,1129,1145,1162,1179,1195,1212,1229,1245,1261,1278,1296,1312,1329,1396]},{"start":[156,508],"end":[900,83],"points":[[156,508],[169,500],[196,485],[235,467],[288,447],[347,429],[402,415],[438,407],[479,398],[517,392],[552,383],[598,373],[626,367],[679,354],[707,347],[741,338],[761,331],[796,313],[806,304],[822,287],[828,277],[834,266],[840,254],[846,236],[849,224],[855,210],[858,202],[862,194],[865,188],[868,183],[873,172],[876,165],[880,155],[886,142],[890,132],[893,126],[895,119],[897,114],[898,109],[899,103],[900,99],[901,94],[901,89],[901,86],[901,84],[901,83],[900,83]],"dx":[744,-425],"dy":[744,-425],"length":930.8596095618557,"timing":[259,284,301,316,332,350,367,384,399,417,434,450,467,484,499,516,532,550,567,583,600,616,633,649,666,683,700,716,733,749,767,784,800,816,833,850,867,884,899,916,933,950,966,983,999,1016,1133]},{"start":[556,302],"end":[128,641],"points":[[556,302],[549,313],[532,338],[508,374],[476,417],[442,462],[406,507],[369,552],[347,579],[332,597],[332,597],[322,599],[311,602],[290,607],[266,614],[236,620],[217,624],[202,626],[192,627],[182,628],[167,631],[156,635],[143,638],[137,640],[132,640],[130,641],[129,641],[129,641],[128,641],[128,641],[128,641]],"dx":[-428,339],"dy":[-428,339],"length":580.0172184768772,"timing":[291,316,332,350,367,383,400,417,433,449,712,733,750,766,783,800,817,834,850,866,883,900,917,934,950,966,983,1000,1035,1051,1099]},{"start":[129,641],"end":[1424,582],"points":[[129,641],[129,641],[129,641],[130,641],[138,635],[183,615],[275,587],[410,566],[530,557],[796,574],[933,603],[1090,640],[1168,658],[1218,667],[1255,672],[1284,674],[1301,674],[1308,671],[1319,664],[1329,653],[1335,645],[1339,641],[1343,636],[1345,634],[1347,632],[1351,630],[1354,627],[1359,624],[1363,622],[1368,619],[1370,617],[1374,614],[1384,608],[1395,601],[1404,595],[1412,589],[1417,585],[1418,584],[1420,583],[1420,582],[1421,582],[1422,581],[1423,581],[1423,581],[1423,580],[1424,575],[1424,575],[1424,577],[1424,580],[1424,581],[1424,582]],"dx":[1295,-59],"dy":[1295,-59],"length":1364.507403464524,"timing":[192,215,240,264,281,298,314,332,348,365,381,398,415,431,448,465,481,498,514,531,548,564,582,597,614,630,647,665,681,702,716,732,749,765,781,798,815,831,851,864,880,899,915,931,947,964,1244,1264,1281,1297,1331]},{"start":[1423,581],"end":[1288,273],"points":[[1423,581],[1421,580],[1412,574],[1377,547],[1357,530],[1334,507],[1322,492],[1309,476],[1302,463],[1299,457],[1294,447],[1291,438],[1287,427],[1282,414],[1278,402],[1276,390],[1275,382],[1275,373],[1275,366],[1275,361],[1275,353],[1275,347],[1275,345],[1277,343],[1281,342],[1284,342],[1286,342],[1288,342],[1289,341],[1289,341],[1289,341],[1289,340],[1289,340],[1289,338],[1289,331],[1289,315],[1289,302],[1289,288],[1289,280],[1289,275],[1289,274],[1288,273],[1288,273],[1288,273]],"dx":[-135,-308],"dy":[-135,-308],"length":377.28755765959306,"timing":[369,383,400,417,433,450,466,484,500,516,532,549,567,582,599,616,634,649,666,683,703,717,732,749,767,784,800,816,834,850,866,884,1107,1116,1133,1151,1166,1183,1200,1216,1234,1250,1266,1366]},{"start":[1288,273],"end":[834,480],"points":[[1288,273],[1275,273],[1259,276],[1236,282],[1199,294],[1164,306],[1115,325],[1078,342],[1040,368],[1010,398],[967,443],[926,477],[899,497],[888,502],[881,506],[877,508],[874,510],[866,513],[854,518],[842,522],[832,523],[822,524],[817,525],[815,525],[814,525],[814,524],[814,522],[814,518],[815,517],[816,513],[816,512],[817,511],[818,508],[821,503],[825,497],[829,491],[831,486],[834,482],[834,481],[834,481],[834,480]],"dx":[-454,207],"dy":[-454,207],"length":601.1615588047272,"timing":[328,347,364,380,397,414,430,447,464,481,496,514,529,547,564,579,596,613,631,647,663,680,697,713,731,747,764,782,796,813,831,847,862,879,897,914,931,969,980,997,1013]},{"start":[834,480],"end":[1338,275],"points":[[834,480],[857,464],[891,441],[936,417],[981,396],[1014,386],[1077,379],[1127,379],[1165,381],[1205,383],[1226,383],[1240,383],[1257,382],[1267,377],[1284,358],[1291,348],[1296,342],[1300,336],[1302,334],[1305,329],[1308,323],[1313,313],[1316,307],[1321,301],[1324,296],[1328,293],[1330,291],[1333,288],[1335,284],[1337,282],[1337,280],[1338,279],[1338,278],[1338,278],[1338,278],[1338,278],[1338,277],[1338,277],[1338,276],[1338,276],[1338,275]],"dx":[504,-205],"dy":[504,-205],"length":585.3134827242927,"timing":[306,332,349,364,381,399,415,431,448,465,481,499,515,532,548,565,582,598,615,632,648,664,681,699,715,732,749,764,781,798,815,832,848,864,880,938,949,965,982,998,1032]},{"start":[1338,275],"end":[283,34],"points":[[1338,275],[1338,275],[1337,275],[1337,275],[1336,276],[1336,276],[1335,277],[1334,277],[1334,278],[1332,280],[1331,281],[1330,282],[1329,282],[1328,283],[1325,285],[1316,287],[1289,290],[1232,290],[1101,274],[988,254],[874,241],[797,231],[710,220],[634,210],[551,194],[479,176],[436,162],[406,151],[380,141],[364,132],[357,126],[354,121],[351,117],[349,113],[348,112],[346,111],[344,110],[342,109],[339,108],[336,105],[333,101],[329,96],[327,90],[325,85],[324,79],[323,70],[323,70],[316,64],[310,59],[303,52],[295,44],[291,41],[287,37],[285,35],[284,34],[284,34],[284,34],[283,34]],"dx":[-1055,-241],"dy":[-1055,-241],"length":1128.9302366513414,"timing":[43,46,63,80,97,114,130,146,164,180,196,213,230,246,263,280,297,312,330,347,364,380,396,413,430,447,463,480,497,513,530,547,563,580,596,614,630,647,663,680,697,714,730,745,762,780,1003,1030,1047,1063,1080,1096,1113,1130,1146,1163,1180,1196]},{"start":[284,34],"end":[1294,629],"points":[[284,34],[286,34],[288,35],[292,37],[295,39],[299,42],[306,49],[311,55],[321,67],[333,82],[359,114],[416,169],[491,232],[555,276],[643,331],[717,372],[780,403],[838,433],[897,463],[955,494],[992,514],[1034,533],[1059,543],[1095,557],[1110,565],[1116,568],[1118,568],[1123,569],[1147,580],[1174,592],[1200,601],[1215,606],[1233,612],[1246,617],[1252,619],[1266,623],[1272,625],[1279,626],[1284,627],[1288,628],[1290,628],[1291,629],[1292,629],[1293,629],[1294,629]],"dx":[1010,595],"dy":[1010,595],"length":1188.3557134892085,"timing":[98,111,129,146,162,179,196,213,228,246,263,280,296,312,329,346,362,379,395,412,429,445,463,479,495,513,748,762,779,796,812,829,846,863,879,894,912,929,946,963,979,996,1013,1029,1107]},{"start":[1293,629],"end":[1455,776],"points":[[1293,629],[1293,629],[1293,629],[1292,630],[1292,630],[1290,631],[1290,632],[1289,632],[1289,633],[1292,639],[1300,649],[1308,659],[1318,669],[1327,676],[1335,681],[1342,687],[1353,697],[1362,706],[1373,717],[1382,726],[1389,731],[1394,733],[1400,736],[1403,736],[1404,737],[1408,737],[1412,737],[1422,737],[1430,740],[1437,743],[1446,748],[1448,750],[1451,753],[1451,755],[1452,759],[1453,762],[1454,765],[1454,770],[1455,774],[1455,774],[1455,776],[1455,776]],"dx":[162,147],"dy":[162,147],"length":239.2538088869693,"timing":[153,187,193,209,226,242,259,275,292,309,326,342,358,375,392,409,425,443,459,475,493,509,525,542,559,575,592,609,625,642,659,675,693,709,726,742,759,775,792,808,825,842]},{"start":[1454,776],"end":[877,286],"points":[[1454,776],[1453,776],[1453,776],[1453,776],[1452,776],[1452,776],[1451,776],[1451,776],[1449,776],[1447,774],[1443,773],[1441,771],[1438,769],[1435,768],[1432,767],[1428,765],[1423,765],[1410,762],[1386,752],[1355,735],[1293,693],[1248,655],[1220,628],[1175,580],[1137,537],[1093,488],[1061,454],[1037,430],[1021,414],[1010,403],[1006,398],[1004,397],[1003,396],[1000,396],[990,392],[979,389],[955,380],[940,374],[931,370],[927,367],[925,366],[925,366],[923,362],[917,350],[908,334],[901,318],[894,301],[890,293],[887,286],[885,283],[884,282],[883,281],[882,281],[880,281],[879,281],[877,283],[877,284],[877,285],[877,286],[877,286]],"dx":[-577,-490],"dy":[-577,-490],"length":788.4278737678168,"timing":[13,30,46,63,79,111,119,130,147,163,180,197,213,229,246,262,279,295,312,329,346,363,380,396,413,430,445,463,480,497,513,530,546,562,580,596,613,630,645,663,679,696,713,730,746,763,780,796,813,828,846,862,879,897,913,930,946,963,980,996]},{"start":[878,287],"end":[1265,457],"points":[[878,287],[887,293],[908,306],[944,327],[998,362],[1055,399],[1085,418],[1107,429],[1129,438],[1144,441],[1156,441],[1171,440],[1178,436],[1188,431],[1201,421],[1215,412],[1226,407],[1238,403],[1249,401],[1257,400],[1267,400],[1277,400],[1290,403],[1308,421],[1321,451],[1327,479],[1331,514],[1334,544],[1333,543],[1322,526],[1315,514],[1307,497],[1295,473],[1285,450],[1278,434],[1269,418],[1266,412],[1263,408],[1262,406],[1262,406],[1262,406],[1262,407],[1261,408],[1261,409],[1261,412],[1260,418],[1260,423],[1260,430],[1260,436],[1261,441],[1261,445],[1262,449],[1263,451],[1263,452],[1264,454],[1265,456],[1265,457]],"dx":[387,170],"dy":[387,170],"length":825.9235707324311,"timing":[313,333,350,367,383,400,417,433,449,465,482,500,515,533,550,567,583,600,616,633,650,666,683,702,716,733,749,766,1026,1050,1067,1083,1100,1117,1133,1149,1166,1184,1200,1217,1277,1300,1316,1332,1349,1366,1383,1400,1415,1433,1449,1466,1483,1499,1516,1533,1566]},{"start":[1261,451],"end":[951,216],"points":[[1261,451],[1256,451],[1209,437],[1157,412],[1117,388],[1080,362],[1053,341],[1036,323],[1018,301],[999,275],[986,258],[972,240],[966,231],[960,224],[957,219],[955,217],[954,217],[954,217],[954,216],[953,216],[952,216],[951,216],[951,216],[951,216]],"dx":[-310,-235],"dy":[-310,-235],"length":401.0995227719649,"timing":[264,280,296,313,330,346,363,380,396,413,430,447,464,480,497,513,530,546,596,613,630,646,664,680]},{"start":[951,217],"end":[1077,454],"points":[[951,217],[953,228],[959,259],[966,286],[973,321],[983,366],[986,379],[996,412],[1006,434],[1028,469],[1046,492],[1069,520],[1076,528],[1085,538],[1088,542],[1090,543],[1091,543],[1091,541],[1091,535],[1090,527],[1088,519],[1086,509],[1084,494],[1083,485],[1081,475],[1080,470],[1078,465],[1077,462],[1077,460],[1077,458],[1077,457],[1077,455],[1077,454],[1077,454]],"dx":[126,237],"dy":[126,237],"length":454.06932902408226,"timing":[346,367,383,400,416,434,449,467,484,500,517,534,550,567,583,600,617,633,650,666,684,700,717,733,749,767,783,800,817,834,849,867,882,899]},{"start":[1077,454],"end":[596,631],"points":[[1077,454],[1077,454],[1077,454],[1077,455],[1076,456],[1076,457],[1076,457],[1075,458],[1075,459],[1075,460],[1074,460],[1068,464],[1056,470],[1029,479],[966,494],[906,508],[846,528],[807,543],[765,560],[734,572],[703,581],[673,591],[644,599],[625,604],[607,611],[600,613],[594,616],[592,617],[592,618],[592,619],[592,619],[592,620],[592,620],[592,620],[593,620],[593,621],[593,621],[593,621],[594,623],[595,625],[595,628],[596,629],[596,630],[596,631],[596,631],[596,631]],"dx":[-481,177],"dy":[-481,177],"length":531.9283657035737,"timing":[115,122,132,149,166,183,199,215,233,249,265,283,299,315,332,350,365,382,399,416,433,448,465,482,498,515,532,549,565,582,599,614,632,649,666,683,698,716,732,748,766,782,799,815,832,866]},{"start":[596,631],"end":[1208,345],"points":[[596,631],[596,631],[596,630],[596,628],[596,624],[596,616],[606,596],[626,570],[659,535],[701,497],[754,455],[824,411],[893,374],[957,345],[996,332],[1037,319],[1066,312],[1091,306],[1112,300],[1149,295],[1178,292],[1196,292],[1215,292],[1227,292],[1233,293],[1239,294],[1243,294],[1246,294],[1247,294],[1248,294],[1248,295],[1248,298],[1246,305],[1242,313],[1237,323],[1233,328],[1228,333],[1224,337],[1219,340],[1217,342],[1213,343],[1210,344],[1209,345],[1208,345],[1208,345]],"dx":[612,-286],"dy":[612,-286],"length":840.8242449410345,"timing":[225,241,256,272,290,306,323,339,356,373,390,406,423,439,456,473,489,506,522,540,556,573,590,606,622,640,656,672,689,706,723,738,755,773,789,805,823,839,856,873,890,906,922,939,989]},{"start":[566,163],"end":[474,832],"points":[[566,163],[521,291],[481,412],[456,490],[437,546],[415,605],[409,620],[400,643],[397,651],[396,655],[395,656],[395,657],[395,658],[395,659],[395,660],[395,664],[399,670],[406,680],[413,690],[422,702],[427,708],[431,713],[434,718],[436,722],[441,731],[444,738],[446,743],[449,751],[452,757],[455,765],[457,773],[460,781],[461,788],[462,794],[463,799],[463,801],[463,803],[464,803],[464,805],[465,810],[468,816],[471,822],[472,825],[473,827],[473,827],[474,828],[474,828],[474,828],[474,828],[474,830],[474,831],[474,832],[474,832],[474,832]],"dx":[-92,669],"dy":[-92,669],"length":719.6716232246242,"timing":[36215,36232,36248,36265,36281,36298,36315,36332,36349,36366,36381,36398,36415,36431,36449,36465,36481,36498,36514,36532,36548,36565,36581,36599,36615,36632,36649,36664,36682,36698,36715,36731,36748,36764,36782,36797,36815,36831,36848,36865,36882,36898,36915,36932,36948,36965,36981,37013,37031,37095,37115,37131,37148,37165]},{"start":[474,832],"end":[145,105],"points":[[474,832],[463,821],[434,783],[402,744],[357,684],[320,625],[304,593],[292,566],[283,531],[283,531],[279,519],[272,502],[263,480],[245,431],[236,401],[228,377],[222,355],[219,342],[217,329],[216,317],[212,286],[211,277],[209,265],[206,252],[204,244],[202,231],[200,214],[196,193],[193,178],[189,163],[185,151],[182,144],[177,138],[174,134],[170,130],[167,127],[164,126],[162,124],[161,124],[159,122],[157,119],[154,116],[151,113],[149,111],[148,111],[146,111],[146,111],[146,111],[146,110],[146,108],[145,107],[145,105],[145,105]],"dx":[-329,-727],"dy":[-329,-727],"length":818.5362418908827,"timing":[324,349,365,382,398,414,432,448,466,681,699,715,732,748,766,782,798,815,831,849,865,882,898,915,932,949,965,982,998,1015,1032,1048,1065,1081,1099,1115,1131,1148,1165,1181,1198,1215,1232,1248,1264,1281,1299,1315,1332,1348,1365,1382,1415]},{"start":[145,105],"end":[345,664],"points":[[145,105],[146,105],[151,106],[161,109],[186,121],[222,143],[284,202],[314,252],[336,304],[343,340],[351,392],[355,453],[355,485],[355,527],[355,567],[351,602],[349,622],[345,643],[344,653],[342,664],[342,669],[342,674],[342,677],[342,679],[342,681],[343,681],[343,682],[343,682],[343,681],[343,681],[343,680],[343,679],[343,677],[343,673],[343,672],[344,669],[344,668],[345,667],[345,667],[345,666],[345,665],[345,664],[345,664],[345,664]],"dx":[200,559],"dy":[200,559],"length":686.7472115986412,"timing":[218,231,248,264,281,296,314,331,348,364,381,397,414,430,446,464,480,497,514,531,547,564,581,597,614,631,648,664,712,730,748,764,780,797,813,831,847,863,880,897,914,930,948,980]},{"start":[345,663],"end":[74,227],"points":[[345,663],[345,663],[344,662],[339,654],[324,631],[291,578],[236,490],[206,437],[180,389],[156,344],[144,324],[137,312],[130,304],[126,301],[122,299],[115,294],[110,288],[101,274],[95,264],[88,250],[82,234],[77,221],[74,214],[71,208],[69,205],[69,205],[69,206],[69,206],[69,208],[69,209],[70,211],[70,214],[71,217],[72,219],[73,221],[73,222],[73,223],[73,225],[73,226],[73,227],[74,227],[74,227]],"dx":[-271,-436],"dy":[-271,-436],"length":561.5111594309725,"timing":[252,268,284,301,316,334,351,366,384,400,417,434,451,468,484,501,518,533,551,568,584,600,617,634,650,667,704,717,733,751,767,784,801,818,834,851,868,884,901,918,935,951]},{"start":[99,208],"end":[1186,162],"points":[[99,208],[100,208],[109,207],[155,205],[284,205],[395,220],[485,234],[577,252],[626,259],[693,269],[724,270],[762,271],[806,267],[832,258],[845,251],[858,245],[869,240],[881,237],[892,236],[903,236],[915,236],[934,236],[952,236],[972,236],[985,233],[997,227],[1008,218],[1016,209],[1022,203],[1031,199],[1036,199],[1047,206],[1058,215],[1074,226],[1085,231],[1093,233],[1100,234],[1104,234],[1107,232],[1109,227],[1112,222],[1117,213],[1120,209],[1125,204],[1130,200],[1136,195],[1139,192],[1141,190],[1145,186],[1148,183],[1152,180],[1155,178],[1159,176],[1162,174],[1164,173],[1165,173],[1166,172],[1166,172],[1167,172],[1169,171],[1171,170],[1174,169],[1177,167],[1180,166],[1182,164],[1184,163],[1186,162],[1186,162],[1186,162]],"dx":[1087,-46],"dy":[1087,-46],"length":1151.3018353892476,"timing":[263,280,298,315,331,348,364,381,399,415,432,448,464,482,499,515,531,548,565,582,598,614,631,648,666,682,698,715,731,749,764,781,799,814,832,848,865,881,899,914,931,948,965,982,997,1015,1031,1049,1065,1081,1099,1114,1132,1148,1165,1181,1198,1214,1231,1248,1265,1282,1298,1315,1331,1349,1365,1382,1415]},{"start":[1186,162],"end":[924,34],"points":[[1186,162],[1185,162],[1184,162],[1182,162],[1181,162],[1179,162],[1178,162],[1177,162],[1176,162],[1176,162],[1174,162],[1170,162],[1156,162],[1135,156],[1113,147],[1098,139],[1084,130],[1072,122],[1056,110],[1039,100],[1020,90],[1017,89],[1005,82],[1002,81],[1000,79],[998,78],[995,76],[991,72],[984,69],[978,66],[970,63],[964,60],[958,58],[952,55],[945,49],[939,44],[933,39],[928,36],[926,34],[925,34],[925,34],[924,34]],"dx":[-262,-128],"dy":[-262,-128],"length":297.52184060640303,"timing":[82,96,113,129,146,162,179,196,213,229,247,263,280,295,313,330,345,362,380,396,413,429,446,462,480,497,513,530,546,563,579,596,612,629,646,663,680,696,712,729,746,813]},{"start":[924,34],"end":[389,688],"points":[[924,34],[924,34],[924,35],[924,36],[923,37],[923,38],[921,41],[916,49],[907,62],[885,92],[863,124],[846,150],[814,200],[786,240],[771,265],[719,346],[667,428],[646,463],[624,499],[607,527],[598,541],[581,563],[570,578],[557,592],[547,602],[535,612],[522,620],[510,628],[494,639],[484,645],[474,651],[468,654],[463,656],[457,658],[453,659],[447,663],[439,667],[431,672],[426,674],[421,677],[417,679],[412,681],[409,683],[405,684],[403,686],[401,687],[399,688],[398,688],[395,688],[393,688],[389,688],[389,688]],"dx":[-535,654],"dy":[-535,654],"length":865.399865443782,"timing":[158,166,183,199,216,232,249,266,283,299,316,332,349,365,383,399,417,433,449,466,483,499,516,534,548,566,583,599,616,632,650,666,682,699,716,732,749,766,782,799,816,833,848,866,882,900,915,933,949,966,983,1032]},{"start":[389,688],"end":[534,171],"points":[[389,688],[389,687],[389,684],[390,669],[397,641],[406,613],[417,576],[427,547],[436,521],[448,495],[460,467],[472,438],[484,408],[490,391],[496,376],[501,362],[511,337],[518,319],[523,305],[529,290],[533,275],[535,267],[536,259],[537,254],[537,252],[537,246],[537,235],[537,219],[537,206],[537,196],[537,186],[537,181],[537,178],[536,178],[536,177],[535,175],[535,174],[534,173],[534,172],[534,172],[534,171],[534,171]],"dx":[145,-517],"dy":[145,-517],"length":544.7820849746805,"timing":[260,283,299,316,333,349,367,382,400,416,433,449,466,483,499,516,533,550,566,582,599,616,633,649,667,682,700,716,733,750,766,783,799,815,833,850,866,883,900,917,932,994]},{"start":[534,172],"end":[463,474],"points":[[534,172],[532,181],[525,209],[515,244],[506,276],[495,322],[479,388],[471,423],[468,443],[465,456],[464,466],[463,472],[463,473],[463,474],[463,474],[463,474],[463,474],[463,475],[463,475],[463,475],[463,476],[463,476],[463,475],[463,474]],"dx":[-71,302],"dy":[-71,302],"length":314.5327120808835,"timing":[312,333,350,367,383,400,416,433,450,466,483,500,517,533,550,578,619,633,650,667,682,725,750,783]},{"start":[463,474],"end":[1421,190],"points":[[463,474],[464,472],[483,464],[581,432],[678,418],[755,412],[808,410],[842,409],[873,408],[890,406],[907,402],[929,390],[952,372],[985,348],[1012,329],[1065,296],[1096,278],[1124,263],[1149,252],[1170,243],[1191,237],[1212,232],[1235,228],[1260,225],[1284,222],[1297,220],[1306,219],[1315,218],[1324,217],[1331,217],[1340,216],[1345,215],[1352,215],[1356,214],[1361,214],[1363,214],[1366,214],[1370,212],[1376,210],[1383,207],[1388,204],[1396,201],[1400,199],[1403,197],[1406,197],[1409,196],[1413,194],[1416,193],[1418,192],[1420,191],[1421,190],[1421,190]],"dx":[958,-284],"dy":[958,-284],"length":1021.4074255473133,"timing":[296,314,331,348,364,381,398,415,430,447,464,481,497,513,530,547,564,581,598,614,631,648,665,680,697,714,731,747,764,781,797,814,830,847,864,881,897,913,931,948,964,981,998,1014,1030,1047,1066,1080,1098,1114,1131,1181]},{"start":[1421,190],"end":[647,209],"points":[[1421,190],[1420,190],[1419,190],[1419,190],[1418,190],[1418,190],[1418,190],[1416,190],[1411,190],[1399,190],[1379,190],[1348,194],[1300,200],[1267,204],[1221,210],[1196,213],[1171,217],[1161,218],[1155,219],[1148,220],[1140,220],[1124,222],[1105,223],[1083,224],[1058,224],[1030,226],[996,228],[962,232],[929,237],[899,241],[875,243],[851,244],[822,245],[802,245],[792,245],[781,242],[774,240],[769,237],[764,235],[758,233],[754,232],[748,230],[743,229],[737,227],[729,226],[721,224],[714,223],[709,223],[703,223],[698,223],[688,223],[682,222],[675,220],[670,218],[666,216],[662,214],[659,212],[655,211],[653,211],[650,210],[648,210],[647,209],[647,209],[647,209]],"dx":[-774,19],"dy":[-774,19],"length":783.7350511539204,"timing":[126,133,150,166,184,200,247,267,283,300,317,333,350,367,383,400,417,434,449,467,482,501,517,533,551,567,584,600,617,633,650,666,684,700,717,734,750,767,784,800,816,833,851,867,883,899,917,933,950,967,983,1000,1016,1034,1049,1067,1083,1100,1117,1134,1150,1167,1183,1217]},{"start":[648,209],"end":[1226,846],"points":[[648,209],[658,214],[693,244],[723,272],[760,307],[799,349],[839,391],[878,431],[903,454],[931,479],[946,492],[961,504],[973,513],[991,525],[1020,546],[1054,569],[1086,589],[1132,617],[1177,648],[1188,659],[1198,672],[1206,687],[1215,701],[1228,719],[1241,739],[1250,754],[1257,769],[1261,781],[1262,788],[1263,794],[1263,799],[1263,802],[1263,805],[1263,807],[1262,810],[1259,814],[1258,817],[1256,819],[1255,820],[1252,821],[1250,823],[1248,824],[1245,825],[1243,827],[1241,829],[1239,831],[1237,833],[1235,835],[1233,837],[1232,839],[1230,842],[1228,844],[1227,845],[1226,846],[1226,846]],"dx":[578,637],"dy":[578,637],"length":930.64401641222,"timing":[310,333,350,366,383,400,416,432,450,467,483,500,517,533,550,567,583,599,616,633,649,667,682,700,716,733,750,766,783,799,816,833,850,867,883,899,917,934,950,966,983,1000,1015,1033,1050,1066,1083,1100,1116,1134,1149,1167,1183,1200,1249]},{"start":[1226,845],"end":[718,436],"points":[[1226,845],[1226,845],[1226,844],[1226,843],[1225,841],[1224,840],[1223,839],[1221,838],[1218,836],[1213,833],[1196,822],[1171,806],[1140,783],[1115,765],[1071,732],[1033,706],[989,676],[958,654],[922,625],[895,600],[883,585],[871,568],[863,554],[857,545],[851,535],[841,520],[826,504],[815,494],[803,486],[798,483],[792,481],[789,480],[788,480],[787,480],[784,480],[781,478],[776,477],[771,475],[765,474],[758,472],[754,471],[748,468],[744,465],[737,457],[734,453],[732,450],[729,446],[727,444],[724,441],[722,439],[720,438],[719,437],[718,437],[718,436]],"dx":[-508,-409],"dy":[-508,-409],"length":664.6647026693714,"timing":[65,78,95,111,128,145,162,179,194,211,227,245,261,278,294,311,328,344,361,378,394,411,428,445,462,478,494,512,528,545,561,577,594,611,628,644,661,678,695,711,728,745,762,778,795,811,828,845,861,878,894,911,927,945]},{"start":[719,436],"end":[1600,853],"points":[[719,436],[749,442],[786,454],[833,470],[919,498],[1003,524],[1117,559],[1257,607],[1349,640],[1417,666],[1455,681],[1486,695],[1504,704],[1516,712],[1526,718],[1537,725],[1557,735],[1569,744],[1580,753],[1589,763],[1596,772],[1600,777],[1602,782],[1603,784],[1604,786],[1604,789],[1604,793],[1604,799],[1604,806],[1604,811],[1604,817],[1604,820],[1604,823],[1603,826],[1602,832],[1601,836],[1601,840],[1601,843],[1601,845],[1601,846],[1601,848],[1601,849],[1601,850],[1601,851],[1601,852],[1601,852],[1601,852],[1601,852],[1600,852],[1600,853]],"dx":[881,417],"dy":[881,417],"length":1030.4802350385107,"timing":[393,417,433,450,467,484,500,517,534,551,567,584,600,617,634,650,667,690,700,717,734,750,767,784,800,817,834,850,867,883,901,918,933,951,967,984,1000,1016,1033,1050,1067,1083,1100,1116,1132,1149,1167,1184,1201,1233]},{"start":[1600,852],"end":[911,57],"points":[[1600,852],[1600,852],[1600,851],[1600,850],[1600,849],[1600,849],[1600,849],[1593,848],[1577,837],[1550,817],[1490,770],[1386,685],[1267,583],[1182,506],[1113,441],[1072,401],[1048,376],[1028,353],[1012,329],[1002,312],[992,291],[979,265],[961,225],[950,199],[944,183],[940,175],[938,169],[936,166],[936,165],[934,159],[932,150],[930,137],[927,128],[924,120],[923,116],[922,114],[921,113],[921,108],[920,103],[919,96],[917,87],[916,81],[915,76],[914,74],[913,72],[913,70],[913,68],[912,65],[912,62],[912,60],[912,58],[912,57],[911,57]],"dx":[-689,-795],"dy":[-689,-795],"length":1084.9142380298401,"timing":[155,166,183,199,216,233,291,316,336,350,366,382,399,415,432,449,466,482,499,516,533,549,566,583,600,616,633,649,666,682,699,716,733,749,766,783,799,816,833,848,866,882,898,916,932,950,966,982,998,1015,1033,1050,1065]},{"start":[913,57],"end":[1613,62],"points":[[913,57],[924,58],[953,62],[1001,68],[1065,77],[1135,87],[1180,95],[1225,106],[1261,117],[1294,126],[1327,134],[1363,139],[1395,142],[1414,142],[1434,142],[1454,140],[1464,137],[1476,133],[1487,130],[1499,127],[1508,125],[1517,123],[1524,121],[1532,118],[1540,112],[1548,105],[1553,100],[1557,95],[1562,90],[1567,87],[1577,83],[1586,80],[1593,77],[1601,73],[1604,71],[1606,69],[1608,67],[1610,65],[1611,64],[1612,63],[1612,62],[1612,62],[1613,62]],"dx":[700,5],"dy":[700,5],"length":731.3207062747198,"timing":[315,332,349,364,382,398,415,431,448,465,481,498,515,532,548,565,584,598,615,632,648,665,680,698,714,732,748,765,782,797,815,831,848,865,881,898,915,932,949,965,982,998,1034]},{"start":[1612,62],"end":[1369,507],"points":[[1612,62],[1612,62],[1609,62],[1601,66],[1591,69],[1583,72],[1576,74],[1573,75],[1568,76],[1560,77],[1549,79],[1533,86],[1511,96],[1486,111],[1472,121],[1463,132],[1451,157],[1444,185],[1436,211],[1423,246],[1413,270],[1407,288],[1402,301],[1397,313],[1395,320],[1394,329],[1394,348],[1394,355],[1394,371],[1393,385],[1390,403],[1387,412],[1385,420],[1384,427],[1383,433],[1382,441],[1381,452],[1380,463],[1379,470],[1378,476],[1378,480],[1377,483],[1376,485],[1375,487],[1373,492],[1372,495],[1372,497],[1371,499],[1371,501],[1370,503],[1370,505],[1369,506],[1369,506],[1369,507],[1369,507]],"dx":[-243,445],"dy":[-243,445],"length":558.8302434711095,"timing":[90,100,117,134,151,167,183,201,217,234,251,268,283,301,317,334,350,367,383,400,417,434,450,466,484,500,519,534,551,567,583,601,617,634,650,666,684,700,717,733,750,767,784,800,817,833,850,867,883,900,917,934,950,968,1033]},{"start":[1369,507],"end":[877,99],"points":[[1369,507],[1368,507],[1367,507],[1364,507],[1360,507],[1352,507],[1345,507],[1329,504],[1294,493],[1246,471],[1189,440],[1153,417],[1117,392],[1101,380],[1083,367],[1046,334],[1020,304],[992,264],[976,236],[964,214],[951,194],[946,187],[942,182],[940,180],[939,179],[936,176],[930,170],[920,158],[913,147],[905,135],[901,129],[898,124],[895,122],[894,120],[892,118],[889,114],[886,110],[883,106],[880,103],[878,100],[877,99],[877,99]],"dx":[-492,-408],"dy":[-492,-408],"length":663.703175096135,"timing":[131,138,149,164,181,198,215,231,247,264,281,298,314,331,348,365,381,398,415,431,448,465,481,498,514,530,547,565,580,598,615,633,648,665,680,698,713,731,747,764,780,798]},{"start":[877,99],"end":[1177,292],"points":[[877,99],[878,100],[883,103],[892,110],[906,121],[918,131],[934,145],[950,160],[983,187],[1024,218],[1073,249],[1122,270],[1140,274],[1156,278],[1168,280],[1173,281],[1175,282],[1175,282],[1175,283],[1175,283],[1175,283],[1175,283],[1175,284],[1175,284],[1175,285],[1175,286],[1176,287],[1176,288],[1177,289],[1177,290],[1177,291],[1177,292]],"dx":[300,193],"dy":[300,193],"length":365.8560359057957,"timing":[283,297,313,330,347,363,380,396,413,430,447,463,480,496,514,530,546,563,580,597,613,631,647,663,680,697,713,730,747,764,780,797]},{"start":[1176,292],"end":[616,143],"points":[[1176,292],[1174,292],[1163,292],[1132,290],[1065,270],[1013,251],[959,227],[903,197],[866,176],[826,156],[804,147],[781,141],[766,139],[755,139],[747,139],[740,141],[733,145],[726,149],[721,151],[713,154],[706,155],[700,156],[691,158],[685,160],[678,160],[671,161],[664,162],[656,162],[648,159],[640,155],[631,150],[626,147],[621,145],[619,144],[617,144],[616,143],[616,143],[616,143]],"dx":[-560,-149],"dy":[-560,-149],"length":600.7327644990003,"timing":[283,297,313,330,347,363,380,396,413,430,446,463,480,496,513,530,546,563,580,597,613,630,647,664,680,697,714,730,746,763,780,797,813,830,846,864,880,897]},{"start":[617,143],"end":[953,193],"points":[[617,143],[624,147],[638,154],[660,163],[685,173],[712,184],[741,194],[772,207],[802,219],[830,228],[848,231],[877,234],[891,234],[906,234],[912,233],[917,231],[919,231],[922,228],[926,226],[931,223],[938,220],[943,218],[947,217],[949,216],[950,215],[951,215],[951,214],[951,214],[951,214],[951,214],[951,213],[952,211],[952,209],[952,206],[953,203],[953,197],[953,195],[953,194],[953,193]],"dx":[336,50],"dy":[336,50],"length":378.1674865151924,"timing":[267,282,299,315,332,349,366,382,398,416,432,448,465,482,499,515,532,548,565,582,599,615,632,649,665,682,698,716,732,749,764,782,798,815,832,848,865,882,899]},{"start":[953,194],"end":[760,261],"points":[[953,194],[950,196],[946,200],[942,205],[935,210],[927,216],[913,224],[903,228],[882,238],[868,243],[852,247],[836,251],[818,255],[802,258],[792,260],[783,261],[778,261],[774,261],[772,261],[770,261],[766,261],[764,261],[762,261],[761,261],[760,261]],"dx":[-193,67],"dy":[-193,67],"length":209.2443542677922,"timing":[259,278,295,311,328,345,362,378,396,412,429,445,462,479,496,512,529,546,561,579,595,612,628,645,662]},{"start":[760,261],"end":[133,811],"points":[[760,261],[760,262],[759,263],[755,269],[745,282],[723,311],[698,345],[667,382],[633,421],[596,456],[573,477],[554,490],[543,496],[543,496],[537,501],[498,534],[458,566],[411,601],[377,622],[339,645],[305,665],[276,682],[259,692],[242,703],[229,710],[222,714],[216,717],[211,720],[207,723],[205,725],[203,728],[200,732],[197,739],[195,743],[193,747],[191,750],[188,756],[185,761],[182,769],[179,774],[176,779],[173,782],[170,784],[167,786],[164,787],[160,790],[157,793],[154,795],[151,798],[148,800],[143,804],[139,806],[137,809],[135,809],[134,810],[133,811],[133,811],[133,811]],"dx":[-627,550],"dy":[-627,550],"length":847.7370170531244,"timing":[256,280,297,313,330,347,364,380,397,414,431,447,464,790,813,831,847,863,880,896,912,930,947,964,980,997,1013,1030,1046,1064,1081,1096,1114,1129,1147,1164,1181,1197,1213,1231,1245,1263,1280,1296,1312,1330,1347,1363,1380,1397,1414,1430,1447,1464,1480,1496,1514,1546]},{"start":[134,810],"end":[1415,526],"points":[[134,810],[135,809],[141,804],[145,801],[151,796],[161,790],[182,778],[234,753],[319,721],[434,685],[554,658],[626,645],[704,635],[768,628],[824,623],[880,617],[916,610],[935,605],[965,598],[988,593],[1025,593],[1049,593],[1083,593],[1116,594],[1148,594],[1167,594],[1195,594],[1214,595],[1228,595],[1251,596],[1272,596],[1284,594],[1298,591],[1308,587],[1315,585],[1319,583],[1322,581],[1325,580],[1328,578],[1331,576],[1335,573],[1340,568],[1346,565],[1351,562],[1358,559],[1364,557],[1369,554],[1373,551],[1376,547],[1378,544],[1379,541],[1380,538],[1380,538],[1391,532],[1400,529],[1406,528],[1412,526],[1414,526],[1415,526],[1415,526],[1415,526]],"dx":[1281,-284],"dy":[1281,-284],"length":1338.083488964048,"timing":[190,199,215,232,248,265,282,298,315,331,349,365,382,398,415,432,448,465,481,498,515,532,548,565,582,599,615,632,648,665,681,698,714,731,748,765,782,797,815,832,848,864,881,898,914,932,948,965,981,999,1014,1031,1590,1615,1632,1648,1665,1681,1699,1714,1801]},{"start":[1415,526],"end":[963,208],"points":[[1415,526],[1415,526],[1413,526],[1406,527],[1391,528],[1353,527],[1309,514],[1282,502],[1237,475],[1221,463],[1197,442],[1174,424],[1150,405],[1126,386],[1104,370],[1085,354],[1066,341],[1054,332],[1039,320],[1025,307],[1011,295],[1001,285],[992,276],[988,270],[982,261],[977,253],[974,246],[972,239],[969,232],[968,228],[967,223],[966,220],[965,218],[965,216],[964,214],[963,208],[963,208]],"dx":[-452,-318],"dy":[-452,-318],"length":580.9407938480684,"timing":[195,203,216,233,250,267,284,299,317,333,350,366,383,399,416,433,449,466,483,499,517,533,550,566,583,600,616,633,649,666,683,699,716,732,749,818,833]},{"start":[963,208],"end":[769,664],"points":[[963,208],[963,208],[964,208],[964,209],[964,209],[964,212],[960,223],[951,243],[939,268],[929,291],[919,314],[913,334],[906,354],[899,377],[892,403],[884,428],[877,452],[874,468],[869,486],[867,498],[864,514],[861,524],[859,534],[857,544],[854,554],[851,564],[848,573],[843,584],[837,595],[830,605],[823,612],[817,617],[811,623],[803,629],[795,637],[787,645],[782,651],[777,657],[773,661],[771,663],[771,663],[770,663],[769,663],[769,664],[769,664],[769,664]],"dx":[-194,456],"dy":[-194,456],"length":508.1698312778311,"timing":[204,211,227,243,260,277,294,310,327,343,361,377,394,410,427,444,460,477,493,510,526,544,560,576,593,610,627,643,661,678,694,710,727,743,760,776,793,811,827,843,860,877,893,910,926,977]},{"start":[768,664],"end":[215,628],"points":[[768,664],[768,664],[767,664],[766,664],[764,664],[760,664],[754,664],[746,664],[741,664],[740,664],[718,663],[679,658],[619,652],[554,647],[497,647],[441,647],[404,650],[362,652],[337,654],[310,654],[290,654],[274,653],[261,651],[250,649],[245,648],[241,647],[238,646],[237,645],[237,645],[236,645],[236,645],[235,645],[235,644],[233,643],[231,641],[229,638],[226,636],[224,634],[222,633],[220,632],[219,631],[217,630],[216,629],[215,628],[215,628]],"dx":[-553,-36],"dy":[-553,-36],"length":562.3000783313765,"timing":[274,286,302,319,336,353,370,385,402,662,686,703,719,736,753,769,786,802,819,835,853,868,886,903,920,936,953,969,986,1002,1019,1035,1052,1069,1086,1102,1119,1136,1152,1170,1186,1202,1218,1236,1268]},{"start":[1557,821],"end":[854,225],"points":[[1557,821],[1552,821],[1541,818],[1523,811],[1482,790],[1408,748],[1329,700],[1269,658],[1199,607],[1145,564],[1102,525],[1075,500],[1045,469],[1019,442],[985,401],[972,385],[958,367],[947,354],[940,346],[934,340],[929,336],[924,332],[919,326],[913,320],[907,313],[901,306],[894,299],[886,290],[875,277],[868,268],[861,257],[857,250],[853,242],[852,240],[851,239],[851,238],[852,238],[852,238],[852,237],[852,234],[852,231],[853,228],[854,226],[854,225]],"dx":[-703,-596],"dy":[-703,-596],"length":943.4892042010098,"timing":[251,269,285,302,318,334,352,369,384,402,419,436,452,469,486,502,519,535,552,568,585,602,618,635,651,669,685,702,718,735,752,769,785,802,818,835,885,902,918,935,952,969,985,1018]},{"start":[855,225],"end":[1362,24],"points":[[855,225],[884,218],[927,205],[991,184],[1072,159],[1161,137],[1241,122],[1308,117],[1346,116],[1369,115],[1382,113],[1391,112],[1397,110],[1400,106],[1402,103],[1404,101],[1405,98],[1406,94],[1407,86],[1408,81],[1408,77],[1408,74],[1408,73],[1408,72],[1407,68],[1399,55],[1392,45],[1385,37],[1378,30],[1372,26],[1368,25],[1366,24],[1364,24],[1363,24],[1363,24],[1363,24],[1362,24],[1362,24],[1362,24]],"dx":[507,-201],"dy":[507,-201],"length":667.2840811395084,"timing":[324,348,365,381,399,415,431,448,464,482,498,515,532,549,565,582,598,615,631,648,665,681,699,715,732,748,765,782,798,815,831,848,865,881,898,914,938,949,965]},{"start":[1362,25],"end":[960,777],"points":[[1362,25],[1361,29],[1360,32],[1348,57],[1337,82],[1316,124],[1296,162],[1276,200],[1249,245],[1221,295],[1194,347],[1156,425],[1132,479],[1117,510],[1098,550],[1080,587],[1064,619],[1055,638],[1040,669],[1029,687],[1021,701],[1009,719],[998,733],[990,745],[983,754],[978,761],[974,765],[970,770],[966,772],[965,773],[964,773],[964,773],[964,773],[963,773],[963,773],[963,773],[963,773],[962,775],[961,776],[960,777],[960,777]],"dx":[-402,752],"dy":[-402,752],"length":856.6053617765706,"timing":[235,246,262,279,295,313,329,346,362,379,396,412,429,445,462,479,496,512,528,546,563,579,596,612,629,646,662,679,696,712,729,746,777,796,817,833,907,929,945,963,996]},{"start":[960,777],"end":[448,830],"points":[[960,777],[959,777],[958,777],[957,777],[951,780],[933,786],[902,795],[860,804],[825,807],[784,808],[764,808],[746,806],[735,802],[727,796],[727,796],[722,797],[675,814],[655,819],[626,827],[606,832],[592,836],[580,840],[566,845],[550,849],[536,850],[521,851],[507,852],[496,852],[488,852],[482,852],[477,852],[473,853],[471,853],[468,853],[465,853],[462,851],[459,848],[458,844],[455,841],[453,837],[451,834],[450,832],[449,831],[448,830],[448,830]],"dx":[-512,53],"dy":[-512,53],"length":539.4163291602232,"timing":[268,285,302,318,334,352,368,385,401,418,434,451,470,485,788,802,821,835,852,867,885,901,918,935,951,968,984,1002,1018,1034,1051,1068,1084,1101,1118,1134,1151,1168,1185,1201,1218,1234,1252,1268,1301]},{"start":[448,829],"end":[1166,28],"points":[[448,829],[448,826],[455,805],[472,770],[486,745],[509,713],[531,686],[556,665],[578,650],[601,635],[634,611],[668,582],[706,538],[750,485],[793,433],[821,403],[853,368],[882,338],[922,298],[954,263],[1000,214],[1030,184],[1046,171],[1056,164],[1064,158],[1072,151],[1078,139],[1086,121],[1093,107],[1096,99],[1098,93],[1099,90],[1100,90],[1101,87],[1104,82],[1107,78],[1112,73],[1115,71],[1118,70],[1124,69],[1129,68],[1129,68],[1132,62],[1136,55],[1144,46],[1154,36],[1160,31],[1163,29],[1164,29],[1165,28],[1166,28]],"dx":[718,-801],"dy":[718,-801],"length":1093.5215681806044,"timing":[280,295,312,329,346,362,379,395,412,428,445,462,478,496,513,529,545,562,578,595,612,629,645,662,679,696,712,729,745,762,779,795,812,828,845,862,878,895,912,929,945,1406,1429,1446,1462,1479,1495,1511,1528,1545,1562]},{"start":[1165,28],"end":[1366,558],"points":[[1165,28],[1165,29],[1165,29],[1165,29],[1164,30],[1163,33],[1160,38],[1157,44],[1154,51],[1153,56],[1151,77],[1151,99],[1156,131],[1161,158],[1169,194],[1175,229],[1180,261],[1192,306],[1210,343],[1228,371],[1245,394],[1265,420],[1274,429],[1279,436],[1283,439],[1285,441],[1290,444],[1306,455],[1324,466],[1337,475],[1350,485],[1356,491],[1360,495],[1361,498],[1362,500],[1362,501],[1362,503],[1361,506],[1359,511],[1358,516],[1356,520],[1355,525],[1353,531],[1351,536],[1348,545],[1347,549],[1346,551],[1346,553],[1346,553],[1346,553],[1348,553],[1350,553],[1351,553],[1353,553],[1354,553],[1357,553],[1360,554],[1362,555],[1364,556],[1365,557],[1366,557],[1366,558],[1366,558]],"dx":[201,530],"dy":[201,530],"length":626.0343769712728,"timing":[161,177,202,213,229,247,264,280,297,312,330,347,364,380,397,415,430,447,464,479,497,514,530,547,564,581,597,614,630,647,664,681,697,714,731,746,764,780,797,813,830,847,864,880,897,914,930,947,964,993,1014,1031,1046,1064,1080,1097,1113,1131,1147,1163,1180,1197,1221]},{"start":[1431,715],"end":[646,694],"points":[[1431,715],[1426,715],[1408,713],[1367,709],[1294,708],[1241,708],[1174,712],[1104,723],[1058,731],[1010,738],[972,742],[941,744],[913,746],[888,746],[871,746],[854,745],[839,740],[826,734],[814,727],[805,721],[800,717],[792,710],[788,704],[786,701],[786,701],[783,701],[751,705],[722,706],[703,706],[684,706],[673,705],[664,704],[658,703],[656,703],[654,703],[652,702],[651,701],[650,700],[648,699],[647,699],[646,698],[646,697],[646,696],[646,694],[646,694]],"dx":[-785,-21],"dy":[-785,-21],"length":808.7166954896402,"timing":[217,230,247,264,280,297,313,330,347,363,379,396,413,430,446,463,480,497,513,530,547,564,580,597,864,879,897,914,930,947,963,980,997,1014,1030,1047,1063,1080,1096,1113,1130,1146,1163,1180,1230]},{"start":[576,737],"end":[848,334],"points":[[576,737],[580,725],[589,708],[603,687],[621,662],[633,648],[646,632],[661,614],[672,600],[685,580],[705,547],[717,523],[727,502],[737,481],[744,465],[750,450],[756,435],[763,416],[773,393],[780,378],[784,371],[787,365],[790,361],[794,357],[798,354],[803,350],[807,348],[812,345],[817,344],[821,342],[826,341],[830,340],[835,339],[839,338],[843,337],[845,337],[846,336],[847,336],[847,335],[848,334],[848,334]],"dx":[272,-403],"dy":[272,-403],"length":501.76894894346015,"timing":[306,330,346,363,379,396,413,430,446,463,479,496,512,529,546,563,580,596,613,629,645,663,679,696,712,729,746,762,779,796,813,829,845,863,880,896,913,929,946,963,1012]},{"start":[848,335],"end":[1345,699],"points":[[848,335],[851,338],[860,346],[883,366],[920,395],[970,434],[1006,462],[1044,493],[1072,514],[1093,532],[1149,607],[1150,607],[1153,607],[1176,610],[1196,616],[1207,619],[1233,629],[1249,636],[1260,643],[1270,649],[1278,653],[1286,658],[1301,668],[1312,675],[1324,684],[1331,690],[1338,694],[1343,698],[1344,698],[1344,699],[1344,699],[1344,699],[1345,699]],"dx":[497,364],"dy":[497,364],"length":628.7202618122034,"timing":[296,315,331,348,364,381,398,415,431,448,465,749,764,781,798,815,832,848,865,881,897,914,931,948,965,981,998,1014,1031,1048,1129,1177,1215]},{"start":[1344,699],"end":[545,325],"points":[[1344,699],[1344,699],[1344,699],[1336,697],[1311,690],[1261,676],[1115,632],[1025,600],[888,551],[834,527],[785,500],[757,478],[742,459],[733,440],[732,440],[723,439],[706,433],[681,427],[648,418],[621,409],[606,404],[591,397],[586,393],[581,390],[576,385],[573,381],[571,377],[568,371],[567,369],[564,364],[563,363],[562,361],[560,359],[559,355],[558,349],[556,345],[554,340],[552,335],[549,331],[547,328],[545,325],[545,325],[545,325]],"dx":[-799,-374],"dy":[-799,-374],"length":912.029154539497,"timing":[234,258,270,287,304,320,337,354,370,387,404,420,436,454,704,720,736,754,770,787,803,820,837,853,870,887,903,921,937,953,969,986,1004,1020,1037,1054,1070,1087,1103,1120,1136,1153,1187]},{"start":[545,325],"end":[408,562],"points":[[545,325],[545,328],[544,331],[541,337],[536,348],[531,358],[523,373],[515,387],[505,404],[499,414],[492,425],[487,434],[482,442],[478,449],[474,456],[471,461],[465,471],[462,476],[459,482],[456,488],[455,493],[453,498],[452,501],[451,503],[451,505],[450,507],[448,510],[446,515],[443,520],[441,524],[437,532],[430,542],[426,551],[420,561],[417,565],[416,566],[414,566],[412,566],[411,565],[411,564],[410,563],[409,563],[409,562],[409,562],[408,562]],"dx":[-137,237],"dy":[-137,237],"length":285.5927483604685,"timing":[297,317,333,350,367,383,402,417,434,449,467,483,500,517,534,550,566,583,600,616,633,650,667,684,701,717,734,751,767,783,802,817,834,850,867,884,901,916,934,950,967,984,1001,1017,1067]},{"start":[409,562],"end":[1540,224],"points":[[409,562],[411,561],[417,557],[439,539],[500,497],[582,448],[662,411],[759,374],[887,334],[1021,295],[1150,261],[1266,228],[1333,210],[1382,198],[1429,186],[1461,177],[1482,170],[1503,160],[1526,150],[1549,140],[1564,135],[1579,133],[1593,133],[1603,133],[1610,134],[1614,136],[1620,140],[1623,147],[1624,162],[1618,177],[1610,188],[1604,197],[1597,203],[1593,207],[1588,209],[1583,211],[1575,212],[1566,215],[1556,218],[1548,222],[1545,223],[1543,224],[1542,224],[1541,224],[1540,224],[1540,224]],"dx":[1131,-338],"dy":[1131,-338],"length":1432.1177713814654,"timing":[303,316,333,350,366,383,399,417,433,450,467,483,500,517,533,550,566,584,600,617,634,650,667,683,700,716,733,749,766,783,800,817,833,850,867,884,900,917,934,950,967,983,1000,1016,1033,1100]},{"start":[1540,224],"end":[1090,280],"points":[[1540,224],[1540,224],[1540,223],[1540,223],[1540,223],[1540,223],[1538,223],[1528,223],[1510,223],[1486,227],[1440,235],[1399,243],[1360,249],[1323,255],[1288,256],[1255,257],[1222,256],[1189,253],[1166,252],[1143,251],[1133,251],[1124,251],[1121,251],[1119,251],[1117,253],[1112,257],[1106,263],[1099,270],[1095,273],[1092,275],[1092,276],[1091,277],[1090,278],[1090,279],[1090,280],[1090,280]],"dx":[-450,56],"dy":[-450,56],"length":467.0113120657857,"timing":[119,129,146,162,231,264,278,295,312,329,346,362,379,395,412,429,445,462,478,496,512,529,544,562,579,595,612,628,645,662,679,695,712,729,746,779]},{"start":[1088,280],"end":[665,215],"points":[[1088,280],[1085,280],[1068,282],[1031,284],[988,284],[938,277],[904,271],[864,265],[831,259],[805,255],[782,250],[759,244],[746,239],[739,236],[732,234],[727,233],[721,232],[716,231],[710,229],[704,225],[697,221],[693,218],[688,216],[684,216],[681,216],[678,216],[671,216],[669,215],[665,215],[665,215]],"dx":[-423,-65],"dy":[-423,-65],"length":433.10979648928407,"timing":[469,480,497,513,529,546,563,580,596,613,630,647,663,680,696,714,730,747,763,780,797,814,830,846,863,880,900,913,930,996]},{"start":[665,216],"end":[637,689],"points":[[665,216],[665,221],[665,229],[665,243],[663,272],[657,312],[650,367],[647,406],[643,447],[642,467],[640,488],[637,520],[635,540],[634,556],[633,572],[632,581],[631,588],[630,593],[630,597],[630,601],[630,605],[630,609],[630,613],[630,616],[631,621],[632,628],[633,635],[634,642],[635,650],[637,655],[638,661],[639,663],[640,666],[642,667],[643,669],[644,670],[645,670],[645,670],[646,670],[646,670],[646,670],[646,670],[646,671],[645,675],[643,682],[641,690],[639,701],[637,715],[636,722],[636,727],[635,729],[635,729],[635,730],[635,729],[635,729],[635,729],[635,729],[636,728],[636,726],[637,721],[637,715],[637,705],[637,699],[637,693],[637,690],[637,689],[637,689]],"dx":[-28,473],"dy":[-28,473],"length":563.8372819080972,"timing":[296,314,330,348,365,381,398,415,432,447,464,481,497,515,530,548,564,581,597,614,631,647,664,681,698,715,731,748,764,780,798,815,831,848,864,881,898,914,931,947,964,981,2564,2580,2598,2614,2631,2648,2664,2681,2698,2715,2730,2774,2798,2815,2831,2847,2864,2881,2898,2914,2931,2948,2965,2981,2998]},{"start":[638,689],"end":[1257,688],"points":[[638,689],[648,683],[663,677],[685,669],[714,663],[747,660],[783,660],[820,663],[856,673],[892,685],[939,697],[970,698],[1002,699],[1037,699],[1059,699],[1080,700],[1093,703],[1098,707],[1104,711],[1110,715],[1122,717],[1136,718],[1147,718],[1157,717],[1165,716],[1173,715],[1180,714],[1196,712],[1208,710],[1217,709],[1225,708],[1230,708],[1233,707],[1237,704],[1240,702],[1243,700],[1246,698],[1249,696],[1251,695],[1253,694],[1255,692],[1257,689],[1257,689],[1257,688]],"dx":[619,-1],"dy":[619,-1],"length":641.4841047790685,"timing":[296,316,333,349,366,381,399,416,432,449,465,482,498,516,532,549,565,582,599,615,632,649,666,682,699,715,732,749,766,782,798,816,832,849,865,882,899,916,932,949,966,982,999,1033]},{"start":[1257,688],"end":[1478,412],"points":[[1257,688],[1256,688],[1255,688],[1254,688],[1253,686],[1253,684],[1253,681],[1257,674],[1267,662],[1284,644],[1305,624],[1335,601],[1353,587],[1368,574],[1377,564],[1383,554],[1384,549],[1386,542],[1386,538],[1386,532],[1386,529],[1386,528],[1386,526],[1386,524],[1383,490],[1381,467],[1381,451],[1382,451],[1393,447],[1409,442],[1424,437],[1441,433],[1452,429],[1461,426],[1466,423],[1469,422],[1471,420],[1473,418],[1475,415],[1476,414],[1477,412],[1478,412]],"dx":[221,-276],"dy":[221,-276],"length":403.68710783608765,"timing":[201,215,231,249,265,282,298,315,331,349,365,381,398,415,431,447,465,480,499,515,532,548,565,589,615,632,649,922,948,965,982,999,1015,1031,1049,1064,1082,1098,1115,1131,1149,1165]},{"start":[1478,412],"end":[1302,29],"points":[[1478,412],[1477,412],[1476,411],[1474,411],[1471,411],[1468,411],[1464,411],[1458,412],[1450,412],[1442,412],[1434,410],[1428,406],[1424,401],[1421,394],[1418,380],[1414,352],[1408,289],[1404,225],[1399,201],[1397,194],[1397,194],[1390,185],[1379,164],[1376,157],[1354,106],[1340,69],[1329,35],[1325,24],[1319,9],[1316,3],[1315,2],[1314,1],[1314,1],[1313,1],[1313,2],[1313,2],[1312,2],[1312,3],[1312,4],[1311,4],[1311,5],[1310,9],[1309,12],[1308,17],[1307,21],[1306,24],[1305,26],[1304,28],[1303,29],[1303,29],[1303,29],[1302,29]],"dx":[-176,-383],"dy":[-176,-383],"length":512.2956597782577,"timing":[117,132,149,165,182,198,214,231,248,265,281,298,315,332,348,365,382,399,416,432,692,715,732,748,766,781,798,814,832,848,864,882,897,918,967,982,998,1015,1032,1048,1065,1082,1099,1115,1132,1148,1165,1182,1198,1215,1231,1265]},{"start":[1556,340],"end":[134,532],"points":[[1556,340],[1554,340],[1546,344],[1529,350],[1509,355],[1447,369],[1358,382],[1241,394],[1048,415],[877,438],[703,463],[580,485],[430,518],[354,536],[300,552],[264,561],[245,565],[244,565],[241,565],[230,565],[211,563],[193,558],[180,553],[165,547],[157,544],[147,540],[145,539],[140,537],[138,536],[136,534],[135,533],[134,533],[134,532],[134,532],[134,532],[134,532]],"dx":[-1422,192],"dy":[-1422,192],"length":1450.9437498438108,"timing":[287,300,316,333,350,366,383,399,416,433,450,466,483,499,516,533,549,813,834,849,867,883,901,916,933,950,966,983,999,1017,1033,1050,1066,1086,1118,1133]},{"start":[134,532],"end":[1592,115],"points":[[134,532],[136,531],[143,525],[175,502],[231,464],[303,428],[411,388],[558,352],[714,333],[815,326],[916,318],[991,307],[1050,291],[1087,279],[1125,267],[1143,263],[1144,263],[1153,259],[1170,255],[1213,245],[1276,236],[1346,233],[1394,233],[1443,233],[1465,232],[1491,226],[1501,220],[1509,213],[1513,207],[1518,202],[1522,199],[1525,197],[1529,195],[1534,193],[1541,189],[1547,183],[1550,179],[1555,173],[1557,167],[1563,154],[1570,142],[1576,132],[1581,124],[1585,118],[1587,117],[1588,116],[1589,116],[1590,115],[1590,115],[1591,115],[1591,115],[1591,115],[1592,115],[1592,115],[1592,115]],"dx":[1458,-417],"dy":[1458,-417],"length":1566.5538590184974,"timing":[265,278,295,312,328,345,362,378,395,412,428,445,461,479,495,512,742,761,779,794,812,828,845,861,878,895,911,928,945,962,978,995,1012,1029,1045,1062,1078,1095,1112,1128,1145,1162,1179,1195,1212,1229,1245,1262,1279,1295,1382,1397,1411,1428,1445]},{"start":[1592,116],"end":[450,370],"points":[[1592,116],[1585,119],[1569,125],[1543,135],[1496,154],[1450,172],[1397,194],[1329,215],[1224,239],[1128,254],[1006,267],[874,278],[787,285],[724,290],[667,297],[641,300],[616,305],[594,309],[583,312],[576,315],[569,318],[561,322],[551,328],[541,336],[530,343],[521,349],[516,352],[507,357],[500,360],[492,363],[487,365],[482,367],[479,368],[477,368],[476,369],[475,369],[475,369],[474,369],[473,369],[472,369],[472,369],[471,369],[470,369],[465,369],[463,369],[459,369],[457,369],[456,369],[455,369],[455,369],[454,369],[453,369],[452,370],[451,370],[450,370],[450,370]],"dx":[-1142,254],"dy":[-1142,254],"length":1183.1104469840739,"timing":[249,264,281,297,315,331,348,365,381,398,414,431,447,465,481,497,514,531,547,564,581,597,613,631,648,663,681,698,714,731,748,764,781,798,815,831,848,864,881,898,931,1211,1231,1248,1265,1281,1299,1315,1332,1348,1364,1381,1398,1414,1431,1448]},{"start":[450,370],"end":[760,776],"points":[[450,370],[450,370],[451,370],[451,370],[452,370],[453,370],[456,371],[459,375],[464,380],[474,390],[485,404],[497,422],[513,444],[535,477],[545,489],[564,510],[578,525],[595,541],[613,558],[630,578],[639,589],[647,602],[651,607],[655,614],[657,620],[660,627],[666,639],[674,652],[686,671],[692,679],[706,695],[715,703],[721,707],[726,711],[729,714],[732,717],[734,721],[737,726],[740,732],[744,738],[747,743],[750,747],[753,752],[756,758],[758,763],[758,768],[759,772],[760,776],[760,776]],"dx":[310,406],"dy":[310,406],"length":518.1494986317158,"timing":[206,219,234,250,267,284,300,317,333,350,366,384,400,417,433,450,467,484,500,517,533,550,567,583,600,616,633,650,668,683,700,717,733,750,766,783,800,817,833,850,867,882,899,916,934,950,967,983,1000]},{"start":[760,776],"end":[1462,433],"points":[[760,776],[760,773],[767,754],[780,732],[806,695],[834,665],[871,632],[917,599],[1002,555],[1086,533],[1187,518],[1257,512],[1314,505],[1367,498],[1389,493],[1404,489],[1419,483],[1427,479],[1429,477],[1438,469],[1445,463],[1449,459],[1452,455],[1455,452],[1456,448],[1457,445],[1459,440],[1460,437],[1461,435],[1461,434],[1462,433],[1462,433]],"dx":[702,-343],"dy":[702,-343],"length":829.7078714241571,"timing":[235,249,266,283,300,316,333,350,367,383,400,417,433,450,467,483,500,516,533,550,566,583,599,616,633,649,667,684,700,717,735,750]},{"start":[1461,433],"end":[322,837],"points":[[1461,433],[1461,433],[1460,433],[1459,434],[1458,435],[1456,436],[1456,436],[1455,436],[1453,437],[1449,438],[1442,441],[1428,448],[1408,456],[1368,472],[1298,500],[1199,536],[1068,582],[868,651],[680,710],[489,762],[371,795],[292,816],[235,826],[205,831],[194,833],[187,834],[183,835],[182,836],[182,836],[184,832],[192,827],[202,822],[215,818],[229,817],[243,817],[255,817],[267,817],[273,816],[277,815],[280,815],[281,815],[282,814],[282,814],[283,814],[283,814],[283,814],[284,814],[284,814],[284,814],[285,815],[288,820],[295,826],[304,832],[311,835],[317,837],[320,838],[322,838],[322,838],[322,837],[322,837],[322,837],[322,837],[322,837]],"dx":[-1139,404],"dy":[-1139,404],"length":1499.5224953614452,"timing":[120,134,151,167,183,200,216,234,250,267,283,300,317,333,350,366,383,400,417,434,449,467,484,500,517,533,550,566,784,800,817,834,850,866,884,900,917,933,950,966,983,999,1018,1033,1050,1067,1083,1100,1172,1183,1200,1217,1234,1250,1267,1284,1300,1317,1332,1350,1366,1383,1450]},{"start":[322,836],"end":[1227,769],"points":[[322,836],[337,823],[367,804],[416,778],[507,743],[593,724],[744,712],[816,712],[877,712],[951,710],[979,707],[1007,705],[1025,702],[1039,700],[1055,699],[1067,699],[1079,701],[1085,704],[1091,707],[1094,709],[1100,711],[1102,712],[1105,712],[1108,713],[1112,714],[1116,716],[1120,718],[1124,721],[1128,724],[1132,729],[1135,734],[1136,737],[1138,742],[1138,744],[1138,745],[1139,745],[1145,745],[1159,745],[1176,748],[1190,751],[1205,755],[1216,759],[1221,762],[1225,765],[1227,767],[1227,768],[1227,769],[1227,769],[1227,769]],"dx":[905,-67],"dy":[905,-67],"length":957.7876200763013,"timing":[359,380,397,413,429,446,463,480,497,512,529,546,563,579,596,613,630,646,663,679,697,713,730,747,763,780,796,813,829,846,863,879,896,912,929,1362,1379,1396,1414,1429,1446,1463,1479,1496,1513,1529,1547,1638,1713]},{"start":[1226,769],"end":[356,454],"points":[[1226,769],[1218,769],[1200,769],[1169,768],[1106,755],[1026,732],[924,699],[803,656],[683,599],[613,563],[538,520],[500,497],[476,485],[456,474],[442,469],[436,468],[433,467],[430,465],[427,463],[425,462],[424,461],[423,461],[422,461],[422,461],[420,463],[418,464],[414,465],[409,465],[403,465],[395,463],[388,460],[375,456],[370,455],[364,454],[361,454],[358,454],[358,454],[357,454],[357,454],[356,454],[356,454]],"dx":[-870,-315],"dy":[-870,-315],"length":938.1013813225941,"timing":[265,282,298,316,332,348,365,382,398,415,432,448,465,482,499,515,532,549,566,582,599,615,632,648,665,682,698,715,732,749,765,783,799,816,832,849,864,882,899,916,932]},{"start":[356,454],"end":[1254,640],"points":[[356,454],[358,453],[360,452],[370,447],[386,442],[420,437],[472,434],[607,433],[674,433],[750,445],[794,458],[834,476],[852,488],[880,506],[912,523],[953,538],[1009,553],[1043,563],[1070,571],[1094,579],[1109,586],[1127,597],[1151,611],[1170,622],[1195,633],[1212,640],[1222,644],[1227,646],[1228,648],[1229,648],[1230,648],[1232,648],[1234,648],[1236,647],[1240,645],[1245,643],[1247,642],[1250,641],[1252,641],[1253,640],[1253,640],[1254,640],[1254,640]],"dx":[898,186],"dy":[898,186],"length":948.6249857279947,"timing":[229,237,251,267,284,301,317,334,350,367,383,400,417,433,450,467,484,500,517,536,549,567,584,601,617,634,650,667,683,700,717,733,749,767,784,800,817,834,850,868,884,901,918]},{"start":[1253,640],"end":[137,698],"points":[[1253,640],[1250,640],[1246,640],[1240,641],[1223,644],[1204,650],[1165,660],[1120,670],[1058,679],[974,688],[882,694],[758,697],[574,688],[507,679],[417,663],[318,642],[283,636],[245,630],[222,630],[205,630],[192,630],[180,630],[169,630],[160,630],[152,631],[146,631],[141,633],[139,634],[138,636],[137,637],[137,639],[137,646],[136,652],[136,656],[135,661],[135,665],[134,669],[134,672],[134,677],[134,680],[134,683],[134,685],[134,687],[134,689],[134,692],[134,694],[135,695],[135,696],[135,697],[135,697],[136,697],[136,697],[136,698],[136,698],[136,698],[137,698]],"dx":[-1116,58],"dy":[-1116,58],"length":1192.4618628810335,"timing":[247,264,281,297,314,330,347,363,379,396,413,430,448,463,480,497,514,531,547,563,580,597,614,630,646,663,680,697,715,730,747,763,780,797,814,830,847,863,880,897,913,930,947,963,979,997,1013,1030,1047,1064,1080,1097,1114,1130,1147,1214]},{"start":[137,697],"end":[1272,563],"points":[[137,697],[137,697],[137,696],[139,695],[140,694],[142,692],[144,691],[147,689],[150,686],[154,681],[158,677],[164,672],[169,667],[178,659],[196,645],[224,627],[268,607],[327,591],[396,582],[470,580],[538,579],[602,574],[658,565],[695,554],[724,546],[749,539],[776,534],[804,533],[835,533],[868,533],[898,533],[924,533],[949,533],[973,533],[994,533],[1015,534],[1038,536],[1072,538],[1084,538],[1103,538],[1108,539],[1110,540],[1111,541],[1112,542],[1112,543],[1112,544],[1113,544],[1119,544],[1136,544],[1150,544],[1164,544],[1175,545],[1184,546],[1190,546],[1196,547],[1201,548],[1206,548],[1212,548],[1219,549],[1227,550],[1233,551],[1240,552],[1246,552],[1249,554],[1253,555],[1258,557],[1264,559],[1268,561],[1270,562],[1271,562],[1272,563]],"dx":[1135,-134],"dy":[1135,-134],"length":1179.2171797482094,"timing":[62,69,84,101,117,134,150,168,184,201,217,234,251,268,284,301,318,334,350,367,384,400,417,434,451,467,484,501,518,534,551,567,584,601,617,634,650,668,684,700,717,734,751,767,783,799,1228,1250,1268,1284,1300,1317,1334,1350,1367,1383,1401,1417,1434,1451,1468,1484,1501,1517,1534,1551,1568,1584,1601,1617,1634]},{"start":[1271,563],"end":[1141,452],"points":[[1271,563],[1270,563],[1266,563],[1261,563],[1257,563],[1253,561],[1249,557],[1244,553],[1236,544],[1227,536],[1214,527],[1202,518],[1196,514],[1191,511],[1187,509],[1187,508],[1186,506],[1184,503],[1180,497],[1176,491],[1172,487],[1167,482],[1165,480],[1162,477],[1158,474],[1154,471],[1150,466],[1147,462],[1145,458],[1143,455],[1142,454],[1142,453],[1142,453],[1141,453],[1141,453],[1141,453],[1141,453],[1141,452]],"dx":[-130,-111],"dy":[-130,-111],"length":177.89872155943675,"timing":[221,230,247,264,281,297,313,330,347,363,380,397,413,430,447,464,480,497,514,531,547,564,581,597,614,631,647,663,681,696,713,730,763,779,797,813,836,847]},{"start":[1142,452],"end":[1607,662],"points":[[1142,452],[1144,453],[1158,460],[1186,476],[1226,500],[1276,530],[1325,563],[1357,585],[1390,607],[1416,627],[1435,641],[1455,656],[1478,672],[1505,688],[1522,697],[1533,702],[1540,705],[1543,707],[1544,707],[1544,707],[1544,707],[1544,704],[1546,701],[1550,697],[1556,693],[1563,690],[1569,687],[1575,684],[1581,681],[1588,678],[1594,674],[1598,671],[1601,667],[1604,665],[1605,663],[1606,662],[1606,662],[1607,662]],"dx":[465,210],"dy":[465,210],"length":557.3071739286634,"timing":[620,634,650,667,684,701,717,734,750,768,784,801,816,834,851,868,884,900,918,934,951,967,984,1000,1017,1034,1051,1067,1084,1101,1118,1134,1151,1168,1184,1201,1217,1234]},{"start":[1606,662],"end":[999,639],"points":[[1606,662],[1602,663],[1597,667],[1590,670],[1573,679],[1546,688],[1511,695],[1465,698],[1429,700],[1384,702],[1347,705],[1318,708],[1294,710],[1272,712],[1249,716],[1214,719],[1191,719],[1168,718],[1146,712],[1130,707],[1113,702],[1100,698],[1090,695],[1085,693],[1079,690],[1075,688],[1071,686],[1067,683],[1063,681],[1059,677],[1055,674],[1052,672],[1046,668],[1042,666],[1038,665],[1033,662],[1028,658],[1022,653],[1018,651],[1013,647],[1009,645],[1007,645],[1005,644],[1004,644],[1003,643],[1003,642],[1002,641],[1001,640],[999,639],[999,639],[999,639]],"dx":[-607,-23],"dy":[-607,-23],"length":635.6874833855117,"timing":[268,285,301,318,334,351,367,385,401,418,434,451,468,485,501,517,535,551,568,584,601,617,634,650,667,684,701,718,734,751,768,785,801,818,835,851,868,884,901,917,934,950,968,984,1001,1017,1035,1050,1067,1085,1151]},{"start":[999,639],"end":[699,859],"points":[[999,639],[997,639],[986,642],[968,650],[933,666],[891,687],[843,717],[809,741],[761,785],[749,797],[726,823],[715,837],[707,847],[704,853],[701,858],[700,859],[699,860],[699,860],[699,860],[699,859],[699,859],[699,859]],"dx":[-300,220],"dy":[-300,220],"length":380.53913136759314,"timing":[387,400,416,432,450,466,483,499,516,532,549,566,582,599,616,632,649,666,703,768,791,833]},{"start":[699,858],"end":[552,139],"points":[[699,858],[699,856],[698,848],[694,833],[688,816],[681,795],[657,733],[639,681],[592,492],[581,421],[570,341],[565,296],[563,265],[561,248],[560,236],[559,231],[559,229],[558,227],[558,223],[558,215],[558,204],[559,197],[559,192],[559,190],[559,189],[559,189],[559,186],[559,180],[559,172],[559,164],[559,156],[559,151],[558,147],[557,144],[556,142],[555,142],[555,142],[554,142],[554,142],[554,142],[554,142],[553,142],[553,143],[552,144],[552,144],[552,143],[552,143],[552,142],[552,140],[552,139],[552,139]],"dx":[-147,-719],"dy":[-147,-719],"length":745.4585379091618,"timing":[312,324,339,357,373,391,407,424,440,456,474,489,507,523,540,557,573,590,607,624,641,657,675,690,707,724,740,756,772,790,806,823,840,856,874,890,907,924,941,957,973,990,1007,1024,1057,1430,1440,1456,1473,1490,1507]},{"start":[554,139],"end":[1420,381],"points":[[554,139],[564,140],[594,145],[663,164],[721,180],[793,203],[856,229],[937,266],[960,277],[1017,303],[1078,330],[1126,347],[1175,366],[1212,381],[1253,399],[1278,411],[1304,425],[1322,436],[1335,442],[1347,446],[1359,448],[1371,449],[1378,449],[1385,449],[1391,449],[1395,447],[1397,445],[1399,442],[1401,440],[1403,437],[1404,433],[1405,428],[1406,423],[1407,419],[1408,415],[1409,411],[1410,408],[1411,406],[1412,405],[1413,403],[1414,402],[1416,401],[1417,400],[1418,398],[1419,396],[1420,395],[1421,393],[1422,392],[1422,391],[1422,391],[1422,388],[1422,386],[1421,384],[1421,382],[1420,382],[1420,381],[1420,381]],"dx":[866,242],"dy":[866,242],"length":977.4650289006057,"timing":[327,347,362,380,396,412,429,446,461,480,495,513,529,546,562,579,597,612,629,646,662,680,696,712,730,746,763,779,796,812,829,846,862,879,896,913,929,946,962,980,995,1013,1030,1046,1062,1079,1096,1112,1129,1146,1163,1178,1196,1212,1229,1246,1263]},{"start":[1420,382],"end":[274,403],"points":[[1420,382],[1420,382],[1420,382],[1420,382],[1420,383],[1420,384],[1420,384],[1419,385],[1418,385],[1414,387],[1407,391],[1386,399],[1353,408],[1304,420],[1249,432],[1194,441],[1136,449],[1077,454],[1015,457],[952,459],[882,461],[808,465],[741,468],[699,471],[669,473],[623,477],[596,477],[577,477],[558,476],[543,476],[525,476],[513,476],[502,476],[492,476],[484,476],[475,473],[465,468],[456,462],[448,457],[443,454],[438,450],[436,449],[436,449],[433,449],[423,449],[405,449],[360,439],[339,433],[319,424],[309,420],[300,416],[294,413],[288,410],[284,408],[281,407],[277,405],[276,404],[275,404],[274,404],[274,404],[274,403],[274,403],[274,403]],"dx":[-1146,21],"dy":[-1146,21],"length":1174.3556076613033,"timing":[131,139,150,167,206,222,234,250,267,288,304,317,334,350,367,384,400,416,433,450,467,483,501,516,534,550,566,584,601,617,634,650,667,684,700,718,733,750,767,784,800,817,1054,1067,1083,1100,1117,1134,1151,1167,1184,1200,1217,1234,1249,1267,1283,1300,1317,1333,1350,1366,1384]},{"start":[274,403],"end":[188,569],"points":[[274,403],[274,402],[274,401],[274,399],[274,397],[274,395],[274,394],[274,394],[274,394],[274,394],[274,393],[274,394],[274,396],[273,403],[269,415],[262,431],[252,453],[241,479],[233,498],[224,518],[217,533],[212,542],[208,549],[204,555],[200,561],[196,568],[193,571],[192,572],[191,573],[190,573],[190,573],[190,572],[189,572],[189,571],[189,570],[189,570],[189,569],[188,569]],"dx":[-86,166],"dy":[-86,166],"length":216.59531225938937,"timing":[30,37,48,64,80,97,114,131,147,166,207,305,330,347,364,381,397,414,431,447,464,480,497,514,530,547,563,579,597,614,630,647,663,681,697,714,730,780]},{"start":[188,569],"end":[258,836],"points":[[188,569],[188,568],[188,568],[188,568],[189,570],[191,577],[196,590],[202,611],[230,685],[235,698],[242,717],[249,734],[253,744],[256,753],[258,756],[259,757],[259,758],[260,758],[263,759],[266,762],[272,767],[279,772],[279,772],[276,779],[272,787],[267,800],[262,816],[262,819],[259,831],[258,834],[258,835],[258,836],[258,836],[258,836],[258,836],[258,836],[258,836]],"dx":[70,267],"dy":[70,267],"length":296.8441820777238,"timing":[104,128,153,316,334,348,365,381,427,428,448,464,479,497,514,530,547,564,581,597,614,631,899,914,931,947,965,983,997,1014,1029,1048,1064,1081,1124,1148,1197]},{"start":[258,836],"end":[1242,493],"points":[[258,836],[258,828],[264,813],[283,781],[309,749],[352,715],[408,679],[506,635],[595,610],[705,588],[816,574],[890,566],[975,557],[1022,554],[1089,553],[1109,553],[1128,557],[1134,559],[1135,558],[1142,554],[1155,546],[1166,540],[1179,534],[1191,529],[1199,525],[1206,521],[1211,517],[1216,514],[1222,510],[1226,507],[1231,503],[1234,501],[1236,500],[1236,499],[1237,499],[1238,498],[1240,496],[1241,494],[1242,493],[1242,493]],"dx":[984,-343],"dy":[984,-343],"length":1095.8485253518347,"timing":[277,296,313,329,346,362,379,396,413,429,447,462,480,496,512,529,546,563,846,863,879,896,913,930,946,962,980,996,1013,1029,1046,1062,1079,1096,1112,1129,1146,1162,1179,1229]},{"start":[1242,493],"end":[300,67],"points":[[1242,493],[1240,493],[1235,494],[1229,495],[1195,495],[1136,484],[1042,451],[920,404],[785,347],[639,281],[505,214],[434,174],[388,148],[356,133],[356,133],[355,131],[353,129],[349,125],[344,121],[337,114],[332,107],[327,99],[323,93],[319,88],[316,83],[312,80],[308,77],[306,76],[305,76],[305,76],[304,75],[304,75],[304,74],[303,73],[302,72],[302,70],[301,69],[301,68],[300,67],[300,67]],"dx":[-942,-426],"dy":[-942,-426],"length":1052.6299281067131,"timing":[316,329,346,363,378,396,412,429,445,461,478,495,512,528,794,812,829,845,862,879,895,912,929,945,962,978,996,1012,1029,1046,1062,1079,1095,1112,1129,1145,1162,1179,1195,1229]},{"start":[300,67],"end":[361,780],"points":[[300,67],[301,83],[302,104],[303,147],[305,176],[306,215],[311,252],[317,289],[330,341],[339,371],[349,413],[360,453],[367,487],[371,510],[373,531],[374,542],[374,551],[374,560],[372,565],[368,573],[366,581],[364,587],[363,594],[361,599],[360,607],[360,619],[360,629],[362,641],[366,647],[366,648],[366,651],[364,657],[363,664],[361,678],[360,698],[360,718],[360,735],[360,754],[360,764],[360,775],[360,777],[360,778],[360,779],[360,779],[360,779],[361,780],[361,780]],"dx":[61,713],"dy":[61,713],"length":725.5192861231734,"timing":[292,316,332,349,365,383,399,416,432,449,466,483,499,516,533,549,566,582,599,616,632,649,665,682,699,716,732,749,766,988,999,1016,1031,1049,1066,1083,1098,1116,1133,1149,1166,1182,1199,1215,1232,1256,1288]},{"start":[361,779],"end":[834,607],"points":[[361,779],[361,778],[361,776],[361,775],[362,775],[363,771],[370,764],[381,751],[410,725],[432,711],[463,692],[495,679],[524,669],[553,662],[583,655],[613,647],[645,641],[677,634],[707,630],[734,627],[752,625],[772,624],[789,624],[796,624],[799,624],[801,624],[801,624],[801,623],[802,623],[802,622],[805,620],[809,618],[814,615],[821,612],[826,610],[831,609],[833,608],[834,607],[834,607],[834,607]],"dx":[473,-172],"dy":[473,-172],"length":522.8800147940532,"timing":[217,231,247,264,280,297,314,330,346,363,380,396,413,430,447,463,480,497,513,530,547,563,580,597,614,630,646,663,680,697,713,730,746,763,780,797,813,829,847,880]},{"start":[836,607],"end":[925,621],"points":[[836,607],[840,608],[848,612],[860,616],[873,620],[886,624],[897,626],[904,626],[911,626],[916,626],[920,626],[922,624],[924,623],[924,623],[925,622],[925,622],[925,622],[925,621],[925,621],[925,621],[925,621]],"dx":[89,14],"dy":[89,14],"length":94.57847774587924,"timing":[566,582,599,616,632,649,666,682,698,715,732,749,765,782,798,815,832,848,865,882,916]},{"start":[922,621],"end":[154,413],"points":[[922,621],[911,623],[901,624],[885,624],[849,623],[777,610],[722,596],[643,578],[571,560],[504,544],[440,525],[382,506],[344,494],[301,479],[252,461],[234,453],[215,444],[200,438],[188,434],[180,432],[174,430],[168,430],[164,429],[161,428],[159,427],[157,426],[156,426],[155,426],[155,425],[155,425],[154,425],[154,424],[154,423],[154,423],[154,421],[154,420],[154,417],[154,415],[154,414],[154,413],[154,413]],"dx":[-768,-208],"dy":[-768,-208],"length":810.5270922655452,"timing":[486,513,529,546,563,578,596,612,629,646,663,679,696,713,730,746,763,779,796,813,829,846,862,879,896,913,929,946,962,979,996,1013,1029,1046,1063,1079,1095,1113,1130,1146,1162]},{"start":[154,413],"end":[1436,445],"points":[[154,413],[154,413],[154,412],[154,412],[154,412],[155,412],[156,412],[159,412],[165,412],[176,412],[191,412],[231,408],[314,399],[470,388],[636,386],[766,388],[914,402],[1000,410],[1095,418],[1173,422],[1236,427],[1275,434],[1315,445],[1321,448],[1322,448],[1323,448],[1333,445],[1341,443],[1349,442],[1357,440],[1366,439],[1374,439],[1385,439],[1396,439],[1407,440],[1413,441],[1420,442],[1425,443],[1429,444],[1432,445],[1433,445],[1434,445],[1435,445],[1435,445],[1436,445]],"dx":[1282,32],"dy":[1282,32],"length":1290.2199560099978,"timing":[88,168,192,200,213,230,247,263,280,297,313,330,347,363,381,397,413,430,446,465,479,497,514,530,799,814,831,847,864,880,897,914,931,947,964,981,997,1014,1030,1047,1063,1080,1097,1113,1147]},{"start":[1435,445],"end":[311,481],"points":[[1435,445],[1431,445],[1426,447],[1422,449],[1413,453],[1398,457],[1379,461],[1335,463],[1255,463],[1191,456],[1094,439],[1005,424],[836,401],[729,397],[650,397],[588,397],[530,397],[491,397],[472,397],[450,396],[433,396],[420,396],[410,396],[404,397],[400,398],[396,399],[393,401],[390,404],[388,406],[385,409],[382,413],[381,418],[378,424],[374,433],[372,439],[369,444],[367,447],[365,449],[363,452],[360,455],[357,458],[354,461],[351,464],[349,466],[347,467],[346,469],[344,469],[342,470],[340,471],[338,473],[336,476],[333,478],[331,480],[329,481],[328,481],[327,481],[326,482],[324,482],[323,482],[321,482],[319,483],[318,483],[316,483],[315,483],[312,483],[312,482],[311,481],[311,481]],"dx":[-1124,36],"dy":[-1124,36],"length":1176.4740416009781,"timing":[296,314,331,348,364,381,397,414,431,447,463,480,497,513,530,547,563,580,597,614,630,647,664,681,697,714,730,748,763,780,797,813,830,847,864,880,897,913,930,947,964,980,996,1013,1030,1047,1064,1081,1097,1114,1131,1147,1164,1181,1196,1213,1230,1247,1264,1280,1297,1314,1331,1347,1364,1380,1397,1447]},{"start":[311,481],"end":[1434,447],"points":[[311,481],[315,479],[324,473],[354,459],[405,443],[470,437],[593,445],[631,453],[779,486],[903,512],[1035,537],[1151,560],[1217,571],[1269,577],[1320,583],[1359,587],[1389,591],[1417,595],[1441,599],[1465,601],[1488,602],[1508,602],[1522,602],[1532,601],[1544,595],[1549,589],[1551,583],[1552,575],[1552,566],[1552,556],[1548,546],[1543,537],[1538,529],[1532,522],[1526,515],[1520,509],[1508,499],[1496,488],[1486,480],[1480,475],[1474,469],[1472,468],[1471,468],[1470,468],[1466,467],[1459,463],[1451,458],[1447,455],[1443,453],[1441,451],[1440,450],[1438,449],[1437,448],[1435,448],[1435,448],[1434,447],[1434,447],[1434,447],[1434,447],[1434,447]],"dx":[1123,-34],"dy":[1123,-34],"length":1463.671356768011,"timing":[371,383,400,416,433,449,467,482,500,517,533,550,567,584,600,617,633,650,667,684,699,717,733,750,767,783,800,816,833,850,866,884,900,917,933,950,967,982,1000,1017,1033,1050,1066,1083,1100,1116,1133,1150,1166,1183,1200,1216,1232,1250,1267,1283,1301,1317,1333,1349]},{"start":[1433,447],"end":[788,733],"points":[[1433,447],[1431,448],[1425,451],[1422,453],[1395,466],[1359,485],[1321,507],[1249,559],[1193,602],[1144,645],[1096,687],[1082,700],[1066,712],[1049,723],[1035,730],[1023,733],[1012,735],[1001,736],[983,736],[962,736],[937,736],[910,733],[892,731],[864,728],[849,726],[834,725],[821,723],[814,723],[807,723],[802,723],[800,724],[798,725],[796,727],[793,729],[791,731],[790,732],[789,733],[788,733],[788,733]],"dx":[-645,286],"dy":[-645,286],"length":742.4436398655541,"timing":[335,347,364,379,397,413,430,447,463,479,504,512,529,546,563,579,595,613,630,646,664,680,697,713,729,747,762,779,796,813,829,845,863,880,895,912,930,946,963]},{"start":[788,733],"end":[592,729],"points":[[788,733],[787,733],[787,734],[782,734],[776,735],[766,735],[755,735],[743,735],[730,735],[715,734],[699,732],[682,731],[669,729],[658,728],[652,728],[647,727],[642,727],[640,726],[637,726],[636,726],[635,727],[634,728],[633,729],[631,730],[630,730],[628,731],[625,731],[623,731],[620,731],[617,731],[613,731],[610,731],[607,731],[604,731],[602,731],[599,731],[596,731],[595,730],[593,729],[592,729],[592,729]],"dx":[-196,-4],"dy":[-196,-4],"length":200.1684138994322,"timing":[274,283,300,316,333,350,366,383,400,416,433,449,467,482,499,515,533,548,566,583,599,616,633,650,666,683,700,717,733,750,766,783,799,816,832,848,866,883,899,916,967]},{"start":[592,728],"end":[833,111],"points":[[592,728],[596,717],[620,667],[661,596],[693,543],[735,478],[757,445],[780,409],[795,384],[807,364],[819,345],[829,332],[838,317],[844,307],[847,298],[848,290],[849,282],[850,278],[850,273],[850,267],[848,256],[841,234],[838,221],[834,206],[831,193],[828,182],[827,172],[826,166],[826,158],[826,154],[826,150],[826,148],[826,146],[826,143],[826,141],[826,139],[826,136],[826,133],[826,131],[826,129],[826,127],[826,126],[826,124],[826,123],[826,120],[826,118],[827,115],[829,113],[830,111],[832,109],[833,108],[833,108],[833,109],[833,109],[833,109],[833,110],[833,111],[833,111]],"dx":[241,-617],"dy":[241,-617],"length":699.5547880352191,"timing":[390,413,430,446,462,480,496,513,529,546,562,580,596,612,629,647,663,680,697,713,729,746,763,779,796,813,829,846,863,880,896,913,928,946,962,980,996,1013,1030,1046,1062,1079,1096,1113,1129,1145,1163,1179,1196,1213,1230,1247,1305,1330,1402,1412,1430,1463]},{"start":[824,111],"end":[1417,535],"points":[[824,111],[815,114],[815,114],[819,115],[827,122],[841,137],[866,171],[891,202],[923,241],[961,284],[1005,333],[1046,376],[1072,402],[1113,441],[1137,459],[1157,472],[1172,480],[1182,486],[1204,495],[1223,499],[1239,499],[1260,499],[1287,499],[1314,500],[1339,505],[1352,509],[1363,510],[1370,512],[1375,512],[1379,513],[1379,514],[1381,515],[1383,515],[1387,515],[1393,517],[1400,520],[1405,524],[1411,530],[1415,532],[1416,534],[1417,534],[1417,535]],"dx":[593,424],"dy":[593,424],"length":783.2815204354808,"timing":[410,434,765,784,800,817,834,851,866,884,901,916,934,951,966,984,1001,1016,1034,1050,1067,1084,1100,1118,1133,1151,1167,1183,1200,1217,1234,1250,1267,1284,1301,1317,1334,1351,1368,1384,1401,1417]},{"start":[1417,535],"end":[924,262],"points":[[1417,535],[1417,536],[1417,538],[1415,541],[1414,543],[1413,545],[1412,546],[1412,547],[1412,547],[1411,547],[1411,547],[1411,547],[1409,548],[1406,549],[1397,549],[1377,543],[1345,524],[1301,494],[1264,469],[1237,450],[1213,433],[1190,420],[1170,410],[1152,402],[1138,396],[1123,388],[1111,381],[1101,375],[1086,365],[1044,344],[1019,335],[998,328],[976,321],[967,317],[958,313],[949,308],[943,303],[938,296],[932,288],[929,282],[925,276],[924,274],[924,272],[923,272],[923,272],[923,272],[923,270],[923,268],[923,266],[924,265],[924,263],[924,263],[924,262],[924,262],[924,262],[924,262]],"dx":[-493,-273],"dy":[-493,-273],"length":596.3388814105666,"timing":[36,47,62,79,96,113,129,146,166,207,223,240,264,280,296,313,329,346,362,379,396,413,430,445,463,480,496,513,530,546,563,580,596,613,629,646,663,680,696,713,729,745,763,779,796,813,830,847,863,880,897,912,930,946,963,997]},{"start":[923,262],"end":[417,381],"points":[[923,262],[903,265],[870,273],[816,286],[752,303],[684,323],[620,343],[578,356],[548,366],[521,375],[509,379],[497,381],[488,381],[484,381],[480,381],[477,381],[474,380],[469,380],[465,380],[460,381],[456,382],[451,384],[447,384],[443,385],[440,385],[435,385],[430,385],[428,384],[422,382],[419,381],[417,381],[417,381]],"dx":[-506,119],"dy":[-506,119],"length":524.3534912936291,"timing":[475,500,517,534,551,567,584,600,618,633,650,667,685,701,717,733,752,767,785,800,817,834,850,867,884,901,918,934,951,968,985,1001]},{"start":[417,381],"end":[1580,605],"points":[[417,381],[425,378],[450,368],[489,357],[573,341],[660,335],[774,335],[909,349],[1055,378],[1255,432],[1322,456],[1392,484],[1424,500],[1444,511],[1456,516],[1466,522],[1471,524],[1477,527],[1482,529],[1487,532],[1491,535],[1498,540],[1504,546],[1510,552],[1517,558],[1522,564],[1526,567],[1530,570],[1536,574],[1541,577],[1547,580],[1554,585],[1561,590],[1569,596],[1573,600],[1577,603],[1578,604],[1579,605],[1580,605]],"dx":[1163,224],"dy":[1163,224],"length":1226.624238724885,"timing":[328,347,364,381,398,414,430,447,464,480,497,513,531,547,564,581,597,614,631,647,664,681,697,714,731,748,763,780,796,814,829,847,864,880,897,914,931,948,964]},{"start":[1579,605],"end":[408,742],"points":[[1579,605],[1579,605],[1578,605],[1577,605],[1575,605],[1573,605],[1571,605],[1569,605],[1566,605],[1565,605],[1561,603],[1559,602],[1552,602],[1547,602],[1539,605],[1524,607],[1490,610],[1435,610],[1326,610],[1160,610],[993,610],[923,610],[862,611],[826,616],[797,621],[781,625],[763,633],[739,645],[719,654],[658,671],[638,675],[593,681],[548,689],[528,695],[510,702],[498,709],[492,712],[486,715],[482,717],[478,717],[474,717],[471,717],[467,717],[465,717],[463,717],[462,717],[462,717],[461,717],[456,719],[449,723],[442,727],[429,733],[419,737],[414,738],[414,738],[412,739],[411,739],[410,740],[409,741],[408,741],[408,741],[408,742]],"dx":[-1171,137],"dy":[-1171,137],"length":1196.8139643659922,"timing":[57,67,83,100,117,133,150,165,183,200,216,233,250,268,284,300,316,334,350,367,384,400,416,434,450,467,483,500,516,534,549,566,583,600,617,634,650,667,683,700,717,733,750,767,784,800,1012,1033,1050,1066,1083,1099,1117,1133,1149,1167,1183,1200,1216,1233,1250,1282]},{"start":[408,739],"end":[1401,197],"points":[[408,739],[413,732],[430,703],[457,669],[501,629],[586,569],[679,527],[862,481],[989,464],[1108,451],[1176,443],[1224,436],[1256,429],[1282,421],[1295,411],[1305,395],[1311,379],[1316,367],[1323,354],[1329,345],[1335,338],[1340,331],[1344,324],[1348,308],[1350,287],[1351,278],[1353,267],[1356,261],[1358,258],[1364,254],[1369,250],[1374,245],[1377,241],[1380,237],[1381,234],[1383,231],[1384,230],[1385,229],[1386,227],[1388,225],[1390,223],[1395,211],[1396,205],[1398,201],[1399,198],[1400,197],[1400,197],[1401,197],[1401,197],[1401,197],[1401,197]],"dx":[993,-542],"dy":[993,-542],"length":1226.9215259159844,"timing":[303,316,332,350,366,383,398,416,433,449,466,483,499,516,533,550,565,583,600,615,633,650,665,683,699,716,733,748,765,782,798,816,832,848,866,882,900,916,932,949,966,982,999,1016,1032,1049,1065,1082,1099,1115,1150]},{"start":[1401,197],"end":[173,222],"points":[[1401,197],[1401,197],[1400,197],[1397,199],[1392,202],[1386,204],[1379,206],[1368,208],[1342,210],[1284,212],[1199,217],[1000,236],[925,245],[689,281],[552,305],[473,315],[420,317],[366,317],[335,305],[320,293],[311,283],[303,276],[302,276],[298,275],[290,271],[279,267],[260,260],[235,252],[220,248],[203,242],[196,239],[191,237],[188,236],[185,234],[181,232],[178,228],[176,225],[174,223],[174,222],[173,222],[173,222]],"dx":[-1228,25],"dy":[-1228,25],"length":1264.438004087735,"timing":[230,238,249,266,282,299,316,333,349,366,383,400,415,432,449,466,482,499,516,533,548,566,854,865,882,898,916,932,950,966,982,999,1015,1032,1049,1065,1083,1099,1116,1133,1149]},{"start":[161,232],"end":[697,497],"points":[[161,232],[168,232],[174,236],[185,247],[205,271],[230,301],[269,341],[337,401],[387,433],[452,464],[496,481],[541,500],[572,514],[587,522],[601,530],[611,535],[618,537],[627,537],[633,533],[639,528],[645,523],[649,520],[655,515],[658,513],[663,512],[668,512],[674,510],[679,509],[685,506],[688,503],[692,500],[694,499],[695,498],[696,497],[697,497],[697,497]],"dx":[536,265],"dy":[536,265],"length":651.3906675000892,"timing":[322,347,363,380,396,413,430,445,462,479,496,513,530,546,562,579,597,613,630,646,663,680,696,713,729,747,763,779,796,813,830,846,863,880,895,930]},{"start":[698,497],"end":[1048,454],"points":[[698,497],[706,495],[732,487],[774,478],[827,474],[890,474],[960,483],[986,490],[1002,493],[1013,496],[1019,496],[1022,496],[1023,496],[1026,493],[1029,490],[1031,487],[1033,484],[1035,480],[1036,478],[1037,475],[1038,473],[1039,471],[1040,469],[1042,466],[1044,462],[1045,459],[1046,457],[1047,456],[1048,455],[1048,454]],"dx":[350,-43],"dy":[350,-43],"length":379.3154728025592,"timing":[426,447,462,480,496,514,530,547,563,580,596,614,629,647,663,680,697,713,730,745,764,779,798,814,829,846,864,880,897,914]},{"start":[1048,454],"end":[1047,12],"points":[[1048,454],[1048,447],[1048,433],[1048,401],[1045,372],[1037,324],[1034,293],[1032,260],[1032,242],[1032,225],[1032,211],[1036,191],[1040,157],[1042,117],[1045,86],[1046,63],[1047,42],[1048,29],[1048,23],[1049,16],[1050,9],[1050,7],[1050,6],[1050,4],[1050,1],[1048,5],[1048,9],[1048,10],[1047,11],[1047,11],[1047,12],[1047,12]],"dx":[-1,-442],"dy":[-1,-442],"length":466.9600034760355,"timing":[375,398,414,431,447,465,483,498,514,532,548,565,581,598,615,631,647,663,681,696,714,731,748,764,781,997,1015,1031,1047,1063,1081,1114]},{"start":[1046,15],"end":[930,200],"points":[[1046,15],[1045,18],[1038,30],[1022,53],[1000,86],[992,99],[986,109],[983,114],[982,117],[980,120],[978,123],[976,126],[974,129],[972,133],[971,135],[970,138],[967,142],[965,146],[962,150],[958,155],[955,160],[950,168],[948,172],[946,175],[944,178],[942,181],[940,185],[938,188],[936,191],[934,194],[933,196],[931,197],[931,199],[930,199],[930,200],[930,200]],"dx":[-116,185],"dy":[-116,185],"length":220.13570343078464,"timing":[290,313,329,346,362,379,396,413,429,446,462,479,496,511,529,545,562,578,595,611,629,646,662,679,696,711,729,745,762,779,795,813,828,846,862,897]},{"start":[930,200],"end":[622,601],"points":[[930,200],[927,203],[912,221],[886,250],[854,283],[821,320],[795,347],[753,394],[731,417],[694,459],[682,474],[668,491],[658,504],[650,514],[647,520],[644,525],[642,529],[641,531],[641,533],[640,538],[638,545],[637,552],[636,557],[634,562],[634,564],[632,569],[629,579],[627,587],[625,592],[623,597],[623,599],[622,600],[622,600],[622,601]],"dx":[-308,401],"dy":[-308,401],"length":513.3611343727116,"timing":[422,434,449,467,483,500,516,534,550,567,584,600,617,633,650,667,683,700,716,734,750,767,783,801,817,833,850,866,883,900,917,933,949,1018]},{"start":[622,601],"end":[1223,583],"points":[[622,601],[623,600],[627,598],[642,589],[670,576],[740,549],[873,518],[987,512],[1098,515],[1135,524],[1177,536],[1201,543],[1215,548],[1221,550],[1222,551],[1223,551],[1223,551],[1223,551],[1223,551],[1223,552],[1223,552],[1223,553],[1223,553],[1223,556],[1223,558],[1223,561],[1223,563],[1223,566],[1223,569],[1223,573],[1223,577],[1223,580],[1223,582],[1223,582],[1223,583]],"dx":[601,-18],"dy":[601,-18],"length":653.4042492254665,"timing":[312,333,350,367,383,400,417,433,450,466,483,499,515,533,550,567,603,617,633,649,667,684,699,717,733,750,766,783,799,816,832,850,867,882,918]},{"start":[1568,854],"end":[225,332],"points":[[1568,854],[1565,854],[1557,854],[1534,849],[1437,815],[1214,727],[1112,693],[946,640],[819,605],[716,581],[658,572],[617,566],[591,561],[579,558],[579,558],[565,553],[515,527],[467,500],[445,485],[423,471],[403,456],[389,444],[371,429],[346,413],[329,402],[311,392],[297,385],[291,382],[285,379],[281,377],[278,375],[275,373],[272,371],[268,369],[263,365],[261,364],[259,364],[257,363],[255,362],[255,362],[254,361],[252,358],[250,354],[248,350],[245,347],[242,344],[240,341],[237,340],[235,339],[234,338],[232,337],[231,337],[229,335],[228,334],[226,333],[225,332],[225,332],[225,332]],"dx":[-1343,-522],"dy":[-1343,-522],"length":1459.6293238125347,"timing":[297,313,330,346,362,379,395,412,429,446,462,480,496,513,806,830,846,863,879,896,913,929,946,961,978,996,1013,1029,1046,1062,1080,1095,1113,1130,1146,1163,1179,1196,1212,1230,1246,1262,1279,1296,1313,1329,1346,1363,1378,1396,1413,1430,1445,1462,1479,1496,1512,1545]},{"start":[226,332],"end":[1059,522],"points":[[226,332],[228,332],[234,332],[245,332],[278,334],[308,341],[356,356],[402,374],[455,395],[516,416],[572,434],[607,444],[631,453],[657,462],[674,468],[688,472],[707,476],[724,481],[742,489],[762,499],[776,506],[791,513],[811,519],[824,519],[841,518],[859,511],[881,506],[905,503],[921,503],[932,506],[942,509],[947,510],[950,511],[952,511],[954,510],[957,508],[958,507],[961,506],[964,506],[964,506],[969,506],[974,507],[981,511],[989,515],[997,517],[1003,519],[1010,520],[1014,520],[1018,520],[1023,520],[1029,520],[1036,520],[1043,520],[1048,521],[1053,522],[1056,522],[1058,522],[1058,522],[1059,522],[1059,522]],"dx":[833,190],"dy":[833,190],"length":872.8684337623854,"timing":[366,380,397,414,431,447,464,480,497,514,530,547,563,580,597,614,630,647,663,680,697,712,731,747,764,780,797,814,829,847,863,881,897,914,930,946,962,980,997,1013,1030,1047,1064,1080,1096,1112,1130,1146,1164,1180,1197,1214,1231,1246,1264,1281,1297,1314,1330,1347]},{"start":[1058,521],"end":[1170,265],"points":[[1058,521],[1058,519],[1061,508],[1064,487],[1067,459],[1068,429],[1069,410],[1071,384],[1075,362],[1079,331],[1082,291],[1086,260],[1088,247],[1091,232],[1092,225],[1094,223],[1097,222],[1100,222],[1105,223],[1108,224],[1115,227],[1121,229],[1129,232],[1137,236],[1145,241],[1157,250],[1161,254],[1165,259],[1167,261],[1168,262],[1169,263],[1169,263],[1169,264],[1170,264],[1170,265],[1170,265]],"dx":[112,-256],"dy":[112,-256],"length":392.2344957649929,"timing":[337,349,365,383,399,416,432,449,466,483,499,516,533,549,566,583,599,615,632,649,666,682,698,716,732,749,766,783,799,816,833,849,865,883,899,932]},{"start":[1168,265],"end":[1081,723],"points":[[1168,265],[1146,287],[1131,306],[1119,324],[1109,341],[1106,349],[1103,359],[1103,367],[1103,381],[1106,410],[1108,452],[1109,507],[1111,545],[1113,574],[1115,592],[1118,611],[1119,618],[1119,622],[1119,628],[1119,636],[1118,644],[1116,652],[1112,661],[1106,672],[1099,685],[1091,698],[1085,711],[1083,716],[1081,720],[1080,722],[1080,723],[1080,723],[1080,723],[1080,723],[1081,723]],"dx":[-87,458],"dy":[-87,458],"length":490.5386201030194,"timing":[351,375,392,408,425,441,459,475,491,508,525,541,558,574,592,609,625,642,658,675,692,708,725,741,759,774,791,808,825,842,857,874,949,975,992]},{"start":[1080,723],"end":[1156,81],"points":[[1080,723],[1080,723],[1080,722],[1080,722],[1080,722],[1080,721],[1080,717],[1082,707],[1090,673],[1097,622],[1099,598],[1100,518],[1100,481],[1100,439],[1100,406],[1101,388],[1103,362],[1105,341],[1109,313],[1112,282],[1115,250],[1117,229],[1121,205],[1125,175],[1130,151],[1133,137],[1135,129],[1136,122],[1138,115],[1141,109],[1145,101],[1150,92],[1153,87],[1154,83],[1155,81],[1155,81],[1155,81],[1155,81],[1156,81],[1156,81],[1156,81]],"dx":[76,-642],"dy":[76,-642],"length":651.7234357319559,"timing":[128,143,167,179,273,296,313,329,346,362,378,395,412,429,446,463,479,495,512,529,546,562,579,596,613,629,646,662,680,696,711,728,745,762,778,796,849,862,879,896,929]},{"start":[1156,81],"end":[857,72],"points":[[1156,81],[1156,81],[1156,82],[1156,82],[1156,82],[1156,82],[1155,83],[1154,85],[1153,87],[1149,91],[1145,95],[1141,98],[1137,101],[1132,102],[1125,103],[1115,103],[1098,103],[1079,103],[1054,103],[1022,103],[988,103],[955,104],[927,106],[910,106],[888,105],[882,102],[875,98],[871,94],[867,89],[864,86],[862,83],[859,81],[857,79],[857,77],[857,75],[857,73],[857,73],[857,72]],"dx":[-299,-9],"dy":[-299,-9],"length":325.59195715155226,"timing":[134,146,163,180,196,213,229,246,263,280,296,313,330,347,363,380,397,413,429,446,463,478,496,513,529,546,563,580,597,613,630,646,663,679,696,713,729,763]},{"start":[856,72],"end":[88,611],"points":[[856,72],[854,73],[847,78],[838,84],[827,90],[811,101],[783,120],[749,147],[703,188],[654,235],[584,305],[541,349],[516,376],[488,404],[468,426],[456,436],[444,448],[435,456],[428,462],[421,468],[414,475],[408,481],[401,487],[394,493],[390,498],[385,502],[380,507],[374,510],[365,513],[344,518],[322,523],[294,531],[258,542],[223,556],[189,568],[171,576],[158,579],[148,581],[144,582],[143,582],[143,582],[143,583],[144,583],[144,583],[144,584],[143,585],[138,587],[133,589],[128,592],[124,595],[119,598],[114,601],[110,602],[104,605],[100,606],[96,608],[92,610],[90,611],[88,611],[88,611],[88,611]],"dx":[-768,539],"dy":[-768,539],"length":961.8207465461039,"timing":[440,450,467,484,500,516,534,550,567,583,600,617,633,650,667,683,700,717,734,750,767,784,800,817,834,850,867,883,900,915,933,950,967,984,1000,1017,1034,1050,1067,1083,1103,1116,1134,1150,1167,1182,1200,1216,1233,1250,1266,1282,1300,1316,1334,1349,1367,1383,1399,1417,1451]},{"start":[88,611],"end":[1393,506],"points":[[88,611],[89,611],[91,611],[94,610],[100,609],[110,606],[124,601],[140,593],[162,583],[203,566],[249,550],[307,533],[404,513],[498,502],[604,492],[720,486],[839,485],[916,485],[1008,485],[1086,482],[1151,481],[1188,481],[1250,488],[1283,497],[1296,501],[1324,510],[1339,513],[1347,514],[1358,516],[1365,516],[1371,516],[1375,516],[1382,516],[1385,516],[1389,517],[1390,518],[1391,518],[1391,519],[1392,519],[1392,519],[1392,518],[1392,518],[1392,516],[1393,515],[1393,514],[1393,513],[1394,512],[1394,512],[1394,511],[1394,511],[1394,511],[1394,510],[1394,510],[1394,509],[1394,508],[1394,508],[1394,508],[1394,507],[1394,507],[1393,506],[1393,506]],"dx":[1305,-105],"dy":[1305,-105],"length":1341.4422212668037,"timing":[151,164,181,198,213,230,247,263,281,297,314,330,347,364,380,396,413,430,447,464,480,497,514,531,546,563,580,597,613,630,646,663,680,697,714,730,747,764,831,881,1252,1264,1281,1297,1313,1331,1347,1364,1380,1398,1413,1430,1448,1463,1480,1497,1514,1531,1547,1563,1597]},{"start":[1393,506],"end":[1189,35],"points":[[1393,506],[1393,506],[1393,506],[1392,506],[1392,507],[1392,507],[1391,507],[1390,508],[1390,508],[1389,508],[1389,508],[1388,509],[1388,509],[1387,509],[1379,501],[1363,475],[1338,434],[1320,402],[1299,361],[1281,327],[1267,294],[1253,262],[1240,227],[1229,193],[1223,174],[1216,154],[1213,144],[1211,134],[1209,125],[1209,119],[1208,112],[1208,105],[1207,95],[1206,86],[1206,82],[1205,77],[1205,74],[1204,71],[1202,67],[1201,60],[1199,54],[1197,47],[1196,42],[1195,39],[1194,36],[1193,35],[1192,34],[1192,33],[1191,33],[1191,32],[1191,32],[1191,32],[1190,32],[1190,32],[1190,32],[1189,34],[1189,34],[1189,35]],"dx":[-204,-471],"dy":[-204,-471],"length":534.835473155825,"timing":[129,137,148,165,182,198,215,235,249,265,281,298,315,332,348,365,381,398,415,431,448,464,481,497,514,531,549,565,582,598,614,631,648,664,681,697,713,731,747,764,781,798,815,832,848,865,881,898,915,932,948,965,982,998,1015,1030,1047,1081]},{"start":[1189,35],"end":[551,579],"points":[[1189,35],[1186,37],[1157,64],[1129,93],[1099,128],[1076,154],[1032,201],[995,237],[945,277],[892,318],[857,344],[833,363],[810,380],[795,390],[783,399],[771,407],[754,418],[739,428],[723,440],[699,458],[680,470],[659,481],[644,489],[629,497],[618,504],[608,511],[600,518],[593,525],[586,533],[580,542],[575,547],[570,553],[566,560],[561,567],[559,572],[556,576],[554,578],[553,579],[552,579],[552,579],[552,579],[551,579]],"dx":[-638,544],"dy":[-638,544],"length":845.506554155988,"timing":[300,314,331,348,364,381,397,413,431,447,464,480,497,514,530,547,564,581,597,614,631,647,663,680,698,713,731,747,763,780,797,814,830,847,863,880,897,914,930,947,964,1031]},{"start":[551,578],"end":[644,329],"points":[[551,578],[554,574],[557,569],[560,565],[562,561],[564,556],[565,552],[568,544],[579,509],[590,476],[602,444],[617,402],[626,379],[631,364],[635,352],[637,347],[637,345],[637,345],[637,344],[637,344],[637,344],[638,340],[640,336],[641,334],[642,331],[642,330],[642,330],[643,329],[643,329],[643,329],[644,329]],"dx":[93,-249],"dy":[93,-249],"length":267.55415276844604,"timing":[298,318,333,350,367,384,400,418,433,451,467,483,500,517,534,550,567,583,600,620,634,650,667,684,701,717,734,750,767,784,817]},{"start":[644,330],"end":[738,516],"points":[[644,330],[644,333],[646,351],[648,368],[652,389],[656,403],[662,420],[670,432],[679,443],[689,450],[694,453],[703,458],[709,460],[712,461],[715,462],[718,463],[721,464],[723,465],[725,467],[729,471],[731,475],[733,483],[735,492],[736,500],[737,507],[738,511],[738,513],[738,515],[738,515],[738,516],[738,516]],"dx":[94,186],"dy":[94,186],"length":225.05089884624337,"timing":[400,414,431,447,464,481,498,514,531,547,564,580,597,614,630,647,663,681,698,714,731,748,764,781,798,814,831,848,864,880,898]},{"start":[737,516],"end":[482,782],"points":[[737,516],[729,524],[706,548],[675,579],[651,607],[622,639],[606,657],[589,673],[575,687],[564,696],[554,705],[544,714],[535,724],[523,738],[513,752],[506,760],[501,767],[496,772],[492,776],[488,779],[485,781],[484,781],[483,782],[483,782],[482,782],[482,782],[482,782]],"dx":[-255,266],"dy":[-255,266],"length":369.8845468653717,"timing":[682,700,717,733,750,766,784,800,816,833,850,867,883,899,917,934,950,967,983,1001,1017,1034,1050,1066,1084,1101,1117]},{"start":[482,781],"end":[1513,846],"points":[[482,781],[486,775],[498,764],[514,754],[535,745],[560,740],[605,732],[654,726],[744,716],[888,711],[958,711],[1043,720],[1118,731],[1175,740],[1210,748],[1266,767],[1293,782],[1325,802],[1342,813],[1369,828],[1388,836],[1410,843],[1434,853],[1448,859],[1458,864],[1464,867],[1468,869],[1469,870],[1470,870],[1472,870],[1474,870],[1477,870],[1480,870],[1483,870],[1485,869],[1488,867],[1491,865],[1494,863],[1497,861],[1499,858],[1502,857],[1504,854],[1506,853],[1508,851],[1510,849],[1511,848],[1512,847],[1513,846],[1513,846],[1513,846]],"dx":[1031,65],"dy":[1031,65],"length":1086.0683848641816,"timing":[398,417,434,451,468,484,501,517,534,551,567,583,600,617,633,650,667,682,700,717,733,750,767,784,800,817,834,851,867,884,900,917,934,950,967,983,1001,1017,1034,1050,1067,1084,1100,1117,1134,1151,1167,1184,1201,1250]},{"start":[1513,846],"end":[1199,31],"points":[[1513,846],[1512,846],[1508,846],[1505,846],[1501,846],[1499,847],[1497,847],[1495,847],[1493,847],[1489,847],[1483,847],[1477,845],[1467,841],[1457,836],[1447,830],[1433,818],[1421,805],[1399,772],[1353,699],[1256,537],[1191,418],[1158,337],[1148,299],[1141,258],[1139,238],[1139,219],[1139,205],[1139,195],[1142,181],[1144,170],[1149,153],[1155,129],[1157,123],[1159,115],[1161,109],[1162,105],[1163,104],[1163,104],[1166,102],[1169,100],[1172,98],[1174,95],[1179,90],[1182,83],[1185,78],[1189,70],[1191,65],[1194,58],[1196,50],[1196,43],[1197,38],[1198,34],[1198,31],[1198,31],[1199,31]],"dx":[-314,-815],"dy":[-314,-815],"length":967.8586630731663,"timing":[66,80,97,113,130,147,163,181,197,214,230,247,264,280,297,313,330,346,364,380,396,413,430,446,463,480,496,513,530,547,564,582,597,613,630,646,663,680,696,713,730,747,763,780,797,814,830,847,864,880,897,914,930,946,972]},{"start":[1199,31],"end":[977,236],"points":[[1199,31],[1198,32],[1195,36],[1189,45],[1179,60],[1164,81],[1145,107],[1125,134],[1107,158],[1095,171],[1078,187],[1069,194],[1059,200],[1054,203],[1042,209],[1037,212],[1031,215],[1027,217],[1023,219],[1019,221],[1015,222],[1011,224],[1005,225],[999,228],[992,230],[988,232],[983,234],[980,235],[979,235],[978,236],[977,236],[977,236],[977,236]],"dx":[-222,205],"dy":[-222,205],"length":311.2724116592972,"timing":[280,300,317,332,350,366,383,400,416,434,451,467,483,499,516,533,550,565,583,598,616,632,650,667,683,700,717,733,750,765,783,799,866]},{"start":[977,238],"end":[1088,796],"points":[[977,238],[979,243],[987,265],[997,300],[1010,347],[1036,427],[1057,486],[1081,546],[1095,582],[1111,625],[1118,647],[1124,669],[1125,679],[1126,687],[1126,692],[1126,698],[1126,704],[1124,710],[1123,717],[1121,722],[1118,735],[1117,739],[1116,745],[1115,747],[1115,748],[1113,751],[1111,755],[1108,763],[1105,768],[1103,772],[1102,775],[1101,777],[1101,777],[1100,780],[1097,783],[1095,787],[1092,792],[1090,794],[1089,796],[1089,796],[1088,796],[1088,796]],"dx":[111,558],"dy":[111,558],"length":592.4958130998517,"timing":[344,358,376,392,409,425,441,458,475,492,508,524,541,559,575,591,608,625,642,658,675,692,709,725,742,758,775,792,809,825,842,859,875,892,908,925,941,958,975,991,1009,1042]},{"start":[1087,796],"end":[629,212],"points":[[1087,796],[1072,786],[1046,766],[1009,736],[969,697],[932,657],[898,617],[865,575],[821,509],[797,462],[783,429],[772,393],[767,371],[764,351],[762,341],[760,333],[758,328],[756,323],[753,317],[750,309],[747,299],[743,288],[740,279],[736,273],[732,268],[722,260],[714,254],[703,246],[691,239],[679,232],[666,226],[656,220],[647,215],[642,213],[636,211],[633,211],[631,211],[630,211],[629,211],[629,211],[629,211],[629,212]],"dx":[-458,-584],"dy":[-458,-584],"length":772.9902559811605,"timing":[327,347,364,381,398,415,431,447,465,480,497,514,530,547,563,581,597,614,631,648,664,681,698,715,731,748,764,780,798,813,830,847,864,880,897,913,931,947,964,981,1031,1048]},{"start":[630,211],"end":[1031,50],"points":[[630,211],[640,204],[664,186],[698,165],[743,141],[775,128],[820,115],[844,111],[854,110],[881,109],[895,109],[909,109],[924,109],[937,110],[949,110],[956,110],[965,110],[975,106],[978,105],[987,101],[997,98],[1007,95],[1013,92],[1024,87],[1026,85],[1028,82],[1029,81],[1030,80],[1030,80],[1031,80],[1031,79],[1031,79],[1031,78],[1031,77],[1031,74],[1031,73],[1031,71],[1031,68],[1031,67],[1031,67],[1031,59],[1031,54],[1031,51],[1031,50],[1031,50]],"dx":[401,-161],"dy":[401,-161],"length":463.7026000640091,"timing":[396,417,434,450,467,484,501,517,534,550,567,584,600,617,634,650,666,690,700,718,734,751,768,785,801,817,834,850,867,884,901,917,950,1131,1139,1150,1167,1183,1201,1269,1296,1317,1334,1351,1367]},{"start":[1031,50],"end":[812,855],"points":[[1031,50],[1029,57],[1021,71],[1009,94],[992,125],[967,174],[942,224],[911,284],[880,350],[848,417],[819,480],[795,534],[780,567],[762,608],[742,655],[731,681],[724,705],[717,729],[713,753],[710,777],[710,793],[710,810],[710,824],[710,833],[711,839],[712,843],[712,846],[713,847],[713,848],[714,848],[715,847],[715,846],[716,845],[718,845],[718,844],[719,844],[720,844],[721,843],[722,842],[723,841],[724,840],[725,840],[726,840],[726,840],[727,840],[727,840],[728,840],[728,840],[728,840],[728,840],[730,840],[734,840],[748,841],[770,845],[787,848],[797,850],[806,852],[810,853],[812,854],[812,855],[812,855]],"dx":[-219,805],"dy":[-219,805],"length":975.1577174998512,"timing":[261,279,295,311,329,346,362,378,396,412,429,445,462,478,496,511,529,545,561,578,595,612,628,644,661,678,695,712,729,745,762,779,795,812,828,845,862,878,895,912,928,945,962,978,995,1012,1029,1044,1079,1679,1785,1795,1812,1828,1845,1862,1878,1895,1912,1928,1961]},{"start":[812,855],"end":[822,291],"points":[[812,855],[812,855],[812,855],[812,855],[812,854],[812,854],[812,854],[812,852],[811,846],[810,831],[808,797],[808,769],[808,712],[808,658],[808,598],[808,535],[806,496],[804,467],[803,441],[803,423],[803,408],[803,388],[804,380],[805,374],[805,370],[805,366],[807,358],[811,348],[813,338],[815,331],[816,327],[816,325],[816,325],[816,324],[816,324],[817,321],[819,314],[820,306],[821,301],[822,294],[822,292],[822,291],[822,291],[822,291]],"dx":[10,-564],"dy":[10,-564],"length":566.7517356994604,"timing":[61,85,117,137,147,239,311,328,345,362,378,395,412,428,445,462,478,495,512,527,545,562,579,595,612,629,645,662,678,696,711,728,745,761,778,795,812,828,844,862,879,895,912,929]},{"start":[822,291],"end":[185,818],"points":[[822,291],[822,291],[822,292],[820,293],[812,300],[781,332],[741,371],[681,427],[618,482],[566,526],[523,562],[493,585],[455,610],[420,632],[388,651],[360,668],[338,682],[317,695],[300,707],[281,721],[267,732],[262,736],[252,743],[248,746],[244,748],[240,751],[236,755],[232,759],[228,762],[224,766],[221,769],[218,773],[214,776],[211,778],[207,782],[204,785],[201,791],[197,798],[194,804],[192,807],[191,809],[191,809],[190,810],[189,810],[188,812],[187,815],[187,817],[186,818],[185,818],[185,818]],"dx":[-637,527],"dy":[-637,527],"length":834.1233869039329,"timing":[178,333,347,365,381,398,414,431,447,464,480,497,515,531,548,564,582,598,615,635,649,664,680,698,713,731,748,765,781,798,814,831,848,864,882,897,914,930,948,964,981,997,1014,1031,1047,1064,1081,1098,1114,1164]},{"start":[185,818],"end":[1394,29],"points":[[185,818],[192,810],[205,792],[261,725],[327,651],[422,557],[529,470],[639,399],[752,349],[857,314],[962,286],[1066,260],[1131,242],[1182,229],[1234,213],[1265,200],[1288,187],[1306,171],[1322,151],[1333,137],[1340,127],[1348,115],[1350,112],[1353,109],[1358,105],[1363,100],[1368,92],[1373,84],[1376,76],[1379,70],[1382,62],[1385,53],[1389,43],[1390,37],[1392,32],[1393,30],[1393,29],[1394,29],[1394,29],[1394,29],[1394,29]],"dx":[1209,-789],"dy":[1209,-789],"length":1500.498143560428,"timing":[278,300,316,334,350,367,382,400,417,434,449,466,483,499,516,532,550,566,583,600,617,633,650,666,683,700,716,733,749,766,783,800,816,834,850,866,883,899,941,966,1034]},{"start":[1393,30],"end":[781,161],"points":[[1393,30],[1391,30],[1385,34],[1374,42],[1357,54],[1332,73],[1300,95],[1251,123],[1175,150],[1086,172],[1022,184],[977,191],[931,196],[910,198],[897,198],[885,198],[872,198],[858,198],[845,198],[833,197],[823,197],[815,197],[807,196],[801,195],[796,192],[791,187],[788,184],[785,179],[784,174],[782,168],[782,167],[781,164],[781,163],[781,163],[781,162],[781,161],[781,161]],"dx":[-612,131],"dy":[-612,131],"length":671.3935257280267,"timing":[241,267,283,299,316,333,351,366,383,400,416,433,450,467,483,500,516,534,550,567,583,600,617,633,650,667,683,700,716,733,749,767,783,800,817,833,900]},{"start":[781,162],"end":[317,839],"points":[[781,162],[777,171],[774,181],[770,189],[768,197],[763,209],[757,223],[750,239],[739,259],[727,280],[713,303],[699,324],[683,346],[659,380],[634,411],[603,448],[581,474],[542,517],[531,531],[497,570],[477,594],[460,619],[450,636],[441,654],[436,667],[432,680],[429,691],[426,702],[422,719],[419,730],[415,745],[414,753],[412,759],[411,763],[411,764],[410,767],[409,772],[408,776],[407,780],[406,783],[405,784],[404,786],[403,789],[400,794],[396,798],[394,802],[392,804],[391,805],[390,805],[381,811],[373,817],[359,826],[354,828],[348,831],[343,832],[340,833],[337,833],[334,834],[330,836],[326,837],[322,838],[319,839],[318,839],[317,839]],"dx":[-464,677],"dy":[-464,677],"length":846.0190163727144,"timing":[373,397,414,430,447,463,480,497,514,530,547,564,581,597,614,631,648,664,679,697,713,731,747,764,780,797,814,831,847,864,881,898,914,931,947,963,981,997,1014,1029,1047,1064,1080,1097,1113,1130,1147,1164,1475,1497,1514,1530,1547,1564,1580,1597,1614,1631,1647,1664,1681,1698,1714,1730]},{"start":[317,838],"end":[1136,457],"points":[[317,838],[321,832],[328,820],[347,792],[391,737],[432,695],[483,654],[551,609],[617,572],[664,551],[738,524],[773,514],[816,504],[853,498],[887,496],[918,496],[946,496],[973,496],[1002,496],[1029,496],[1048,496],[1076,496],[1083,496],[1089,496],[1092,496],[1093,496],[1094,496],[1096,492],[1098,490],[1100,487],[1106,482],[1111,478],[1116,474],[1120,471],[1124,468],[1126,467],[1127,466],[1128,465],[1130,464],[1132,462],[1133,460],[1135,458],[1135,458],[1136,457],[1136,457],[1136,457]],"dx":[819,-381],"dy":[819,-381],"length":954.1824233912438,"timing":[244,266,283,299,316,333,349,366,382,399,416,433,449,466,483,500,516,533,550,566,582,599,617,632,650,666,683,699,716,733,750,766,783,799,816,833,850,866,883,900,915,933,949,966,983,1021]},{"start":[1127,135],"end":[125,204],"points":[[1127,135],[1123,135],[1112,141],[1085,153],[1047,169],[949,199],[833,229],[702,261],[573,285],[530,292],[490,299],[489,299],[458,291],[416,276],[382,265],[343,255],[321,250],[299,246],[283,242],[268,237],[252,230],[237,223],[224,218],[213,215],[207,214],[201,213],[190,212],[182,209],[174,206],[166,205],[162,205],[152,205],[148,205],[144,205],[140,205],[137,205],[134,204],[130,204],[128,204],[126,204],[125,204],[125,204]],"dx":[-1002,69],"dy":[-1002,69],"length":1039.5592970926882,"timing":[292,312,329,346,362,379,395,413,428,445,462,754,778,795,812,828,846,862,879,895,912,929,946,962,979,996,1012,1029,1045,1062,1079,1095,1111,1128,1145,1162,1179,1195,1212,1229,1246,1279]},{"start":[126,204],"end":[258,199],"points":[[126,204],[132,201],[143,197],[156,191],[175,183],[188,178],[199,175],[207,173],[211,172],[213,172],[214,172],[214,172],[215,172],[216,172],[218,172],[221,172],[227,172],[232,174],[237,178],[242,182],[246,186],[250,190],[253,193],[254,195],[255,196],[256,197],[256,197],[257,198],[258,199],[258,199]],"dx":[132,-5],"dy":[132,-5],"length":148.68639713470859,"timing":[288,314,330,347,363,380,397,413,430,447,463,480,496,514,531,547,563,581,597,614,630,647,664,680,697,713,730,746,764,797]},{"start":[259,199],"end":[885,312],"points":[[259,199],[260,199],[269,199],[287,198],[350,192],[400,190],[457,190],[520,196],[582,214],[620,229],[662,248],[682,260],[695,267],[705,273],[709,275],[711,276],[712,277],[714,277],[720,279],[732,283],[748,290],[766,298],[780,305],[791,310],[797,312],[802,313],[806,314],[813,314],[819,314],[833,314],[842,314],[849,314],[855,314],[858,314],[859,314],[860,313],[860,313],[862,312],[866,311],[871,311],[875,311],[877,311],[881,311],[883,311],[884,311],[885,311],[885,311],[885,312],[885,312],[885,312],[885,312]],"dx":[626,113],"dy":[626,113],"length":653.2132194593365,"timing":[285,299,316,332,349,366,382,398,416,432,449,465,482,498,515,532,548,565,582,599,615,632,655,666,682,698,715,733,749,765,782,798,815,832,849,865,882,899,916,932,949,965,982,999,1016,1032,1049,1070,1086,1099,1133]},{"start":[885,312],"end":[1280,264],"points":[[885,312],[892,312],[903,312],[923,309],[957,305],[1004,294],[1033,286],[1087,272],[1115,266],[1149,260],[1170,258],[1193,258],[1220,258],[1240,262],[1253,264],[1262,264],[1271,265],[1273,265],[1274,265],[1274,264],[1275,264],[1276,264],[1278,264],[1279,264],[1280,264],[1280,264],[1280,264]],"dx":[395,-48],"dy":[395,-48],"length":402.457256004921,"timing":[633,648,666,682,699,714,732,748,765,782,799,816,832,849,865,882,899,915,932,949,966,982,999,1015,1032,1049,1101]},{"start":[1278,264],"end":[759,739],"points":[[1278,264],[1260,281],[1238,308],[1198,364],[1162,420],[1143,453],[1111,505],[1095,525],[1033,585],[1010,602],[956,635],[920,653],[853,676],[821,687],[787,702],[778,709],[765,717],[760,720],[759,721],[759,722],[759,722],[759,723],[759,723],[759,723],[759,724],[759,727],[759,730],[759,734],[759,735],[759,736],[759,737],[759,738],[759,738],[759,739],[759,739],[759,739]],"dx":[-519,475],"dy":[-519,475],"length":731.8899368191854,"timing":[378,397,414,430,446,464,480,498,512,530,547,563,580,596,613,629,647,663,680,697,714,730,747,763,808,830,846,863,880,897,913,930,947,964,981,1030]},{"start":[758,739],"end":[296,755],"points":[[758,739],[744,739],[724,744],[667,757],[625,759],[580,759],[493,755],[429,753],[389,752],[358,751],[330,751],[320,750],[312,750],[309,750],[308,750],[307,750],[307,750],[305,752],[301,753],[298,754],[296,755],[296,755]],"dx":[-462,16],"dy":[-462,16],"length":465.6783088890396,"timing":[579,596,615,634,652,664,679,697,714,730,746,763,780,797,813,830,894,914,930,946,962,980]},{"start":[280,99],"end":[1385,687],"points":[[280,99],[343,151],[432,196],[542,241],[709,311],[814,361],[907,406],[939,418],[936,418],[935,418],[934,419],[934,427],[939,440],[980,479],[1055,512],[1161,541],[1288,574],[1343,589],[1393,604],[1413,611],[1425,615],[1434,618],[1439,619],[1441,620],[1441,620],[1442,621],[1442,621],[1441,622],[1433,627],[1426,632],[1420,637],[1414,643],[1408,650],[1399,662],[1394,671],[1392,676],[1389,681],[1388,684],[1387,686],[1386,687],[1385,687],[1385,687]],"dx":[1105,588],"dy":[1105,588],"length":1392.6878151436676,"timing":[141890,141905,141923,141939,141955,141973,141990,142006,142161,142173,142189,142205,142222,142239,142255,142272,142289,142306,142323,142338,142356,142373,142390,142406,142422,142439,142456,142473,142516,142540,142556,142573,142588,142606,142623,142639,142656,142671,142690,142706,142723,142738]},{"start":[1384,687],"end":[773,670],"points":[[1384,687],[1375,689],[1352,692],[1300,693],[1228,687],[1143,678],[1065,672],[1033,670],[982,670],[959,670],[943,674],[929,679],[916,682],[902,684],[889,685],[876,685],[864,685],[852,684],[842,683],[834,683],[825,683],[817,683],[805,683],[800,681],[788,676],[783,674],[777,671],[774,670],[773,670]],"dx":[-611,-17],"dy":[-611,-17],"length":617.0545411218452,"timing":[276,297,314,331,347,363,380,396,413,431,446,463,480,497,513,530,547,564,580,597,613,631,647,663,680,696,714,730,747]},{"start":[773,669],"end":[734,34],"points":[[773,669],[771,658],[752,607],[729,535],[703,430],[688,321],[687,247],[687,164],[700,95],[715,53],[724,30],[732,16],[738,6],[741,2],[742,0],[743,0],[738,20],[736,26],[735,29],[734,31],[734,32],[734,33],[734,33],[734,33],[734,34],[734,34]],"dx":[-39,-635],"dy":[-39,-635],"length":727.2654349577941,"timing":[314,334,350,366,383,400,416,433,451,467,484,499,517,533,551,566,783,800,817,834,850,867,883,900,917,952]},{"start":[734,34],"end":[1302,267],"points":[[734,34],[735,35],[744,42],[769,61],[807,89],[868,129],[974,196],[1012,217],[1053,236],[1073,242],[1092,247],[1106,251],[1117,255],[1128,259],[1139,265],[1149,271],[1159,275],[1168,278],[1176,279],[1186,280],[1197,281],[1210,282],[1223,284],[1244,288],[1253,289],[1261,289],[1268,289],[1274,285],[1278,282],[1283,278],[1288,274],[1292,271],[1295,269],[1298,268],[1300,267],[1301,267],[1302,267],[1302,267]],"dx":[568,233],"dy":[568,233],"length":643.1171102078497,"timing":[266,279,296,313,328,346,363,379,396,412,428,445,462,480,496,512,528,546,563,579,596,612,629,647,663,679,696,712,729,746,763,778,796,812,830,845,863,879]},{"start":[1302,267],"end":[835,365],"points":[[1302,267],[1302,267],[1301,267],[1300,267],[1298,267],[1294,267],[1282,268],[1269,269],[1248,272],[1222,275],[1177,281],[1147,285],[1108,288],[1082,291],[1053,295],[1034,297],[1017,301],[1003,305],[989,310],[978,315],[967,320],[957,323],[934,329],[921,333],[907,337],[894,341],[884,344],[877,347],[872,349],[866,351],[861,352],[857,353],[855,354],[851,355],[847,357],[843,359],[839,362],[836,364],[836,365],[835,365],[835,365]],"dx":[-467,98],"dy":[-467,98],"length":481.7234391251093,"timing":[169,183,199,216,233,249,266,283,300,316,333,349,366,383,400,416,433,449,467,482,499,516,533,550,566,583,599,617,632,650,666,683,700,717,733,749,767,783,799,817,850]},{"start":[836,365],"end":[1137,835],"points":[[836,365],[844,376],[863,402],[875,426],[892,460],[908,492],[924,524],[932,539],[956,581],[975,609],[981,617],[990,629],[995,634],[1000,640],[1004,645],[1014,657],[1028,674],[1045,694],[1055,707],[1065,719],[1070,726],[1074,731],[1078,737],[1083,745],[1089,753],[1097,765],[1106,776],[1110,782],[1115,789],[1117,792],[1118,795],[1118,797],[1118,800],[1119,802],[1120,805],[1123,811],[1128,821],[1131,827],[1134,832],[1136,834],[1136,835],[1137,835]],"dx":[301,470],"dy":[301,470],"length":562.1348194278754,"timing":[366,379,396,413,430,446,465,480,497,513,529,547,563,579,596,613,629,646,663,679,696,713,730,747,763,780,796,813,830,847,862,879,895,913,928,946,962,980,995,1012,1030,1045]},{"start":[1137,834],"end":[731,92],"points":[[1137,834],[1133,829],[1121,813],[1100,785],[1068,737],[1035,682],[990,597],[958,519],[936,460],[896,355],[882,318],[876,306],[868,289],[864,281],[861,277],[857,269],[851,256],[843,237],[835,212],[829,194],[824,182],[819,173],[814,169],[809,166],[805,165],[793,157],[785,146],[775,131],[768,119],[758,106],[750,97],[745,94],[739,91],[736,89],[733,89],[732,88],[731,87],[731,87],[731,87],[731,87],[731,88],[731,90],[731,91],[731,92]],"dx":[-406,-742],"dy":[-406,-742],"length":868.8693502682837,"timing":[301,313,330,346,363,381,397,413,430,447,464,481,498,514,530,547,564,580,598,614,630,647,663,680,698,714,731,747,763,780,797,813,829,847,864,880,897,914,930,950,964,981,998,1014]},{"start":[731,93],"end":[206,696],"points":[[731,93],[729,102],[722,117],[709,139],[689,169],[667,197],[630,238],[596,276],[562,319],[541,347],[514,379],[491,406],[471,425],[458,436],[442,451],[435,459],[425,470],[413,481],[398,495],[388,504],[375,516],[366,526],[357,537],[349,549],[343,559],[340,564],[334,572],[330,577],[325,584],[320,590],[317,593],[314,596],[308,600],[302,604],[294,611],[284,619],[276,624],[269,629],[265,632],[263,633],[262,634],[261,634],[260,635],[259,636],[258,637],[257,638],[257,639],[256,641],[255,644],[254,645],[253,647],[252,649],[250,650],[248,653],[247,655],[244,658],[243,659],[242,660],[241,660],[241,661],[240,661],[240,662],[240,662],[240,662],[237,666],[232,673],[224,682],[217,690],[211,695],[209,696],[208,697],[208,697],[207,697],[207,697],[207,696],[207,696],[206,696]],"dx":[-525,603],"dy":[-525,603],"length":810.6013751262484,"timing":[295,313,329,346,362,379,395,412,429,446,462,479,495,512,529,546,561,579,596,612,630,646,663,679,694,712,729,746,762,779,794,813,829,846,862,879,896,912,929,945,961,978,995,1012,1029,1046,1062,1079,1095,1112,1129,1146,1162,1179,1195,1212,1229,1246,1261,1279,1295,1312,1329,1345,1363,1379,1395,1412,1429,1446,1461,1479,1496,1513,1529,1545,1612]},{"start":[206,696],"end":[1545,799],"points":[[206,696],[206,694],[209,690],[211,687],[215,683],[226,674],[242,665],[276,652],[326,636],[422,611],[528,595],[662,591],[870,591],[964,599],[1077,608],[1174,615],[1246,618],[1319,623],[1360,628],[1416,639],[1456,652],[1480,661],[1506,670],[1522,677],[1541,685],[1557,693],[1570,704],[1570,704],[1569,709],[1567,719],[1565,728],[1563,735],[1561,744],[1558,753],[1556,762],[1553,773],[1552,778],[1551,784],[1550,788],[1549,793],[1547,796],[1547,798],[1546,799],[1546,799],[1545,799],[1545,799]],"dx":[1339,103],"dy":[1339,103],"length":1502.5012392642673,"timing":[190,199,216,233,250,267,283,299,317,332,349,366,383,399,416,433,450,466,483,500,517,532,549,566,583,600,616,839,850,867,883,899,916,933,950,967,983,999,1016,1033,1050,1066,1083,1099,1117,1184]},{"start":[1545,799],"end":[32,527],"points":[[1545,799],[1541,798],[1530,795],[1501,785],[1464,773],[1386,744],[1287,708],[1112,651],[939,596],[805,556],[693,527],[583,503],[552,496],[539,494],[539,494],[521,490],[499,488],[457,488],[391,491],[321,502],[258,511],[223,512],[187,513],[160,513],[135,513],[122,513],[112,514],[103,515],[94,517],[88,519],[81,521],[68,524],[59,525],[51,526],[46,526],[40,526],[37,526],[34,527],[33,527],[32,527],[32,527]],"dx":[-1513,-272],"dy":[-1513,-272],"length":1562.9713644007209,"timing":[222,233,249,265,282,299,317,333,349,366,383,400,416,432,708,733,750,766,783,799,816,832,849,865,883,900,915,933,950,966,982,1000,1016,1032,1050,1066,1083,1099,1116,1132,1199]},{"start":[33,527],"end":[1029,820],"points":[[33,527],[34,527],[41,523],[52,517],[78,502],[113,488],[146,479],[192,468],[233,466],[268,466],[301,466],[336,469],[371,471],[409,475],[461,480],[505,489],[549,505],[622,548],[687,604],[716,631],[748,662],[749,662],[761,666],[780,675],[822,693],[869,711],[919,731],[941,739],[962,747],[971,751],[982,758],[987,763],[991,768],[995,773],[999,778],[1002,783],[1003,785],[1005,788],[1006,791],[1010,797],[1015,804],[1018,809],[1022,813],[1026,817],[1027,818],[1027,819],[1028,820],[1028,820],[1028,820],[1028,820],[1029,820],[1029,820]],"dx":[996,293],"dy":[996,293],"length":1119.1357158940073,"timing":[19,33,50,67,83,100,116,133,150,167,184,200,215,234,250,265,283,300,317,333,350,562,584,600,617,633,650,666,683,699,716,732,750,767,783,800,817,833,849,866,884,900,917,933,950,967,983,1031,1050,1079,1104,1150]},{"start":[1029,819],"end":[994,80],"points":[[1029,819],[1029,819],[1028,817],[1027,815],[1025,811],[1021,802],[1014,776],[1007,732],[1000,637],[1000,561],[1003,489],[1007,451],[1011,427],[1014,407],[1018,394],[1021,385],[1024,370],[1027,352],[1028,324],[1028,294],[1024,277],[1021,264],[1019,254],[1016,246],[1013,241],[1006,224],[1001,204],[996,160],[996,140],[996,122],[996,110],[996,107],[996,107],[996,105],[996,97],[995,91],[995,86],[995,83],[995,81],[995,81],[994,81],[994,80],[994,80],[994,80],[994,80]],"dx":[-35,-739],"dy":[-35,-739],"length":750.7537116048696,"timing":[234,246,263,279,297,313,329,345,363,380,396,413,430,447,463,479,496,513,530,545,562,579,596,612,630,646,663,679,696,713,730,746,1069,1080,1096,1112,1130,1145,1163,1179,1195,1213,1229,1246,1262]},{"start":[994,80],"end":[508,860],"points":[[994,80],[988,88],[977,100],[962,119],[937,152],[911,186],[882,225],[846,272],[804,330],[764,394],[731,458],[704,520],[683,576],[669,613],[652,653],[642,676],[632,700],[623,717],[605,747],[593,764],[584,775],[574,789],[566,799],[560,808],[554,818],[548,826],[542,834],[538,838],[533,842],[529,847],[524,850],[521,855],[518,858],[515,860],[512,861],[510,861],[509,861],[508,861],[508,861],[508,861],[508,860],[508,860],[508,860]],"dx":[-486,780],"dy":[-486,780],"length":930.9828280189114,"timing":[242,265,283,299,316,332,349,366,383,398,415,432,449,465,482,499,515,532,549,565,581,599,615,632,649,666,681,699,716,732,749,765,782,799,815,831,848,866,883,906,931,949,965]},{"start":[508,859],"end":[1370,678],"points":[[508,859],[508,857],[509,854],[510,853],[510,852],[511,850],[514,846],[517,841],[542,808],[567,781],[658,711],[741,670],[836,643],[945,635],[1029,635],[1121,644],[1164,650],[1211,657],[1231,659],[1239,660],[1246,660],[1254,660],[1261,660],[1266,659],[1275,656],[1282,654],[1289,652],[1293,651],[1296,650],[1298,649],[1300,648],[1301,648],[1304,647],[1308,647],[1312,648],[1315,650],[1319,652],[1321,653],[1322,654],[1325,654],[1328,654],[1332,654],[1334,654],[1336,654],[1339,654],[1340,654],[1344,654],[1345,654],[1347,654],[1348,654],[1351,653],[1356,652],[1359,652],[1364,652],[1367,652],[1368,652],[1368,652],[1369,652],[1369,652],[1368,652],[1366,653],[1363,656],[1362,659],[1360,662],[1360,664],[1360,669],[1360,672],[1361,675],[1362,677],[1363,678],[1364,679],[1364,679],[1364,679],[1365,679],[1365,679],[1367,679],[1369,678],[1370,678],[1370,678]],"dx":[862,-181],"dy":[862,-181],"length":982.7028900474414,"timing":[130,136,149,166,182,200,215,232,250,266,282,299,316,333,350,366,381,399,416,433,449,465,483,500,517,533,549,565,583,599,616,633,649,666,683,698,716,733,750,766,782,799,816,833,850,865,888,900,916,933,949,966,982,1000,1015,1033,1049,1066,1083,1778,1799,1816,1833,1849,1865,1883,1900,1916,1932,1950,1966,1983,1999,2044,2066,2083,2098,2116,2149]},{"start":[1372,676],"end":[1358,344],"points":[[1372,676],[1372,675],[1372,675],[1372,675],[1372,673],[1372,669],[1371,661],[1370,645],[1369,621],[1365,581],[1362,555],[1360,537],[1359,503],[1359,481],[1360,468],[1364,452],[1366,444],[1368,434],[1370,426],[1371,419],[1371,407],[1371,381],[1371,376],[1366,356],[1364,348],[1362,345],[1361,344],[1360,343],[1360,343],[1360,343],[1360,343],[1359,343],[1359,343],[1359,343],[1359,344],[1359,344],[1358,344],[1358,344]],"dx":[-14,-332],"dy":[-14,-332],"length":340.1998561437931,"timing":[1,18,245,268,285,301,319,334,352,368,385,402,418,435,452,467,485,501,519,535,552,568,585,601,618,635,652,669,685,707,722,748,768,787,804,820,844,918]},{"start":[1358,344],"end":[709,623],"points":[[1358,344],[1358,344],[1358,344],[1357,344],[1356,345],[1355,346],[1353,346],[1352,347],[1349,349],[1344,351],[1332,357],[1286,377],[1244,395],[1199,417],[1150,443],[1096,470],[1043,499],[1009,519],[974,541],[947,560],[925,576],[903,590],[881,601],[865,606],[849,612],[841,614],[833,616],[825,618],[817,618],[805,620],[799,620],[791,620],[783,620],[777,620],[768,619],[758,618],[749,617],[744,617],[738,617],[733,617],[727,617],[724,619],[719,620],[715,621],[712,622],[711,622],[710,623],[710,623],[709,623]],"dx":[-649,279],"dy":[-649,279],"length":719.85174543204,"timing":[112,118,131,148,164,181,198,214,230,248,264,281,297,314,331,347,363,380,397,414,431,447,463,480,497,513,531,546,564,581,597,614,630,648,664,680,696,714,731,747,764,781,797,814,830,847,863,881,914]},{"start":[710,623],"end":[1198,595],"points":[[710,623],[728,614],[761,602],[789,597],[843,595],[887,607],[931,627],[962,642],[1005,661],[1036,671],[1056,674],[1077,674],[1086,674],[1095,674],[1106,674],[1109,674],[1119,674],[1126,670],[1134,664],[1146,652],[1154,643],[1162,633],[1166,627],[1169,622],[1171,619],[1172,617],[1174,615],[1176,613],[1179,609],[1184,605],[1188,602],[1193,599],[1196,597],[1198,596],[1198,595],[1198,595]],"dx":[488,-28],"dy":[488,-28],"length":542.400480138566,"timing":[271,296,313,329,346,362,379,395,413,430,445,463,480,496,513,528,546,562,578,595,612,629,646,663,678,696,712,730,746,762,779,796,813,829,846,896]},{"start":[1198,595],"end":[1574,58],"points":[[1198,595],[1198,592],[1200,581],[1207,557],[1215,522],[1228,475],[1248,418],[1274,365],[1294,333],[1321,301],[1345,280],[1355,269],[1361,259],[1362,243],[1362,242],[1362,239],[1374,223],[1391,205],[1415,185],[1445,167],[1476,150],[1503,137],[1517,130],[1531,123],[1540,118],[1547,114],[1552,108],[1556,103],[1559,98],[1561,93],[1563,89],[1565,86],[1567,81],[1568,78],[1569,76],[1570,75],[1570,74],[1570,74],[1570,73],[1571,72],[1571,70],[1571,69],[1571,68],[1572,67],[1572,66],[1572,66],[1572,66],[1572,66],[1572,64],[1573,62],[1573,60],[1573,59],[1573,58],[1573,58],[1574,58]],"dx":[376,-537],"dy":[376,-537],"length":692.0827366767894,"timing":[278,297,313,330,347,364,380,397,413,431,446,463,480,497,747,763,780,797,813,830,846,863,879,896,913,929,947,963,980,996,1014,1030,1047,1063,1080,1096,1113,1130,1147,1163,1179,1196,1213,1230,1247,1263,1281,1297,1313,1331,1347,1363,1380,1396,1413]},{"start":[1573,58],"end":[675,560],"points":[[1573,58],[1573,58],[1571,58],[1568,58],[1565,60],[1562,61],[1559,62],[1554,64],[1548,67],[1534,74],[1503,88],[1464,109],[1413,136],[1356,168],[1291,204],[1178,272],[1144,295],[1053,353],[1019,374],[986,396],[966,407],[947,418],[925,432],[909,443],[897,451],[882,462],[861,476],[845,485],[831,492],[823,496],[800,506],[786,512],[774,517],[758,524],[752,526],[738,532],[729,535],[719,540],[710,543],[703,547],[698,549],[692,552],[687,554],[684,556],[681,557],[680,558],[678,559],[677,560],[676,560],[675,560]],"dx":[-898,502],"dy":[-898,502],"length":1032.1782753706475,"timing":[141,150,166,182,199,215,232,250,266,283,299,316,332,349,366,382,399,416,433,448,466,482,500,516,532,548,566,582,599,617,632,649,666,682,699,716,732,750,766,782,798,816,833,849,866,883,899,915,931,966]},{"start":[677,560],"end":[966,835],"points":[[677,560],[688,556],[696,556],[702,557],[710,563],[719,576],[731,590],[752,613],[785,645],[805,663],[829,685],[843,697],[858,709],[875,720],[889,727],[904,733],[914,739],[923,745],[931,755],[935,763],[937,768],[939,773],[941,779],[942,782],[943,786],[944,790],[944,795],[946,801],[948,808],[949,813],[950,817],[951,819],[952,820],[952,820],[952,820],[952,820],[952,820],[953,820],[953,821],[953,821],[954,823],[956,827],[959,829],[962,832],[963,833],[965,834],[965,835],[966,835],[966,835]],"dx":[289,275],"dy":[289,275],"length":422.73612147854794,"timing":[272,296,313,329,347,363,379,396,413,430,446,463,479,497,513,530,545,563,580,596,613,630,646,663,680,696,712,730,746,763,779,796,813,830,846,863,880,896,913,929,946,962,980,996,1013,1030,1046,1062,1090]},{"start":[966,834],"end":[1126,789],"points":[[966,834],[966,834],[966,831],[966,829],[965,827],[965,826],[965,826],[965,825],[964,823],[964,821],[963,818],[963,816],[963,815],[962,814],[961,809],[961,798],[961,781],[964,769],[968,760],[972,753],[978,750],[983,749],[995,749],[1012,749],[1036,751],[1064,754],[1092,757],[1107,758],[1122,758],[1131,758],[1135,755],[1138,753],[1139,753],[1140,755],[1140,759],[1140,763],[1140,766],[1139,770],[1138,773],[1135,778],[1133,781],[1130,785],[1128,787],[1127,788],[1127,789],[1126,789],[1126,789]],"dx":[160,-45],"dy":[160,-45],"length":295.47844585762454,"timing":[39,49,64,81,98,115,131,147,165,181,197,215,231,248,264,281,297,314,330,348,364,380,398,414,430,447,465,481,498,514,532,548,564,581,597,615,631,648,664,681,697,714,731,747,763,780,798]},{"start":[1126,789],"end":[609,71],"points":[[1126,789],[1125,789],[1119,786],[1110,779],[1092,765],[1054,732],[1018,698],[966,648],[920,594],[881,545],[848,495],[808,431],[768,359],[736,296],[718,262],[706,236],[694,210],[685,193],[676,176],[669,168],[664,160],[660,156],[656,152],[655,150],[654,150],[653,149],[652,149],[649,146],[644,141],[637,129],[632,120],[627,107],[622,94],[619,86],[615,78],[612,74],[610,72],[609,71]],"dx":[-517,-718],"dy":[-517,-718],"length":897.1980079701763,"timing":[250,264,281,299,315,330,348,365,382,398,415,431,449,465,482,498,515,532,548,565,581,599,615,631,648,665,682,698,715,731,748,765,782,799,814,832,849,865]},{"start":[609,72],"end":[1633,753],"points":[[609,72],[610,73],[610,74],[611,76],[611,78],[611,80],[611,83],[612,87],[617,95],[629,112],[666,160],[728,230],[814,321],[901,412],[956,469],[1021,532],[1072,582],[1123,625],[1150,647],[1274,736],[1316,761],[1384,797],[1413,809],[1458,826],[1481,834],[1515,844],[1523,846],[1535,847],[1542,848],[1545,848],[1545,848],[1545,847],[1547,843],[1550,840],[1555,834],[1564,827],[1572,820],[1582,812],[1591,803],[1599,797],[1603,792],[1611,784],[1612,780],[1617,774],[1620,769],[1622,765],[1624,763],[1626,761],[1628,758],[1630,757],[1631,755],[1632,755],[1632,754],[1633,754],[1633,753]],"dx":[1024,681],"dy":[1024,681],"length":1374.7930403150501,"timing":[176,183,200,216,233,249,266,283,299,316,332,350,365,382,399,416,432,449,466,482,500,516,533,548,566,583,600,616,632,649,665,897,915,933,949,966,983,999,1016,1033,1049,1066,1081,1100,1116,1133,1148,1166,1182,1199,1215,1233,1249,1271,1285]},{"start":[1632,753],"end":[305,147],"points":[[1632,753],[1632,753],[1631,754],[1630,754],[1629,755],[1627,756],[1623,756],[1616,757],[1580,757],[1541,756],[1456,741],[1362,716],[1203,658],[1058,595],[897,518],[787,463],[705,420],[620,373],[581,348],[541,322],[522,307],[505,292],[497,284],[489,277],[489,277],[490,279],[491,280],[491,281],[490,281],[482,281],[464,274],[439,261],[394,236],[367,218],[352,207],[336,195],[329,190],[323,184],[319,181],[316,178],[314,176],[312,175],[311,173],[311,172],[310,172],[310,171],[310,171],[309,169],[309,167],[308,161],[307,152],[306,148],[305,147]],"dx":[-1327,-606],"dy":[-1327,-606],"length":1502.3096487660027,"timing":[121,136,150,167,183,200,217,233,250,267,283,301,316,333,350,367,383,400,416,434,449,467,484,500,672,684,701,717,734,750,767,783,800,816,833,850,866,884,900,917,934,949,966,984,1001,1017,1034,1050,1067,1083,1100,1117,1184]},{"start":[306,147],"end":[235,848],"points":[[306,147],[307,148],[307,148],[310,150],[312,152],[314,155],[317,157],[322,160],[323,162],[327,164],[331,167],[333,170],[337,178],[338,193],[338,217],[337,247],[330,297],[322,344],[313,395],[303,452],[291,509],[280,562],[273,596],[264,649],[263,656],[257,684],[253,696],[249,706],[245,715],[242,724],[239,733],[236,739],[233,747],[231,752],[228,758],[226,764],[223,770],[222,775],[221,780],[220,784],[220,786],[219,788],[218,793],[218,801],[218,810],[218,820],[220,826],[222,831],[223,836],[225,839],[227,842],[229,844],[231,846],[232,847],[233,847],[234,848],[234,848],[234,848],[235,848]],"dx":[-71,701],"dy":[-71,701],"length":736.3595520464179,"timing":[95,103,115,133,150,166,183,199,216,232,250,265,282,299,316,333,349,367,383,399,415,433,450,466,483,500,517,533,550,566,583,600,616,633,649,667,683,699,716,734,749,766,783,800,816,833,848,867,883,898,916,932,950,966,982,1000,1015,1050,1092]},{"start":[235,847],"end":[640,228],"points":[[235,847],[239,836],[247,818],[262,783],[283,747],[309,709],[342,668],[376,628],[402,600],[441,563],[473,531],[502,502],[533,468],[544,455],[558,441],[568,431],[577,421],[584,412],[588,402],[591,394],[593,387],[595,376],[599,361],[609,330],[617,303],[626,280],[629,270],[632,263],[633,260],[634,259],[634,259],[634,259],[634,258],[634,258],[634,258],[635,254],[637,246],[638,240],[639,234],[640,230],[640,229],[640,229],[640,228],[640,228]],"dx":[405,-619],"dy":[405,-619],"length":755.4238364591461,"timing":[281,299,315,332,348,366,382,397,415,432,448,464,482,498,516,532,549,564,582,599,615,632,648,665,681,699,714,732,748,766,791,814,832,849,864,883,899,915,932,949,965,982,1009,1034]},{"start":[639,228],"end":[60,432],"points":[[639,228],[635,229],[622,234],[605,243],[563,266],[514,293],[456,323],[395,352],[338,378],[302,392],[238,412],[208,417],[167,424],[130,429],[106,431],[83,432],[68,433],[62,432],[59,430],[58,430],[57,429],[57,430],[58,430],[58,431],[59,431],[59,432],[59,432],[60,432],[60,432],[60,432],[60,432],[60,432]],"dx":[-579,204],"dy":[-579,204],"length":631.8730377275647,"timing":[281,297,312,330,347,363,380,397,413,430,447,462,479,497,513,530,547,563,580,596,614,652,663,679,697,713,730,747,763,780,796,829]},{"start":[60,439],"end":[235,597],"points":[[60,439],[60,439],[60,440],[60,440],[60,440],[60,440],[61,440],[62,441],[65,441],[69,442],[74,442],[81,442],[97,442],[114,442],[132,442],[151,448],[170,461],[189,482],[206,510],[219,538],[226,558],[232,577],[234,586],[235,593],[236,595],[236,596],[236,597],[236,597],[236,597],[236,597],[235,597],[235,597]],"dx":[175,158],"dy":[175,158],"length":271.0720473980485,"timing":[13,32,46,62,85,118,129,146,162,180,196,214,230,246,262,280,296,313,329,346,363,379,396,413,429,445,463,480,510,531,563,587]},{"start":[235,597],"end":[1424,473],"points":[[235,597],[241,592],[259,576],[295,555],[348,530],[416,509],[520,490],[609,487],[708,487],[778,488],[863,492],[933,499],[977,508],[1003,516],[1004,516],[1018,514],[1055,508],[1083,506],[1238,502],[1312,505],[1371,514],[1390,517],[1419,521],[1432,522],[1442,522],[1448,521],[1452,517],[1453,514],[1456,510],[1458,507],[1461,504],[1463,501],[1465,500],[1466,499],[1467,498],[1467,498],[1467,497],[1465,493],[1461,488],[1455,484],[1448,480],[1440,477],[1434,476],[1429,474],[1426,473],[1424,473],[1424,473]],"dx":[1189,-124],"dy":[1189,-124],"length":1324.4591059233508,"timing":[278,295,311,328,344,361,378,394,412,428,444,461,478,495,740,761,778,795,811,829,845,861,878,894,910,927,944,962,977,995,1011,1028,1045,1062,1078,1094,1111,1128,1144,1161,1178,1194,1211,1228,1245,1262,1277]},{"start":[1423,473],"end":[818,189],"points":[[1423,473],[1421,473],[1415,474],[1401,476],[1352,477],[1279,462],[1223,444],[1149,418],[1065,385],[995,352],[957,333],[920,313],[905,304],[892,293],[884,287],[878,282],[873,278],[868,274],[865,271],[861,268],[857,263],[853,259],[846,251],[841,245],[836,239],[831,232],[828,226],[826,219],[824,212],[823,206],[821,201],[820,197],[819,196],[819,195],[819,195],[819,194],[819,193],[818,192],[818,191],[818,190],[818,190],[818,189]],"dx":[-605,-284],"dy":[-605,-284],"length":702.181985855449,"timing":[268,281,298,316,332,349,365,382,399,415,432,448,466,482,499,515,532,548,564,582,598,615,632,647,665,682,698,715,733,749,765,781,797,816,832,849,865,882,898,915,932,965]},{"start":[818,190],"end":[523,172],"points":[[818,190],[818,192],[817,194],[815,196],[812,198],[807,200],[798,201],[780,202],[767,202],[751,202],[737,201],[736,201],[734,201],[727,201],[710,201],[686,200],[650,198],[610,192],[588,188],[572,184],[561,181],[553,179],[545,177],[539,176],[534,175],[531,175],[529,175],[528,174],[527,174],[525,173],[524,172],[523,172],[523,172]],"dx":[-295,-18],"dy":[-295,-18],"length":303.69141161086947,"timing":[266,283,300,317,332,350,367,383,400,416,433,687,700,717,733,750,766,783,800,816,834,850,867,882,900,917,934,949,966,984,1000,1017,1049]},{"start":[524,172],"end":[372,438],"points":[[524,172],[524,172],[524,172],[525,172],[525,172],[525,172],[525,173],[525,176],[521,185],[507,214],[492,243],[478,270],[465,293],[456,309],[440,332],[429,349],[416,365],[407,377],[398,391],[391,402],[387,408],[382,417],[380,422],[379,426],[378,430],[377,433],[377,435],[377,436],[377,436],[376,436],[376,436],[375,437],[374,437],[373,437],[373,438],[372,438]],"dx":[-152,266],"dy":[-152,266],"length":312.1702177140306,"timing":[178,186,198,215,232,249,264,282,298,314,332,347,365,382,397,415,431,448,464,481,498,515,531,547,566,581,598,615,632,656,682,698,715,731,748,783]},{"start":[372,438],"end":[1523,339],"points":[[372,438],[369,438],[368,439],[365,440],[364,440],[362,440],[362,441],[363,441],[366,441],[370,441],[383,435],[408,424],[443,405],[514,367],[600,326],[715,287],[851,258],[983,246],[1067,245],[1157,245],[1206,252],[1241,257],[1272,261],[1302,264],[1318,266],[1340,272],[1358,281],[1370,287],[1385,294],[1399,297],[1413,299],[1422,299],[1434,299],[1439,299],[1447,299],[1450,301],[1454,305],[1458,310],[1461,314],[1465,320],[1466,322],[1467,323],[1467,323],[1468,324],[1469,324],[1472,326],[1476,328],[1482,332],[1488,334],[1491,335],[1495,336],[1497,336],[1500,336],[1502,336],[1504,336],[1506,335],[1508,335],[1510,335],[1511,335],[1511,335],[1511,335],[1512,335],[1512,335],[1512,334],[1512,334],[1513,334],[1515,334],[1516,334],[1520,336],[1522,337],[1523,337],[1523,338],[1523,338],[1523,339],[1523,339]],"dx":[1151,-99],"dy":[1151,-99],"length":1236.4011659955656,"timing":[13,31,46,63,80,96,131,429,437,446,462,480,496,513,529,546,563,579,596,612,629,645,663,680,696,712,729,746,763,780,795,812,829,846,863,879,896,913,930,946,963,980,996,1012,1029,1046,1062,1079,1095,1112,1129,1145,1162,1179,1196,1212,1229,1246,1263,1279,1295,1312,1330,1346,1363,1569,1579,1595,1613,1629,1646,1663,1679,1695,1713]},{"start":[1523,340],"end":[966,845],"points":[[1523,340],[1523,341],[1524,343],[1526,345],[1527,346],[1527,347],[1527,347],[1525,348],[1520,350],[1507,355],[1483,371],[1447,394],[1377,443],[1332,480],[1270,533],[1215,588],[1171,638],[1123,690],[1092,722],[1078,736],[1069,746],[1061,753],[1054,762],[1049,768],[1042,777],[1035,787],[1029,796],[1023,803],[1017,809],[1011,815],[1004,821],[997,826],[992,830],[985,835],[980,838],[976,840],[973,842],[970,844],[968,844],[967,845],[967,845],[966,845],[966,845]],"dx":[-557,505],"dy":[-557,505],"length":765.0337886534004,"timing":[206,214,230,247,263,281,297,314,330,347,363,380,396,414,431,447,464,480,497,513,531,547,564,580,596,613,631,648,664,680,697,714,731,747,764,781,797,813,830,847,864,880,897]},{"start":[967,845],"end":[690,203],"points":[[967,845],[966,845],[966,845],[966,845],[966,844],[966,844],[965,843],[964,842],[956,831],[940,805],[915,764],[867,673],[825,577],[785,471],[755,389],[744,359],[724,314],[718,301],[712,289],[711,288],[710,287],[710,287],[709,287],[709,286],[709,286],[708,286],[708,286],[707,286],[707,285],[706,283],[706,270],[704,263],[700,231],[698,218],[695,203],[693,195],[690,189],[689,186],[687,184],[687,184],[687,184],[687,184],[687,185],[687,186],[687,187],[687,190],[687,192],[687,195],[687,197],[687,198],[687,199],[688,200],[688,201],[689,201],[689,202],[689,202],[690,203]],"dx":[-277,-642],"dy":[-277,-642],"length":747.0087145822132,"timing":[168,184,208,218,235,251,269,285,302,318,335,351,369,384,402,417,435,452,477,485,501,518,557,568,585,602,619,635,651,668,685,701,718,735,752,769,784,801,819,835,851,1196,1218,1235,1252,1273,1285,1302,1318,1335,1352,1368,1385,1401,1419,1435,1468]},{"start":[690,203],"end":[1563,836],"points":[[690,203],[697,208],[723,230],[780,276],[855,341],[952,428],[1057,524],[1122,582],[1196,642],[1252,683],[1284,707],[1320,733],[1361,767],[1382,783],[1395,792],[1409,799],[1421,804],[1433,807],[1444,810],[1460,813],[1478,822],[1498,837],[1511,846],[1518,852],[1528,858],[1532,860],[1534,860],[1536,860],[1539,860],[1541,860],[1544,860],[1547,858],[1548,857],[1550,856],[1551,854],[1552,854],[1553,853],[1554,853],[1554,852],[1555,851],[1555,849],[1556,847],[1557,846],[1557,844],[1558,842],[1560,840],[1561,839],[1562,838],[1562,837],[1562,837],[1563,836],[1563,836]],"dx":[873,633],"dy":[873,633],"length":1119.6650135248938,"timing":[446,464,480,497,513,531,547,564,580,598,614,630,646,663,680,697,714,731,747,763,781,797,814,830,847,863,881,897,914,929,947,964,980,996,1012,1030,1047,1063,1080,1097,1114,1130,1147,1163,1181,1197,1214,1230,1246,1263,1280,1296]},{"start":[1562,836],"end":[1441,439],"points":[[1562,836],[1560,836],[1554,834],[1546,829],[1535,818],[1517,784],[1502,741],[1490,699],[1481,654],[1474,622],[1470,583],[1468,553],[1468,536],[1468,519],[1468,507],[1468,500],[1468,491],[1469,483],[1469,475],[1469,466],[1469,457],[1467,453],[1465,448],[1462,446],[1459,444],[1457,444],[1455,444],[1452,444],[1449,443],[1447,442],[1445,442],[1444,441],[1443,440],[1442,439],[1441,439]],"dx":[-121,-397],"dy":[-121,-397],"length":441.69818928583874,"timing":[271,283,300,317,333,351,367,383,400,417,434,451,467,483,501,517,533,550,567,584,601,617,633,651,667,684,699,717,733,751,767,782,801,816,850]},{"start":[1440,440],"end":[511,771],"points":[[1440,440],[1430,445],[1412,454],[1355,480],[1311,497],[1256,514],[1196,533],[1133,554],[1077,577],[1031,600],[1001,618],[970,637],[940,655],[915,671],[890,683],[865,694],[841,702],[817,707],[789,712],[761,718],[734,722],[717,726],[690,732],[676,735],[665,738],[655,740],[646,742],[637,743],[630,744],[622,746],[613,749],[604,753],[593,757],[586,759],[580,759],[575,760],[572,760],[570,760],[567,759],[566,759],[563,759],[562,759],[561,760],[560,760],[559,761],[557,761],[555,761],[551,759],[548,758],[545,756],[542,755],[540,755],[539,755],[537,755],[535,754],[533,753],[532,753],[532,752],[531,752],[531,752],[531,752],[531,753],[530,755],[530,757],[530,759],[529,761],[528,764],[527,767],[526,769],[525,772],[524,775],[522,776],[522,777],[520,777],[517,777],[516,777],[516,777],[516,776],[515,776],[515,775],[514,774],[514,774],[514,773],[513,773],[513,773],[512,772],[512,771],[511,771]],"dx":[-929,331],"dy":[-929,331],"length":1020.5872748166805,"timing":[277,300,315,333,350,367,383,400,416,432,449,466,482,500,516,533,550,566,583,599,616,632,650,666,682,700,716,733,750,766,783,799,816,832,849,867,882,899,919,933,950,967,983,999,1016,1033,1050,1066,1083,1100,1116,1133,1149,1166,1183,1199,1216,1233,1250,1266,1283,1298,1316,1333,1348,1367,1383,1400,1416,1433,1450,1466,1483,1499,1516,1533,1550,1606,1616,1633,1649,1666,1683,1700,1716,1733,1750,1783]},{"start":[511,771],"end":[230,771],"points":[[511,771],[514,768],[519,762],[524,755],[527,750],[530,745],[531,744],[530,744],[520,748],[506,754],[490,759],[478,762],[466,765],[467,765],[469,765],[469,765],[469,765],[453,766],[420,771],[378,774],[346,774],[324,774],[302,772],[292,770],[280,765],[274,762],[268,760],[259,759],[254,759],[250,759],[248,759],[247,759],[246,759],[244,759],[242,761],[239,763],[237,764],[236,765],[235,766],[234,766],[232,768],[230,770],[230,770],[230,771]],"dx":[-281,0],"dy":[-281,0],"length":352.2819950018508,"timing":[218,232,248,265,282,298,314,339,365,381,397,415,432,656,682,697,727,747,765,781,798,815,832,848,864,880,897,914,931,948,964,981,997,1014,1031,1048,1064,1081,1098,1113,1131,1148,1164,1198]},{"start":[230,771],"end":[949,555],"points":[[230,771],[230,770],[231,769],[235,767],[239,765],[243,763],[246,762],[248,760],[249,760],[250,759],[250,759],[251,759],[256,757],[267,751],[292,737],[330,719],[386,696],[452,677],[516,663],[562,657],[613,651],[657,647],[695,641],[731,633],[761,625],[786,615],[801,608],[815,601],[826,597],[836,593],[849,590],[858,589],[868,587],[879,585],[889,582],[899,579],[910,575],[914,574],[921,571],[929,568],[935,564],[941,561],[945,559],[946,558],[947,558],[947,557],[948,557],[949,556],[949,556],[949,555]],"dx":[719,-216],"dy":[719,-216],"length":760.3742681215462,"timing":[64,71,83,100,116,132,149,166,183,200,215,232,249,265,282,299,315,333,349,365,381,399,416,432,449,465,482,499,516,532,549,566,583,599,616,632,659,665,683,699,716,732,748,766,782,798,816,832,849,882]},{"start":[949,555],"end":[225,203],"points":[[949,555],[940,552],[925,548],[890,538],[845,527],[760,509],[679,491],[578,460],[479,419],[421,382],[362,336],[337,309],[322,289],[308,269],[299,255],[294,250],[289,247],[286,247],[281,247],[276,247],[272,247],[267,247],[263,246],[258,245],[254,243],[250,241],[246,238],[242,236],[238,233],[235,231],[230,227],[228,225],[226,223],[225,222],[224,221],[223,221],[223,221],[222,221],[222,221],[222,221],[222,221],[222,221],[222,220],[222,215],[222,211],[223,207],[224,204],[224,203],[224,203],[225,203],[225,203]],"dx":[-724,-352],"dy":[-724,-352],"length":844.1848021793177,"timing":[269,294,310,327,344,361,377,394,411,427,444,460,478,494,511,526,544,561,577,594,611,627,644,661,678,694,711,726,744,761,777,794,810,828,844,860,878,894,911,997,1010,1037,1458,1478,1494,1511,1527,1544,1561,1577,1611]},{"start":[225,203],"end":[154,528],"points":[[225,203],[226,203],[226,203],[227,203],[227,204],[227,204],[227,204],[228,204],[228,204],[228,205],[229,205],[229,208],[229,212],[229,219],[225,228],[221,241],[215,255],[210,269],[202,290],[196,307],[191,321],[184,338],[179,353],[175,367],[172,381],[169,394],[165,413],[163,424],[162,434],[161,440],[161,445],[161,447],[161,448],[161,449],[160,449],[160,450],[160,452],[159,455],[159,457],[159,458],[158,462],[157,469],[155,480],[154,497],[154,504],[154,510],[154,513],[154,515],[154,516],[154,517],[154,520],[154,522],[154,525],[154,527],[154,527],[154,528]],"dx":[-71,325],"dy":[-71,325],"length":341.625486195059,"timing":[135,147,164,180,197,214,248,264,280,297,314,330,347,364,380,397,414,430,447,464,480,497,514,531,546,563,581,597,614,630,646,664,681,697,713,731,747,764,780,797,813,831,847,864,881,896,913,930,947,964,981,998,1013,1029,1047,1063]},{"start":[154,528],"end":[1523,824],"points":[[154,528],[154,528],[154,528],[154,527],[154,527],[159,522],[169,515],[179,509],[196,500],[215,491],[250,475],[298,454],[389,422],[484,399],[603,386],[724,383],[803,383],[895,386],[968,395],[1037,408],[1077,419],[1099,426],[1133,440],[1144,445],[1159,454],[1168,462],[1180,470],[1192,479],[1203,485],[1222,497],[1241,509],[1265,525],[1307,556],[1368,612],[1424,670],[1424,672],[1426,679],[1430,691],[1434,703],[1441,718],[1448,732],[1455,746],[1460,756],[1466,765],[1471,771],[1478,777],[1485,783],[1492,790],[1500,798],[1510,808],[1513,811],[1517,815],[1518,816],[1519,818],[1520,818],[1520,819],[1521,819],[1521,819],[1521,819],[1522,820],[1522,820],[1522,820],[1523,821],[1523,821],[1523,822],[1523,822],[1523,823],[1523,823],[1523,823],[1523,824]],"dx":[1369,296],"dy":[1369,296],"length":1575.5899199405885,"timing":[170,195,203,219,250,344,366,382,399,416,433,449,466,483,500,516,533,549,567,583,599,616,650,666,683,699,716,733,749,765,782,799,816,833,849,1215,1232,1250,1266,1283,1299,1316,1332,1350,1366,1383,1399,1416,1433,1449,1466,1483,1499,1516,1533,1550,1571,1595,1616,1633,1650,1666,1683,1699,1716,1733,1750,1765,1781,1816]},{"start":[1523,826],"end":[752,458],"points":[[1523,826],[1523,828],[1523,831],[1523,832],[1523,833],[1523,833],[1523,834],[1523,834],[1523,834],[1523,834],[1523,834],[1522,834],[1522,834],[1518,833],[1506,831],[1478,822],[1437,804],[1353,763],[1267,716],[1167,666],[1103,635],[1020,593],[973,563],[940,541],[923,528],[905,517],[892,512],[882,510],[876,510],[870,510],[865,509],[860,509],[857,509],[854,508],[850,508],[848,508],[844,510],[842,511],[837,512],[829,510],[823,503],[815,496],[806,489],[797,484],[792,481],[784,476],[781,474],[778,471],[775,468],[773,466],[771,464],[770,464],[769,463],[768,463],[767,463],[766,463],[765,464],[765,464],[764,464],[763,464],[763,464],[762,464],[762,464],[761,464],[760,463],[759,462],[758,462],[757,461],[757,461],[757,461],[756,461],[756,460],[755,460],[754,459],[753,459],[753,458],[753,458],[753,458],[752,458]],"dx":[-771,-368],"dy":[-771,-368],"length":881.2928150360316,"timing":[16,32,49,66,83,99,115,132,183,214,238,262,282,300,316,332,348,365,383,399,416,432,449,466,482,499,515,532,549,566,582,599,616,632,649,665,682,699,716,732,749,766,782,799,815,832,848,865,882,899,915,932,949,966,983,998,1015,1032,1049,1065,1082,1098,1116,1132,1149,1165,1183,1199,1215,1233,1250,1265,1282,1299,1316,1333,1349,1364,1382]},{"start":[752,458],"end":[706,567],"points":[[752,458],[745,465],[737,480],[729,499],[723,521],[720,536],[716,553],[713,559],[711,564],[709,566],[708,567],[708,567],[707,567],[707,567],[707,567],[706,567],[706,567],[706,567]],"dx":[-46,109],"dy":[-46,109],"length":121.41584873078722,"timing":[346,369,385,403,420,436,453,469,486,503,519,535,552,572,612,635,652,669]},{"start":[706,567],"end":[1495,621],"points":[[706,567],[713,567],[729,565],[791,561],[848,558],[950,556],[1051,556],[1160,556],[1273,567],[1378,590],[1436,608],[1480,621],[1509,630],[1525,635],[1536,638],[1540,639],[1541,639],[1541,639],[1541,639],[1541,639],[1541,640],[1541,640],[1541,640],[1541,640],[1538,640],[1534,640],[1527,638],[1520,636],[1515,635],[1510,634],[1507,634],[1506,634],[1505,634],[1505,633],[1503,631],[1501,629],[1499,626],[1497,624],[1496,623],[1495,622],[1495,622],[1495,622],[1495,622],[1495,621]],"dx":[789,54],"dy":[789,54],"length":900.314653467968,"timing":[458,481,497,513,530,547,564,580,596,613,630,647,663,680,697,714,731,746,763,780,822,871,896,913,930,947,964,980,997,1013,1030,1046,1064,1080,1097,1113,1130,1147,1163,1180,1196,1221,1230,1280]},{"start":[1495,622],"end":[776,649],"points":[[1495,622],[1493,623],[1488,627],[1479,632],[1438,648],[1365,656],[1264,660],[1179,663],[1039,672],[977,679],[904,688],[862,692],[839,695],[811,697],[793,697],[777,697],[766,696],[759,692],[754,689],[749,686],[747,684],[746,684],[746,684],[746,683],[746,679],[747,676],[748,673],[754,666],[759,661],[763,660],[768,657],[771,656],[773,654],[774,653],[775,651],[775,650],[776,649],[776,649],[776,649]],"dx":[-719,27],"dy":[-719,27],"length":810.4295191873849,"timing":[248,267,284,300,317,335,350,368,384,401,417,434,451,467,483,501,518,534,551,568,585,601,618,658,684,700,717,735,751,768,784,801,818,834,850,868,884,901,951]},{"start":[776,649],"end":[799,790],"points":[[776,649],[776,659],[776,673],[776,689],[777,706],[779,719],[780,730],[783,740],[783,748],[785,755],[786,762],[787,768],[791,778],[793,781],[796,787],[797,789],[798,790],[799,790]],"dx":[23,141],"dy":[23,141],"length":145.83630692353964,"timing":[331,349,366,382,398,416,433,449,465,482,499,516,533,548,565,582,599,615]},{"start":[799,790],"end":[701,412],"points":[[799,790],[799,790],[799,790],[798,789],[793,783],[779,762],[755,725],[728,678],[711,641],[700,615],[695,602],[693,597],[693,591],[695,581],[700,564],[703,550],[706,535],[708,528],[708,522],[709,519],[709,517],[709,510],[710,502],[710,491],[711,481],[711,472],[711,463],[711,457],[711,447],[710,436],[707,428],[705,420],[703,415],[702,413],[702,413],[701,413],[701,413],[701,413],[701,413],[701,412],[701,412]],"dx":[-98,-378],"dy":[-98,-378],"length":410.5763783898601,"timing":[164,187,203,293,314,331,347,364,380,398,414,430,447,464,480,497,513,531,547,564,580,597,614,631,647,663,681,697,713,730,747,764,780,797,813,831,847,874,908,948,1013]},{"start":[700,412],"end":[239,600],"points":[[700,412],[697,414],[688,421],[675,431],[657,443],[639,453],[618,463],[598,469],[574,474],[544,475],[511,477],[480,478],[463,480],[454,481],[442,483],[437,484],[435,484],[423,489],[408,498],[384,512],[353,530],[334,540],[316,548],[308,552],[298,556],[293,558],[288,562],[284,564],[281,567],[278,569],[276,569],[275,569],[273,570],[270,571],[266,574],[262,577],[258,580],[255,581],[254,582],[251,585],[248,589],[244,594],[241,598],[239,600],[239,600]],"dx":[-461,188],"dy":[-461,188],"length":512.3844377325199,"timing":[279,297,313,329,347,363,379,396,412,430,446,463,479,497,512,530,813,830,846,863,879,896,913,929,946,963,979,996,1013,1030,1046,1063,1080,1096,1113,1129,1146,1163,1179,1196,1213,1230,1246,1263,1296]},{"start":[239,600],"end":[1606,848],"points":[[239,600],[241,600],[246,600],[259,602],[289,608],[396,618],[505,621],[651,621],[791,617],[915,614],[1023,615],[1093,629],[1165,653],[1205,672],[1229,683],[1244,691],[1244,691],[1248,694],[1256,701],[1269,710],[1308,732],[1354,751],[1409,771],[1462,791],[1492,804],[1526,818],[1538,824],[1547,827],[1551,828],[1552,829],[1553,829],[1555,829],[1558,830],[1565,832],[1575,836],[1586,842],[1593,845],[1598,847],[1601,849],[1603,849],[1604,849],[1604,849],[1605,849],[1606,848]],"dx":[1367,248],"dy":[1367,248],"length":1418.1463607131316,"timing":[301,315,331,348,364,382,398,414,431,448,465,481,498,514,532,547,786,798,814,831,847,865,881,898,914,931,948,965,981,997,1014,1031,1048,1064,1081,1097,1115,1131,1148,1164,1181,1198,1214,1231]},{"start":[1605,848],"end":[790,52],"points":[[1605,848],[1600,848],[1591,845],[1569,835],[1527,811],[1460,768],[1360,697],[1292,643],[1188,555],[1162,527],[1114,471],[1068,409],[1008,318],[988,280],[968,241],[957,222],[946,204],[937,192],[930,184],[923,179],[923,179],[916,176],[904,170],[882,154],[857,131],[837,110],[827,97],[821,88],[816,80],[813,76],[810,71],[808,69],[805,66],[802,63],[800,60],[798,58],[796,55],[794,54],[793,53],[791,52],[790,52],[790,52]],"dx":[-815,-796],"dy":[-815,-796],"length":1161.496504867725,"timing":[294,312,330,346,363,379,396,412,433,446,462,479,495,512,528,546,562,579,596,613,860,879,895,913,929,946,961,979,995,1012,1031,1046,1062,1079,1096,1113,1129,1145,1162,1185,1196,1212]},{"start":[790,54],"end":[503,685],"points":[[790,54],[787,62],[776,86],[763,111],[726,183],[702,228],[678,274],[652,322],[627,366],[612,395],[595,428],[582,458],[572,483],[562,506],[552,529],[545,545],[538,562],[531,577],[526,590],[521,602],[518,612],[514,622],[510,635],[508,642],[507,646],[506,651],[505,659],[505,663],[505,668],[505,671],[504,675],[504,677],[504,679],[504,681],[504,682],[504,683],[504,684],[503,684],[503,684],[503,684],[503,685]],"dx":[-287,631],"dy":[-287,631],"length":697.5358324919077,"timing":[317,331,347,363,380,397,414,430,446,463,480,497,513,529,546,564,580,597,613,630,647,663,680,697,713,730,747,763,780,797,813,830,847,863,879,897,913,930,946,964,980]},{"start":[503,684],"end":[285,410],"points":[[503,684],[503,684],[503,684],[503,683],[503,683],[503,682],[503,682],[503,682],[503,682],[503,682],[503,681],[502,681],[502,680],[500,679],[497,673],[490,659],[480,634],[466,604],[451,572],[438,544],[427,517],[427,517],[419,517],[410,515],[397,509],[377,498],[355,480],[342,466],[336,460],[332,455],[330,453],[330,452],[329,451],[326,448],[323,444],[319,440],[315,435],[312,432],[309,429],[306,428],[303,427],[298,426],[295,425],[290,422],[287,420],[286,419],[285,419],[285,419],[285,418],[285,417],[285,416],[285,416],[285,415],[285,414],[285,414],[285,413],[285,411],[285,410],[285,410],[285,410]],"dx":[-218,-274],"dy":[-218,-274],"length":372.24373414899793,"timing":[87,110,127,134,150,166,183,198,216,274,299,316,332,349,366,382,399,415,433,449,465,710,732,749,765,783,799,815,833,850,866,883,899,915,932,949,966,982,998,1016,1032,1048,1066,1083,1099,1116,1132,1148,1513,1532,1550,1566,1582,1599,1615,1632,1649,1666,1682,1733]},{"start":[285,410],"end":[898,533],"points":[[285,410],[289,410],[296,410],[307,410],[319,412],[341,416],[365,418],[412,422],[490,428],[580,442],[684,465],[764,483],[864,504],[916,515],[936,520],[953,526],[959,530],[964,533],[965,535],[966,536],[967,537],[967,538],[967,538],[967,539],[967,539],[968,540],[968,540],[967,540],[957,540],[943,539],[930,538],[916,537],[909,537],[904,536],[901,535],[901,535],[900,535],[899,534],[898,533],[898,533]],"dx":[613,123],"dy":[613,123],"length":772.3004738892549,"timing":[279,297,313,330,347,364,380,396,413,429,446,463,479,496,513,530,546,563,580,597,612,629,646,664,680,696,713,788,812,830,847,863,880,897,913,930,947,963,979,1013]},{"start":[897,533],"end":[235,66],"points":[[897,533],[886,533],[842,527],[763,515],[644,481],[560,443],[476,393],[440,364],[410,330],[396,304],[392,289],[391,289],[374,272],[363,255],[345,227],[324,193],[306,162],[296,143],[286,123],[279,109],[276,101],[271,92],[269,89],[267,86],[265,84],[262,81],[259,78],[255,76],[252,74],[246,71],[243,68],[241,68],[238,66],[237,66],[236,66],[235,66],[235,66]],"dx":[-662,-467],"dy":[-662,-467],"length":864.518858474724,"timing":[273,297,313,330,346,363,379,396,413,429,446,670,696,712,730,747,763,780,796,813,830,846,863,879,897,914,930,946,962,980,997,1014,1030,1046,1063,1081,1112]},{"start":[235,67],"end":[295,261],"points":[[235,67],[236,67],[236,67],[237,67],[237,67],[238,67],[238,67],[238,67],[239,68],[239,68],[242,72],[243,79],[246,95],[247,107],[249,124],[251,140],[252,152],[253,158],[255,164],[256,171],[258,177],[261,185],[264,193],[269,205],[273,215],[276,222],[280,230],[283,235],[287,241],[289,244],[290,248],[291,251],[292,254],[293,256],[294,258],[294,259],[295,259],[295,260],[295,261],[295,261]],"dx":[60,194],"dy":[60,194],"length":208.8777751189393,"timing":[128,135,146,163,180,196,213,241,263,280,297,313,330,346,363,380,397,412,430,446,464,480,497,513,530,547,564,580,596,613,630,647,664,680,697,713,730,747,763,797]},{"start":[296,261],"end":[983,558],"points":[[296,261],[298,261],[316,261],[351,262],[419,282],[482,303],[563,329],[607,343],[654,356],[691,367],[723,378],[750,389],[770,398],[789,407],[803,413],[809,416],[818,420],[825,423],[831,427],[837,432],[843,437],[852,445],[861,452],[871,459],[880,466],[886,471],[892,477],[903,487],[912,495],[923,506],[930,513],[936,518],[939,521],[941,523],[941,523],[942,523],[945,525],[949,527],[953,529],[957,533],[959,534],[962,537],[963,539],[964,540],[966,543],[970,547],[974,550],[977,554],[980,556],[981,557],[982,558],[982,558],[982,558],[982,558],[982,558],[983,558],[983,558]],"dx":[687,297],"dy":[687,297],"length":765.7198637636862,"timing":[282,297,314,330,346,363,380,397,414,430,447,463,481,497,513,530,546,563,580,597,613,630,647,663,680,697,713,730,746,763,780,797,813,830,847,863,880,897,913,930,947,963,980,997,1014,1030,1046,1064,1080,1097,1113,1130,1147,1165,1188,1214,1246]},{"start":[978,558],"end":[446,356],"points":[[978,558],[974,558],[966,556],[926,542],[905,531],[854,506],[800,474],[731,434],[666,399],[628,381],[586,362],[556,350],[538,345],[521,339],[507,336],[496,335],[490,335],[483,335],[471,336],[465,337],[461,337],[457,339],[456,339],[455,340],[454,341],[453,343],[452,346],[451,349],[449,352],[448,354],[447,355],[447,356],[446,356]],"dx":[-532,-202],"dy":[-532,-202],"length":595.2494497170015,"timing":[385,399,415,432,449,465,482,498,516,532,549,565,581,599,615,632,649,665,682,698,715,731,749,766,782,798,815,831,849,865,881,898,932]},{"start":[448,357],"end":[710,747],"points":[[448,357],[450,362],[454,378],[461,401],[468,427],[477,453],[489,476],[498,490],[508,504],[512,509],[528,522],[539,529],[556,539],[578,555],[595,570],[607,581],[621,595],[631,606],[636,612],[642,620],[647,627],[650,633],[654,640],[657,647],[660,654],[664,661],[669,668],[671,673],[674,677],[677,683],[677,686],[678,688],[679,692],[682,700],[689,713],[694,723],[700,732],[705,740],[708,744],[709,746],[710,747],[710,747],[710,747],[710,747]],"dx":[262,390],"dy":[262,390],"length":483.66920575914264,"timing":[403,413,429,446,463,480,496,513,529,547,563,580,596,612,630,646,663,679,696,712,729,745,763,779,796,813,829,847,863,879,896,912,930,945,963,980,996,1013,1029,1046,1063,1079,1095,1131]},{"start":[710,747],"end":[1524,465],"points":[[710,747],[717,735],[726,720],[743,698],[766,678],[807,654],[845,646],[876,644],[884,644],[885,644],[897,643],[952,641],[1031,641],[1146,645],[1202,646],[1261,646],[1301,640],[1320,637],[1338,632],[1350,627],[1359,622],[1364,616],[1369,610],[1375,602],[1382,594],[1391,586],[1401,577],[1415,562],[1429,547],[1439,533],[1451,517],[1460,507],[1469,500],[1475,497],[1484,493],[1493,488],[1502,481],[1510,474],[1515,470],[1519,467],[1521,465],[1522,465],[1522,465],[1523,465],[1523,465],[1524,465],[1524,465],[1524,465],[1524,465]],"dx":[814,-282],"dy":[814,-282],"length":924.8480733837217,"timing":[307,333,349,366,383,400,416,433,449,727,749,766,783,800,816,833,849,865,883,899,916,932,949,966,983,1000,1016,1033,1049,1066,1083,1099,1116,1132,1150,1166,1183,1199,1216,1233,1249,1266,1282,1300,1316,1333,1349,1365,1399]},{"start":[1524,467],"end":[990,292],"points":[[1524,467],[1517,467],[1503,470],[1486,472],[1465,474],[1429,474],[1391,461],[1344,437],[1295,403],[1247,367],[1220,347],[1196,333],[1173,322],[1153,315],[1131,310],[1100,300],[1077,289],[1060,280],[1041,272],[1027,265],[1021,264],[1015,262],[1013,262],[1011,262],[1010,262],[1010,262],[1008,263],[1005,264],[1001,266],[998,268],[996,271],[995,272],[995,272],[995,275],[994,278],[993,283],[992,286],[991,290],[990,291],[990,292],[990,292]],"dx":[-534,-175],"dy":[-534,-175],"length":609.1726669645154,"timing":[256,282,298,314,332,348,364,381,398,414,431,448,464,481,497,514,531,548,565,581,597,614,631,647,664,681,697,715,731,748,765,782,798,814,831,848,865,881,897,915,931]},{"start":[989,292],"end":[346,135],"points":[[989,292],[978,297],[969,301],[959,304],[934,309],[875,308],[753,269],[686,245],[586,213],[537,202],[494,190],[465,181],[441,172],[420,163],[406,157],[393,152],[383,148],[374,145],[367,142],[360,139],[353,137],[349,136],[348,135],[347,135],[347,135],[346,135],[346,135]],"dx":[-643,-157],"dy":[-643,-157],"length":674.2942406997286,"timing":[342,365,382,398,415,430,448,464,482,498,514,531,548,565,581,597,615,631,648,664,681,698,715,731,748,764,780]},{"start":[347,135],"end":[1474,371],"points":[[347,135],[349,135],[355,136],[366,139],[400,145],[440,151],[515,163],[570,174],[667,201],[768,239],[892,288],[1023,335],[1142,367],[1210,383],[1264,393],[1312,404],[1331,408],[1348,415],[1354,417],[1354,416],[1354,413],[1359,408],[1363,405],[1369,401],[1382,395],[1401,389],[1421,383],[1437,380],[1449,376],[1461,374],[1469,372],[1471,372],[1472,371],[1473,371],[1473,371],[1473,371],[1474,371],[1474,371],[1474,371],[1474,371]],"dx":[1127,236],"dy":[1127,236],"length":1182.1387182084538,"timing":[302,315,332,348,365,381,398,414,432,448,464,482,498,515,531,548,565,582,597,804,814,831,848,864,881,898,915,930,948,965,982,998,1015,1031,1048,1087,1103,1119,1131,1148]},{"start":[1473,371],"end":[480,593],"points":[[1473,371],[1471,371],[1460,376],[1441,385],[1388,405],[1322,423],[1234,436],[1112,453],[983,475],[902,492],[817,509],[751,521],[710,528],[667,537],[630,546],[601,555],[584,560],[567,565],[551,570],[538,574],[526,577],[517,580],[507,583],[501,585],[497,587],[492,589],[488,590],[484,591],[482,591],[481,592],[480,593],[480,593]],"dx":[-993,222],"dy":[-993,222],"length":1021.0177201869565,"timing":[262,277,293,310,327,343,359,376,393,409,427,443,460,476,493,509,527,543,560,577,593,610,626,643,660,676,693,710,726,743,759,776]},{"start":[480,593],"end":[842,603],"points":[[480,593],[495,589],[511,585],[534,579],[557,574],[581,572],[606,571],[631,571],[648,571],[667,572],[683,573],[697,574],[717,577],[735,580],[759,584],[787,591],[801,596],[845,615],[855,620],[863,624],[867,625],[868,626],[868,626],[869,626],[869,624],[869,623],[870,621],[868,618],[862,614],[855,611],[850,608],[844,605],[843,604],[842,604],[842,603],[842,603]],"dx":[362,10],"dy":[362,10],"length":440.26161498767374,"timing":[358,381,398,414,432,448,464,481,498,515,531,548,565,582,601,613,632,648,665,682,697,715,731,795,815,831,848,865,881,898,915,932,948,965,982,998]},{"start":[842,603],"end":[855,473],"points":[[842,603],[843,603],[844,599],[847,593],[850,584],[854,572],[859,552],[861,539],[862,532],[863,525],[863,521],[863,519],[863,517],[863,517],[863,515],[863,510],[862,505],[860,498],[859,493],[858,489],[858,487],[857,486],[857,486],[857,485],[857,485],[856,480],[856,477],[856,474],[855,473],[855,473]],"dx":[13,-130],"dy":[13,-130],"length":135.40656454950357,"timing":[300,312,329,345,362,378,396,412,428,446,462,478,495,511,529,545,562,578,596,612,628,645,662,679,695,712,729,746,762,779]},{"start":[855,473],"end":[755,94],"points":[[855,473],[855,472],[854,453],[847,415],[820,335],[798,269],[780,213],[772,180],[768,160],[766,145],[766,138],[766,135],[766,133],[766,132],[765,129],[763,124],[760,115],[759,107],[757,102],[756,98],[756,95],[756,95],[756,94],[755,94],[755,94]],"dx":[-100,-379],"dy":[-100,-379],"length":394.5804160038766,"timing":[45,437,462,479,495,512,529,545,562,579,595,612,629,645,662,679,696,712,729,745,763,779,796,817,905]},{"start":[755,95],"end":[895,333],"points":[[755,95],[755,99],[755,107],[755,118],[757,137],[762,154],[770,173],[783,192],[798,212],[813,227],[830,244],[847,262],[866,282],[874,291],[883,303],[890,315],[897,327],[902,338],[903,341],[904,351],[904,355],[904,357],[904,358],[904,359],[904,359],[904,359],[902,355],[899,347],[896,341],[895,337],[895,335],[895,334],[895,334],[895,334],[895,333],[895,333]],"dx":[140,238],"dy":[140,238],"length":342.03130563723937,"timing":[282,297,315,331,347,364,381,397,414,431,447,465,481,497,514,531,548,564,588,614,631,647,664,680,697,792,815,831,847,864,881,897,914,930,948,997]},{"start":[894,333],"end":[222,240],"points":[[894,333],[892,334],[887,337],[875,341],[856,345],[826,351],[750,354],[693,350],[630,338],[570,326],[504,313],[424,301],[356,290],[316,283],[273,276],[242,270],[224,266],[206,261],[190,257],[179,254],[173,254],[168,253],[166,253],[166,253],[166,253],[167,253],[170,252],[175,252],[182,251],[191,250],[201,250],[209,248],[213,247],[218,244],[220,243],[221,242],[221,241],[222,240],[222,240],[222,240]],"dx":[-672,-93],"dy":[-672,-93],"length":799.7106358567752,"timing":[247,267,283,301,317,334,350,367,384,400,417,433,450,467,483,500,518,534,551,567,583,601,617,633,675,701,717,733,751,767,784,800,816,833,850,867,884,900,917,950]},{"start":[222,241],"end":[610,741],"points":[[222,241],[223,241],[224,243],[227,248],[232,259],[239,273],[248,292],[267,332],[302,391],[346,456],[390,510],[447,570],[482,603],[520,635],[537,648],[552,661],[564,674],[571,680],[576,687],[584,695],[591,704],[598,710],[601,715],[604,720],[606,724],[607,726],[607,731],[608,733],[609,736],[610,739],[610,740],[610,740],[610,741],[610,741]],"dx":[388,500],"dy":[388,500],"length":642.0296361938584,"timing":[314,331,348,364,380,397,413,430,447,464,480,497,514,531,547,564,581,597,614,630,647,664,681,697,712,731,747,763,780,799,814,831,847,863]},{"start":[610,740],"end":[453,289],"points":[[610,740],[606,729],[594,699],[576,659],[551,606],[527,551],[513,518],[496,470],[491,446],[488,433],[486,417],[486,415],[485,402],[484,399],[484,397],[484,396],[484,393],[484,390],[486,376],[490,363],[492,351],[494,340],[495,335],[496,333],[496,332],[496,332],[496,330],[496,326],[496,319],[495,313],[492,305],[487,299],[481,295],[473,291],[468,290],[461,289],[457,289],[454,289],[454,289],[453,289],[453,289]],"dx":[-157,-451],"dy":[-157,-451],"length":505.62539177198147,"timing":[314,333,351,367,383,400,417,434,450,467,484,500,518,534,550,567,591,601,617,633,651,667,684,700,717,734,750,767,784,800,817,834,851,867,884,900,916,933,951,967,1001]},{"start":[453,289],"end":[968,426],"points":[[453,289],[453,289],[453,290],[456,290],[461,291],[473,292],[483,294],[500,296],[521,298],[534,301],[556,307],[573,312],[591,318],[612,325],[634,332],[657,340],[690,351],[714,360],[738,372],[763,385],[771,389],[785,395],[792,398],[798,400],[802,401],[809,402],[816,403],[825,404],[836,405],[847,405],[856,405],[860,404],[864,403],[866,402],[876,402],[882,402],[932,414],[942,415],[952,419],[968,426]],"dx":[515,137],"dy":[515,137],"length":540.0607253549344,"timing":[248,281,304,330,347,363,380,396,414,430,447,463,480,497,513,530,546,564,580,596,613,630,647,664,680,697,713,730,747,763,780,796,814,830,847,864,880,896,914,930]},{"start":[967,426],"end":[193,720],"points":[[967,426],[965,427],[957,434],[949,440],[907,472],[867,496],[794,527],[739,546],[653,572],[577,597],[501,619],[431,641],[371,661],[336,674],[309,685],[287,696],[272,704],[261,708],[252,710],[241,711],[229,712],[218,713],[208,714],[202,715],[199,716],[196,716],[195,717],[194,717],[194,718],[194,718],[194,719],[194,719],[193,720],[193,720],[193,720],[193,720]],"dx":[-774,294],"dy":[-774,294],"length":836.6739507985944,"timing":[336,351,367,383,401,417,433,450,466,484,500,517,533,550,567,583,600,617,633,650,667,683,700,716,733,750,767,783,800,816,834,849,867,883,901,933]},{"start":[194,719],"end":[1512,732],"points":[[194,719],[215,707],[251,686],[288,667],[333,652],[390,647],[482,649],[565,668],[664,692],[770,712],[843,719],[918,721],[1011,721],[1070,722],[1136,733],[1234,760],[1252,765],[1253,764],[1262,761],[1275,757],[1282,754],[1326,745],[1359,740],[1401,734],[1413,732],[1427,730],[1441,727],[1449,726],[1458,725],[1462,725],[1465,725],[1467,725],[1469,725],[1472,725],[1476,727],[1481,730],[1485,731],[1489,732],[1492,732],[1495,732],[1498,732],[1501,732],[1505,732],[1508,732],[1510,732],[1511,732],[1512,732]],"dx":[1318,13],"dy":[1318,13],"length":1352.7550000621688,"timing":[390,416,433,449,465,483,499,516,533,549,568,583,600,616,633,649,667,999,1017,1034,1051,1066,1083,1103,1117,1133,1149,1165,1183,1199,1215,1233,1249,1266,1282,1300,1316,1333,1349,1366,1383,1400,1417,1433,1449,1466,1516]},{"start":[1511,732],"end":[1102,711],"points":[[1511,732],[1511,732],[1510,732],[1508,731],[1505,730],[1499,728],[1492,725],[1483,723],[1476,719],[1468,716],[1444,708],[1409,703],[1381,703],[1345,703],[1324,704],[1302,709],[1288,712],[1279,716],[1272,720],[1264,723],[1256,726],[1248,729],[1238,732],[1226,733],[1210,735],[1190,735],[1171,734],[1151,729],[1139,726],[1130,722],[1123,719],[1116,716],[1111,714],[1106,712],[1103,711],[1102,711],[1102,711]],"dx":[-409,-21],"dy":[-409,-21],"length":422.89438305940445,"timing":[100,112,128,144,161,178,195,212,228,244,261,278,295,311,328,345,361,378,394,411,428,445,460,478,495,511,528,544,561,578,595,611,628,644,661,678,711]},{"start":[1100,711],"end":[207,240],"points":[[1100,711],[1068,701],[990,670],[890,619],[825,582],[787,558],[684,492],[609,448],[540,410],[479,372],[444,347],[409,318],[391,301],[371,286],[355,278],[350,276],[341,273],[338,272],[335,272],[334,272],[331,272],[329,272],[326,273],[324,274],[322,274],[320,273],[320,269],[320,268],[319,268],[311,266],[300,261],[289,257],[273,252],[255,246],[247,243],[241,240],[237,239],[236,239],[235,239],[233,239],[230,240],[227,240],[224,240],[223,240],[222,240],[222,240],[222,240],[221,240],[221,240],[221,240],[220,240],[218,240],[215,240],[213,240],[211,240],[209,240],[207,240],[207,240]],"dx":[-893,-471],"dy":[-893,-471],"length":1025.4667631216892,"timing":[422,447,464,480,497,513,531,547,564,581,598,613,631,648,664,679,697,713,731,747,764,780,797,814,831,847,864,880,1110,1130,1147,1164,1180,1196,1214,1231,1247,1264,1280,1297,1314,1331,1347,1364,1380,1414,1510,1528,1693,1701,1714,1730,1747,1763,1779,1797,1814,1830]},{"start":[208,240],"end":[485,305],"points":[[208,240],[214,240],[222,242],[228,243],[254,250],[271,254],[289,260],[310,265],[332,268],[353,270],[380,271],[388,272],[409,277],[420,282],[430,287],[435,289],[441,291],[445,292],[447,293],[449,293],[451,294],[455,294],[460,296],[467,298],[473,300],[477,302],[480,303],[483,304],[485,305],[485,305],[485,305]],"dx":[277,65],"dy":[277,65],"length":286.8371124448198,"timing":[297,315,331,348,364,381,398,415,431,448,465,481,498,514,531,548,565,581,598,614,632,648,665,681,698,714,732,748,765,782,815]},{"start":[485,306],"end":[528,444],"points":[[485,306],[485,308],[484,312],[483,318],[483,326],[483,337],[483,349],[483,363],[484,377],[487,390],[492,401],[496,410],[500,419],[505,426],[508,430],[513,436],[516,440],[520,445],[522,447],[524,451],[525,452],[526,453],[526,453],[526,453],[526,453],[526,452],[527,450],[527,449],[527,448],[528,447],[528,447],[528,446],[528,446],[528,445],[528,444]],"dx":[43,138],"dy":[43,138],"length":168.9589335695942,"timing":[250,266,283,300,316,332,350,366,383,399,417,434,450,466,483,500,517,533,548,566,583,600,616,1139,1149,1166,1182,1200,1217,1233,1250,1265,1284,1299,1333]},{"start":[529,444],"end":[1287,733],"points":[[529,444],[543,449],[549,452],[599,466],[650,481],[710,500],[769,520],[810,536],[881,563],[929,583],[978,604],[1026,625],[1056,640],[1092,656],[1120,666],[1143,673],[1165,679],[1189,684],[1200,686],[1209,688],[1214,688],[1216,688],[1217,688],[1218,688],[1219,688],[1219,688],[1219,688],[1220,688],[1222,689],[1226,695],[1232,703],[1235,708],[1238,712],[1240,714],[1240,716],[1241,716],[1241,716],[1241,716],[1241,716],[1242,716],[1242,716],[1242,716],[1243,716],[1246,718],[1257,721],[1267,725],[1275,728],[1281,731],[1285,732],[1286,733],[1287,733],[1287,733]],"dx":[758,289],"dy":[758,289],"length":820.669238711421,"timing":[579,601,617,635,651,667,684,704,718,734,751,768,784,801,817,835,851,868,885,901,917,934,951,968,984,1001,1017,1055,1068,1084,1101,1117,1134,1151,1168,1184,1209,1240,1257,1289,1301,1317,1334,1351,1368,1384,1401,1417,1434,1451,1467,1484]},{"start":[1287,733],"end":[906,731],"points":[[1287,733],[1286,733],[1285,733],[1280,730],[1271,724],[1259,715],[1251,708],[1245,703],[1240,700],[1239,699],[1238,699],[1236,699],[1234,698],[1230,698],[1224,697],[1211,697],[1191,697],[1166,697],[1137,697],[1096,699],[1090,701],[1070,705],[1054,709],[1042,712],[1033,713],[1021,714],[1013,714],[1003,714],[992,714],[985,714],[975,715],[968,716],[961,717],[952,718],[944,720],[936,723],[929,725],[921,728],[915,729],[910,730],[907,730],[906,731],[906,731],[906,731]],"dx":[-381,-2],"dy":[-381,-2],"length":396.8378217698081,"timing":[26,33,47,63,79,96,113,129,147,163,179,196,212,229,246,263,279,296,313,332,346,363,380,396,413,429,446,462,479,496,512,529,546,563,579,596,612,630,646,663,679,697,711,729]},{"start":[905,731],"end":[391,60],"points":[[905,731],[905,731],[904,731],[903,731],[902,730],[901,730],[899,729],[893,727],[882,721],[843,692],[778,635],[701,550],[625,448],[582,377],[539,301],[518,261],[489,201],[478,171],[472,152],[466,132],[462,117],[459,105],[457,96],[455,89],[455,80],[455,80],[451,80],[444,78],[438,75],[432,72],[421,67],[412,63],[406,61],[400,60],[395,59],[392,59],[391,59],[391,59],[391,60],[391,60]],"dx":[-514,-671],"dy":[-514,-671],"length":879.881022770279,"timing":[250,267,283,300,317,334,349,367,383,399,417,432,449,467,483,500,516,533,550,567,583,600,617,632,649,922,933,950,967,984,1000,1016,1033,1050,1067,1083,1099,1117,1133,1183]},{"start":[391,60],"end":[1026,781],"points":[[391,60],[393,60],[394,60],[398,61],[404,62],[415,64],[419,65],[431,68],[440,71],[449,75],[465,80],[485,86],[525,100],[573,117],[628,143],[685,177],[758,238],[822,303],[899,380],[954,431],[992,466],[1020,492],[1045,515],[1067,541],[1076,559],[1085,578],[1094,602],[1106,626],[1113,640],[1119,654],[1121,662],[1123,670],[1123,677],[1123,684],[1121,692],[1118,702],[1115,712],[1112,720],[1109,726],[1103,733],[1093,739],[1085,742],[1075,746],[1067,749],[1061,752],[1053,756],[1049,759],[1044,762],[1039,766],[1036,768],[1033,771],[1031,772],[1030,773],[1029,774],[1028,776],[1027,778],[1027,780],[1026,780],[1026,781]],"dx":[635,721],"dy":[635,721],"length":1148.8984018407186,"timing":[108,115,131,147,164,180,197,214,231,247,264,280,297,313,331,347,364,381,397,414,431,447,464,480,497,513,530,546,564,580,597,613,631,647,664,680,697,715,729,747,763,780,797,814,831,847,863,880,896,914,931,947,963,980,997,1014,1030,1047,1080]},{"start":[1026,781],"end":[129,234],"points":[[1026,781],[1023,781],[1013,777],[994,769],[974,761],[950,751],[909,732],[847,698],[769,653],[653,580],[523,483],[384,371],[307,302],[258,251],[226,202],[213,170],[212,170],[205,176],[201,180],[197,184],[189,190],[180,197],[170,205],[161,211],[154,215],[149,218],[143,220],[138,222],[132,225],[130,228],[129,229],[129,231],[129,233],[129,233],[129,234]],"dx":[-897,-547],"dy":[-897,-547],"length":1141.7116678990228,"timing":[318,330,347,363,380,397,413,430,447,464,480,497,513,530,546,563,855,880,897,913,930,947,963,981,997,1013,1029,1046,1063,1080,1097,1113,1131,1146,1180]},{"start":[129,234],"end":[484,606],"points":[[129,234],[130,234],[133,234],[135,233],[138,232],[141,231],[145,230],[150,228],[157,226],[166,224],[176,224],[189,224],[205,232],[220,244],[236,261],[254,283],[275,309],[299,338],[335,378],[356,399],[384,428],[435,472],[480,506],[506,521],[538,540],[555,550],[568,558],[578,564],[581,566],[582,567],[583,567],[583,568],[582,568],[580,569],[577,570],[567,572],[563,573],[554,574],[543,575],[531,577],[521,578],[515,579],[508,581],[504,583],[499,586],[495,589],[493,591],[490,595],[487,599],[485,603],[484,605],[484,606],[484,606]],"dx":[355,372],"dy":[355,372],"length":702.2230993835911,"timing":[94,110,126,142,159,176,193,209,225,243,259,276,293,309,325,342,360,376,392,409,425,443,459,476,492,508,525,543,558,576,592,620,643,659,675,706,709,725,742,759,775,792,809,826,843,859,876,892,908,926,942,959,992]},{"start":[484,605],"end":[1145,177],"points":[[484,605],[484,605],[484,605],[484,604],[484,603],[484,603],[484,602],[484,602],[484,602],[484,601],[485,600],[488,594],[496,581],[509,561],[534,526],[554,505],[596,467],[634,441],[681,421],[760,404],[843,398],[900,397],[949,393],[994,385],[1029,369],[1053,351],[1062,340],[1076,322],[1087,306],[1097,289],[1102,278],[1109,265],[1115,252],[1120,242],[1125,233],[1129,225],[1132,217],[1134,211],[1135,204],[1137,199],[1138,194],[1139,192],[1141,188],[1142,187],[1143,185],[1143,183],[1144,181],[1144,180],[1145,179],[1145,178],[1145,178],[1145,178],[1145,177],[1145,177],[1145,177],[1145,177]],"dx":[661,-428],"dy":[661,-428],"length":860.5735081683833,"timing":[81,96,104,117,133,149,166,183,209,267,283,300,316,333,350,367,383,400,416,433,450,466,482,499,517,533,549,566,583,600,616,633,649,667,683,699,716,733,749,767,783,800,816,834,850,866,884,899,916,933,950,967,983,1000,1017,1033]},{"start":[1145,177],"end":[1241,750],"points":[[1145,177],[1144,177],[1144,177],[1143,177],[1143,177],[1143,177],[1142,177],[1142,177],[1141,178],[1140,182],[1139,190],[1139,211],[1151,241],[1171,284],[1187,317],[1198,344],[1207,370],[1215,402],[1217,430],[1217,430],[1217,436],[1217,446],[1217,458],[1219,494],[1222,528],[1224,561],[1226,596],[1226,627],[1227,657],[1228,683],[1229,699],[1230,717],[1232,725],[1233,731],[1233,734],[1234,735],[1234,735],[1234,736],[1234,740],[1235,743],[1236,746],[1236,748],[1236,749],[1237,749],[1237,749],[1238,749],[1238,749],[1239,749],[1239,749],[1239,749],[1240,749],[1240,749],[1241,750],[1241,750]],"dx":[96,573],"dy":[96,573],"length":597.6150791150792,"timing":[126,134,149,163,180,197,214,279,297,314,330,346,363,380,401,414,430,447,463,766,780,797,813,830,846,863,880,897,914,930,947,963,981,997,1013,1029,1046,1063,1080,1097,1114,1130,1147,1162,1180,1197,1214,1230,1246,1264,1280,1297,1313,1347]},{"start":[1241,750],"end":[866,646],"points":[[1241,750],[1241,749],[1241,749],[1240,749],[1241,749],[1241,749],[1242,749],[1243,750],[1243,750],[1244,750],[1243,750],[1240,750],[1236,748],[1215,744],[1179,739],[1126,730],[1060,716],[1020,706],[976,693],[942,681],[926,675],[908,670],[901,667],[893,664],[891,664],[890,663],[889,663],[888,662],[885,659],[882,658],[877,654],[874,651],[870,649],[867,647],[866,646]],"dx":[-375,-104],"dy":[-375,-104],"length":402.3038881533145,"timing":[97,104,120,136,209,217,233,251,267,304,317,334,350,367,383,400,417,433,451,467,483,499,516,534,550,567,604,616,633,650,667,684,700,716,733]},{"start":[866,645],"end":[1039,515],"points":[[866,645],[878,636],[890,626],[912,609],[937,591],[959,576],[974,567],[991,556],[1004,545],[1015,536],[1024,528],[1028,523],[1031,519],[1033,517],[1034,516],[1034,516],[1035,516],[1035,516],[1036,516],[1036,516],[1037,516],[1038,516],[1038,516],[1039,516],[1039,516],[1039,515],[1039,515]],"dx":[173,-130],"dy":[173,-130],"length":218.52700310229164,"timing":[592,616,634,650,666,684,700,717,733,750,766,783,800,816,833,849,867,890,917,933,950,966,983,1000,1017,1033,1066]},{"start":[1041,515],"end":[1256,394],"points":[[1041,515],[1051,512],[1068,506],[1095,496],[1125,484],[1153,471],[1178,457],[1191,448],[1205,435],[1216,424],[1225,413],[1234,406],[1239,402],[1248,397],[1252,396],[1254,395],[1255,395],[1256,395],[1256,394]],"dx":[215,-121],"dy":[215,-121],"length":251.2402707690379,"timing":[400,418,435,452,468,484,502,518,535,551,568,585,602,618,634,651,668,685,702]},{"start":[1256,394],"end":[1465,668],"points":[[1256,394],[1256,394],[1255,394],[1255,395],[1255,405],[1264,431],[1285,470],[1320,513],[1348,536],[1365,553],[1379,570],[1383,574],[1384,576],[1385,576],[1391,582],[1400,591],[1410,601],[1425,615],[1437,626],[1442,631],[1448,636],[1450,637],[1451,638],[1451,638],[1452,639],[1452,641],[1454,646],[1457,652],[1459,657],[1462,661],[1463,665],[1464,666],[1465,667],[1465,668]],"dx":[209,274],"dy":[209,274],"length":354.9727005357395,"timing":[103,119,143,305,330,346,363,379,397,413,430,446,464,726,746,763,780,796,813,830,847,863,879,897,913,929,946,963,980,996,1013,1030,1047,1063]},{"start":[1465,668],"end":[837,199],"points":[[1465,668],[1458,667],[1450,665],[1426,656],[1394,638],[1333,592],[1256,520],[1163,425],[1099,361],[1048,315],[998,276],[965,253],[929,233],[920,227],[908,221],[888,209],[879,203],[875,201],[864,192],[856,186],[850,183],[844,181],[840,180],[838,180],[837,180],[837,180],[837,181],[837,182],[837,183],[836,185],[836,186],[836,190],[836,192],[836,195],[836,197],[837,199],[837,199]],"dx":[-628,-469],"dy":[-628,-469],"length":823.1211477397412,"timing":[304,329,347,363,379,396,412,430,446,463,479,495,514,529,546,563,580,597,612,630,646,663,679,696,713,730,746,762,778,796,813,829,846,863,879,896,962]},{"start":[837,199],"end":[1372,46],"points":[[837,199],[850,193],[864,188],[886,180],[932,164],[977,150],[1027,136],[1080,123],[1132,113],[1167,107],[1208,102],[1229,100],[1250,98],[1265,98],[1276,97],[1284,95],[1288,94],[1293,92],[1296,91],[1300,88],[1303,85],[1307,81],[1309,78],[1313,75],[1315,73],[1319,70],[1327,66],[1339,58],[1350,51],[1358,48],[1365,46],[1369,45],[1371,45],[1372,45],[1372,45],[1372,46],[1372,46]],"dx":[535,-153],"dy":[535,-153],"length":565.5228983377784,"timing":[393,415,431,448,464,480,497,513,530,548,563,581,596,614,631,648,663,680,697,714,731,747,764,781,797,814,831,848,864,881,897,914,931,948,964,980,1014]},{"start":[1372,46],"end":[818,371],"points":[[1372,46],[1372,46],[1372,46],[1371,46],[1369,48],[1362,55],[1342,74],[1310,102],[1262,137],[1206,175],[1165,199],[1116,225],[1074,244],[1040,259],[1009,273],[984,286],[954,302],[942,309],[930,317],[917,325],[905,331],[894,336],[887,338],[878,340],[873,341],[867,342],[862,344],[858,345],[854,348],[849,350],[845,353],[840,356],[835,359],[831,362],[826,365],[823,367],[821,368],[820,369],[819,370],[819,370],[819,371],[818,371]],"dx":[-554,325],"dy":[-554,325],"length":648.1628781529074,"timing":[124,222,246,263,279,296,313,329,346,362,380,397,413,430,446,462,480,496,512,529,546,562,580,596,612,629,647,663,679,696,712,729,747,763,779,795,813,830,846,863,879,929]},{"start":[847,182],"end":[460,115],"points":[[847,182],[844,182],[839,184],[826,187],[770,190],[687,190],[635,185],[591,175],[546,160],[512,145],[496,137],[487,134],[472,129],[465,128],[461,128],[459,128],[458,128],[458,128],[458,128],[458,128],[458,127],[458,127],[458,126],[458,126],[458,121],[459,118],[459,116],[460,115],[460,115],[460,115]],"dx":[-387,-67],"dy":[-387,-67],"length":413.59931407005257,"timing":[261,284,300,316,334,350,367,383,400,416,433,451,466,483,500,517,534,550,567,583,658,683,717,1242,1267,1283,1300,1316,1334,1367]},{"start":[460,115],"end":[485,428],"points":[[460,115],[455,133],[446,160],[439,185],[432,217],[427,254],[425,274],[425,293],[425,309],[427,322],[431,337],[436,356],[443,375],[450,394],[456,405],[463,418],[467,423],[472,426],[477,428],[479,428],[480,428],[481,428],[482,428],[483,428],[484,428],[484,428],[485,428],[485,428]],"dx":[25,313],"dy":[25,313],"length":340.03123534806366,"timing":[366,382,398,415,432,449,465,482,499,515,532,549,565,582,598,615,632,649,665,681,698,716,732,749,765,781,798,831]},{"start":[486,428],"end":[1350,580],"points":[[486,428],[497,430],[511,433],[547,441],[597,449],[655,457],[718,462],[778,465],[840,467],[905,470],[971,478],[1041,489],[1146,512],[1189,523],[1231,530],[1253,533],[1276,534],[1292,535],[1299,535],[1304,535],[1306,535],[1309,535],[1313,535],[1318,535],[1322,536],[1326,538],[1328,539],[1329,539],[1330,540],[1330,540],[1332,545],[1334,550],[1336,554],[1337,558],[1338,560],[1339,561],[1340,563],[1344,568],[1347,572],[1349,576],[1350,578],[1350,579],[1350,579],[1350,580]],"dx":[864,152],"dy":[864,152],"length":899.5968904532289,"timing":[437,463,480,496,513,530,547,564,580,596,613,629,646,663,680,696,713,729,746,764,780,796,814,830,846,862,880,897,914,930,946,964,980,996,1013,1029,1046,1063,1080,1097,1113,1129,1146,1180]},{"start":[1093,740],"end":[423,736],"points":[[1093,740],[1082,741],[1062,743],[999,743],[947,743],[883,743],[812,743],[744,747],[682,750],[642,750],[602,750],[580,748],[559,746],[551,745],[535,744],[527,744],[520,744],[515,744],[507,744],[498,743],[492,741],[487,741],[482,741],[478,741],[476,741],[474,741],[473,742],[470,742],[465,742],[457,739],[450,736],[445,734],[440,733],[436,733],[435,733],[432,734],[431,734],[429,735],[428,735],[426,736],[424,736],[424,736],[423,736]],"dx":[-670,-4],"dy":[-670,-4],"length":673.6869471766962,"timing":[290,314,331,348,365,381,398,414,431,448,464,481,498,515,531,547,564,582,598,615,631,647,665,681,698,715,731,748,765,781,798,814,831,848,865,881,897,914,930,948,964,981,1015]},{"start":[423,736],"end":[925,98],"points":[[423,736],[423,733],[426,723],[439,693],[460,654],[488,609],[524,562],[562,518],[598,478],[637,435],[674,389],[728,314],[750,286],[774,257],[787,243],[801,228],[811,217],[822,203],[831,188],[841,172],[845,165],[850,156],[853,152],[854,151],[854,150],[855,150],[855,149],[856,145],[859,140],[870,123],[883,107],[896,92],[904,84],[910,80],[913,78],[915,78],[915,78],[916,78],[916,79],[916,79],[916,80],[916,82],[917,85],[918,87],[919,90],[921,92],[923,96],[924,97],[925,98]],"dx":[502,-638],"dy":[502,-638],"length":852.2550048692209,"timing":[302,313,329,346,362,379,395,412,429,446,463,479,495,512,529,546,563,579,596,612,629,646,661,678,696,713,729,746,762,779,795,812,829,846,861,879,894,912,928,946,962,979,996,1013,1029,1046,1062,1080,1112]},{"start":[924,96],"end":[1290,715],"points":[[924,96],[925,100],[929,108],[937,121],[953,143],[980,183],[1004,221],[1026,264],[1041,293],[1060,329],[1076,363],[1095,396],[1113,426],[1132,457],[1151,486],[1174,515],[1208,555],[1239,589],[1274,627],[1287,641],[1292,648],[1297,653],[1298,655],[1299,655],[1299,657],[1300,660],[1302,667],[1303,671],[1303,676],[1303,681],[1303,684],[1301,687],[1300,690],[1298,693],[1298,694],[1297,697],[1295,701],[1294,704],[1293,707],[1292,710],[1291,712],[1291,714],[1290,715],[1290,715],[1290,715]],"dx":[366,619],"dy":[366,619],"length":740.9753936569776,"timing":[448,463,478,496,513,529,545,562,579,595,613,628,645,662,680,696,712,728,746,763,779,796,813,829,845,862,879,895,912,929,946,961,979,994,1012,1029,1046,1062,1078,1096,1112,1130,1146,1162,1195]},{"start":[1180,715],"end":[901,858],"points":[[1180,715],[1167,722],[1158,729],[1139,743],[1115,762],[1088,781],[1063,799],[1039,812],[1016,824],[999,830],[976,837],[960,842],[947,847],[937,850],[929,853],[922,855],[915,856],[910,857],[904,858],[903,858],[901,858],[901,858]],"dx":[-279,143],"dy":[-279,143],"length":317.71390362201174,"timing":[317,340,357,373,390,407,423,440,457,472,491,507,524,540,556,574,589,607,623,640,657,674]},{"start":[900,857],"end":[321,65],"points":[[900,857],[894,851],[863,821],[808,766],[731,696],[678,646],[584,554],[533,498],[488,440],[446,377],[411,313],[384,253],[372,219],[364,198],[358,183],[354,173],[351,168],[350,166],[348,162],[347,157],[346,152],[346,147],[345,144],[345,143],[344,142],[344,139],[344,120],[345,104],[345,86],[345,75],[345,66],[344,62],[343,60],[342,60],[341,59],[340,59],[340,59],[339,59],[339,59],[338,58],[336,58],[333,57],[332,57],[330,57],[329,57],[329,58],[328,59],[328,59],[328,60],[328,61],[328,62],[327,63],[327,64],[327,65],[327,66],[326,66],[325,66],[324,66],[323,66],[322,66],[322,65],[321,65]],"dx":[-579,-792],"dy":[-579,-792],"length":1034.4476134053723,"timing":[304,316,333,350,366,383,399,416,432,449,466,482,499,516,533,549,567,583,599,616,633,650,666,683,698,715,732,749,766,783,799,816,833,850,866,882,899,916,933,949,966,983,999,1016,1032,1049,1067,1083,1099,1116,1133,1150,1166,1183,1199,1217,1232,1250,1266,1282,1299,1316]},{"start":[320,65],"end":[316,241],"points":[[320,65],[317,65],[313,65],[310,65],[308,66],[307,66],[307,66],[307,67],[307,67],[308,67],[308,67],[309,67],[309,68],[309,69],[309,71],[309,76],[309,88],[308,98],[308,114],[308,128],[308,140],[308,155],[308,166],[308,172],[308,178],[309,181],[310,183],[310,184],[311,185],[311,186],[311,190],[311,195],[311,200],[312,205],[312,207],[312,209],[313,210],[313,212],[314,214],[314,218],[314,223],[314,228],[314,233],[314,236],[315,239],[315,240],[315,241],[316,241],[316,241]],"dx":[-4,176],"dy":[-4,176],"length":193.01008151229604,"timing":[148,164,181,197,214,230,246,264,280,297,315,330,348,364,380,396,415,431,447,464,480,498,514,531,548,565,581,597,614,631,648,664,681,698,714,730,747,764,781,797,814,831,847,864,880,897,915,930,963]},{"start":[316,241],"end":[98,360],"points":[[316,241],[316,242],[317,242],[317,243],[317,244],[317,244],[317,245],[315,245],[310,246],[305,248],[303,248],[298,250],[298,250],[288,259],[262,280],[223,311],[194,330],[170,344],[147,355],[139,359],[127,362],[125,363],[121,364],[117,364],[116,364],[115,364],[115,364],[115,364],[115,364],[115,363],[115,362],[114,361],[114,361],[114,361],[111,360],[107,360],[103,360],[100,360],[99,360],[98,360]],"dx":[-218,119],"dy":[-218,119],"length":262.76330874349094,"timing":[259,283,299,315,333,348,365,382,399,416,432,449,697,716,732,748,766,782,799,815,832,848,866,881,898,916,932,948,965,982,999,1015,1032,1049,1064,1082,1099,1116,1131,1165]},{"start":[99,360],"end":[1486,757],"points":[[99,360],[105,360],[114,358],[139,356],[165,354],[244,353],[282,353],[359,360],[459,378],[521,391],[599,410],[640,421],[846,476],[962,512],[1148,573],[1252,615],[1325,644],[1373,664],[1404,676],[1440,691],[1460,701],[1477,714],[1491,725],[1500,734],[1506,741],[1507,745],[1507,747],[1507,748],[1506,750],[1506,757],[1509,762],[1511,766],[1513,769],[1513,771],[1512,771],[1505,771],[1499,769],[1494,767],[1491,766],[1490,765],[1490,765],[1490,765],[1490,766],[1489,767],[1488,767],[1487,767],[1487,767],[1487,767],[1486,766],[1486,765],[1486,763],[1486,761],[1486,760],[1486,759],[1486,759],[1486,758],[1486,757],[1486,757],[1486,757],[1486,757]],"dx":[1387,397],"dy":[1387,397],"length":1548.654604163918,"timing":[367,385,402,418,434,451,469,485,501,518,535,551,569,585,602,618,636,652,668,684,702,718,734,752,767,785,801,819,834,852,868,886,902,918,935,951,969,986,1002,1018,1034,1095,1118,1135,1151,1169,1185,1208,1219,1236,1252,1267,1284,1301,1319,1335,1351,1368,1384,1419]},{"start":[1476,756],"end":[506,821],"points":[[1476,756],[1470,756],[1460,759],[1439,764],[1400,775],[1359,786],[1310,798],[1254,810],[1189,821],[1088,829],[1026,829],[948,829],[874,829],[821,831],[782,836],[750,841],[724,847],[709,849],[693,851],[680,852],[669,852],[659,852],[650,852],[642,850],[637,849],[631,849],[626,849],[621,849],[616,847],[608,843],[597,834],[576,813],[560,800],[548,792],[542,790],[536,790],[532,790],[530,790],[528,790],[526,791],[524,792],[522,793],[520,793],[518,794],[517,795],[516,796],[516,797],[516,799],[517,802],[517,802],[517,805],[517,806],[517,807],[517,809],[517,810],[516,810],[515,811],[513,812],[511,814],[509,817],[508,819],[507,820],[507,821],[506,821]],"dx":[-970,65],"dy":[-970,65],"length":1023.3005440659136,"timing":[298,315,331,348,365,382,398,415,432,449,465,481,499,515,532,549,565,582,598,615,632,648,665,682,698,715,732,747,765,782,799,816,831,848,865,881,899,914,932,948,964,981,999,1015,1032,1047,1065,1081,1100,1115,1132,1147,1165,1180,1199,1216,1232,1249,1265,1282,1297,1314,1331,1348]},{"start":[506,819],"end":[536,92],"points":[[506,819],[506,805],[506,785],[504,763],[503,721],[503,699],[503,579],[509,516],[514,463],[517,429],[519,401],[519,392],[519,386],[519,377],[519,360],[521,339],[523,323],[524,312],[525,302],[526,292],[527,279],[531,262],[538,236],[543,221],[548,210],[554,198],[558,192],[562,188],[562,188],[559,180],[555,169],[548,147],[544,131],[541,120],[539,109],[537,105],[537,103],[537,102],[537,101],[537,101],[537,101],[537,100],[537,100],[537,99],[537,99],[537,98],[537,97],[536,93],[536,92],[536,92]],"dx":[30,-727],"dy":[30,-727],"length":739.8036375696819,"timing":[413,434,450,466,483,500,517,533,549,566,584,599,617,634,649,667,683,701,716,732,749,767,784,800,816,834,850,866,1117,1133,1150,1166,1184,1200,1216,1233,1250,1266,1284,1300,1316,1333,1350,1366,1384,1400,1417,1434,1450,1484]},{"start":[536,93],"end":[331,716],"points":[[536,93],[529,110],[507,171],[488,226],[474,275],[455,354],[443,407],[431,462],[419,519],[412,560],[404,604],[400,639],[396,666],[390,704],[388,719],[386,739],[386,749],[385,757],[385,761],[384,763],[383,765],[381,765],[380,766],[378,767],[375,767],[373,767],[369,766],[363,763],[357,757],[349,746],[344,739],[338,730],[335,725],[333,723],[333,721],[332,720],[331,720],[331,719],[331,718],[331,718],[331,717],[331,716]],"dx":[-205,623],"dy":[-205,623],"length":771.6541231714303,"timing":[264,281,298,315,332,348,365,382,398,415,432,448,466,482,499,516,532,548,565,582,599,615,632,648,665,681,699,715,732,749,766,782,798,815,831,849,865,881,898,915,932,967]},{"start":[331,715],"end":[442,360],"points":[[331,715],[331,715],[332,715],[332,714],[332,714],[332,714],[333,714],[333,714],[333,713],[334,713],[334,712],[335,710],[336,708],[338,704],[341,698],[351,675],[364,641],[378,601],[387,569],[397,536],[404,508],[410,483],[416,464],[423,446],[426,437],[429,429],[431,426],[431,424],[432,421],[433,419],[434,418],[435,417],[435,416],[436,416],[437,411],[438,403],[439,397],[441,387],[441,382],[441,378],[442,375],[442,373],[442,371],[442,370],[442,370],[442,369],[442,367],[442,365],[442,362],[442,361],[442,360]],"dx":[111,-355],"dy":[111,-355],"length":377.5128011219592,"timing":[91,100,115,133,149,166,182,203,216,232,249,266,283,300,315,333,349,365,382,399,415,431,450,466,482,499,516,533,548,565,583,599,616,633,650,666,682,699,716,733,748,767,782,798,815,832,849,866,883,898,933]},{"start":[442,360],"end":[305,59],"points":[[442,360],[433,347],[427,337],[393,276],[373,239],[350,196],[340,174],[333,161],[327,150],[325,145],[324,142],[323,140],[321,138],[320,133],[318,128],[317,121],[316,115],[315,107],[315,105],[314,101],[313,99],[313,96],[313,90],[312,85],[311,77],[310,72],[308,67],[307,63],[306,61],[305,60],[305,59],[305,59]],"dx":[-137,-301],"dy":[-137,-301],"length":334.6841476143075,"timing":[540,563,579,596,613,629,646,662,680,696,713,729,746,763,779,795,812,829,845,863,879,897,913,930,946,962,979,995,1013,1029,1046,1063]},{"start":[305,59],"end":[811,98],"points":[[305,59],[306,59],[312,59],[321,59],[338,59],[356,57],[392,56],[437,55],[497,55],[566,59],[662,74],[701,78],[744,81],[769,81],[788,82],[798,85],[802,88],[803,91],[804,93],[805,95],[805,95],[805,95],[806,95],[807,96],[808,96],[808,96],[809,97],[810,97],[810,97],[810,97],[811,97],[811,97],[811,98]],"dx":[506,39],"dy":[506,39],"length":515.6549799850355,"timing":[360,379,395,411,429,445,461,479,496,512,528,545,562,579,595,611,629,645,661,678,695,712,728,744,761,779,795,814,828,846,869,895,962]},{"start":[673,194],"end":[1373,399],"points":[[673,194],[673,194],[673,194],[675,195],[679,196],[691,200],[710,206],[745,215],[792,228],[886,252],[983,278],[1093,308],[1199,340],[1265,361],[1320,378],[1339,385],[1356,390],[1366,392],[1371,393],[1372,394],[1372,394],[1373,394],[1373,394],[1373,395],[1373,395],[1373,395],[1373,395],[1373,396],[1373,396],[1373,397],[1373,397],[1373,398],[1373,398],[1373,399]],"dx":[700,205],"dy":[700,205],"length":733.5260007457547,"timing":[182,215,312,334,350,368,384,400,417,434,451,468,483,500,524,534,550,567,584,601,620,635,650,667,691,717,734,750,768,784,800,817,833,874]},{"start":[1373,398],"end":[1430,865],"points":[[1373,398],[1373,398],[1372,398],[1370,397],[1366,397],[1363,396],[1360,396],[1357,395],[1354,395],[1352,395],[1350,395],[1348,394],[1347,394],[1345,394],[1343,394],[1339,394],[1336,395],[1333,397],[1329,400],[1327,405],[1326,420],[1325,454],[1325,482],[1325,522],[1328,558],[1330,578],[1334,610],[1338,633],[1344,654],[1350,669],[1359,687],[1367,702],[1374,717],[1382,738],[1385,749],[1385,756],[1387,763],[1389,769],[1391,773],[1394,775],[1398,777],[1401,778],[1404,778],[1405,778],[1405,778],[1406,778],[1406,779],[1408,789],[1411,802],[1416,817],[1419,830],[1421,837],[1422,841],[1423,843],[1423,844],[1423,845],[1424,846],[1425,847],[1427,853],[1428,858],[1429,861],[1430,865],[1430,865],[1430,865]],"dx":[57,467],"dy":[57,467],"length":538.550015929151,"timing":[95,101,117,133,149,167,183,200,216,233,250,266,282,300,317,333,350,365,382,400,416,432,449,466,483,500,517,533,549,567,583,600,616,634,650,666,683,700,716,733,749,767,783,799,816,833,1234,1250,1266,1283,1299,1316,1332,1349,1366,1383,1400,1417,1432,1450,1466,1484,1500,1533]},{"start":[1429,865],"end":[194,163],"points":[[1429,865],[1426,862],[1406,845],[1379,821],[1308,768],[1115,650],[949,578],[728,488],[554,426],[435,377],[350,340],[288,311],[255,292],[239,278],[239,277],[235,268],[231,257],[224,235],[218,217],[211,197],[206,181],[202,173],[199,167],[197,163],[196,162],[195,161],[195,161],[194,161],[194,161],[194,163],[194,163]],"dx":[-1235,-702],"dy":[-1235,-702],"length":1463.4152820542515,"timing":[355,366,383,399,415,432,449,465,483,500,515,532,549,565,815,832,849,866,883,899,915,932,949,966,983,999,1015,1033,1058,1082,1116]},{"start":[195,163],"end":[688,98],"points":[[195,163],[209,162],[226,160],[249,157],[278,152],[322,145],[350,138],[389,129],[428,120],[459,114],[476,111],[501,108],[507,107],[517,105],[528,103],[534,101],[538,100],[542,99],[547,98],[552,98],[558,98],[566,98],[573,97],[579,96],[588,95],[595,95],[606,95],[617,95],[628,95],[639,95],[649,95],[658,95],[670,95],[677,95],[682,95],[685,96],[687,96],[688,97],[688,98]],"dx":[493,-65],"dy":[493,-65],"length":501.17465331516973,"timing":[305,331,348,364,381,398,414,432,447,465,481,499,515,530,548,565,581,598,614,631,648,665,681,698,714,732,748,765,780,799,815,830,848,864,881,897,914,932,980]},{"start":[688,97],"end":[622,690],"points":[[688,97],[688,98],[688,98],[688,98],[687,101],[686,107],[682,118],[674,144],[663,180],[649,228],[628,308],[620,348],[611,395],[605,433],[600,468],[596,498],[593,526],[592,544],[591,553],[591,580],[591,595],[591,608],[592,621],[594,633],[598,645],[601,654],[604,664],[610,680],[615,690],[618,696],[619,700],[620,702],[620,703],[620,703],[620,702],[620,702],[620,701],[620,699],[620,697],[620,695],[620,694],[620,694],[620,693],[620,693],[621,692],[621,691],[622,691],[622,690],[622,690]],"dx":[-66,593],"dy":[-66,593],"length":637.0172948167102,"timing":[126,230,238,250,267,283,299,316,334,350,367,383,400,416,434,450,466,483,500,516,533,549,567,583,599,617,634,650,666,684,700,717,734,789,805,817,833,850,867,883,902,917,933,951,967,984,1000,1017,1050]},{"start":[622,690],"end":[1327,239],"points":[[622,690],[624,686],[633,676],[657,653],[692,625],[737,593],[789,561],[822,542],[861,518],[878,504],[898,480],[898,479],[907,470],[920,460],[951,441],[986,424],[1022,410],[1058,398],[1091,387],[1120,376],[1143,365],[1156,355],[1170,344],[1180,333],[1189,324],[1194,321],[1205,314],[1212,311],[1220,309],[1231,304],[1252,294],[1263,287],[1277,280],[1286,275],[1294,272],[1297,270],[1299,269],[1302,266],[1307,259],[1312,252],[1317,247],[1322,242],[1325,240],[1326,239],[1327,239],[1327,239]],"dx":[705,-451],"dy":[705,-451],"length":849.5233232389594,"timing":[280,299,316,332,349,365,383,399,415,432,449,710,732,749,765,782,799,817,832,848,866,883,899,916,931,950,965,982,999,1015,1033,1049,1065,1082,1098,1115,1132,1149,1165,1181,1199,1216,1231,1248,1264,1282]},{"start":[1327,239],"end":[113,750],"points":[[1327,239],[1327,239],[1326,239],[1326,239],[1326,239],[1326,239],[1315,246],[1290,261],[1255,280],[1209,302],[1130,335],[1054,365],[960,403],[854,444],[751,484],[684,509],[602,536],[537,552],[500,560],[458,569],[426,576],[389,587],[374,592],[350,602],[332,610],[311,618],[291,625],[269,632],[254,636],[237,640],[222,642],[211,644],[202,648],[192,656],[184,669],[178,681],[174,691],[170,698],[167,702],[165,704],[162,704],[161,704],[160,704],[159,704],[158,703],[158,703],[157,703],[157,703],[157,704],[155,706],[153,708],[150,709],[148,709],[146,710],[144,710],[142,711],[141,712],[139,713],[138,714],[136,717],[132,722],[129,729],[125,736],[121,742],[118,746],[116,748],[114,749],[113,749],[113,750],[113,750]],"dx":[-1214,511],"dy":[-1214,511],"length":1346.1051387894354,"timing":[138,148,170,234,267,282,298,315,332,349,365,381,398,415,431,448,465,482,499,515,532,548,565,582,599,615,631,648,665,681,699,715,732,747,765,782,798,816,832,848,865,882,899,915,931,949,964,1035,1048,1065,1082,1097,1116,1132,1148,1165,1182,1199,1215,1231,1248,1266,1282,1297,1316,1332,1348,1365,1381,1415]},{"start":[77,803],"end":[734,312],"points":[[77,803],[78,803],[78,803],[79,802],[80,800],[82,800],[83,798],[86,797],[86,796],[89,793],[91,791],[94,789],[97,787],[100,784],[105,779],[112,773],[125,761],[142,746],[173,719],[209,689],[252,651],[304,611],[358,571],[410,535],[456,507],[501,479],[546,448],[575,425],[600,405],[621,390],[640,374],[659,359],[678,345],[690,336],[703,327],[713,321],[719,318],[724,315],[727,314],[729,313],[729,313],[730,313],[730,312],[732,312],[733,312],[734,312],[734,312],[734,312]],"dx":[657,-491],"dy":[657,-491],"length":825.0254437668228,"timing":[16,33,50,66,82,99,116,134,149,166,183,199,216,233,249,266,282,299,316,332,349,365,382,400,416,432,449,466,482,499,515,533,549,566,582,599,616,632,648,666,683,699,714,732,748,765,782,816]},{"start":[761,253],"end":[1538,502],"points":[[761,253],[762,253],[762,253],[763,253],[765,255],[770,256],[781,259],[797,264],[828,275],[846,281],[914,309],[1051,380],[1151,438],[1220,479],[1291,519],[1326,538],[1349,546],[1367,551],[1374,552],[1378,552],[1383,550],[1387,548],[1393,547],[1399,546],[1403,546],[1410,546],[1416,546],[1424,543],[1428,541],[1439,533],[1447,524],[1452,517],[1456,510],[1457,506],[1458,503],[1459,503],[1459,503],[1465,503],[1470,503],[1486,500],[1495,497],[1502,496],[1508,495],[1511,494],[1513,494],[1514,494],[1515,494],[1517,494],[1521,494],[1527,495],[1532,497],[1535,500],[1538,501],[1538,502]],"dx":[777,249],"dy":[777,249],"length":874.6762784131508,"timing":[297,316,334,350,367,383,401,417,433,450,466,484,500,516,532,550,567,583,600,616,634,650,667,683,699,717,734,750,766,783,800,817,833,849,867,884,1294,1317,1333,1350,1367,1383,1400,1415,1433,1451,1467,1483,1500,1516,1534,1549,1566,1600]},{"start":[1538,502],"end":[1326,119],"points":[[1538,502],[1537,502],[1534,502],[1530,502],[1524,501],[1513,495],[1505,489],[1493,475],[1477,446],[1459,406],[1436,349],[1413,288],[1402,251],[1394,222],[1391,208],[1387,191],[1386,186],[1386,185],[1386,183],[1386,183],[1383,180],[1380,174],[1372,160],[1366,147],[1360,137],[1357,132],[1351,125],[1345,121],[1340,120],[1335,118],[1331,116],[1329,116],[1328,116],[1328,116],[1327,116],[1327,116],[1327,116],[1327,116],[1326,117],[1326,117],[1326,118],[1326,119],[1326,119]],"dx":[-212,-383],"dy":[-212,-383],"length":464.9457352758617,"timing":[230,251,269,284,301,317,335,351,368,384,401,417,435,451,468,484,500,518,534,551,568,584,601,618,635,651,667,684,701,718,734,751,768,785,848,883,901,918,934,951,967,985,1017]},{"start":[1325,118],"end":[494,831],"points":[[1325,118],[1313,127],[1280,157],[1212,221],[1150,282],[1073,357],[1011,413],[949,466],[889,519],[836,564],[804,593],[767,625],[737,651],[710,672],[687,689],[665,704],[644,717],[625,729],[616,735],[589,754],[574,766],[565,772],[548,785],[531,797],[522,803],[515,809],[508,814],[504,817],[501,819],[499,821],[498,822],[497,824],[496,826],[496,828],[495,830],[494,831],[494,831]],"dx":[-831,713],"dy":[-831,713],"length":1098.2239698670578,"timing":[330,344,361,377,394,411,427,443,461,478,494,510,527,544,561,578,593,610,626,643,660,677,694,711,727,743,760,778,794,810,827,844,861,877,894,911,946]},{"start":[494,830],"end":[923,117],"points":[[494,830],[494,828],[502,811],[514,779],[525,736],[548,649],[573,565],[609,456],[643,379],[690,278],[736,203],[763,164],[794,120],[821,89],[835,71],[846,60],[854,52],[861,46],[867,42],[876,38],[880,36],[884,34],[885,34],[886,34],[886,35],[886,40],[885,47],[884,51],[883,55],[883,58],[883,60],[883,61],[884,64],[884,65],[888,69],[891,73],[897,78],[902,83],[907,89],[912,95],[915,102],[919,110],[921,116],[922,121],[924,125],[925,127],[925,127],[925,126],[924,124],[924,124],[923,120],[923,119],[923,119],[923,119],[923,118],[923,118],[923,118],[923,118],[923,117],[923,117],[923,117],[923,117]],"dx":[429,-713],"dy":[429,-713],"length":1022.2800121779383,"timing":[276,299,317,333,349,366,383,400,416,432,450,466,482,500,516,532,550,567,583,600,616,633,650,666,683,699,717,733,748,765,783,799,816,833,849,866,883,900,916,932,950,966,982,1000,1016,1032,1066,1219,1233,1249,1266,1282,1661,1685,1701,1717,1732,1749,1766,1831,1849,1900]},{"start":[921,118],"end":[201,791],"points":[[921,118],[867,176],[826,223],[762,297],[710,355],[664,404],[619,449],[569,494],[515,541],[461,582],[412,618],[365,650],[337,667],[305,685],[276,702],[259,711],[242,722],[231,731],[221,741],[219,745],[217,749],[215,753],[213,757],[210,761],[209,764],[207,768],[206,770],[206,771],[206,775],[205,779],[204,782],[203,785],[202,787],[201,789],[201,789],[201,790],[201,791],[201,791],[201,791]],"dx":[-720,673],"dy":[-720,673],"length":998.1241049049128,"timing":[391,413,431,447,464,480,496,513,530,547,564,580,597,614,630,647,663,680,697,714,729,747,764,780,797,812,830,847,863,880,896,913,930,947,964,980,996,1013,1047]},{"start":[201,791],"end":[1205,271],"points":[[201,791],[201,791],[201,790],[201,790],[201,789],[202,789],[203,787],[204,786],[205,785],[206,784],[208,783],[211,779],[220,770],[242,745],[278,709],[352,647],[430,599],[522,560],[617,531],[718,504],[783,486],[857,463],[919,439],[953,424],[992,401],[1027,378],[1072,346],[1098,329],[1122,315],[1136,306],[1156,295],[1179,282],[1198,273],[1211,267],[1221,263],[1232,259],[1237,258],[1241,257],[1242,256],[1243,255],[1243,255],[1243,255],[1243,255],[1241,255],[1234,256],[1230,258],[1217,266],[1212,268],[1209,270],[1207,271],[1206,271],[1205,271],[1205,271],[1205,271]],"dx":[1004,-520],"dy":[1004,-520],"length":1233.1794141922262,"timing":[94,102,115,132,147,164,182,198,214,231,247,265,281,298,315,331,348,364,381,398,415,431,448,465,481,498,514,531,548,565,581,598,614,631,647,664,681,698,714,731,748,764,807,831,848,864,881,898,917,931,949,965,982,1042]},{"start":[1204,271],"end":[694,120],"points":[[1204,271],[1197,271],[1182,270],[1139,268],[1092,267],[1042,265],[952,254],[886,235],[805,201],[761,175],[721,145],[712,137],[699,127],[695,123],[693,121],[693,121],[693,121],[694,121],[694,121],[694,120],[694,120],[694,120]],"dx":[-510,-151],"dy":[-510,-151],"length":549.3628353947513,"timing":[266,282,300,317,333,350,366,382,400,416,433,449,467,483,500,515,575,599,616,673,683,748]},{"start":[694,120],"end":[1270,436],"points":[[694,120],[694,121],[696,121],[700,123],[709,127],[723,133],[745,142],[784,159],[820,175],[882,201],[912,215],[949,234],[981,252],[1002,265],[1027,280],[1044,290],[1058,299],[1072,307],[1085,314],[1098,321],[1105,325],[1116,330],[1124,333],[1139,339],[1156,346],[1178,355],[1207,366],[1224,373],[1239,379],[1249,385],[1255,389],[1259,392],[1261,395],[1262,395],[1263,396],[1263,397],[1263,402],[1263,410],[1264,416],[1264,422],[1265,425],[1265,426],[1265,427],[1266,427],[1266,427],[1267,431],[1267,432],[1268,434],[1269,435],[1269,435],[1269,436],[1269,436],[1269,436],[1270,436]],"dx":[576,316],"dy":[576,316],"length":678.247418768844,"timing":[256,269,285,301,318,335,352,368,385,402,418,435,451,468,485,502,518,534,552,568,585,601,618,634,652,668,685,701,719,735,752,768,785,801,819,835,852,868,885,902,917,935,951,969,985,1001,1018,1034,1052,1067,1085,1102,1118,1135]},{"start":[1269,436],"end":[915,701],"points":[[1269,436],[1269,436],[1268,436],[1266,436],[1264,435],[1261,435],[1259,434],[1257,433],[1255,433],[1253,432],[1251,432],[1247,432],[1242,432],[1235,432],[1221,434],[1203,440],[1179,450],[1152,465],[1126,481],[1091,508],[1071,525],[1054,542],[1037,559],[1021,576],[1006,593],[996,605],[990,613],[977,630],[970,638],[965,645],[959,654],[954,662],[949,668],[945,675],[942,679],[938,684],[933,688],[930,690],[928,692],[926,694],[923,696],[920,698],[918,700],[917,701],[915,701],[915,701],[915,701]],"dx":[-354,265],"dy":[-354,265],"length":462.9280295592614,"timing":[53,67,83,101,116,132,151,167,184,200,217,233,251,267,283,300,317,334,350,367,383,400,417,434,450,466,483,501,517,533,550,567,584,600,617,633,650,667,684,700,717,733,751,767,783,800,834]},{"start":[709,824],"end":[587,170],"points":[[709,824],[706,808],[698,779],[685,740],[667,687],[647,622],[627,558],[615,502],[609,465],[605,421],[603,396],[600,373],[598,358],[596,345],[593,329],[593,318],[593,301],[593,289],[593,275],[593,267],[593,261],[593,259],[593,258],[593,257],[593,253],[593,238],[594,223],[594,207],[594,199],[594,191],[594,186],[593,182],[592,179],[591,177],[589,174],[589,171],[588,168],[587,168],[587,168],[587,169],[587,170],[587,170]],"dx":[-122,-654],"dy":[-122,-654],"length":675.6022738976062,"timing":[318,344,359,376,394,410,426,443,460,477,494,510,526,544,561,577,594,610,627,643,659,677,693,710,726,743,760,777,793,809,827,843,860,876,893,910,926,942,980,993,1009,1044]},{"start":[587,171],"end":[605,306],"points":[[587,171],[587,173],[587,179],[586,194],[585,205],[583,216],[583,227],[582,239],[582,252],[582,266],[582,273],[583,280],[584,283],[584,285],[585,286],[585,286],[586,286],[587,287],[588,288],[589,290],[592,293],[595,297],[597,299],[599,301],[600,302],[602,304],[603,305],[604,306],[605,306]],"dx":[18,135],"dy":[18,135],"length":144.9832087469815,"timing":[241,263,280,296,313,329,347,363,380,396,412,430,446,463,479,496,513,529,546,563,580,596,613,629,646,663,679,696,747]},{"start":[605,306],"end":[1248,421],"points":[[605,306],[606,306],[608,306],[613,308],[621,310],[630,313],[652,319],[670,323],[697,327],[746,332],[778,335],[827,340],[885,347],[919,352],[976,361],[1007,366],[1046,373],[1078,380],[1104,386],[1125,390],[1149,396],[1178,403],[1211,412],[1231,418],[1246,422],[1252,423],[1254,423],[1254,423],[1254,423],[1253,423],[1252,421],[1251,421],[1250,421],[1249,421],[1249,421],[1249,421],[1249,421],[1248,421]],"dx":[643,115],"dy":[643,115],"length":668.1392243277855,"timing":[199,305,318,334,351,368,384,400,417,435,451,468,484,501,518,534,551,568,584,601,616,633,650,668,685,701,718,734,757,767,785,801,817,833,851,867,895,919]},{"start":[1248,421],"end":[837,204],"points":[[1248,421],[1246,421],[1242,420],[1241,419],[1238,419],[1237,418],[1235,418],[1235,417],[1231,416],[1231,416],[1230,415],[1228,415],[1226,414],[1225,414],[1222,414],[1214,414],[1199,414],[1177,413],[1152,411],[1123,407],[1093,399],[1063,388],[1034,375],[1008,360],[994,350],[979,338],[970,330],[963,324],[958,319],[952,313],[945,306],[931,292],[920,280],[908,269],[896,259],[887,253],[878,248],[872,244],[866,240],[860,236],[857,233],[852,228],[850,224],[847,219],[845,215],[843,211],[840,209],[839,208],[839,208],[838,207],[838,207],[838,206],[837,205],[837,204],[837,204]],"dx":[-411,-217],"dy":[-411,-217],"length":487.1636580835829,"timing":[16,33,65,81,103,116,132,149,182,182,199,215,232,249,265,282,299,315,332,350,366,382,399,416,433,449,466,482,500,516,533,549,566,583,599,616,633,649,666,683,699,716,731,749,767,783,799,816,833,849,865,882,899,916,965]},{"start":[837,204],"end":[913,508],"points":[[837,204],[837,216],[836,248],[835,276],[834,312],[834,331],[834,349],[834,357],[835,364],[838,370],[840,374],[844,379],[848,384],[854,391],[860,398],[870,409],[874,413],[885,427],[888,433],[897,453],[900,465],[903,479],[904,488],[906,495],[906,499],[907,501],[908,502],[909,503],[910,504],[911,505],[912,506],[912,507],[913,507],[913,508],[913,508]],"dx":[76,304],"dy":[76,304],"length":328.84120563941116,"timing":[348,364,380,397,414,431,447,464,481,497,513,530,547,563,581,599,613,631,647,663,680,697,714,731,747,764,780,797,814,831,848,864,880,897,931]},{"start":[913,508],"end":[683,793],"points":[[913,508],[913,508],[906,514],[896,525],[882,542],[864,564],[846,590],[827,619],[808,650],[788,681],[771,706],[760,723],[747,738],[737,749],[729,757],[722,763],[715,768],[711,772],[705,777],[697,783],[693,787],[689,790],[686,792],[684,793],[683,793],[683,793]],"dx":[-230,285],"dy":[-230,285],"length":369.3749165092044,"timing":[166,222,247,263,279,296,313,329,346,363,379,396,413,429,446,463,479,496,513,529,546,563,580,597,613,628]},{"start":[683,793],"end":[897,474],"points":[[683,793],[683,792],[683,792],[683,792],[683,792],[683,791],[683,788],[683,779],[689,763],[701,729],[713,703],[737,658],[754,634],[773,611],[793,589],[814,567],[828,553],[842,537],[853,525],[861,517],[868,509],[872,505],[878,499],[882,494],[887,488],[890,483],[893,480],[895,477],[896,476],[897,475],[897,475],[897,475],[897,474]],"dx":[214,-319],"dy":[214,-319],"length":391.31389956377086,"timing":[154,179,194,210,226,239,256,272,289,306,323,339,355,373,390,406,422,439,456,472,490,505,523,539,556,572,590,606,623,639,655,673,689]},{"start":[898,474],"end":[1423,710],"points":[[898,474],[907,479],[925,487],[968,507],[1043,537],[1098,558],[1153,579],[1205,600],[1239,614],[1281,632],[1314,647],[1331,656],[1342,662],[1350,666],[1353,669],[1354,670],[1357,672],[1366,678],[1396,696],[1404,701],[1414,706],[1418,709],[1419,710],[1421,710],[1421,710],[1421,710],[1421,710],[1421,710],[1422,710],[1422,710],[1422,710],[1423,710],[1423,710],[1423,710]],"dx":[525,236],"dy":[525,236],"length":577.536483002463,"timing":[662,684,701,717,733,750,767,784,800,817,834,850,866,884,900,917,934,950,970,986,1000,1017,1033,1050,1066,1090,1117,1134,1150,1167,1183,1200,1217,1233]},{"start":[1423,710],"end":[720,277],"points":[[1423,710],[1413,710],[1395,708],[1376,702],[1342,683],[1279,635],[1197,572],[1133,526],[1064,478],[1008,439],[981,418],[952,396],[927,378],[913,369],[897,360],[890,357],[882,354],[871,350],[865,348],[861,346],[857,344],[854,342],[852,342],[848,341],[843,340],[836,338],[826,334],[807,326],[791,316],[773,304],[761,296],[749,288],[738,282],[733,279],[726,277],[721,277],[720,277]],"dx":[-703,-433],"dy":[-703,-433],"length":834.7317475885366,"timing":[294,316,333,350,367,383,400,416,433,450,467,483,499,517,533,550,566,583,599,617,632,650,666,684,700,716,733,749,766,783,800,816,833,850,867,883,900]},{"start":[721,277],"end":[1418,795],"points":[[721,277],[730,282],[752,298],[778,324],[814,367],[875,443],[935,513],[1007,590],[1090,666],[1150,709],[1200,739],[1264,765],[1289,769],[1316,771],[1329,771],[1342,771],[1349,771],[1357,771],[1363,771],[1371,774],[1376,774],[1382,775],[1389,776],[1395,778],[1402,782],[1408,786],[1413,791],[1416,793],[1417,794],[1417,795],[1418,795],[1418,795]],"dx":[697,518],"dy":[697,518],"length":900.9385755379662,"timing":[410,435,450,466,483,500,517,533,550,566,583,600,617,634,650,666,683,700,717,733,749,766,784,800,817,833,849,866,883,900,917,952]},{"start":[734,716],"end":[1173,255],"points":[[734,716],[734,710],[743,677],[752,658],[771,626],[840,529],[901,457],[932,424],[964,389],[987,366],[1000,354],[1014,341],[1025,331],[1035,322],[1044,315],[1052,310],[1064,304],[1094,285],[1119,268],[1133,259],[1151,249],[1161,243],[1167,241],[1170,240],[1171,239],[1173,238],[1175,237],[1177,236],[1178,235],[1183,232],[1189,228],[1198,222],[1203,220],[1205,219],[1205,219],[1205,220],[1202,224],[1197,229],[1191,236],[1184,243],[1179,248],[1176,252],[1174,255],[1173,255],[1173,255],[1173,255]],"dx":[439,-461],"dy":[439,-461],"length":750.4544464147127,"timing":[321,337,354,371,387,412,438,454,471,488,505,521,537,555,570,588,604,625,639,654,672,687,706,722,738,755,771,788,805,822,841,861,888,905,922,939,955,973,989,1004,1021,1037,1055,1072,1089,1121]},{"start":[73,625],"end":[678,145],"points":[[73,625],[86,606],[121,563],[173,505],[240,438],[290,392],[344,341],[376,314],[409,285],[438,262],[447,255],[460,246],[469,239],[478,231],[481,227],[484,225],[485,224],[486,224],[486,224],[488,223],[494,219],[509,213],[531,204],[548,197],[571,189],[589,183],[606,177],[623,171],[637,165],[649,160],[661,155],[666,152],[669,150],[671,150],[672,149],[672,149],[673,149],[673,149],[674,148],[675,147],[677,146],[677,145],[678,145]],"dx":[605,-480],"dy":[605,-480],"length":787.1078058140114,"timing":[236,264,281,297,313,330,348,363,380,398,413,430,445,467,480,497,514,530,546,563,582,597,613,629,647,663,681,697,712,730,746,765,780,796,812,830,846,876,896,912,930,947,981]},{"start":[677,146],"end":[385,341],"points":[[677,146],[666,157],[653,169],[636,183],[617,198],[596,213],[581,224],[564,235],[549,244],[530,255],[514,264],[487,277],[482,279],[466,287],[458,291],[451,295],[444,299],[438,304],[431,310],[424,316],[420,318],[418,320],[414,323],[410,326],[406,328],[402,330],[400,332],[398,332],[395,334],[392,336],[389,338],[386,340],[386,341],[385,341]],"dx":[-292,195],"dy":[-292,195],"length":353.9936791920406,"timing":[298,318,334,351,367,384,401,418,436,451,467,492,501,518,535,551,566,585,601,617,634,651,668,684,703,718,735,750,769,785,802,818,835,868]},{"start":[1093,521],"end":[393,236],"points":[[1093,521],[1085,518],[1077,515],[1058,507],[1019,496],[976,484],[911,470],[834,451],[733,420],[644,386],[591,363],[543,345],[483,324],[477,323],[449,317],[437,313],[427,310],[421,308],[417,307],[415,306],[414,306],[413,306],[413,305],[413,305],[413,305],[413,304],[413,303],[413,303],[413,299],[413,294],[413,292],[411,285],[409,278],[406,270],[405,266],[404,264],[403,262],[403,262],[403,261],[401,257],[399,250],[397,244],[395,239],[393,237],[393,236],[393,236]],"dx":[-700,-285],"dy":[-700,-285],"length":788.681661342368,"timing":[254,277,294,311,327,344,362,377,395,410,428,444,464,479,497,514,530,544,560,578,594,611,628,645,660,677,694,712,732,747,761,777,794,811,828,844,861,878,894,910,928,944,960,977,993,1026]},{"start":[392,237],"end":[168,365],"points":[[392,237],[389,241],[372,260],[353,278],[329,296],[303,310],[276,322],[258,329],[239,337],[223,341],[212,343],[205,344],[199,345],[195,345],[193,345],[192,345],[191,345],[191,345],[190,345],[188,345],[188,346],[187,348],[187,349],[187,350],[185,353],[183,357],[180,360],[176,363],[173,364],[171,365],[169,365],[168,365],[168,365]],"dx":[-224,128],"dy":[-224,128],"length":268.45389205922424,"timing":[319,333,350,367,384,401,417,434,450,467,484,500,517,533,550,569,586,602,618,634,650,667,683,700,717,734,750,767,783,800,816,833,867]},{"start":[169,365],"end":[1587,325],"points":[[169,365],[185,364],[230,357],[364,343],[426,342],[633,342],[719,353],[854,368],[911,368],[983,368],[1066,368],[1151,367],[1232,368],[1302,375],[1341,378],[1383,379],[1416,377],[1441,369],[1466,358],[1485,352],[1503,348],[1527,347],[1552,347],[1563,347],[1575,347],[1580,346],[1584,345],[1586,344],[1586,344],[1587,344],[1587,343],[1588,343],[1588,343],[1589,342],[1589,342],[1589,342],[1589,340],[1588,336],[1588,334],[1587,330],[1587,327],[1587,326],[1587,325],[1587,325]],"dx":[1418,-40],"dy":[1418,-40],"length":1447.4552956374007,"timing":[294,316,330,352,365,382,399,414,432,448,465,481,498,515,530,548,565,581,598,617,632,649,665,682,698,714,731,748,765,781,798,814,831,847,864,881,899,917,933,949,965,981,998,1014]},{"start":[1587,325],"end":[1501,227],"points":[[1587,325],[1586,325],[1586,325],[1584,326],[1583,327],[1582,327],[1580,327],[1579,327],[1576,327],[1571,322],[1562,313],[1550,297],[1535,277],[1522,253],[1517,243],[1512,236],[1510,232],[1507,229],[1506,228],[1505,227],[1504,227],[1503,227],[1502,227],[1502,227],[1501,227]],"dx":[-86,-98],"dy":[-86,-98],"length":139.06982846241524,"timing":[170,180,196,213,229,245,263,279,295,313,329,346,362,379,395,412,428,444,462,479,495,513,529,546,562]},{"start":[1500,227],"end":[422,731],"points":[[1500,227],[1495,229],[1480,238],[1446,256],[1407,277],[1291,340],[1207,385],[1146,421],[1062,475],[993,520],[930,562],[877,593],[828,622],[799,640],[748,671],[720,687],[685,707],[651,725],[622,739],[597,750],[581,755],[556,761],[532,763],[515,763],[493,763],[481,760],[468,757],[462,755],[455,753],[451,751],[448,749],[446,746],[443,743],[440,741],[436,738],[432,736],[429,734],[427,733],[425,732],[423,731],[422,731],[422,731]],"dx":[-1078,504],"dy":[-1078,504],"length":1229.614954198639,"timing":[250,264,281,297,314,332,348,364,381,397,414,430,447,464,481,497,514,531,549,565,580,597,615,631,648,665,681,697,713,731,748,764,781,797,815,831,848,864,882,898,914,931]},{"start":[422,731],"end":[628,462],"points":[[422,731],[431,716],[454,684],[490,639],[514,608],[532,587],[549,566],[560,551],[567,542],[573,533],[580,523],[587,512],[591,506],[597,497],[599,495],[600,494],[601,494],[602,493],[605,489],[610,483],[616,477],[620,473],[623,470],[625,468],[626,467],[626,467],[626,466],[626,465],[627,464],[627,463],[627,463],[628,462],[628,462]],"dx":[206,-269],"dy":[206,-269],"length":340.42598009051966,"timing":[282,299,316,333,349,366,383,399,416,433,450,466,483,500,515,533,549,566,582,599,614,632,649,665,682,698,716,733,750,766,783,799,833]},{"start":[627,462],"end":[386,246],"points":[[627,462],[625,462],[623,461],[614,458],[595,450],[557,428],[511,398],[464,361],[440,338],[425,321],[407,303],[399,295],[395,291],[391,288],[390,287],[389,286],[388,286],[388,285],[388,285],[388,284],[387,282],[387,280],[385,276],[384,269],[384,261],[384,255],[384,250],[384,248],[385,246],[386,246],[386,246]],"dx":[-241,-216],"dy":[-241,-216],"length":342.1652145647324,"timing":[264,281,296,314,331,348,364,380,398,416,437,447,464,480,497,513,531,547,564,581,598,614,631,647,665,681,698,714,730,748,848]},{"start":[387,246],"end":[871,46],"points":[[387,246],[411,237],[444,225],[492,210],[545,193],[598,174],[646,152],[677,135],[712,112],[737,95],[751,86],[766,80],[777,78],[784,77],[794,76],[801,75],[807,71],[819,64],[829,57],[842,51],[851,48],[859,46],[864,46],[866,46],[867,46],[868,46],[869,46],[869,46],[869,46],[870,46],[870,46],[871,46],[871,46],[871,46]],"dx":[484,-200],"dy":[484,-200],"length":528.7999083216575,"timing":[307,331,347,364,380,397,413,430,447,464,480,498,514,531,547,564,581,597,614,631,647,663,681,697,714,729,746,764,780,797,813,829,846,882]},{"start":[871,46],"end":[1531,461],"points":[[871,46],[871,47],[871,47],[871,47],[871,48],[871,48],[871,50],[871,56],[873,69],[885,95],[918,138],[976,189],[1036,232],[1111,274],[1176,302],[1195,308],[1243,322],[1269,328],[1291,332],[1314,335],[1328,337],[1363,343],[1382,350],[1404,363],[1426,378],[1440,388],[1450,396],[1459,402],[1463,405],[1465,406],[1467,408],[1474,415],[1489,432],[1505,452],[1509,456],[1516,462],[1522,470],[1522,471],[1521,471],[1519,471],[1518,468],[1518,466],[1521,465],[1524,464],[1527,463],[1529,462],[1530,462],[1530,462],[1531,462],[1531,461]],"dx":[660,415],"dy":[660,415],"length":835.8591976569132,"timing":[154,166,184,199,216,233,250,267,283,299,316,332,350,366,382,401,417,433,450,467,483,500,516,533,549,565,583,600,616,633,649,667,683,700,716,733,750,766,783,802,816,833,850,866,883,900,916,933,950,967]},{"start":[1529,461],"end":[1312,155],"points":[[1529,461],[1528,461],[1520,461],[1516,461],[1512,461],[1508,461],[1503,461],[1497,461],[1491,461],[1483,462],[1473,462],[1458,460],[1444,448],[1422,422],[1407,395],[1381,343],[1370,315],[1352,269],[1350,263],[1335,222],[1326,197],[1321,180],[1317,169],[1314,161],[1313,157],[1313,155],[1312,155],[1312,155],[1312,155],[1312,155]],"dx":[-217,-306],"dy":[-217,-306],"length":413.8419274027307,"timing":[97,112,129,145,162,179,196,212,229,247,262,280,296,313,329,345,363,379,395,412,428,445,463,479,495,511,528,546,574,624]},{"start":[1312,155],"end":[177,282],"points":[[1312,155],[1311,155],[1307,155],[1293,160],[1262,171],[1212,185],[1114,205],[1043,217],[954,230],[844,247],[759,263],[692,272],[614,281],[541,283],[483,283],[427,278],[399,273],[377,269],[347,264],[333,260],[322,257],[317,256],[302,255],[298,255],[293,255],[290,256],[287,256],[284,257],[280,257],[276,257],[271,260],[263,265],[253,272],[242,278],[228,283],[220,284],[212,285],[208,285],[201,285],[196,285],[189,285],[185,285],[180,285],[178,283],[177,283],[177,282]],"dx":[-1135,127],"dy":[-1135,127],"length":1159.2790650741617,"timing":[224,230,247,263,280,296,314,331,347,364,380,396,413,431,449,464,479,497,514,531,547,563,580,597,613,631,647,664,680,696,713,729,747,765,780,797,814,829,847,863,880,897,914,931,947,980]},{"start":[178,282],"end":[1328,765],"points":[[178,282],[186,282],[221,282],[294,284],[467,319],[584,348],[728,378],[844,394],[913,398],[964,400],[1029,405],[1086,419],[1123,440],[1156,472],[1189,513],[1210,542],[1230,576],[1241,593],[1251,611],[1254,617],[1259,626],[1266,637],[1277,658],[1290,682],[1299,697],[1304,705],[1308,711],[1310,714],[1312,719],[1313,726],[1316,734],[1318,742],[1321,750],[1322,754],[1324,758],[1325,760],[1326,762],[1327,763],[1328,764],[1328,765],[1328,765]],"dx":[1150,483],"dy":[1150,483],"length":1352.01043570801,"timing":[347,363,380,396,413,430,446,463,479,497,513,530,546,563,579,597,613,630,648,664,680,697,713,729,746,762,779,796,812,830,846,862,880,897,913,929,946,962,979,996,1013]},{"start":[1328,765],"end":[1488,87],"points":[[1328,765],[1326,761],[1325,750],[1325,721],[1328,703],[1362,581],[1386,509],[1424,402],[1446,344],[1471,272],[1487,228],[1499,197],[1511,170],[1516,162],[1519,157],[1521,155],[1522,155],[1522,155],[1522,154],[1517,150],[1512,143],[1503,128],[1499,116],[1495,106],[1492,97],[1490,92],[1489,89],[1489,88],[1488,87],[1488,87],[1488,87]],"dx":[160,-678],"dy":[160,-678],"length":723.1724706092245,"timing":[278,300,316,332,349,366,382,399,415,432,449,465,482,499,516,532,549,565,643,667,683,698,716,732,750,766,783,800,816,832,883]},{"start":[1488,85],"end":[1560,336],"points":[[1488,85],[1488,85],[1487,85],[1486,85],[1484,88],[1480,91],[1470,97],[1458,105],[1446,111],[1430,121],[1421,127],[1413,133],[1409,138],[1409,140],[1418,152],[1441,171],[1475,198],[1501,220],[1519,235],[1529,246],[1537,253],[1540,256],[1541,258],[1542,258],[1542,258],[1543,259],[1544,259],[1545,260],[1546,260],[1547,261],[1547,263],[1548,268],[1549,274],[1552,297],[1555,310],[1556,318],[1558,324],[1559,327],[1559,328],[1559,329],[1559,329],[1559,331],[1559,333],[1559,335],[1560,336],[1560,336],[1560,336]],"dx":[72,251],"dy":[72,251],"length":359.8319259125295,"timing":[141,157,168,184,201,218,234,251,267,285,301,317,334,350,368,384,401,417,435,451,468,485,501,518,535,551,568,585,601,619,635,651,667,685,701,718,734,752,768,784,801,818,835,852,868,885,918]},{"start":[1559,336],"end":[1312,86],"points":[[1559,336],[1559,336],[1557,336],[1552,336],[1545,337],[1536,337],[1512,326],[1496,314],[1482,298],[1471,277],[1461,254],[1448,230],[1432,202],[1413,174],[1400,156],[1385,138],[1375,124],[1367,115],[1362,111],[1358,108],[1353,106],[1347,105],[1340,104],[1333,101],[1324,95],[1319,92],[1315,89],[1313,87],[1312,86],[1312,86],[1312,86]],"dx":[-247,-250],"dy":[-247,-250],"length":371.2288326976587,"timing":[173,185,202,219,235,252,269,285,302,318,335,351,369,385,402,418,434,451,468,485,502,518,535,550,568,584,601,618,635,651,685]},{"start":[1310,87],"end":[125,771],"points":[[1310,87],[1292,106],[1264,137],[1204,201],[1137,259],[1049,323],[908,413],[860,444],[726,527],[634,584],[538,644],[441,702],[380,732],[328,753],[274,771],[248,776],[232,779],[221,781],[215,783],[214,784],[213,785],[213,785],[213,786],[213,786],[210,786],[206,786],[199,786],[191,786],[182,785],[171,782],[162,780],[156,778],[149,777],[144,776],[141,776],[137,776],[134,774],[131,773],[128,772],[127,772],[125,771],[125,771]],"dx":[-1185,684],"dy":[-1185,684],"length":1404.9972065114778,"timing":[296,317,333,351,367,383,400,415,433,449,466,483,500,516,533,549,566,583,599,616,633,650,666,683,700,716,733,749,766,783,800,816,833,849,866,883,900,916,933,949,967,1033]},{"start":[125,771],"end":[1614,267],"points":[[125,771],[147,761],[196,739],[272,709],[387,672],[527,632],[681,589],[830,541],[973,491],[1102,441],[1213,402],[1277,385],[1354,367],[1418,357],[1475,348],[1508,341],[1543,334],[1572,325],[1586,317],[1600,305],[1611,294],[1623,277],[1626,273],[1639,257],[1644,251],[1647,249],[1648,248],[1649,248],[1649,248],[1649,248],[1649,248],[1649,249],[1647,250],[1638,254],[1629,259],[1624,262],[1618,265],[1616,266],[1615,267],[1614,267]],"dx":[1489,-504],"dy":[1489,-504],"length":1668.430453691641,"timing":[278,302,318,334,351,368,385,402,418,435,451,468,484,500,518,534,551,567,584,601,618,635,651,667,683,701,718,734,751,768,901,918,934,951,968,984,1001,1017,1035,1052]},{"start":[1614,267],"end":[1303,261],"points":[[1614,267],[1613,268],[1606,271],[1585,281],[1565,287],[1549,289],[1532,290],[1520,290],[1506,283],[1498,278],[1485,270],[1465,261],[1453,257],[1438,254],[1423,253],[1411,252],[1400,252],[1389,251],[1379,251],[1368,251],[1359,251],[1346,251],[1336,252],[1326,254],[1321,255],[1316,255],[1311,257],[1308,258],[1305,259],[1303,261],[1303,261]],"dx":[-311,-6],"dy":[-311,-6],"length":325.55791751421896,"timing":[252,266,283,300,316,333,349,366,383,400,417,433,450,466,483,500,516,533,550,567,584,600,616,633,649,667,683,700,717,733,767]},{"start":[1302,261],"end":[738,451],"points":[[1302,261],[1299,263],[1282,273],[1275,278],[1263,287],[1232,307],[1171,342],[1139,359],[1081,387],[1034,405],[1000,417],[947,431],[906,440],[873,447],[856,450],[838,452],[822,454],[805,455],[791,455],[779,455],[773,454],[766,453],[758,453],[752,452],[746,452],[742,452],[739,451],[738,451]],"dx":[-564,190],"dy":[-564,190],"length":607.6297771251969,"timing":[284,297,316,330,348,364,381,398,414,431,448,464,481,497,513,530,547,564,581,597,614,631,647,664,681,697,714,780]},{"start":[738,451],"end":[611,840],"points":[[738,451],[721,482],[699,524],[676,565],[653,612],[636,645],[624,672],[615,692],[608,713],[598,744],[593,766],[590,782],[587,801],[586,817],[586,823],[586,829],[586,831],[586,832],[586,833],[586,833],[586,835],[586,835],[586,836],[586,836],[586,836],[586,836],[587,836],[589,836],[592,836],[594,836],[595,836],[596,836],[598,836],[599,836],[601,837],[605,837],[608,838],[610,839],[611,840]],"dx":[-127,389],"dy":[-127,389],"length":444.5686826107478,"timing":[313,333,349,365,382,399,416,433,448,466,483,499,516,532,548,565,582,599,615,632,649,665,682,699,732,1000,1015,1031,1050,1066,1082,1099,1115,1132,1149,1166,1182,1198,1232]},{"start":[609,839],"end":[936,22],"points":[[609,839],[612,832],[631,792],[658,724],[697,622],[740,499],[807,283],[838,198],[861,145],[875,116],[887,95],[891,88],[907,66],[918,51],[925,40],[929,32],[933,27],[935,24],[935,23],[936,22],[936,22],[936,22]],"dx":[327,-817],"dy":[327,-817],"length":883.630098992737,"timing":[298,311,327,344,361,377,394,411,428,444,460,478,494,511,528,544,561,578,594,611,628,794]},{"start":[946,616],"end":[251,629],"points":[[946,616],[918,614],[862,604],[810,596],[733,587],[647,586],[595,586],[557,591],[519,599],[496,602],[464,604],[449,605],[429,605],[413,605],[393,604],[386,604],[378,604],[373,604],[368,604],[366,604],[364,604],[363,604],[362,604],[358,604],[354,604],[348,604],[341,604],[335,604],[329,605],[322,606],[310,612],[300,617],[291,622],[281,625],[271,626],[266,627],[260,627],[256,628],[254,629],[252,629],[251,629],[251,629],[251,629]],"dx":[-695,13],"dy":[-695,13],"length":703.5696194105286,"timing":[321,346,364,380,397,420,430,447,464,481,498,514,531,547,564,581,597,614,631,647,664,680,697,713,731,747,764,781,797,814,831,847,864,880,896,914,930,947,964,980,997,1013,1047]},{"start":[251,629],"end":[1055,320],"points":[[251,629],[255,627],[277,614],[314,595],[369,570],[436,546],[516,520],[626,495],[693,481],[755,469],[789,461],[835,449],[880,435],[920,421],[953,409],[970,401],[988,392],[1000,383],[1010,374],[1020,365],[1029,354],[1036,347],[1042,340],[1046,336],[1049,333],[1052,328],[1054,324],[1054,321],[1055,320],[1055,320],[1055,320]],"dx":[804,-309],"dy":[804,-309],"length":877.5825336980904,"timing":[270,283,300,319,334,351,367,384,401,418,434,451,468,484,500,517,535,551,567,585,600,617,634,650,667,685,702,717,734,750,766]},{"start":[1054,320],"end":[967,146],"points":[[1054,320],[1053,320],[1049,320],[1047,320],[1044,320],[1043,317],[1042,305],[1039,283],[1035,259],[1028,236],[1023,223],[1017,213],[1010,202],[1002,193],[995,183],[989,174],[986,170],[983,167],[980,165],[978,164],[977,163],[975,162],[973,160],[971,158],[970,156],[969,153],[968,148],[967,146],[967,146]],"dx":[-87,-174],"dy":[-87,-174],"length":206.59848598807775,"timing":[241,252,269,285,302,319,336,352,369,385,402,419,435,452,468,485,502,519,535,551,568,585,602,619,636,652,669,685,719]},{"start":[967,147],"end":[1371,484],"points":[[967,147],[964,154],[962,165],[962,182],[974,216],[992,240],[1018,269],[1058,306],[1085,324],[1130,354],[1167,379],[1206,406],[1245,435],[1271,452],[1302,471],[1318,478],[1327,479],[1332,479],[1337,479],[1340,479],[1342,478],[1344,478],[1347,478],[1350,478],[1356,478],[1361,479],[1366,481],[1368,482],[1370,483],[1371,484],[1371,484]],"dx":[404,337],"dy":[404,337],"length":562.060878207414,"timing":[237,264,280,296,314,330,347,363,380,397,414,430,447,463,480,497,513,530,547,564,580,597,614,629,647,663,681,697,714,731,747]},{"start":[1371,488],"end":[1415,268],"points":[[1371,488],[1371,488],[1371,484],[1371,468],[1376,423],[1381,374],[1385,341],[1390,318],[1394,297],[1397,289],[1401,280],[1405,276],[1408,272],[1411,270],[1413,269],[1414,268],[1415,268],[1415,268]],"dx":[44,-220],"dy":[44,-220],"length":229.9932189222299,"timing":[13,285,296,313,330,346,363,379,396,413,430,446,463,479,496,513,529,546]},{"start":[1415,268],"end":[933,175],"points":[[1415,268],[1414,269],[1412,269],[1401,274],[1383,277],[1355,279],[1324,280],[1288,280],[1240,271],[1212,266],[1179,258],[1160,253],[1133,245],[1113,237],[1097,229],[1084,225],[1070,220],[1056,216],[1042,212],[1024,207],[1009,201],[996,195],[979,188],[964,183],[956,180],[948,178],[943,176],[939,175],[936,175],[933,175],[933,175]],"dx":[-482,-93],"dy":[-482,-93],"length":500.54207791299916,"timing":[233,239,251,267,284,299,318,334,351,367,384,401,417,433,450,467,483,500,517,534,550,567,584,600,618,634,651,667,684,701,734]},{"start":[933,175],"end":[567,102],"points":[[933,175],[924,176],[908,179],[873,181],[828,181],[773,174],[717,161],[682,151],[644,137],[623,129],[602,120],[592,116],[584,111],[578,108],[575,106],[572,104],[568,102],[567,102],[567,102],[567,102],[567,102]],"dx":[-366,-73],"dy":[-366,-73],"length":380.1368369955133,"timing":[281,298,314,330,347,364,381,398,414,431,448,464,481,497,515,531,547,564,581,620,664]},{"start":[567,103],"end":[500,434],"points":[[567,103],[566,108],[565,120],[560,146],[553,177],[546,213],[538,246],[530,277],[523,308],[514,349],[511,365],[510,374],[506,397],[505,405],[505,413],[504,420],[504,425],[504,428],[503,431],[503,432],[503,432],[502,433],[501,433],[501,433],[500,434],[500,434],[500,434]],"dx":[-67,331],"dy":[-67,331],"length":339.60338439486736,"timing":[319,330,348,365,381,398,414,433,449,465,481,499,515,531,548,565,582,598,615,632,649,666,682,699,715,732,765]},{"start":[500,433],"end":[520,153],"points":[[500,433],[500,429],[500,418],[500,397],[500,355],[506,307],[513,267],[518,236],[520,220],[521,206],[521,200],[521,197],[521,195],[520,190],[520,182],[520,171],[520,163],[520,156],[520,152],[520,151],[520,151],[520,152],[520,153],[520,153]],"dx":[20,-280],"dy":[20,-280],"length":285.6412682923085,"timing":[314,331,347,365,382,398,415,432,447,463,480,498,514,531,548,564,581,598,614,632,677,697,715,748]},{"start":[522,153],"end":[1590,671],"points":[[522,153],[546,163],[776,258],[934,328],[975,344],[1186,435],[1263,468],[1348,504],[1418,534],[1482,559],[1539,581],[1575,595],[1602,606],[1629,616],[1642,621],[1651,624],[1655,626],[1657,626],[1658,627],[1658,628],[1658,629],[1658,632],[1656,637],[1654,643],[1652,651],[1649,659],[1645,668],[1643,673],[1640,678],[1637,681],[1633,684],[1628,686],[1624,687],[1619,688],[1612,689],[1606,689],[1601,689],[1596,689],[1593,689],[1591,689],[1590,689],[1590,689],[1590,688],[1590,682],[1590,677],[1590,673],[1590,672],[1590,671]],"dx":[1068,518],"dy":[1068,518],"length":1356.8669266203626,"timing":[322,347,364,382,399,415,432,448,464,481,498,514,531,548,565,581,597,614,631,648,664,681,698,714,731,748,764,781,797,814,830,848,864,881,898,914,931,948,964,981,998,1031,1239,1265,1281,1298,1315,1332]},{"start":[1589,671],"end":[458,199],"points":[[1589,671],[1587,671],[1581,671],[1573,669],[1558,664],[1526,651],[1461,623],[1339,569],[1163,484],[1094,452],[909,371],[789,324],[705,292],[619,256],[581,237],[556,223],[541,214],[529,207],[523,205],[521,204],[519,204],[518,204],[517,206],[515,208],[513,209],[511,211],[509,211],[506,212],[501,212],[496,210],[490,208],[484,206],[479,205],[475,204],[471,204],[469,203],[467,202],[465,201],[464,201],[463,201],[462,201],[462,201],[461,201],[459,200],[459,199],[458,199]],"dx":[-1131,-472],"dy":[-1131,-472],"length":1236.825628721731,"timing":[189,200,217,233,250,267,283,300,318,332,350,366,383,400,416,433,450,466,483,500,516,533,550,566,583,600,617,633,650,666,683,699,716,733,750,766,783,799,816,833,850,867,883,900,916,951]},{"start":[458,199],"end":[891,157],"points":[[458,199],[458,198],[458,198],[458,198],[459,198],[461,198],[467,198],[489,197],[533,192],[602,183],[681,171],[757,159],[809,151],[829,149],[845,148],[852,148],[858,148],[863,149],[870,151],[876,154],[883,155],[887,156],[889,157],[890,157],[891,157],[891,157],[891,157]],"dx":[433,-42],"dy":[433,-42],"length":438.9984387618932,"timing":[274,300,316,333,349,366,383,399,416,433,449,467,483,500,516,532,550,567,582,599,616,632,649,666,683,700,816]},{"start":[950,118],"end":[541,569],"points":[[950,118],[936,145],[920,173],[901,202],[871,241],[838,277],[799,314],[753,352],[723,376],[672,411],[646,429],[632,439],[617,449],[611,453],[607,456],[604,457],[602,460],[597,466],[592,474],[586,485],[582,493],[579,499],[578,503],[577,505],[574,510],[570,519],[564,532],[559,544],[551,559],[547,566],[545,568],[543,569],[542,570],[541,570],[541,570],[541,569]],"dx":[-409,451],"dy":[-409,451],"length":623.2292615774131,"timing":[297,317,334,350,367,383,400,417,433,450,466,483,499,516,533,550,566,583,600,616,633,649,667,683,700,717,733,749,766,783,800,817,833,850,866,900]},{"start":[541,569],"end":[215,562],"points":[[541,569],[544,566],[555,559],[565,553],[575,549],[581,545],[585,543],[585,543],[585,543],[575,543],[506,553],[451,562],[377,573],[350,577],[324,580],[305,582],[296,583],[291,583],[288,580],[284,575],[278,571],[275,569],[268,567],[267,567],[265,567],[262,567],[260,567],[257,567],[249,569],[244,570],[239,571],[232,571],[226,571],[222,570],[218,568],[215,565],[215,563],[215,562],[215,562]],"dx":[-326,-7],"dy":[-326,-7],"length":435.31420137464806,"timing":[233,243,261,278,294,311,329,344,361,377,394,411,427,444,462,477,494,511,528,544,561,578,598,611,627,644,660,678,694,711,727,744,761,777,794,810,826,844,881]},{"start":[215,561],"end":[201,359],"points":[[215,561],[211,541],[207,519],[201,488],[198,465],[193,442],[192,426],[192,418],[192,408],[193,401],[197,391],[199,386],[200,382],[201,379],[202,379],[203,379],[203,379],[203,377],[203,374],[202,370],[201,368],[201,366],[201,366],[201,365],[201,365],[201,364],[201,363],[201,363],[201,362],[201,362],[201,362],[201,361],[201,361],[201,361],[201,360],[201,360],[201,359],[201,359],[201,359],[201,359],[201,359],[201,359],[201,359]],"dx":[-14,-202],"dy":[-14,-202],"length":207.96643490248286,"timing":[322,346,363,379,395,412,428,445,462,479,495,512,528,545,562,578,613,629,646,662,679,696,712,1067,1079,1096,1112,1129,1145,1162,1179,1196,1213,1228,1246,1262,1279,1300,1325,1346,1362,1379,1446]},{"start":[203,359],"end":[734,684],"points":[[203,359],[208,359],[232,359],[285,360],[392,399],[447,431],[510,472],[570,513],[605,539],[650,571],[670,586],[688,601],[695,608],[704,617],[709,624],[715,634],[723,646],[730,658],[734,667],[737,674],[738,678],[738,681],[738,683],[738,683],[738,684],[737,684],[736,684],[735,684],[734,684],[734,684]],"dx":[531,325],"dy":[531,325],"length":657.4070552998546,"timing":[286,299,316,332,349,366,382,399,415,433,449,466,483,499,516,532,550,565,583,599,616,632,649,666,682,699,715,733,749,816]},{"start":[734,684],"end":[833,413],"points":[[734,684],[734,680],[735,670],[739,650],[743,634],[748,614],[754,599],[765,580],[775,567],[794,543],[808,525],[817,512],[825,499],[829,493],[832,487],[835,481],[838,477],[839,471],[841,464],[842,459],[843,456],[844,454],[844,453],[844,452],[844,452],[844,451],[844,450],[844,446],[840,436],[838,428],[836,423],[834,417],[834,415],[833,414],[833,413],[833,413],[833,413],[833,413]],"dx":[99,-271],"dy":[99,-271],"length":303.18302919185277,"timing":[269,281,297,313,330,347,364,380,397,414,431,447,464,480,497,514,530,547,564,581,597,614,630,648,678,697,713,729,747,762,781,797,814,831,848,864,880,947]},{"start":[834,413],"end":[1037,450],"points":[[834,413],[837,413],[843,414],[848,415],[854,416],[861,417],[874,418],[890,421],[899,422],[931,430],[948,433],[966,435],[981,437],[997,438],[1010,439],[1018,440],[1025,442],[1029,444],[1033,447],[1035,449],[1036,449],[1037,450],[1037,450],[1037,450]],"dx":[203,37],"dy":[203,37],"length":208.32602929595149,"timing":[302,316,333,349,366,382,399,416,433,450,466,482,499,516,533,550,566,583,599,616,633,649,666,682]},{"start":[1037,450],"end":[1548,565],"points":[[1037,450],[1037,450],[1036,450],[1034,449],[1032,448],[1031,447],[1030,446],[1029,446],[1029,446],[1029,446],[1028,446],[1029,446],[1039,445],[1059,444],[1091,444],[1126,453],[1160,468],[1198,488],[1238,508],[1295,530],[1330,541],[1350,547],[1370,553],[1379,556],[1387,557],[1391,558],[1394,558],[1397,558],[1400,556],[1405,554],[1411,552],[1417,550],[1421,549],[1425,548],[1431,546],[1439,545],[1454,545],[1463,545],[1467,547],[1472,549],[1473,549],[1475,550],[1476,554],[1479,560],[1482,565],[1484,568],[1484,568],[1486,568],[1494,568],[1505,567],[1518,565],[1530,565],[1537,565],[1542,565],[1545,565],[1547,565],[1547,565],[1548,565],[1548,565]],"dx":[511,115],"dy":[511,115],"length":567.3909505975087,"timing":[98,112,129,146,163,179,196,211,229,246,262,291,312,328,345,362,378,396,413,429,446,462,479,496,512,529,545,562,579,595,612,628,645,662,679,696,712,729,744,762,779,796,812,829,846,862,1134,1146,1162,1178,1196,1212,1228,1246,1262,1279,1294,1312,1329]},{"start":[1547,565],"end":[1082,669],"points":[[1547,565],[1537,569],[1521,575],[1503,581],[1468,589],[1423,595],[1364,602],[1302,611],[1266,617],[1231,623],[1212,626],[1192,629],[1174,632],[1162,634],[1154,635],[1139,636],[1131,636],[1121,635],[1111,635],[1104,634],[1098,634],[1094,634],[1092,634],[1091,634],[1091,634],[1090,634],[1090,635],[1089,645],[1087,657],[1086,668],[1084,675],[1083,680],[1082,683],[1082,683],[1081,683],[1081,683],[1081,682],[1081,680],[1081,679],[1082,677],[1082,675],[1082,672],[1082,671],[1082,670],[1082,669],[1082,669]],"dx":[-465,104],"dy":[-465,104],"length":529.3313270193133,"timing":[238,263,279,296,312,330,346,362,379,396,413,429,446,462,479,496,512,528,545,562,579,595,613,629,646,679,1437,1463,1479,1495,1513,1529,1546,1563,1596,1963,1979,1996,2012,2030,2046,2063,2078,2095,2113,2146]},{"start":[1082,669],"end":[1332,337],"points":[[1082,669],[1083,666],[1091,652],[1105,630],[1125,597],[1160,547],[1181,518],[1200,493],[1220,472],[1238,455],[1259,438],[1282,421],[1297,410],[1312,395],[1319,387],[1325,378],[1328,372],[1329,368],[1330,365],[1331,363],[1331,361],[1331,360],[1331,360],[1332,360],[1332,359],[1332,359],[1332,359],[1332,359],[1332,357],[1332,353],[1332,348],[1332,345],[1332,342],[1332,341],[1332,341],[1332,340],[1332,339],[1332,338],[1332,338],[1332,337]],"dx":[250,-332],"dy":[250,-332],"length":426.0583899144347,"timing":[266,279,296,312,329,346,362,379,395,412,428,444,462,479,495,512,529,546,562,579,595,612,629,645,662,679,745,881,896,912,929,946,962,979,1026,1046,1063,1079,1096,1113]},{"start":[1332,337],"end":[1221,177],"points":[[1332,337],[1331,338],[1331,338],[1329,340],[1328,341],[1327,342],[1326,342],[1325,342],[1322,343],[1315,343],[1308,343],[1300,343],[1292,341],[1282,331],[1272,318],[1264,303],[1256,285],[1250,271],[1244,255],[1238,240],[1232,219],[1228,199],[1224,186],[1221,177]],"dx":[-111,-160],"dy":[-111,-160],"length":223.52038675266874,"timing":[120,136,146,163,179,196,212,229,246,263,278,296,313,329,346,363,379,396,413,429,446,462,479,496]},{"start":[1221,177],"end":[1598,56],"points":[[1221,177],[1226,177],[1236,177],[1268,177],[1318,170],[1382,157],[1424,147],[1468,137],[1490,130],[1512,122],[1529,115],[1542,108],[1547,105],[1554,101],[1556,99],[1557,98],[1557,98],[1558,98],[1558,96],[1560,91],[1563,86],[1564,82],[1565,81],[1570,74],[1575,67],[1584,61],[1588,58],[1593,57],[1596,56],[1597,56],[1598,56],[1598,56],[1598,56]],"dx":[377,-121],"dy":[377,-121],"length":411.90839240326534,"timing":[300,308,319,336,353,369,386,402,419,436,453,469,485,502,519,535,552,568,585,602,618,636,652,728,752,769,786,802,819,835,852,871,885]},{"start":[1598,56],"end":[1570,767],"points":[[1598,56],[1594,58],[1586,65],[1574,77],[1564,92],[1557,112],[1552,155],[1552,210],[1552,343],[1552,433],[1552,525],[1552,594],[1561,674],[1567,696],[1574,719],[1580,735],[1583,741],[1584,744],[1585,745],[1585,745],[1585,746],[1585,749],[1584,751],[1583,754],[1581,756],[1579,758],[1578,760],[1575,762],[1573,764],[1571,766],[1570,766],[1570,767]],"dx":[-28,711],"dy":[-28,711],"length":737.8561159857081,"timing":[265,285,302,319,335,352,368,385,401,419,435,452,469,486,502,519,535,552,569,585,602,619,635,652,668,686,702,719,736,752,769,785]},{"start":[1570,767],"end":[967,802],"points":[[1570,767],[1569,767],[1568,767],[1565,764],[1561,762],[1555,759],[1549,756],[1546,754],[1542,752],[1540,751],[1536,750],[1527,750],[1515,750],[1496,751],[1471,756],[1414,765],[1367,768],[1314,769],[1255,769],[1199,769],[1165,769],[1111,771],[1086,775],[1059,781],[1046,785],[1036,788],[1028,791],[1023,793],[1019,794],[1017,795],[1014,796],[1009,798],[1006,799],[1002,801],[1000,801],[999,801],[999,801],[999,801],[998,802],[998,802],[996,802],[995,802],[992,802],[987,802],[982,802],[978,802],[974,802],[970,802],[969,802],[967,802],[967,802]],"dx":[-603,35],"dy":[-603,35],"length":613.8404975008854,"timing":[116,123,132,149,166,183,200,216,233,250,266,283,300,315,333,349,366,383,399,416,432,450,466,483,500,516,533,550,566,583,600,617,633,650,666,683,700,716,733,748,766,782,799,816,833,850,865,884,900,916,949]},{"start":[967,801],"end":[153,578],"points":[[967,801],[955,794],[930,783],[866,762],[779,740],[713,719],[635,689],[597,669],[558,645],[553,640],[552,640],[535,639],[516,635],[498,633],[444,624],[389,615],[330,606],[290,600],[245,592],[204,585],[185,583],[171,581],[165,580],[160,578],[157,577],[155,576],[155,576],[154,576],[154,576],[153,577],[153,578],[153,578]],"dx":[-814,-223],"dy":[-814,-223],"length":853.9272595341292,"timing":[298,316,333,349,366,383,399,416,433,450,713,733,750,766,783,800,816,833,850,866,883,899,916,932,950,966,983,999,1016,1033,1049,1083]},{"start":[153,577],"end":[519,221],"points":[[153,577],[153,573],[162,556],[182,525],[234,443],[296,356],[330,310],[359,271],[369,258],[383,239],[389,231],[391,226],[393,223],[394,220],[394,218],[395,217],[395,217],[396,217],[399,216],[407,214],[418,213],[437,212],[448,212],[457,212],[465,213],[473,214],[481,215],[487,216],[493,216],[498,216],[504,216],[510,216],[516,218],[519,220],[519,221]],"dx":[366,-356],"dy":[366,-356],"length":562.1075237665603,"timing":[285,299,315,333,349,365,382,398,415,432,449,465,482,499,516,532,549,565,582,599,615,632,649,665,682,699,715,732,749,765,782,799,816,832,865]},{"start":[518,220],"end":[446,396],"points":[[518,220],[518,221],[518,225],[518,236],[513,251],[501,282],[496,294],[482,328],[476,342],[469,358],[463,371],[460,376],[456,384],[454,388],[453,389],[452,390],[451,391],[450,393],[449,395],[448,396],[447,396],[446,396],[446,396]],"dx":[-72,176],"dy":[-72,176],"length":193.2124476356449,"timing":[243,264,280,297,314,330,347,364,380,397,414,431,447,463,481,497,515,531,547,564,581,598,631]},{"start":[447,395],"end":[689,92],"points":[[447,395],[460,379],[484,351],[532,292],[587,223],[629,169],[658,126],[673,103],[688,81],[694,70],[700,60],[705,50],[707,46],[708,44],[708,43],[708,43],[708,43],[709,43],[709,43],[709,43],[709,44],[709,46],[708,49],[706,53],[703,59],[700,65],[698,68],[697,69],[696,71],[696,73],[695,75],[695,77],[695,78],[694,78],[692,78],[691,79],[690,82],[689,84],[689,86],[689,88],[689,89],[689,89],[689,89],[689,89],[689,90],[689,91],[689,91],[689,92]],"dx":[242,-303],"dy":[242,-303],"length":496.5887500515726,"timing":[377,396,413,429,445,462,479,496,512,529,546,563,579,596,613,628,660,680,696,725,746,763,780,796,812,829,845,863,879,895,912,929,979,1170,1178,1196,1212,1229,1246,1262,1279,1296,1312,1329,1346,1363,1379,1412]},{"start":[689,90],"end":[818,102],"points":[[689,90],[690,90],[693,91],[697,92],[703,93],[710,93],[715,94],[721,96],[726,97],[733,99],[742,102],[756,107],[776,112],[793,116],[805,119],[815,122],[821,124],[824,126],[825,126],[825,126],[825,126],[825,126],[825,126],[825,125],[825,125],[825,125],[825,124],[825,124],[825,124],[825,123],[825,122],[825,122],[825,121],[825,121],[824,120],[823,117],[822,113],[819,107],[818,103],[818,102]],"dx":[129,12],"dy":[129,12],"length":166.87416549321247,"timing":[149,295,312,329,346,363,380,396,413,430,445,462,480,496,513,530,547,563,581,596,629,711,717,733,749,765,782,839,863,880,897,913,929,946,962,979,996,1011,1030,1063]},{"start":[818,104],"end":[962,740],"points":[[818,104],[818,114],[818,143],[819,184],[835,281],[893,447],[922,509],[956,575],[969,593],[985,619],[992,628],[994,630],[994,631],[995,631],[995,631],[995,631],[995,631],[995,631],[995,633],[994,638],[991,646],[987,658],[982,670],[977,683],[973,694],[970,705],[967,716],[966,723],[964,730],[964,735],[963,737],[963,739],[962,740],[962,740]],"dx":[144,636],"dy":[144,636],"length":680.5463164673625,"timing":[298,313,330,346,363,379,396,413,429,445,463,479,495,512,530,546,561,579,595,613,629,646,663,679,695,713,730,746,763,779,796,813,829,845]},{"start":[964,739],"end":[1476,851],"points":[[964,739],[977,735],[1006,735],[1076,737],[1136,753],[1214,776],[1262,787],[1314,797],[1356,799],[1378,800],[1379,800],[1386,802],[1393,805],[1400,808],[1410,811],[1418,815],[1428,821],[1433,824],[1437,827],[1439,829],[1440,829],[1440,830],[1440,830],[1440,830],[1441,830],[1442,831],[1446,834],[1450,837],[1455,841],[1460,844],[1465,847],[1470,849],[1473,851],[1475,851],[1476,851],[1476,851]],"dx":[512,112],"dy":[512,112],"length":535.001969868043,"timing":[312,331,347,364,381,397,414,431,447,464,788,814,830,847,863,880,897,913,930,947,964,980,997,1040,1073,1097,1114,1130,1147,1164,1181,1197,1214,1231,1248,1264]},{"start":[1475,851],"end":[375,724],"points":[[1475,851],[1467,853],[1455,857],[1434,864],[1410,868],[1333,870],[1238,861],[1170,848],[1085,831],[1011,815],[945,803],[880,792],[816,785],[776,782],[733,781],[701,781],[663,781],[626,781],[592,781],[549,781],[525,781],[502,781],[493,782],[482,784],[476,784],[468,784],[459,782],[449,779],[439,776],[430,771],[423,768],[416,763],[409,759],[405,755],[401,752],[398,749],[394,745],[393,744],[392,742],[390,740],[389,739],[388,739],[387,738],[387,738],[386,737],[385,736],[383,734],[382,732],[381,731],[380,730],[379,729],[379,728],[378,727],[377,726],[376,726],[375,725],[375,724],[375,724]],"dx":[-1100,-127],"dy":[-1100,-127],"length":1132.1038877091078,"timing":[262,283,299,317,333,350,366,383,400,416,433,450,467,484,500,517,533,549,567,583,600,616,633,649,666,682,699,717,733,750,767,783,800,816,833,850,869,884,900,920,937,949,966,983,999,1017,1033,1050,1066,1083,1099,1117,1133,1150,1167,1184,1200,1217]},{"start":[375,723],"end":[1181,80],"points":[[375,723],[380,718],[400,700],[437,677],[518,637],[601,602],[694,562],[756,532],[824,497],[879,464],[939,417],[979,383],[1019,344],[1042,317],[1062,290],[1074,263],[1080,245],[1085,228],[1087,219],[1092,207],[1095,203],[1102,195],[1114,176],[1119,166],[1129,153],[1133,147],[1136,143],[1138,141],[1139,141],[1139,141],[1139,141],[1140,141],[1140,140],[1142,138],[1150,126],[1160,112],[1168,101],[1173,93],[1178,86],[1180,83],[1181,82],[1181,82],[1181,82],[1181,81],[1181,81],[1181,80]],"dx":[806,-643],"dy":[806,-643],"length":1067.6389378027166,"timing":[294,312,328,346,362,379,395,413,429,446,463,479,496,513,529,545,562,579,596,612,629,646,662,678,695,712,729,747,763,779,802,828,1232,1246,1262,1279,1295,1313,1329,1345,1362,1394,1412,1429,1446,1463]},{"start":[1181,81],"end":[824,607],"points":[[1181,81],[1181,82],[1178,87],[1176,91],[1174,95],[1172,98],[1169,105],[1160,121],[1144,147],[1124,185],[1102,225],[1086,256],[1065,299],[1047,337],[1027,381],[1005,431],[998,449],[991,468],[983,489],[978,506],[972,524],[966,543],[962,554],[956,566],[952,571],[945,578],[938,583],[930,587],[918,591],[908,596],[897,600],[886,603],[874,604],[859,606],[850,606],[843,606],[836,606],[831,607],[826,607],[825,607],[824,607]],"dx":[-357,526],"dy":[-357,526],"length":679.0527300984338,"timing":[140,148,165,182,198,215,232,249,265,282,299,315,332,349,365,384,399,416,432,449,465,482,498,515,532,549,566,581,599,616,632,648,666,682,699,715,731,749,765,782,816]},{"start":[827,604],"end":[1092,462],"points":[[827,604],[851,578],[868,565],[889,552],[917,538],[946,527],[974,516],[1003,504],[1022,496],[1035,491],[1046,486],[1052,484],[1053,484],[1053,484],[1054,484],[1054,484],[1055,483],[1059,480],[1065,475],[1071,470],[1075,468],[1077,467],[1080,466],[1082,466],[1086,465],[1088,464],[1091,463],[1092,462],[1092,462]],"dx":[265,-142],"dy":[265,-142],"length":305.0641057765866,"timing":[270,296,313,330,346,363,380,397,414,430,447,463,480,496,658,680,697,713,729,747,763,780,796,813,830,847,863,879,913]},{"start":[1092,462],"end":[849,668],"points":[[1092,462],[1091,463],[1089,467],[1081,476],[1071,488],[1059,502],[1046,520],[1029,540],[1009,561],[989,582],[966,601],[941,621],[920,635],[901,646],[888,652],[881,655],[875,657],[872,658],[870,659],[869,660],[866,661],[863,662],[860,664],[856,666],[853,667],[851,668],[850,668],[849,668]],"dx":[-243,206],"dy":[-243,206],"length":324.3530883444037,"timing":[204,214,231,248,265,281,298,314,331,347,364,381,398,414,431,448,465,481,498,515,531,548,565,581,597,614,631,664]},{"start":[849,668],"end":[995,686],"points":[[849,668],[851,667],[853,666],[856,666],[859,666],[861,666],[863,666],[867,666],[871,668],[880,674],[891,682],[901,689],[913,697],[920,701],[926,704],[930,706],[932,706],[935,706],[937,707],[939,707],[941,707],[942,707],[944,707],[947,707],[949,707],[952,706],[956,704],[963,700],[972,695],[980,691],[986,688],[991,687],[993,686],[994,686],[995,686]],"dx":[146,18],"dy":[146,18],"length":163.44968741405816,"timing":[259,282,298,316,331,349,366,382,399,416,432,448,465,482,499,516,532,549,566,582,599,616,632,650,666,682,699,715,732,749,765,782,799,815,850]},{"start":[995,686],"end":[1193,742],"points":[[995,686],[995,686],[995,686],[1001,683],[1015,680],[1033,679],[1049,679],[1068,680],[1083,684],[1102,691],[1118,695],[1137,703],[1159,713],[1173,722],[1188,732],[1193,737],[1197,740],[1197,742],[1198,743],[1197,743],[1196,743],[1194,743],[1194,742],[1193,742],[1193,742],[1193,742],[1193,742]],"dx":[198,56],"dy":[198,56],"length":227.28310769751255,"timing":[209,258,281,297,314,330,347,363,381,397,414,431,447,464,480,497,514,530,547,564,580,598,614,631,647,663,697]},{"start":[1193,742],"end":[84,648],"points":[[1193,742],[1192,742],[1192,742],[1190,742],[1188,740],[1187,740],[1184,738],[1183,737],[1179,736],[1177,735],[1175,733],[1173,732],[1171,731],[1166,730],[1154,730],[1123,732],[1081,735],[1029,736],[939,732],[871,725],[723,718],[602,714],[517,710],[410,707],[378,706],[328,706],[313,706],[297,706],[287,706],[279,706],[266,706],[240,703],[214,696],[177,685],[153,678],[129,672],[120,669],[112,667],[109,666],[107,665],[106,663],[101,659],[95,655],[91,652],[86,650],[84,649],[84,648],[84,648]],"dx":[-1109,-94],"dy":[-1109,-94],"length":1125.6598863194495,"timing":[61,68,82,98,116,132,149,165,182,199,216,233,249,265,282,299,316,332,349,365,382,399,415,432,448,465,482,499,515,532,549,566,582,598,616,632,649,666,683,699,716,732,749,766,782,799,815,899]},{"start":[84,648],"end":[1160,707],"points":[[84,648],[84,648],[85,648],[87,648],[89,647],[91,646],[94,645],[98,644],[102,643],[110,642],[126,638],[165,629],[245,611],[344,599],[460,598],[528,598],[656,617],[720,631],[781,643],[843,653],[887,657],[933,662],[955,665],[975,667],[989,668],[1010,670],[1039,672],[1066,675],[1097,678],[1115,680],[1125,681],[1132,683],[1135,683],[1136,684],[1140,684],[1143,684],[1146,685],[1148,685],[1150,685],[1150,686],[1151,686],[1151,686],[1152,688],[1155,693],[1157,698],[1159,702],[1160,704],[1160,706],[1160,706],[1160,707],[1160,707]],"dx":[1076,59],"dy":[1076,59],"length":1103.5193863253212,"timing":[122,130,146,163,180,197,213,230,247,263,281,297,314,330,348,364,381,397,413,430,447,462,480,497,513,530,547,564,581,597,614,631,647,664,681,697,713,730,747,763,780,797,813,831,847,863,881,897,913,930,964]},{"start":[1160,707],"end":[957,854],"points":[[1160,707],[1160,706],[1160,705],[1160,705],[1158,704],[1157,704],[1155,703],[1153,702],[1152,701],[1150,699],[1149,698],[1146,697],[1143,696],[1138,696],[1130,696],[1121,697],[1105,702],[1093,708],[1073,722],[1057,736],[1041,752],[1031,763],[1019,778],[1008,790],[998,802],[990,812],[984,818],[978,824],[974,829],[970,834],[967,838],[963,843],[962,846],[960,849],[959,851],[957,853],[957,853],[957,854]],"dx":[-203,147],"dy":[-203,147],"length":275.018550355661,"timing":[21,30,46,63,80,97,113,130,146,163,180,197,213,230,246,263,280,296,313,330,347,363,380,397,413,430,446,463,480,497,513,530,547,563,579,596,613,663]},{"start":[957,853],"end":[715,630],"points":[[957,853],[957,853],[957,853],[957,852],[957,850],[957,846],[957,843],[958,840],[958,837],[959,836],[957,833],[950,825],[936,811],[914,791],[891,768],[877,752],[863,738],[853,727],[845,719],[834,708],[825,700],[815,691],[805,682],[796,673],[788,666],[780,662],[777,660],[763,655],[753,652],[742,647],[733,642],[727,638],[721,635],[718,633],[716,631],[715,631],[715,630],[715,630]],"dx":[-242,-223],"dy":[-242,-223],"length":341.5607055312251,"timing":[92,115,132,148,165,181,198,214,231,248,265,281,298,315,330,347,364,381,398,415,431,448,465,481,498,515,531,547,565,581,598,615,631,648,664,681,698,731]},{"start":[715,629],"end":[1091,240],"points":[[715,629],[731,611],[756,586],[798,547],[850,507],[886,482],[923,456],[951,438],[966,428],[988,414],[1005,402],[1017,393],[1029,383],[1039,372],[1048,360],[1055,350],[1061,340],[1066,330],[1070,321],[1073,311],[1075,299],[1077,286],[1078,278],[1079,270],[1080,267],[1081,264],[1082,261],[1084,257],[1088,249],[1090,245],[1091,242],[1091,240],[1091,240]],"dx":[376,-389],"dy":[376,-389],"length":559.4142409855642,"timing":[305,332,348,365,381,398,415,432,448,465,482,498,515,532,548,565,582,598,615,631,649,665,682,698,715,731,748,765,782,798,815,831,848]},{"start":[1091,233],"end":[1570,531],"points":[[1091,233],[1092,235],[1102,247],[1129,270],[1194,319],[1249,351],[1314,384],[1372,409],[1384,414],[1454,443],[1471,451],[1482,457],[1495,463],[1499,465],[1504,467],[1507,468],[1510,470],[1512,473],[1513,475],[1516,477],[1518,479],[1526,485],[1536,492],[1546,499],[1555,508],[1559,512],[1562,516],[1564,521],[1565,524],[1565,526],[1567,528],[1568,529],[1569,530],[1570,530],[1570,531]],"dx":[479,298],"dy":[479,298],"length":573.7209583294252,"timing":[299,319,335,352,368,386,401,419,434,452,467,484,502,518,535,551,569,585,601,618,635,651,667,684,702,718,734,751,767,785,801,818,835,852,869]},{"start":[1569,531],"end":[1136,111],"points":[[1569,531],[1568,531],[1566,531],[1565,531],[1564,531],[1563,531],[1557,531],[1551,531],[1542,531],[1532,530],[1511,517],[1486,492],[1434,428],[1397,375],[1357,309],[1321,250],[1292,198],[1271,165],[1247,131],[1226,106],[1218,98],[1211,91],[1207,89],[1203,87],[1201,87],[1199,87],[1198,87],[1197,87],[1196,87],[1193,87],[1190,88],[1186,89],[1182,90],[1174,93],[1164,98],[1151,106],[1145,108],[1139,110],[1137,111],[1136,111],[1136,111]],"dx":[-433,-420],"dy":[-433,-420],"length":665.8558265929306,"timing":[164,180,197,213,229,246,262,279,296,312,329,346,362,380,396,412,429,445,463,479,496,512,529,545,561,578,596,612,629,646,661,679,696,712,729,746,763,779,796,812,846]},{"start":[1136,111],"end":[75,208],"points":[[1136,111],[1127,118],[1117,125],[1090,142],[1048,166],[964,201],[879,227],[787,245],[722,253],[595,262],[484,263],[376,263],[304,252],[210,232],[175,224],[144,217],[133,215],[123,213],[120,213],[117,213],[116,213],[113,213],[110,215],[108,216],[106,217],[104,217],[102,217],[100,217],[98,217],[94,216],[89,215],[85,213],[78,211],[76,210],[75,208],[75,208],[75,208]],"dx":[-1061,97],"dy":[-1061,97],"length":1098.8585887589786,"timing":[294,317,332,350,366,382,399,416,433,450,466,482,499,516,533,549,566,582,600,616,633,649,666,682,700,716,733,749,767,783,800,815,833,848,866,883,916]},{"start":[76,208],"end":[102,692],"points":[[76,208],[77,208],[82,210],[89,219],[97,232],[104,255],[110,286],[115,317],[118,347],[121,376],[122,407],[122,436],[122,455],[117,486],[112,508],[107,532],[103,558],[100,576],[99,591],[98,604],[98,615],[97,623],[97,631],[97,639],[97,643],[98,649],[99,653],[100,656],[100,658],[101,658],[101,659],[101,659],[101,660],[101,660],[102,660],[102,662],[102,663],[102,669],[102,673],[102,679],[102,682],[102,686],[102,688],[102,690],[102,691],[102,692]],"dx":[26,484],"dy":[26,484],"length":499.9225939068043,"timing":[222,229,246,263,279,297,312,329,347,363,379,395,414,430,447,463,480,497,513,530,547,564,578,597,613,630,646,663,679,696,714,730,746,763,797,901,913,930,947,963,980,995,1013,1030,1047,1063]},{"start":[102,691],"end":[1336,631],"points":[[102,691],[104,690],[114,683],[137,672],[152,667],[262,641],[370,619],[492,593],[598,565],[635,555],[723,524],[777,508],[830,499],[907,496],[999,504],[1098,525],[1166,541],[1188,547],[1233,557],[1250,558],[1263,558],[1273,557],[1289,553],[1299,551],[1306,550],[1312,550],[1315,550],[1317,550],[1318,554],[1318,559],[1318,566],[1318,575],[1316,585],[1312,595],[1309,606],[1308,611],[1308,615],[1308,617],[1308,620],[1311,624],[1314,627],[1318,631],[1324,634],[1328,634],[1331,634],[1334,634],[1334,634],[1335,634],[1335,634],[1335,634],[1336,633],[1336,632],[1336,631]],"dx":[1234,-60],"dy":[1234,-60],"length":1356.9024276039036,"timing":[190,198,214,232,248,265,281,297,314,332,348,364,382,399,415,430,448,464,481,497,515,531,547,565,581,599,615,632,648,664,682,699,714,731,749,765,782,798,815,831,848,865,882,899,915,932,948,965,981,998,1014,1032,1098]},{"start":[1335,631],"end":[405,493],"points":[[1335,631],[1323,631],[1300,634],[1275,636],[1222,638],[1144,638],[1067,633],[1009,626],[920,611],[830,592],[754,571],[710,556],[643,532],[624,526],[605,519],[593,516],[583,514],[562,510],[533,503],[501,494],[463,483],[444,480],[441,480],[424,479],[422,479],[419,479],[419,479],[417,482],[414,486],[409,490],[407,492],[406,493],[405,493]],"dx":[-930,-138],"dy":[-930,-138],"length":956.9064943014812,"timing":[237,262,279,295,312,329,345,363,380,397,413,429,446,463,479,497,512,530,546,561,579,596,613,630,647,663,680,696,713,730,746,763,778]},{"start":[406,492],"end":[786,201],"points":[[406,492],[419,479],[443,456],[499,404],[564,346],[616,308],[685,264],[744,231],[780,212],[820,192],[848,176],[855,169],[868,160],[870,157],[871,156],[871,156],[871,156],[871,156],[870,157],[867,160],[862,166],[856,172],[850,176],[844,180],[835,184],[828,186],[816,190],[806,195],[797,198],[790,200],[787,201],[786,201]],"dx":[380,-291],"dy":[380,-291],"length":675.672552755872,"timing":[266,283,301,316,333,350,367,383,400,417,434,450,467,483,500,517,638,651,667,684,699,717,733,750,767,784,800,817,832,850,867,934]},{"start":[785,201],"end":[511,298],"points":[[785,201],[765,217],[726,241],[655,281],[625,296],[605,304],[584,310],[575,311],[567,312],[564,312],[561,312],[558,311],[554,311],[549,311],[542,311],[534,310],[528,309],[522,307],[516,304],[514,302],[511,299],[511,298],[511,298]],"dx":[-274,97],"dy":[-274,97],"length":307.3486168934491,"timing":[358,381,397,414,430,446,463,480,497,513,530,547,564,580,597,614,630,647,664,680,697,714,746]},{"start":[511,298],"end":[522,574],"points":[[511,298],[511,299],[511,301],[511,303],[513,309],[514,321],[515,341],[516,353],[518,400],[518,436],[519,469],[520,497],[521,515],[521,531],[521,539],[521,548],[521,552],[521,557],[521,559],[521,562],[521,565],[521,567],[521,568],[521,569],[521,571],[521,572],[521,573],[522,573],[522,574]],"dx":[11,276],"dy":[11,276],"length":277.53601868578056,"timing":[247,263,280,296,313,329,346,363,380,396,413,430,447,463,479,497,513,538,546,563,580,596,613,630,646,663,679,696,730]},{"start":[522,573],"end":[453,106],"points":[[522,573],[522,571],[519,553],[518,538],[512,486],[506,443],[499,401],[490,350],[485,323],[478,286],[472,251],[468,232],[464,218],[462,207],[460,203],[460,201],[459,201],[459,200],[459,199],[459,191],[459,187],[459,178],[458,171],[458,161],[458,149],[457,135],[457,127],[456,119],[456,114],[455,111],[454,109],[454,108],[453,107],[453,107],[453,106],[453,106]],"dx":[-69,-467],"dy":[-69,-467],"length":474.6472472716232,"timing":[316,332,348,364,381,398,414,431,448,464,481,498,515,531,547,565,581,598,614,631,648,664,681,698,715,731,747,765,781,797,815,831,847,865,882,915]},{"start":[453,106],"end":[508,273],"points":[[453,106],[454,107],[456,109],[461,113],[468,124],[475,138],[493,186],[501,225],[506,254],[509,275],[510,286],[511,294],[511,298],[511,299],[511,299],[511,299],[511,298],[511,297],[511,296],[511,295],[510,289],[509,286],[509,281],[509,278],[508,275],[508,274],[508,273],[508,273],[508,273]],"dx":[55,167],"dy":[55,167],"length":231.56874451499144,"timing":[193,201,213,231,248,264,281,297,314,331,347,364,380,396,414,476,498,514,531,548,565,581,598,614,631,648,663,681,697]},{"start":[508,273],"end":[175,565],"points":[[508,273],[508,274],[509,284],[508,303],[501,321],[495,337],[483,356],[464,375],[434,394],[393,418],[345,447],[323,461],[302,475],[288,486],[277,494],[269,500],[261,505],[257,507],[253,511],[250,513],[246,517],[242,519],[238,521],[233,523],[227,524],[223,524],[219,525],[213,529],[211,532],[208,537],[206,540],[203,544],[200,547],[197,550],[194,553],[192,555],[189,558],[186,559],[184,560],[182,562],[180,563],[178,564],[176,565],[175,565]],"dx":[-333,292],"dy":[-333,292],"length":465.987844990557,"timing":[239,251,267,283,300,316,333,348,366,383,400,417,433,450,466,483,499,515,532,549,566,583,598,617,633,650,666,683,700,716,733,750,765,782,800,817,833,849,866,883,900,917,933,966]},{"start":[176,565],"end":[224,98],"points":[[176,565],[177,564],[181,562],[184,561],[188,560],[193,558],[198,555],[203,549],[210,537],[215,512],[217,472],[217,402],[215,332],[212,288],[209,243],[209,211],[209,192],[209,160],[216,130],[223,103],[226,88],[228,78],[230,70],[230,66],[230,64],[229,64],[228,64],[227,64],[227,64],[227,65],[227,66],[227,68],[227,70],[227,72],[227,76],[226,79],[226,82],[225,87],[224,88],[224,93],[224,96],[224,97],[224,98]],"dx":[48,-467],"dy":[48,-467],"length":559.9815329238204,"timing":[166,178,196,214,228,244,262,278,294,311,328,345,361,377,395,412,428,444,461,478,494,512,528,545,562,578,595,612,628,644,661,678,695,712,728,745,761,778,795,812,828,843,877]},{"start":[224,98],"end":[317,185],"points":[[224,98],[224,98],[224,98],[224,99],[224,99],[225,101],[225,103],[227,107],[231,113],[237,121],[245,131],[255,143],[264,154],[271,161],[278,167],[282,171],[287,176],[291,179],[294,182],[297,184],[301,185],[304,185],[308,186],[311,186],[312,186],[313,186],[315,186],[315,186],[316,185],[317,185],[317,185]],"dx":[93,87],"dy":[93,87],"length":134.91430294511235,"timing":[152,166,184,199,216,231,249,266,283,300,316,333,349,367,383,400,417,433,450,466,483,500,516,533,549,566,582,599,616,633,671]},{"start":[317,185],"end":[890,265],"points":[[317,185],[317,185],[317,186],[319,189],[325,195],[346,208],[400,234],[440,252],[476,264],[500,270],[526,276],[551,278],[570,278],[604,279],[632,281],[688,284],[711,285],[732,285],[747,285],[754,285],[763,285],[771,283],[780,280],[795,275],[813,270],[835,267],[851,266],[865,266],[876,266],[882,266],[884,266],[886,266],[887,266],[888,265],[889,265],[890,265],[890,265]],"dx":[573,80],"dy":[573,80],"length":598.0979770627066,"timing":[214,223,231,248,265,282,297,315,332,349,365,382,399,416,431,449,465,481,498,516,531,547,565,582,599,615,632,649,664,681,698,716,731,748,765,782,831]},{"start":[890,265],"end":[383,363],"points":[[890,265],[889,265],[888,265],[885,266],[881,266],[874,267],[862,268],[855,269],[851,271],[845,274],[840,279],[830,286],[815,296],[795,308],[774,318],[749,328],[724,336],[695,343],[662,348],[623,352],[589,354],[559,355],[541,355],[513,355],[493,355],[485,355],[473,355],[465,355],[453,355],[438,352],[419,349],[405,347],[396,346],[388,344],[384,343],[383,342],[383,342],[383,342],[383,343],[383,343],[383,345],[383,350],[383,354],[383,356],[383,359],[383,360],[383,361],[383,362],[383,363],[383,363],[383,363]],"dx":[-507,98],"dy":[-507,98],"length":548.5926018259422,"timing":[59,66,81,97,114,130,148,164,180,196,214,231,247,263,280,296,314,330,347,363,381,397,413,430,448,464,480,497,514,530,547,563,580,596,613,631,647,681,941,964,981,997,1014,1030,1047,1064,1080,1097,1114,1131,1164]},{"start":[383,363],"end":[921,319],"points":[[383,363],[385,363],[400,359],[431,352],[483,338],[548,322],[592,312],[642,305],[656,303],[691,302],[718,303],[745,307],[771,312],[791,316],[812,322],[826,326],[839,328],[849,329],[858,329],[869,329],[886,329],[896,327],[902,326],[908,325],[911,324],[913,324],[914,323],[916,322],[919,320],[921,320],[921,319]],"dx":[538,-44],"dy":[538,-44],"length":550.4334181894102,"timing":[248,268,284,300,317,334,351,367,383,400,417,434,449,467,483,500,517,534,551,567,584,600,617,632,650,667,683,699,717,733,767]},{"start":[921,319],"end":[820,409],"points":[[921,319],[920,319],[917,322],[913,325],[909,329],[903,335],[887,347],[876,354],[866,360],[857,365],[848,370],[841,375],[834,380],[828,388],[824,393],[821,400],[819,403],[819,406],[819,406],[819,407],[819,407],[819,407],[819,408],[819,408],[820,408],[820,409]],"dx":[-101,90],"dy":[-101,90],"length":141.50544434576614,"timing":[70,83,100,116,133,149,167,182,199,216,233,250,266,283,300,315,333,349,366,383,399,417,433,450,466,483]},{"start":[819,409],"end":[680,797],"points":[[819,409],[814,410],[806,419],[796,433],[786,455],[776,482],[768,510],[761,539],[751,583],[748,600],[743,625],[740,631],[737,640],[734,643],[733,643],[732,643],[732,644],[726,659],[720,678],[712,705],[710,713],[706,728],[704,735],[703,740],[701,744],[700,749],[699,754],[698,758],[697,763],[697,766],[696,768],[696,769],[695,769],[694,771],[692,775],[689,784],[685,794],[683,800],[682,805],[681,806],[680,806],[680,806],[679,805],[679,805],[679,805],[679,803],[679,801],[679,801],[679,800],[679,799],[679,798],[680,798],[680,797],[680,797]],"dx":[-139,388],"dy":[-139,388],"length":440.3103932517893,"timing":[263,281,298,314,331,348,365,381,398,415,431,448,464,480,498,515,909,931,948,967,981,998,1014,1031,1048,1064,1081,1098,1114,1132,1148,1165,1181,1198,1214,1231,1247,1265,1282,1298,1314,1331,1348,1415,1674,1698,1715,1732,1747,1765,1781,1797,1814,1848]},{"start":[680,797],"end":[436,142],"points":[[680,797],[680,796],[680,796],[680,796],[680,796],[677,792],[668,773],[650,737],[620,691],[588,643],[534,561],[493,471],[461,350],[449,210],[449,114],[455,47],[456,29],[456,3],[455,3],[454,7],[452,18],[451,29],[449,43],[448,58],[446,70],[444,83],[442,96],[440,108],[439,121],[438,128],[437,132],[437,134],[436,136],[436,136],[436,138],[436,139],[436,141],[436,141],[436,142]],"dx":[-244,-655],"dy":[-244,-655],"length":991.5613475604135,"timing":[167,199,223,255,280,296,313,330,346,363,379,397,413,430,446,463,480,497,630,646,663,679,696,713,730,746,763,780,796,814,830,847,863,879,897,913,930,947,979]},{"start":[436,143],"end":[1463,805],"points":[[436,143],[436,143],[436,144],[436,146],[437,148],[437,150],[438,151],[438,152],[439,153],[439,154],[442,157],[447,164],[463,182],[506,228],[581,291],[675,357],[744,400],[860,458],[919,486],[972,509],[1021,533],[1107,583],[1186,638],[1270,697],[1324,728],[1375,753],[1407,765],[1424,769],[1439,775],[1450,779],[1456,783],[1457,786],[1457,789],[1457,791],[1457,793],[1457,794],[1457,794],[1457,796],[1457,802],[1457,811],[1458,817],[1459,822],[1459,824],[1459,824],[1460,824],[1460,824],[1460,823],[1460,821],[1461,818],[1462,813],[1463,804],[1464,800],[1465,797],[1466,794],[1467,793],[1467,792],[1467,793],[1466,796],[1465,799],[1464,802],[1463,804],[1463,805],[1463,805],[1463,805]],"dx":[1027,662],"dy":[1027,662],"length":1306.8135519013833,"timing":[109,116,133,150,166,184,199,217,233,250,266,283,300,316,333,350,366,383,400,415,433,449,465,483,499,520,533,550,567,583,600,617,632,649,666,683,700,716,733,749,767,783,799,816,833,869,883,899,917,933,950,966,983,1000,1017,1066,1566,1583,1600,1616,1633,1649,1666,1683]},{"start":[1463,804],"end":[1436,416],"points":[[1463,804],[1463,802],[1463,791],[1463,743],[1460,686],[1456,639],[1454,604],[1450,571],[1448,550],[1447,540],[1446,528],[1445,520],[1444,507],[1441,492],[1440,478],[1438,469],[1437,462],[1436,458],[1436,457],[1436,456],[1436,455],[1436,454],[1436,454],[1436,452],[1436,445],[1436,436],[1436,428],[1436,421],[1436,417],[1436,416],[1436,416],[1436,416]],"dx":[-27,-388],"dy":[-27,-388],"length":389.5810361462286,"timing":[285,298,315,331,348,364,381,398,414,432,448,464,481,498,515,531,547,564,581,598,615,631,648,664,681,698,715,731,748,764,781,864]},{"start":[1435,416],"end":[1529,165],"points":[[1435,416],[1433,418],[1431,420],[1424,425],[1417,431],[1412,434],[1408,436],[1406,437],[1407,432],[1416,416],[1436,382],[1457,339],[1481,288],[1496,258],[1507,238],[1518,221],[1525,212],[1529,207],[1532,204],[1535,201],[1536,200],[1537,199],[1537,199],[1537,198],[1537,197],[1536,193],[1533,186],[1533,181],[1532,177],[1531,172],[1530,169],[1530,168],[1530,167],[1529,166],[1529,166],[1529,166],[1529,166],[1529,165],[1529,165]],"dx":[94,-251],"dy":[94,-251],"length":344.41043494775516,"timing":[197,204,217,234,249,267,284,300,317,334,351,367,384,401,418,434,450,467,484,501,517,534,551,567,584,599,617,634,651,667,684,700,717,734,750,767,782,800,818]},{"start":[1528,165],"end":[120,119],"points":[[1528,165],[1519,168],[1502,175],[1444,197],[1363,224],[1269,251],[1155,279],[1039,305],[931,326],[819,347],[693,363],[550,372],[418,374],[348,367],[281,348],[248,333],[210,311],[199,304],[184,292],[174,285],[166,277],[163,274],[159,269],[155,263],[152,257],[148,250],[145,242],[143,232],[142,221],[142,210],[142,200],[142,191],[142,180],[150,162],[149,162],[148,161],[143,158],[138,152],[131,143],[126,134],[121,124],[120,121],[120,119],[120,119]],"dx":[-1408,-46],"dy":[-1408,-46],"length":1588.7619871351633,"timing":[242,264,280,297,314,331,347,364,381,396,413,430,447,463,480,497,515,530,547,563,580,597,613,630,647,663,680,697,713,730,747,763,780,797,1051,1063,1080,1097,1113,1130,1147,1163,1180,1197]},{"start":[120,119],"end":[1355,422],"points":[[120,119],[144,124],[207,144],[305,180],[441,233],[579,284],[666,314],[765,339],[877,366],[909,373],[1003,399],[1065,417],[1108,427],[1166,439],[1195,443],[1219,446],[1228,446],[1240,446],[1246,446],[1252,444],[1259,442],[1268,439],[1273,438],[1278,437],[1281,436],[1286,434],[1291,431],[1302,426],[1308,424],[1314,423],[1317,422],[1322,422],[1327,422],[1334,422],[1341,422],[1347,422],[1351,422],[1353,422],[1354,422],[1355,422],[1355,422]],"dx":[1235,303],"dy":[1235,303],"length":1289.4489338901105,"timing":[253,280,296,314,332,347,363,382,399,412,430,446,463,480,496,513,530,546,564,580,597,616,630,646,665,679,696,713,729,746,763,780,797,813,830,846,864,880,897,912,947]},{"start":[1354,422],"end":[458,227],"points":[[1354,422],[1354,422],[1350,422],[1345,422],[1335,422],[1321,422],[1311,422],[1301,422],[1295,423],[1288,423],[1278,423],[1264,416],[1230,400],[1167,363],[1041,303],[968,283],[876,272],[797,272],[731,272],[674,273],[619,273],[567,264],[549,258],[514,246],[499,240],[489,237],[484,235],[483,235],[483,235],[482,235],[482,236],[480,239],[479,239],[478,239],[477,239],[476,238],[474,235],[471,234],[463,230],[460,228],[459,227],[458,227]],"dx":[-896,-195],"dy":[-896,-195],"length":940.7634504971056,"timing":[105,114,130,148,164,180,198,214,231,248,264,282,298,315,331,348,365,381,398,415,431,447,465,482,498,514,531,548,565,582,598,615,631,650,665,681,698,715,731,748,764,798]},{"start":[459,227],"end":[1639,837],"points":[[459,227],[460,228],[463,230],[470,235],[479,240],[494,246],[520,250],[579,257],[671,274],[794,319],[880,360],[961,408],[1019,449],[1097,508],[1183,572],[1355,694],[1425,744],[1495,791],[1527,812],[1558,830],[1572,837],[1579,839],[1585,841],[1588,841],[1589,841],[1594,840],[1599,839],[1607,839],[1615,838],[1626,837],[1631,837],[1635,837],[1637,837],[1638,837],[1639,837],[1639,837],[1639,837]],"dx":[1180,610],"dy":[1180,610],"length":1354.67832986869,"timing":[183,190,200,217,233,250,267,284,300,316,333,350,367,384,400,417,434,450,467,483,500,517,534,549,781,800,816,834,850,866,883,899,916,933,949,967,1000]},{"start":[1516,190],"end":[1804,203],"points":[[1516,190],[1514,192],[1514,193],[1513,194],[1512,194],[1512,196],[1512,197],[1511,197],[1511,198],[1509,198],[1509,200],[1511,202],[1512,203],[1521,209],[1531,211],[1551,216],[1564,219],[1579,223],[1599,226],[1628,228],[1637,228],[1652,228],[1674,228],[1687,228],[1696,227],[1716,227],[1719,226],[1729,226],[1741,226],[1745,226],[1750,224],[1751,224],[1752,223],[1752,222],[1754,222],[1755,220],[1756,219],[1757,219],[1759,218],[1760,216],[1763,215],[1764,213],[1765,211],[1768,209],[1783,202],[1785,202],[1787,202],[1789,202],[1790,201],[1793,201],[1794,201],[1795,201],[1799,202],[1800,202],[1802,202],[1803,202],[1803,203],[1804,203]],"dx":[288,13],"dy":[288,13],"length":326.7436613385001,"timing":[17,27,37,47,57,68,99,150,167,178,263,278,287,298,308,318,328,337,348,357,368,378,388,398,408,419,428,439,448,457,467,477,487,501,509,517,530,538,548,561,567,577,590,599,670,678,688,698,708,720,728,738,748,758,768,778,791,798]},{"start":[1785,214],"end":[1376,793],"points":[[1785,214],[1783,214],[1782,215],[1781,216],[1779,216],[1778,218],[1777,218],[1776,218],[1774,219],[1773,219],[1772,220],[1769,222],[1766,222],[1765,223],[1761,225],[1760,225],[1759,227],[1757,228],[1756,228],[1755,229],[1753,231],[1750,233],[1742,237],[1729,245],[1705,259],[1700,264],[1687,275],[1673,288],[1646,320],[1633,337],[1618,355],[1603,378],[1579,407],[1557,431],[1536,454],[1506,492],[1496,506],[1491,513],[1469,545],[1460,558],[1452,574],[1440,605],[1435,631],[1432,648],[1430,663],[1427,676],[1423,688],[1419,700],[1417,704],[1414,709],[1405,726],[1404,728],[1401,734],[1400,741],[1399,744],[1399,745],[1396,751],[1393,754],[1389,761],[1387,765],[1384,769],[1382,775],[1380,777],[1380,778],[1380,779],[1380,780],[1379,782],[1379,783],[1378,788],[1378,791],[1378,792],[1376,793]],"dx":[-409,579],"dy":[-409,579],"length":735.6645171579476,"timing":[6,28,36,46,56,68,84,91,100,105,118,126,135,147,161,166,179,186,196,208,215,226,236,245,255,266,276,285,295,306,315,325,335,346,355,366,376,386,396,405,416,425,436,448,458,468,475,486,494,506,516,525,536,546,555,565,576,586,596,605,616,625,636,645,656,715,725,736,746,756,766,775]},{"start":[1372,770],"end":[1648,70],"points":[[1372,770],[1372,767],[1372,766],[1372,765],[1372,763],[1372,762],[1371,762],[1371,761],[1371,760],[1371,758],[1371,757],[1371,756],[1371,754],[1371,753],[1371,752],[1371,750],[1371,749],[1371,748],[1371,747],[1371,744],[1374,735],[1379,715],[1384,700],[1389,680],[1406,630],[1409,620],[1421,589],[1450,518],[1467,479],[1486,440],[1519,366],[1530,345],[1547,312],[1567,279],[1574,266],[1582,251],[1588,240],[1592,232],[1595,225],[1599,215],[1601,210],[1603,206],[1605,197],[1606,193],[1608,189],[1608,180],[1608,177],[1608,176],[1609,172],[1609,171],[1610,169],[1610,168],[1612,167],[1613,162],[1616,156],[1617,154],[1619,147],[1622,138],[1623,135],[1626,130],[1626,128],[1630,120],[1632,112],[1634,109],[1636,103],[1640,95],[1641,93],[1643,89],[1643,86],[1644,83],[1644,81],[1645,80],[1647,76],[1647,73],[1647,72],[1648,70]],"dx":[276,-700],"dy":[276,-700],"length":760.8363513721595,"timing":[5,17,31,36,48,65,70,79,86,109,116,139,170,192,209,230,238,246,257,266,277,286,298,306,316,327,336,346,356,366,376,386,396,407,416,426,437,446,457,466,477,485,497,505,516,527,537,547,556,566,586,597,606,617,628,636,646,657,667,675,686,697,706,719,726,736,746,757,767,785,795,806,816,826,837,846]},{"start":[1645,74],"end":[993,839],"points":[[1645,74],[1644,76],[1644,77],[1643,77],[1643,78],[1643,80],[1641,80],[1641,81],[1639,85],[1638,85],[1636,86],[1636,87],[1635,90],[1634,91],[1632,93],[1631,94],[1628,98],[1628,99],[1626,102],[1610,120],[1596,137],[1588,146],[1550,193],[1518,230],[1491,261],[1462,294],[1430,330],[1389,376],[1359,411],[1329,445],[1284,495],[1264,515],[1257,524],[1215,564],[1197,579],[1180,593],[1149,615],[1145,619],[1128,636],[1123,642],[1116,661],[1114,681],[1114,687],[1112,694],[1107,710],[1103,714],[1099,719],[1091,727],[1085,733],[1078,740],[1067,754],[1049,783],[1043,789],[1038,794],[1034,798],[1030,801],[1021,809],[1019,814],[1016,816],[1013,820],[1012,822],[1011,824],[1010,826],[1008,826],[1008,827],[1003,829],[999,832],[995,835],[995,836],[993,837],[993,839]],"dx":[-652,765],"dy":[-652,765],"length":1023.7340973652691,"timing":[13,26,33,56,70,83,98,109,141,147,154,163,173,183,194,204,213,224,233,244,253,264,274,284,294,304,314,323,334,344,355,364,374,383,393,404,414,425,434,447,466,474,485,494,504,514,524,534,544,554,564,598,618,634,643,653,664,675,684,694,703,713,724,735,748,764,778,794,803,813,826]},{"start":[995,815],"end":[1176,928],"points":[[995,815],[997,811],[997,809],[997,806],[998,805],[998,802],[1002,785],[1003,784],[1003,779],[1003,775],[1003,772],[1003,771],[1003,767],[1004,758],[1006,754],[1008,751],[1010,749],[1017,741],[1021,740],[1030,736],[1050,732],[1055,732],[1067,732],[1089,744],[1094,749],[1099,758],[1107,775],[1111,785],[1117,798],[1130,822],[1137,832],[1142,840],[1152,853],[1158,862],[1160,867],[1165,876],[1165,880],[1167,881],[1168,888],[1168,889],[1169,893],[1169,894],[1171,894],[1171,898],[1171,902],[1171,905],[1171,910],[1171,911],[1171,912],[1171,914],[1171,915],[1172,916],[1172,919],[1172,920],[1172,922],[1173,925],[1175,928],[1176,928]],"dx":[181,113],"dy":[181,113],"length":367.47374712498384,"timing":[2,12,21,33,42,53,89,108,122,132,143,152,162,213,222,233,242,252,262,272,282,293,302,313,323,332,343,352,363,372,384,393,402,412,422,432,442,453,462,475,493,503,513,522,536,543,553,563,571,610,622,632,642,653,663,673,687,794]},{"start":[1176,925],"end":[1762,810],"points":[[1176,925],[1176,924],[1176,923],[1176,922],[1176,920],[1176,918],[1176,916],[1176,915],[1176,914],[1176,912],[1176,910],[1176,909],[1176,907],[1176,905],[1176,903],[1176,902],[1176,898],[1176,896],[1176,894],[1176,893],[1176,890],[1180,884],[1185,879],[1190,875],[1207,870],[1221,866],[1238,863],[1272,859],[1294,856],[1332,853],[1340,851],[1356,850],[1402,842],[1424,840],[1472,833],[1484,830],[1522,827],[1546,824],[1593,820],[1614,819],[1644,816],[1658,815],[1674,814],[1696,811],[1705,810],[1714,810],[1719,810],[1726,810],[1739,810],[1749,810],[1753,810],[1756,810],[1757,810],[1758,810],[1759,810],[1761,810],[1762,810]],"dx":[586,-115],"dy":[586,-115],"length":632.6944489012749,"timing":[26,37,46,56,66,84,90,105,116,126,136,146,155,166,176,186,196,206,216,226,236,246,256,265,275,285,296,306,316,326,336,346,356,365,376,389,396,405,415,426,435,446,456,466,478,486,496,505,515,526,537,546,556,675,707,716,738]},{"start":[1761,810],"end":[357,85],"points":[[1761,810],[1761,808],[1759,808],[1758,808],[1757,808],[1756,808],[1754,808],[1752,808],[1746,807],[1741,806],[1737,806],[1729,804],[1726,803],[1723,803],[1715,802],[1707,801],[1698,799],[1661,789],[1646,786],[1615,777],[1542,754],[1497,739],[1450,724],[1399,707],[1375,698],[1336,685],[1232,647],[1180,626],[1121,603],[1056,574],[1005,552],[957,528],[912,502],[826,451],[795,431],[766,413],[718,378],[692,359],[652,322],[636,308],[614,290],[588,265],[576,255],[566,244],[546,225],[540,218],[536,215],[526,206],[519,202],[509,195],[502,189],[500,188],[496,186],[485,176],[481,171],[480,169],[478,163],[472,154],[471,152],[458,139],[448,132],[438,127],[415,118],[403,114],[390,109],[357,97],[333,89],[318,82],[311,78],[306,74],[299,67],[298,63],[297,63],[297,58],[297,57],[297,56],[297,54],[298,54],[301,56],[302,57],[312,65],[320,69],[324,70],[338,78],[353,84],[357,85]],"dx":[-1404,-725],"dy":[-1404,-725],"length":1752.6141608052824,"timing":[21,29,39,118,129,136,148,156,166,178,186,195,205,215,226,236,246,258,266,275,286,295,306,316,328,336,346,358,366,376,386,395,405,416,426,435,445,457,465,476,485,496,505,515,526,536,545,555,566,575,585,598,606,615,625,636,645,655,666,676,687,696,706,715,726,737,753,765,776,786,796,809,815,826,835,846,855,968,982,996,1006,1016,1026,1036,1073,1110]},{"start":[358,85],"end":[1836,444],"points":[[358,85],[359,85],[360,85],[362,87],[367,88],[370,91],[376,94],[394,106],[412,115],[436,127],[460,139],[533,165],[559,172],[627,188],[665,195],[717,202],[806,209],[873,213],[932,217],[1018,223],[1066,227],[1123,232],[1213,240],[1257,244],[1279,247],[1360,256],[1395,261],[1468,273],[1491,278],[1526,286],[1565,296],[1591,305],[1610,312],[1634,322],[1637,323],[1643,327],[1655,335],[1659,337],[1664,341],[1673,347],[1675,347],[1680,350],[1684,353],[1686,356],[1688,357],[1690,361],[1693,363],[1697,369],[1708,382],[1716,389],[1725,399],[1738,410],[1750,418],[1755,422],[1767,428],[1771,430],[1772,430],[1775,431],[1777,431],[1803,436],[1807,436],[1810,438],[1812,438],[1816,438],[1818,438],[1828,440],[1831,441],[1832,443],[1834,444],[1836,444]],"dx":[1478,359],"dy":[1478,359],"length":1555.2278728406543,"timing":[32,52,148,163,180,189,200,209,220,230,238,249,260,269,279,290,299,312,319,330,338,350,359,369,379,389,403,419,428,439,449,462,469,479,490,499,509,522,530,539,551,560,569,579,590,599,612,620,630,640,649,660,672,679,690,699,710,719,729,787,800,810,820,829,840,874,888,900,909,920]},{"start":[1828,440],"end":[1191,773],"points":[[1828,440],[1827,440],[1825,440],[1824,440],[1823,439],[1821,439],[1820,439],[1819,439],[1817,439],[1816,439],[1814,437],[1812,437],[1811,437],[1810,437],[1807,437],[1804,437],[1799,440],[1785,445],[1769,453],[1750,461],[1686,482],[1654,492],[1633,500],[1564,526],[1531,541],[1511,552],[1478,570],[1448,587],[1439,592],[1391,617],[1374,626],[1359,632],[1326,647],[1318,651],[1313,653],[1305,656],[1301,662],[1300,665],[1299,669],[1296,677],[1294,681],[1291,687],[1281,699],[1275,704],[1268,710],[1256,718],[1244,725],[1236,730],[1218,742],[1209,748],[1204,753],[1197,758],[1193,762],[1192,765],[1189,768],[1189,769],[1189,770],[1189,771],[1189,773],[1191,773]],"dx":[-637,333],"dy":[-637,333],"length":744.4158574099677,"timing":[15,26,34,44,54,75,92,105,156,165,175,183,194,215,224,233,244,254,264,273,284,293,304,314,324,334,344,354,364,374,384,394,404,414,423,434,444,454,464,473,485,494,505,513,524,535,543,555,564,575,584,593,604,614,623,634,652,674,792,830]},{"start":[1191,771],"end":[1618,539],"points":[[1191,771],[1191,770],[1191,769],[1189,768],[1189,766],[1188,765],[1188,764],[1187,764],[1187,762],[1186,760],[1184,758],[1182,756],[1180,755],[1178,752],[1175,748],[1175,747],[1174,743],[1174,738],[1175,734],[1182,725],[1187,721],[1189,718],[1197,713],[1217,703],[1226,697],[1240,691],[1270,675],[1278,673],[1292,665],[1331,647],[1348,639],[1365,632],[1381,626],[1404,615],[1435,602],[1449,597],[1462,591],[1474,585],[1490,578],[1494,575],[1501,571],[1511,565],[1513,562],[1517,561],[1520,558],[1522,557],[1524,557],[1529,556],[1529,554],[1530,554],[1531,554],[1533,553],[1536,553],[1539,552],[1546,552],[1557,549],[1562,549],[1573,549],[1578,548],[1586,548],[1592,546],[1596,545],[1601,545],[1609,543],[1613,541],[1616,540],[1618,539]],"dx":[427,-232],"dy":[427,-232],"length":538.1387298247955,"timing":[62,78,86,94,116,131,146,154,166,175,185,195,205,216,226,236,246,255,266,275,286,296,306,316,326,335,345,355,366,375,385,396,406,416,426,436,445,456,466,476,485,496,506,516,525,536,546,555,566,576,628,635,646,656,666,676,686,696,711,726,735,746,756,765,776,786,796]},{"start":[1613,540],"end":[794,857],"points":[[1613,540],[1612,540],[1611,540],[1609,540],[1608,540],[1607,540],[1605,540],[1604,540],[1603,540],[1601,540],[1600,540],[1599,540],[1598,540],[1596,540],[1592,541],[1591,541],[1588,541],[1581,543],[1577,543],[1573,544],[1566,545],[1557,546],[1551,549],[1539,554],[1530,559],[1517,566],[1478,583],[1455,593],[1430,602],[1393,618],[1373,627],[1323,649],[1291,663],[1269,673],[1226,691],[1202,700],[1180,709],[1159,718],[1122,735],[1115,739],[1096,749],[1076,761],[1064,770],[1057,775],[1044,783],[1033,788],[1022,792],[992,799],[977,802],[963,808],[950,813],[937,818],[932,822],[919,830],[914,832],[910,835],[902,838],[895,840],[879,844],[869,847],[860,849],[849,853],[843,856],[838,857],[833,858],[827,860],[824,861],[820,862],[810,866],[799,871],[795,874],[791,877],[787,880],[785,883],[784,884],[782,884],[782,886],[784,886],[784,884],[785,883],[786,882],[786,880],[787,878],[789,875],[790,871],[791,869],[791,867],[791,866],[791,865],[793,863],[793,862],[793,861],[794,860],[794,858],[794,857]],"dx":[-819,317],"dy":[-819,317],"length":943.260210463766,"timing":[16,41,67,76,89,97,110,119,133,141,156,167,175,187,196,207,217,226,237,245,257,267,275,287,296,307,316,325,337,346,355,367,376,386,397,406,417,426,437,447,456,467,476,487,497,506,515,526,537,547,555,567,575,586,597,606,617,627,637,647,657,666,677,686,695,707,717,727,736,747,760,766,776,788,796,806,816,971,1069,1078,1100,1107,1120,1127,1137,1147,1156,1167,1176,1189,1212,1226,1237,1246,1257]},{"start":[795,856],"end":[1275,793],"points":[[795,856],[797,854],[802,850],[804,849],[810,847],[826,841],[837,837],[871,834],[877,834],[917,831],[959,830],[981,828],[998,827],[1014,826],[1054,822],[1070,821],[1103,818],[1115,817],[1122,817],[1146,814],[1154,813],[1162,811],[1175,809],[1181,808],[1184,808],[1193,806],[1199,805],[1205,804],[1212,801],[1215,801],[1219,800],[1222,798],[1223,798],[1224,798],[1228,797],[1235,797],[1242,796],[1246,796],[1255,795],[1259,795],[1263,795],[1271,795],[1274,793],[1275,793]],"dx":[480,-63],"dy":[480,-63],"length":488.7165118960999,"timing":[225,241,250,260,270,280,289,300,313,331,339,350,361,371,379,390,400,410,421,430,440,451,460,470,479,490,500,510,520,531,540,550,607,621,630,640,650,660,671,680,690,700,712,720]},{"start":[1275,792],"end":[717,118],"points":[[1275,792],[1275,791],[1275,789],[1274,789],[1274,788],[1272,787],[1271,787],[1271,785],[1262,780],[1255,776],[1251,775],[1218,757],[1198,746],[1175,733],[1120,698],[1110,691],[1088,674],[1027,615],[1006,592],[984,567],[943,519],[923,494],[903,469],[851,407],[831,382],[802,345],[766,306],[733,267],[724,252],[717,242],[713,232],[712,222],[711,215],[711,211],[711,209],[711,208],[712,207],[713,206],[714,204],[717,200],[717,199],[718,198],[720,195],[721,195],[721,194],[722,189],[724,185],[724,182],[725,163],[725,157],[725,142],[724,137],[720,126],[718,124],[717,120],[717,118]],"dx":[-558,-674],"dy":[-558,-674],"length":926.3598946869195,"timing":[88,106,129,137,158,184,194,204,215,224,235,245,255,265,275,285,295,305,315,324,334,345,355,364,374,384,395,407,416,425,436,444,455,464,475,562,574,584,595,605,614,624,635,644,655,665,675,684,695,705,715,725,738,746,755,765]},{"start":[714,122],"end":[211,385],"points":[[714,122],[714,124],[713,125],[713,126],[713,127],[713,129],[712,129],[712,130],[709,131],[707,134],[701,138],[688,146],[674,155],[652,165],[616,181],[596,190],[570,203],[522,229],[499,244],[492,248],[475,261],[440,285],[426,291],[406,300],[383,309],[371,313],[362,316],[344,321],[339,322],[332,324],[327,325],[322,326],[310,329],[304,330],[297,332],[292,333],[283,337],[280,338],[274,341],[261,347],[258,348],[255,350],[245,354],[242,355],[237,357],[229,361],[227,364],[224,365],[220,370],[216,376],[215,377],[213,383],[211,385]],"dx":[-503,263],"dy":[-503,263],"length":579.9163221078969,"timing":[2,11,22,31,40,63,247,262,274,280,291,301,312,321,332,341,351,361,371,382,391,401,411,422,431,441,451,460,470,482,491,502,512,521,531,542,551,561,571,581,591,601,611,622,632,641,652,661,672,681,692,701,711]},{"start":[210,386],"end":[1017,860],"points":[[210,386],[211,386],[213,386],[214,386],[215,386],[216,386],[218,386],[219,385],[220,385],[223,385],[224,385],[226,385],[227,385],[232,385],[233,385],[236,385],[240,386],[242,387],[251,393],[267,400],[284,409],[297,416],[331,433],[352,443],[389,463],[406,473],[431,489],[448,500],[492,534],[509,547],[526,560],[561,589],[579,602],[597,616],[635,643],[644,650],[662,663],[696,689],[712,702],[726,715],[748,732],[755,736],[768,746],[788,759],[803,766],[817,772],[834,779],[853,786],[882,797],[891,801],[907,807],[914,811],[931,818],[940,821],[948,824],[961,828],[970,829],[974,829],[987,830],[992,830],[995,830],[996,830],[998,830],[999,830],[1000,830],[1000,832],[1004,834],[1007,838],[1008,842],[1011,850],[1012,853],[1013,856],[1014,859],[1016,860],[1017,860]],"dx":[807,474],"dy":[807,474],"length":958.176977851378,"timing":[10,25,30,55,83,103,109,120,130,140,150,160,169,179,190,200,209,220,231,240,250,260,270,280,290,300,310,320,330,340,349,360,370,380,390,400,409,419,430,440,450,461,470,480,490,500,509,520,529,539,550,561,570,580,590,601,610,620,629,641,649,660,673,680,695,710,720,730,740,750,760,769,779,790,800]},{"start":[1017,859],"end":[367,508],"points":[[1017,859],[1017,858],[1016,856],[1016,855],[1016,854],[1014,853],[1014,851],[1014,850],[1013,849],[1013,847],[1013,846],[1012,843],[1011,842],[1009,841],[1007,836],[1004,832],[998,827],[974,810],[957,798],[946,791],[905,769],[880,758],[852,745],[789,719],[778,713],[741,699],[680,674],[645,660],[589,637],[578,632],[557,622],[513,602],[496,591],[481,583],[470,577],[459,570],[455,568],[451,563],[450,560],[449,559],[449,557],[449,555],[449,553],[449,552],[449,551],[449,550],[448,548],[445,547],[442,544],[440,543],[432,538],[418,530],[412,527],[392,517],[384,514],[380,513],[375,511],[368,509],[367,508]],"dx":[-650,-351],"dy":[-650,-351],"length":756.4636452577402,"timing":[66,75,88,95,110,118,133,145,153,163,174,183,194,203,214,223,234,244,254,264,274,284,294,303,313,323,333,344,353,363,374,383,394,403,412,423,433,443,454,463,473,484,492,507,526,556,570,583,594,603,614,624,634,643,654,664,673,684,693]},{"start":[368,508],"end":[772,300],"points":[[368,508],[370,508],[371,508],[373,508],[376,508],[377,508],[380,508],[383,508],[388,507],[392,507],[397,507],[403,507],[407,507],[411,508],[416,509],[418,509],[421,511],[429,513],[434,514],[441,516],[459,517],[468,517],[472,516],[496,508],[509,501],[522,494],[550,475],[570,462],[590,449],[614,435],[629,426],[653,412],[681,394],[688,390],[698,382],[714,368],[718,362],[722,357],[723,356],[724,353],[726,352],[727,349],[728,348],[730,345],[733,338],[733,335],[736,331],[737,328],[739,327],[739,326],[740,326],[741,325],[742,323],[745,322],[749,318],[752,317],[755,313],[765,306],[766,305],[768,302],[771,301],[771,300],[772,300]],"dx":[404,-208],"dy":[404,-208],"length":485.19735628454686,"timing":[62,74,82,93,105,111,123,135,142,152,161,172,182,192,201,212,222,232,243,253,262,273,281,292,301,311,321,332,342,353,362,372,383,392,403,412,423,432,442,452,462,472,482,492,503,512,522,533,541,566,615,622,632,642,652,663,672,683,692,702,713,722,733]},{"start":[774,300],"end":[1321,613],"points":[[774,300],[775,301],[785,305],[800,314],[810,322],[826,335],[845,352],[866,369],[883,384],[924,421],[948,439],[1001,475],[1028,491],[1077,513],[1086,517],[1112,526],[1129,531],[1153,539],[1183,549],[1187,551],[1196,553],[1206,559],[1209,559],[1210,561],[1216,565],[1217,565],[1219,569],[1229,575],[1236,582],[1243,585],[1252,588],[1258,591],[1269,592],[1273,594],[1277,595],[1281,595],[1283,596],[1284,596],[1287,597],[1288,599],[1290,599],[1291,600],[1292,600],[1292,601],[1295,603],[1297,604],[1301,605],[1305,608],[1308,609],[1313,612],[1316,613],[1317,613],[1318,613],[1319,613],[1321,613]],"dx":[547,313],"dy":[547,313],"length":643.1364330828346,"timing":[213,229,239,249,259,272,277,288,299,309,319,329,339,349,361,369,378,389,399,408,419,429,438,449,459,468,479,489,498,509,518,529,539,548,559,571,579,591,599,609,621,629,638,649,659,668,678,688,698,709,719,729,739,752,803]},{"start":[1319,614],"end":[1080,423],"points":[[1319,614],[1319,613],[1318,613],[1317,613],[1316,613],[1313,613],[1305,610],[1301,610],[1296,608],[1282,601],[1267,595],[1254,588],[1226,573],[1219,568],[1204,558],[1173,539],[1157,529],[1143,519],[1121,500],[1117,496],[1113,492],[1102,479],[1098,474],[1097,471],[1095,466],[1093,465],[1093,462],[1092,461],[1091,458],[1091,457],[1089,456],[1088,453],[1088,452],[1087,450],[1087,449],[1087,447],[1085,445],[1085,441],[1084,440],[1084,435],[1083,430],[1082,428],[1082,426],[1080,423]],"dx":[-239,-191],"dy":[-239,-191],"length":323.3215321391107,"timing":[121,130,173,189,198,209,218,228,238,249,258,270,278,288,298,308,319,328,338,350,358,368,379,389,399,411,418,428,438,451,458,468,478,489,498,508,519,528,540,548,558,568,579,588]},{"start":[1080,422],"end":[788,812],"points":[[1080,422],[1079,423],[1076,424],[1071,431],[1065,440],[1061,445],[1048,460],[1030,478],[1013,493],[967,532],[939,553],[926,564],[913,575],[902,586],[900,588],[897,591],[897,592],[896,593],[894,599],[888,612],[881,623],[873,634],[870,639],[857,660],[853,668],[847,677],[844,687],[838,696],[832,712],[823,731],[819,739],[812,752],[806,762],[802,769],[798,774],[792,784],[790,788],[788,794],[788,795],[788,797],[788,799],[788,800],[788,801],[788,804],[788,805],[788,807],[788,810],[788,812]],"dx":[-292,390],"dy":[-292,390],"length":500.019435523062,"timing":[205,4700,4707,4714,4722,4731,4742,4752,4760,4772,4781,4791,4801,4811,4824,4831,4841,4852,4861,4871,4882,4891,4902,4912,4922,4931,4942,4952,4961,4972,4983,4991,5000,5011,5022,5032,5043,5051,5062,5072,5082,5091,5102,5165,5175,5191,5201,5212]},{"start":[740,757],"end":[61,297],"points":[[740,757],[686,716],[659,695],[611,656],[577,630],[542,601],[472,545],[439,519],[409,495],[370,462],[342,440],[325,426],[282,394],[266,385],[247,372],[240,370],[222,358],[218,355],[216,354],[214,353],[213,351],[212,350],[210,350],[210,349],[209,349],[208,349],[205,348],[200,346],[190,345],[178,342],[153,336],[140,333],[135,331],[106,322],[96,319],[88,315],[76,311],[73,309],[73,307],[71,306],[70,306],[70,305],[69,303],[66,302],[61,297]],"dx":[-679,-460],"dy":[-679,-460],"length":833.0304745436617,"timing":[621,633,643,652,663,673,682,693,703,713,723,733,743,753,763,773,783,793,803,832,844,857,873,883,903,913,923,934,946,953,962,976,983,993,1004,1013,1024,1033,1044,1053,1088,1104,1114,1127,1167]},{"start":[97,294],"end":[1345,103],"points":[[97,294],[113,294],[119,294],[132,296],[147,297],[164,297],[182,297],[216,298],[227,298],[238,299],[269,301],[286,302],[310,303],[319,303],[330,303],[351,305],[390,305],[412,303],[434,302],[483,297],[507,294],[530,292],[574,290],[594,289],[615,289],[647,289],[687,289],[712,288],[785,283],[824,277],[863,272],[925,263],[960,259],[1014,251],[1046,247],[1076,242],[1086,241],[1135,232],[1154,227],[1172,221],[1213,208],[1219,206],[1232,199],[1250,189],[1254,186],[1266,182],[1267,182],[1270,181],[1271,181],[1272,181],[1272,180],[1275,177],[1280,172],[1292,158],[1298,150],[1305,142],[1311,136],[1318,129],[1323,124],[1328,119],[1329,116],[1331,115],[1332,113],[1333,112],[1333,111],[1337,107],[1340,107],[1344,103],[1345,103]],"dx":[1248,-191],"dy":[1248,-191],"length":1299.5327337736185,"timing":[7,16,26,36,46,57,66,76,87,97,106,117,126,137,147,157,167,177,187,196,207,217,227,236,247,256,267,277,286,297,306,316,327,337,347,357,367,376,387,397,407,416,427,436,447,457,467,477,486,516,527,537,547,557,565,576,587,597,607,616,627,636,646,656,667,677,686,698,718]},{"start":[1341,107],"end":[1067,685],"points":[[1341,107],[1340,107],[1340,108],[1339,110],[1337,110],[1337,111],[1336,111],[1336,112],[1335,112],[1333,113],[1332,115],[1331,116],[1324,120],[1323,121],[1320,123],[1305,138],[1296,149],[1284,164],[1272,182],[1255,212],[1245,232],[1208,295],[1194,320],[1180,342],[1159,373],[1141,403],[1120,440],[1111,457],[1106,467],[1098,489],[1094,499],[1091,511],[1084,535],[1078,551],[1075,562],[1073,566],[1065,585],[1062,593],[1059,601],[1056,611],[1055,615],[1054,619],[1052,626],[1051,629],[1050,635],[1050,639],[1049,640],[1049,641],[1049,645],[1049,646],[1050,649],[1050,650],[1051,651],[1051,654],[1052,655],[1052,657],[1052,659],[1055,663],[1058,668],[1059,672],[1062,675],[1062,676],[1063,676],[1063,677],[1064,679],[1064,680],[1065,683],[1067,684],[1067,685]],"dx":[-274,578],"dy":[-274,578],"length":670.1580765565479,"timing":[0,9,20,29,40,50,60,75,82,106,171,183,190,201,210,220,230,241,251,260,271,281,291,300,310,320,330,340,350,360,370,380,390,400,410,420,430,441,450,461,470,481,491,500,511,520,531,541,550,560,576,581,590,600,610,620,629,641,657,671,680,691,717,734,750,760,770,780,807]},{"start":[1067,684],"end":[1954,191],"points":[[1067,684],[1067,683],[1067,681],[1067,680],[1067,679],[1067,676],[1067,675],[1067,672],[1068,671],[1071,667],[1077,661],[1087,657],[1115,651],[1129,649],[1146,644],[1255,602],[1281,589],[1323,567],[1396,527],[1410,519],[1450,495],[1476,480],[1515,459],[1548,441],[1580,424],[1650,382],[1670,372],[1713,346],[1728,337],[1749,325],[1766,315],[1776,308],[1784,303],[1799,293],[1802,289],[1809,282],[1818,274],[1821,270],[1824,265],[1827,263],[1828,261],[1830,259],[1832,259],[1835,256],[1836,255],[1839,255],[1844,251],[1845,251],[1848,250],[1865,237],[1867,235],[1869,234],[1873,231],[1878,228],[1883,225],[1886,224],[1891,221],[1896,218],[1901,216],[1905,213],[1909,211],[1913,209],[1917,207],[1921,205],[1923,204],[1931,200],[1935,199],[1941,196],[1945,195],[1950,192],[1952,192],[1954,191]],"dx":[887,-493],"dy":[887,-493],"length":1031.0162668684113,"timing":[64,74,83,94,103,167,184,194,206,219,233,251,263,274,283,318,323,334,343,354,364,374,397,403,413,424,434,444,454,463,473,484,494,504,514,524,534,544,555,564,574,585,594,604,614,624,633,644,654,679,685,694,704,714,724,735,744,754,765,774,784,794,803,813,824,834,844,854,864,874,884,895]},{"start":[1937,198],"end":[226,350],"points":[[1937,198],[1936,199],[1935,199],[1934,200],[1932,200],[1931,200],[1931,201],[1928,201],[1923,204],[1921,204],[1917,205],[1913,207],[1910,208],[1909,209],[1905,211],[1901,213],[1900,213],[1889,220],[1883,224],[1876,229],[1856,243],[1844,251],[1836,255],[1792,279],[1767,290],[1737,302],[1675,320],[1648,325],[1603,334],[1497,347],[1436,352],[1389,355],[1306,360],[1246,363],[1187,367],[1081,373],[1024,376],[969,377],[908,379],[860,381],[814,382],[727,383],[695,383],[665,383],[613,385],[588,385],[572,385],[537,385],[527,385],[523,386],[502,387],[492,389],[474,390],[463,391],[459,391],[441,390],[437,389],[436,389],[435,387],[435,386],[433,386],[432,385],[431,385],[425,382],[420,379],[418,379],[403,376],[396,374],[392,373],[371,372],[366,372],[357,372],[337,372],[328,372],[323,372],[301,370],[295,369],[284,368],[262,363],[256,361],[251,359],[238,355],[232,352],[228,351],[226,350]],"dx":[-1711,152],"dy":[-1711,152],"length":1753.544227231244,"timing":[13,24,33,47,56,63,74,83,93,106,114,124,133,143,153,163,174,183,195,203,213,224,233,244,255,263,273,285,293,303,313,324,333,343,354,363,374,383,394,404,414,424,433,444,454,464,473,483,496,503,514,523,535,543,556,573,584,593,604,626,633,646,653,664,673,683,694,703,714,724,734,743,753,764,774,783,797,804,813,824,834,844,854,864,873]},{"start":[232,350],"end":[1544,880],"points":[[232,350],[236,350],[241,351],[242,351],[243,351],[247,351],[250,352],[254,352],[263,352],[271,352],[275,352],[290,352],[298,352],[307,352],[323,352],[332,353],[338,355],[366,360],[393,365],[441,377],[479,385],[531,398],[568,408],[648,430],[750,460],[797,474],[892,505],[941,521],[989,538],[1049,557],[1093,574],[1136,589],[1210,615],[1248,629],[1275,639],[1327,663],[1377,691],[1413,713],[1437,729],[1447,737],[1474,771],[1476,773],[1477,776],[1478,778],[1481,782],[1482,785],[1482,786],[1483,789],[1483,790],[1483,793],[1483,795],[1482,798],[1482,802],[1483,808],[1485,813],[1487,820],[1490,826],[1492,833],[1495,838],[1496,843],[1496,845],[1496,846],[1496,849],[1498,849],[1499,851],[1504,856],[1505,858],[1509,862],[1512,865],[1520,872],[1530,878],[1537,880],[1538,880],[1541,881],[1542,881],[1543,881],[1543,880],[1544,880]],"dx":[1312,530],"dy":[1312,530],"length":1473.273265850592,"timing":[12,36,77,82,91,102,111,122,131,144,152,162,172,181,192,202,212,222,232,246,257,267,279,292,314,322,331,342,352,362,371,382,392,402,412,435,455,475,498,505,551,552,562,572,582,592,602,612,622,632,642,652,662,672,682,692,702,712,722,732,745,751,762,771,782,792,803,813,822,833,847,862,871,882,892,902,979,993]},{"start":[1522,849],"end":[1829,101],"points":[[1522,849],[1518,845],[1514,841],[1500,830],[1496,828],[1488,822],[1487,821],[1487,820],[1485,819],[1483,817],[1482,817],[1481,816],[1479,816],[1479,815],[1478,815],[1478,813],[1472,806],[1469,803],[1465,799],[1461,795],[1452,786],[1448,780],[1444,773],[1440,761],[1438,725],[1439,709],[1446,673],[1448,663],[1457,630],[1474,583],[1485,559],[1507,508],[1520,482],[1526,469],[1548,432],[1578,388],[1594,369],[1611,351],[1635,325],[1650,313],[1665,299],[1686,276],[1694,269],[1704,257],[1713,247],[1718,240],[1724,234],[1737,221],[1742,215],[1747,211],[1752,208],[1757,204],[1763,198],[1773,189],[1778,185],[1782,180],[1786,174],[1790,168],[1794,161],[1795,157],[1796,154],[1799,152],[1804,145],[1809,137],[1813,132],[1815,131],[1816,128],[1817,126],[1820,122],[1820,119],[1820,118],[1821,114],[1822,111],[1825,109],[1826,105],[1828,103],[1828,102],[1829,101]],"dx":[307,-748],"dy":[307,-748],"length":916.6142442411106,"timing":[7,18,27,37,48,59,66,78,87,97,108,118,128,138,147,158,187,192,199,208,218,227,238,247,258,268,278,288,297,308,318,327,338,348,359,367,378,388,397,407,418,428,438,448,458,467,478,488,498,508,518,528,539,547,558,568,578,588,597,608,618,628,638,648,660,668,678,689,698,708,718,728,738,748,758,768,779,788]},{"start":[1819,106],"end":[1059,521],"points":[[1819,106],[1817,107],[1815,109],[1811,111],[1809,113],[1805,114],[1803,115],[1800,116],[1795,119],[1792,122],[1785,126],[1773,132],[1763,137],[1739,149],[1725,155],[1712,163],[1699,171],[1687,177],[1670,187],[1649,196],[1644,198],[1613,211],[1586,223],[1569,231],[1540,246],[1517,258],[1462,297],[1430,324],[1409,343],[1388,359],[1369,375],[1347,389],[1315,408],[1293,417],[1274,423],[1231,432],[1218,434],[1206,436],[1192,437],[1187,439],[1183,440],[1179,441],[1176,443],[1170,445],[1165,446],[1161,448],[1155,449],[1145,450],[1139,452],[1137,452],[1129,452],[1128,453],[1127,453],[1125,454],[1123,457],[1120,458],[1112,466],[1106,474],[1099,479],[1088,491],[1085,493],[1080,497],[1072,504],[1070,506],[1068,508],[1067,508],[1067,509],[1066,510],[1064,511],[1063,514],[1062,517],[1060,519],[1059,519],[1059,521]],"dx":[-760,415],"dy":[-760,415],"length":885.5537064568675,"timing":[11,20,30,40,50,60,70,80,90,100,110,121,129,141,151,160,170,180,190,200,213,231,240,251,260,271,280,290,303,310,321,331,341,350,361,371,381,390,401,410,420,431,440,450,460,471,481,489,501,509,520,531,540,550,561,570,581,590,601,610,620,631,640,650,660,687,700,710,720,729,740,749,761,771]},{"start":[1060,521],"end":[1886,271],"points":[[1060,521],[1060,519],[1068,515],[1076,511],[1096,504],[1114,497],[1135,491],[1153,485],[1206,469],[1242,458],[1274,450],[1284,448],[1346,436],[1370,432],[1435,418],[1458,413],[1471,409],[1532,390],[1557,384],[1593,374],[1640,361],[1652,358],[1683,351],[1700,348],[1733,341],[1743,338],[1753,335],[1761,332],[1769,328],[1774,325],[1790,316],[1796,314],[1807,307],[1814,305],[1822,301],[1836,296],[1843,293],[1848,292],[1849,290],[1855,289],[1855,288],[1856,288],[1856,286],[1859,285],[1865,281],[1869,279],[1870,279],[1877,275],[1878,275],[1882,272],[1883,272],[1885,272],[1886,271]],"dx":[826,-250],"dy":[826,-250],"length":871.7461378852653,"timing":[201,210,223,230,240,253,260,269,279,289,300,310,319,330,340,350,360,370,380,390,400,410,420,429,440,450,460,470,480,490,500,510,520,529,540,549,561,569,580,590,600,616,630,640,650,660,671,680,690,700,710,720,730]},{"start":[1870,275],"end":[93,304],"points":[[1870,275],[1869,275],[1855,279],[1847,281],[1842,284],[1836,285],[1826,290],[1817,294],[1800,301],[1787,305],[1780,307],[1758,314],[1751,318],[1747,318],[1738,320],[1732,321],[1730,321],[1717,324],[1713,324],[1699,327],[1679,329],[1628,337],[1604,341],[1565,346],[1504,354],[1452,360],[1403,366],[1316,376],[967,392],[917,390],[893,389],[803,385],[768,384],[733,384],[668,381],[636,380],[618,380],[570,379],[543,379],[526,377],[501,376],[476,375],[462,375],[439,372],[410,368],[397,367],[383,364],[359,360],[344,359],[315,355],[294,353],[276,350],[263,347],[242,345],[222,341],[207,337],[189,332],[183,329],[168,324],[158,320],[155,320],[150,317],[144,316],[135,314],[120,311],[116,311],[109,308],[102,307],[94,306],[93,306],[93,304]],"dx":[-1777,29],"dy":[-1777,29],"length":1800.4049759083998,"timing":[22,35,87,105,109,118,127,138,147,157,167,178,187,197,207,218,228,237,248,257,267,277,287,298,307,318,328,343,393,398,408,417,428,437,447,457,468,477,488,497,508,517,527,538,548,559,568,578,588,598,611,628,643,658,668,677,688,703,718,727,739,748,758,768,778,788,798,808,818,828,851]},{"start":[237,314],"end":[1454,758],"points":[[237,314],[263,317],[274,317],[293,320],[303,321],[346,327],[358,328],[383,330],[410,333],[423,334],[450,337],[478,340],[502,343],[537,347],[549,350],[584,354],[606,358],[640,362],[671,365],[683,367],[725,373],[735,376],[756,380],[768,382],[779,385],[830,401],[885,417],[912,428],[938,437],[991,456],[1018,467],[1056,482],[1117,507],[1152,523],[1163,527],[1185,537],[1216,551],[1268,573],[1304,592],[1323,601],[1341,610],[1356,618],[1382,635],[1403,650],[1415,662],[1423,668],[1429,677],[1438,688],[1450,699],[1455,705],[1458,709],[1463,714],[1464,716],[1466,718],[1466,719],[1467,720],[1467,722],[1468,723],[1469,724],[1469,725],[1469,727],[1469,728],[1469,729],[1469,732],[1469,735],[1469,736],[1468,736],[1468,737],[1467,740],[1467,741],[1466,742],[1466,744],[1464,746],[1460,750],[1459,751],[1456,754],[1455,757],[1454,758]],"dx":[1217,444],"dy":[1217,444],"length":1368.2100407918358,"timing":[13,28,37,46,54,68,74,84,94,104,114,124,134,144,153,164,179,193,204,214,224,234,245,254,264,274,284,294,304,314,324,334,344,356,366,374,388,405,414,425,433,444,454,465,477,485,494,504,514,524,535,544,556,564,573,584,594,604,614,624,634,644,654,665,677,685,694,704,714,724,734,744,753,764,777,784,795,807]},{"start":[1454,757],"end":[667,325],"points":[[1454,757],[1453,757],[1453,754],[1451,753],[1451,751],[1447,746],[1446,744],[1443,741],[1441,737],[1437,733],[1436,731],[1433,728],[1430,724],[1425,719],[1419,712],[1412,707],[1410,706],[1406,701],[1397,694],[1378,680],[1351,663],[1338,656],[1324,649],[1281,630],[1203,595],[1191,590],[1168,578],[1146,567],[1090,536],[1066,523],[1023,497],[1013,490],[992,477],[953,454],[935,443],[914,430],[900,421],[888,413],[880,408],[865,396],[860,393],[853,387],[848,382],[845,380],[841,377],[832,369],[827,365],[823,364],[808,355],[804,352],[793,348],[774,340],[769,339],[765,337],[754,334],[741,327],[732,325],[724,321],[721,320],[711,316],[697,311],[694,311],[683,307],[681,307],[676,305],[675,305],[672,304],[671,304],[671,305],[670,308],[670,309],[670,311],[670,314],[668,316],[668,318],[668,321],[667,321],[667,324],[667,325]],"dx":[-787,-432],"dy":[-787,-432],"length":939.9127711713636,"timing":[28,38,44,55,64,73,86,97,104,117,124,133,144,153,163,176,184,193,204,213,223,235,244,254,274,284,293,304,314,324,334,344,354,363,374,384,394,403,414,423,434,444,453,464,473,484,494,504,514,524,534,544,553,564,574,583,594,603,614,624,635,644,669,674,684,694,704,713,1279,1294,1304,1315,1324,1335,1345,1356,1374,1386,1408]},{"start":[667,326],"end":[648,838],"points":[[667,326],[667,327],[668,330],[668,334],[668,337],[668,344],[668,369],[667,433],[667,453],[672,494],[687,622],[679,669],[679,698],[680,710],[691,737],[691,741],[691,742],[689,750],[688,752],[687,756],[681,763],[680,764],[678,767],[676,769],[675,771],[675,772],[674,773],[672,775],[672,776],[670,780],[668,781],[667,784],[663,787],[662,790],[661,793],[658,797],[655,803],[653,808],[653,810],[652,816],[650,823],[649,824],[649,826],[648,829],[648,830],[648,832],[648,834],[648,837],[648,837],[648,838]],"dx":[-19,512],"dy":[-19,512],"length":529.6016948985227,"timing":[153,198,207,215,225,234,255,273,274,294,344,367,391,395,430,435,445,454,465,475,485,494,505,514,525,535,544,555,564,575,586,595,605,615,625,635,644,656,665,674,689,705,719,735,747,755,764,777,785,795]},{"start":[648,826],"end":[1400,751],"points":[[648,826],[648,825],[648,824],[649,824],[649,823],[649,821],[650,820],[652,819],[652,817],[653,815],[653,812],[654,811],[654,808],[655,806],[657,804],[658,802],[659,800],[666,795],[670,793],[685,786],[711,777],[722,774],[752,770],[772,768],[797,768],[824,768],[845,768],[869,767],[919,765],[932,765],[996,761],[1022,761],[1058,760],[1083,760],[1130,760],[1152,760],[1195,760],[1225,760],[1242,760],[1259,760],[1278,760],[1305,759],[1316,759],[1326,759],[1350,757],[1355,757],[1365,756],[1376,755],[1383,754],[1395,752],[1396,752],[1396,751],[1398,751],[1399,751],[1400,751]],"dx":[752,-75],"dy":[752,-75],"length":779.3783346252986,"timing":[14,30,35,45,55,65,74,85,94,105,114,124,133,144,155,164,174,183,195,204,218,234,245,253,264,274,285,294,304,314,325,333,344,354,364,375,384,395,403,415,424,434,445,455,464,474,484,494,504,514,525,553,564,575,585]},{"start":[1400,750],"end":[1777,837],"points":[[1400,750],[1399,750],[1399,748],[1398,748],[1396,748],[1396,747],[1395,747],[1394,747],[1394,746],[1391,744],[1390,744],[1387,743],[1386,743],[1385,742],[1378,739],[1368,737],[1362,735],[1357,735],[1356,734],[1355,734],[1356,734],[1357,734],[1370,734],[1379,734],[1388,735],[1401,738],[1425,743],[1430,744],[1457,750],[1473,754],[1483,755],[1511,761],[1525,764],[1541,768],[1556,772],[1604,782],[1625,787],[1667,798],[1676,800],[1695,806],[1728,813],[1738,816],[1752,820],[1761,822],[1767,824],[1769,825],[1772,825],[1772,826],[1773,828],[1773,829],[1774,829],[1776,830],[1776,831],[1777,831],[1777,833],[1777,834],[1777,835],[1777,837]],"dx":[377,87],"dy":[377,87],"length":495.0826968704772,"timing":[23,43,56,65,73,83,93,102,114,123,135,143,153,162,173,182,193,203,213,223,241,253,263,273,282,293,303,312,323,334,343,353,362,373,382,393,403,412,423,432,442,452,463,472,484,492,504,553,565,583,593,603,613,634,669,688,705,715]},{"start":[1776,837],"end":[807,311],"points":[[1776,837],[1774,835],[1774,834],[1773,834],[1772,834],[1772,833],[1771,833],[1771,831],[1769,831],[1769,830],[1768,829],[1767,828],[1764,825],[1760,821],[1755,818],[1745,811],[1716,795],[1700,789],[1672,778],[1616,756],[1581,744],[1542,729],[1464,698],[1429,682],[1392,666],[1335,638],[1290,616],[1254,599],[1184,564],[1162,553],[1140,542],[1091,517],[1070,506],[1048,496],[1023,482],[1014,475],[1007,470],[1006,467],[1005,465],[1004,461],[1002,461],[1002,460],[1001,456],[1000,454],[998,452],[996,448],[993,443],[988,439],[979,428],[970,421],[959,413],[941,400],[927,392],[920,387],[893,370],[888,366],[881,363],[864,352],[855,345],[850,341],[833,331],[829,328],[827,326],[820,322],[818,319],[816,318],[815,317],[814,315],[812,315],[811,313],[810,313],[808,311],[807,311]],"dx":[-969,-526],"dy":[-969,-526],"length":1120.67999068567,"timing":[22,40,88,105,120,128,136,146,155,166,175,186,196,205,216,226,235,245,256,265,277,285,296,306,315,326,339,345,355,366,376,386,395,406,415,432,444,456,465,476,486,495,506,515,526,535,545,555,565,575,586,595,606,616,624,636,645,656,666,676,686,695,705,716,725,735,746,758,765,775,786,795,836]},{"start":[808,311],"end":[1094,783],"points":[[808,311],[808,313],[810,314],[811,315],[812,318],[814,319],[816,320],[819,326],[820,328],[823,332],[827,343],[829,352],[833,359],[844,380],[851,393],[863,415],[885,453],[895,474],[907,495],[925,527],[940,550],[954,571],[983,610],[998,628],[1005,638],[1025,662],[1038,678],[1045,687],[1055,700],[1061,709],[1062,710],[1066,719],[1068,723],[1070,727],[1075,736],[1075,738],[1076,740],[1079,745],[1079,747],[1080,751],[1081,751],[1081,752],[1083,755],[1084,755],[1084,756],[1084,757],[1084,758],[1084,760],[1085,762],[1085,764],[1087,765],[1088,769],[1089,773],[1090,775],[1092,778],[1092,779],[1093,782],[1093,783],[1094,783]],"dx":[286,472],"dy":[286,472],"length":560.2497400538101,"timing":[111,120,130,141,150,160,170,179,190,200,210,220,230,240,250,260,270,279,290,300,310,320,330,340,351,360,370,380,390,400,411,419,430,440,450,460,469,479,493,510,520,531,541,550,560,570,592,614,630,640,650,660,669,681,690,700,710,720,815]},{"start":[1094,782],"end":[765,696],"points":[[1094,782],[1093,780],[1093,779],[1093,777],[1093,775],[1093,773],[1093,770],[1093,766],[1093,762],[1094,758],[1094,756],[1098,749],[1099,745],[1102,743],[1103,739],[1105,735],[1106,731],[1105,725],[1103,721],[1098,715],[1081,705],[1073,702],[1063,700],[1031,691],[1010,687],[988,683],[954,678],[927,674],[908,672],[856,667],[810,666],[800,666],[784,666],[772,666],[758,666],[745,667],[743,669],[742,670],[741,670],[741,671],[739,672],[738,674],[737,675],[735,675],[732,679],[728,682],[720,685],[719,685],[716,688],[715,689],[712,693],[711,695],[711,696],[711,697],[711,698],[711,700],[712,700],[712,701],[713,701],[715,701],[718,701],[722,701],[725,701],[729,701],[731,701],[735,701],[742,700],[747,698],[755,698],[757,697],[760,697],[763,697],[765,696]],"dx":[-329,-86],"dy":[-329,-86],"length":540.2272189406615,"timing":[52,94,100,112,123,131,139,151,161,170,181,191,200,211,220,232,241,250,263,270,281,291,301,310,320,330,340,351,361,371,380,393,400,411,421,430,441,450,460,471,480,491,501,511,521,530,540,551,560,571,580,591,601,610,681,791,814,820,831,841,850,861,870,881,891,902,911,921,931,941,951,961,971]},{"start":[767,696],"end":[1412,442],"points":[[767,696],[770,693],[776,692],[782,689],[793,687],[816,676],[832,670],[841,665],[881,645],[902,635],[924,624],[976,598],[993,591],[1012,581],[1060,561],[1089,550],[1138,535],[1155,529],[1164,527],[1181,522],[1218,511],[1231,506],[1242,502],[1259,496],[1264,494],[1273,490],[1290,485],[1297,484],[1301,483],[1303,483],[1306,481],[1307,481],[1309,481],[1310,480],[1311,480],[1315,479],[1325,475],[1329,473],[1333,471],[1340,468],[1342,467],[1344,466],[1349,463],[1351,462],[1355,460],[1358,459],[1368,455],[1374,454],[1380,453],[1393,449],[1394,449],[1399,446],[1403,445],[1405,445],[1406,445],[1407,444],[1409,444],[1410,442],[1412,442]],"dx":[645,-254],"dy":[645,-254],"length":698.0897159088303,"timing":[212,228,238,249,258,269,278,289,298,308,318,328,339,349,358,367,379,388,399,408,419,429,438,449,458,468,478,488,498,508,518,529,544,559,568,579,588,599,609,618,629,638,648,658,668,679,688,698,708,717,729,739,748,758,768,779,787,799,808]},{"start":[1405,444],"end":[1004,159],"points":[[1405,444],[1403,444],[1403,445],[1402,445],[1401,445],[1399,445],[1398,445],[1397,446],[1396,446],[1394,446],[1393,446],[1392,446],[1390,447],[1389,447],[1386,447],[1383,449],[1377,449],[1364,450],[1355,450],[1344,450],[1332,450],[1319,447],[1305,444],[1289,437],[1266,425],[1250,416],[1241,411],[1215,394],[1206,388],[1186,376],[1176,369],[1158,356],[1149,350],[1139,343],[1120,329],[1094,308],[1074,290],[1069,284],[1063,273],[1054,256],[1051,250],[1046,234],[1044,229],[1042,224],[1039,219],[1034,211],[1031,208],[1029,206],[1025,200],[1022,198],[1020,194],[1015,187],[1013,185],[1012,180],[1011,178],[1009,173],[1008,169],[1004,164],[1004,163],[1004,161],[1004,160],[1004,159]],"dx":[-401,-285],"dy":[-401,-285],"length":532.7005409210113,"timing":[18,48,57,65,72,83,95,103,112,125,132,155,165,178,193,202,212,223,232,243,253,263,273,283,293,303,314,322,335,343,353,363,376,382,393,403,413,423,432,442,452,462,472,483,494,503,513,524,533,543,553,563,574,583,593,603,613,623,633,678,705,725]},{"start":[1003,160],"end":[1540,656],"points":[[1003,160],[1003,161],[1002,163],[1002,164],[1002,165],[1002,167],[1002,168],[1003,169],[1003,170],[1003,172],[1003,173],[1004,176],[1004,177],[1013,187],[1020,195],[1025,200],[1037,209],[1065,238],[1083,256],[1103,276],[1129,306],[1146,324],[1164,345],[1207,390],[1223,407],[1259,442],[1289,467],[1310,485],[1341,511],[1380,540],[1397,553],[1424,572],[1434,580],[1441,582],[1449,588],[1459,594],[1460,595],[1462,597],[1463,597],[1464,598],[1464,599],[1467,602],[1471,606],[1476,611],[1481,616],[1486,620],[1492,624],[1498,627],[1501,628],[1502,629],[1505,630],[1506,632],[1507,632],[1515,638],[1523,643],[1523,643],[1527,647],[1529,650],[1533,653],[1536,655],[1537,655],[1540,656]],"dx":[537,496],"dy":[537,496],"length":742.3258614803241,"timing":[62,85,100,116,141,148,156,166,186,196,207,216,229,236,246,259,266,277,287,297,306,317,326,336,346,356,367,376,387,396,407,417,427,435,447,456,467,476,486,527,538,546,556,567,576,585,596,606,616,627,636,647,657,666,680,686,697,706,717,726,739,747]},{"start":[1538,656],"end":[441,908],"points":[[1538,656],[1537,656],[1536,656],[1534,656],[1534,655],[1533,655],[1528,655],[1525,655],[1519,654],[1516,654],[1515,654],[1502,654],[1489,655],[1469,658],[1420,660],[1390,662],[1369,662],[1299,664],[1265,666],[1243,668],[1174,676],[1163,679],[1126,682],[1062,689],[1038,692],[1001,695],[951,705],[940,706],[925,711],[908,720],[900,727],[893,732],[880,741],[871,746],[854,753],[819,763],[799,767],[771,773],[758,776],[743,780],[734,782],[708,792],[691,798],[685,801],[659,810],[648,812],[636,816],[614,823],[605,825],[601,827],[584,832],[576,834],[563,838],[559,840],[550,844],[542,846],[535,851],[531,855],[528,857],[524,859],[520,862],[518,863],[511,867],[509,870],[506,871],[498,875],[494,877],[492,880],[489,882],[486,884],[485,885],[480,888],[475,890],[468,893],[459,897],[454,899],[453,901],[449,905],[446,906],[444,907],[441,908]],"dx":[-1097,252],"dy":[-1097,252],"length":1148.0488621101708,"timing":[101,138,147,156,167,176,187,196,207,217,226,237,252,267,278,287,297,306,319,327,337,347,357,367,377,388,397,406,417,427,437,447,457,467,477,487,497,507,517,527,537,547,557,568,576,587,597,607,616,628,637,647,657,667,677,687,698,706,717,727,737,747,757,767,777,787,797,806,817,827,836,848,856,868,878,887,897,907,918,928,938]},{"start":[442,908],"end":[898,245],"points":[[442,908],[444,908],[445,907],[446,907],[446,906],[447,905],[451,903],[453,902],[458,898],[463,895],[464,894],[467,892],[472,889],[472,888],[476,885],[483,880],[488,876],[499,866],[502,863],[510,855],[531,838],[544,829],[558,817],[588,795],[609,777],[628,758],[662,717],[680,691],[697,664],[713,634],[723,616],[737,590],[757,557],[767,542],[778,526],[796,503],[807,486],[818,470],[833,440],[836,431],[837,427],[839,413],[840,408],[841,401],[844,390],[845,386],[846,379],[849,371],[854,357],[855,352],[857,344],[857,336],[858,332],[858,327],[859,319],[861,316],[863,312],[867,301],[871,296],[874,291],[879,283],[880,279],[881,277],[883,275],[887,269],[888,266],[889,265],[891,262],[891,261],[892,260],[893,258],[894,256],[896,252],[896,251],[898,247],[898,245]],"dx":[456,-663],"dy":[456,-663],"length":829.726915923796,"timing":[13,34,42,52,61,71,81,92,123,131,141,151,162,171,182,191,202,212,221,232,241,251,262,272,281,292,301,312,321,331,342,351,362,371,382,392,402,412,421,432,442,451,461,472,481,491,502,511,522,531,542,552,562,572,581,592,602,612,621,631,642,652,662,672,681,691,701,712,734,748,761,772,782,792,801,812]},{"start":[898,247],"end":[823,879],"points":[[898,247],[897,248],[896,250],[896,252],[894,253],[894,254],[894,256],[894,257],[894,258],[894,260],[889,273],[884,283],[880,293],[871,326],[867,347],[863,370],[861,431],[859,465],[859,523],[859,559],[859,592],[857,643],[854,672],[853,682],[850,709],[846,730],[840,761],[837,773],[833,790],[831,796],[829,804],[827,821],[825,825],[825,828],[824,831],[824,834],[824,835],[823,835],[823,837],[823,838],[822,839],[822,841],[822,842],[820,844],[819,847],[819,848],[818,852],[816,854],[816,855],[816,857],[816,859],[816,860],[816,863],[816,864],[816,865],[816,867],[816,868],[818,868],[818,869],[818,870],[819,872],[819,873],[819,874],[819,876],[820,876],[820,877],[820,878],[822,878],[823,878],[823,879]],"dx":[-75,632],"dy":[-75,632],"length":651.8963786146354,"timing":[145,160,170,180,191,200,223,230,240,250,261,270,281,290,301,310,321,330,340,353,360,371,383,390,400,411,420,431,441,452,460,470,480,491,501,511,523,545,567,580,592,603,610,620,630,640,650,660,671,680,691,701,710,721,740,755,773,780,790,803,810,822,845,863,871,880,905,931,973,981]},{"start":[823,883],"end":[1331,591],"points":[[823,883],[823,882],[824,878],[827,873],[836,861],[846,852],[849,850],[880,834],[901,826],[918,821],[959,811],[978,807],[994,803],[1037,791],[1057,785],[1075,778],[1095,770],[1113,764],[1141,752],[1160,744],[1192,733],[1205,727],[1213,725],[1223,720],[1235,714],[1241,710],[1249,705],[1260,695],[1263,688],[1266,686],[1271,674],[1276,664],[1278,658],[1280,653],[1280,652],[1283,647],[1284,644],[1286,639],[1288,635],[1291,632],[1292,631],[1295,628],[1301,621],[1304,618],[1305,614],[1306,612],[1308,610],[1308,609],[1309,608],[1309,606],[1312,605],[1313,604],[1315,601],[1323,597],[1325,596],[1328,593],[1330,592],[1331,592],[1331,591]],"dx":[508,-292],"dy":[508,-292],"length":616.9078926717362,"timing":[259,268,279,287,296,306,315,326,339,345,356,369,375,386,395,406,416,426,437,446,456,466,476,486,496,507,516,526,536,546,557,566,579,587,596,606,616,626,637,646,656,667,675,686,697,706,716,726,736,745,756,767,776,786,797,805,817,826,837]},{"start":[1331,592],"end":[342,762],"points":[[1331,592],[1330,592],[1328,592],[1327,593],[1326,593],[1323,593],[1322,595],[1321,595],[1318,595],[1317,595],[1315,596],[1313,596],[1308,599],[1298,601],[1293,602],[1272,608],[1227,617],[1197,622],[1155,631],[1107,640],[1029,658],[983,669],[947,675],[914,682],[868,688],[812,697],[778,703],[726,710],[697,715],[674,719],[663,722],[635,728],[625,732],[616,735],[603,740],[590,745],[578,748],[569,751],[559,753],[533,757],[522,758],[518,760],[502,761],[495,761],[489,761],[483,761],[477,760],[472,760],[463,758],[456,758],[450,758],[443,758],[438,758],[431,758],[426,758],[418,758],[404,758],[399,758],[390,757],[382,757],[374,757],[366,757],[365,757],[360,758],[358,758],[357,760],[356,760],[352,761],[349,761],[344,762],[343,762],[342,762]],"dx":[-989,170],"dy":[-989,170],"length":1011.3781531055565,"timing":[121,125,143,152,161,172,184,192,201,214,221,232,244,251,262,272,282,292,302,312,322,332,342,351,362,371,381,392,401,412,421,432,442,451,462,471,482,492,501,512,522,532,542,552,562,573,581,592,602,612,622,632,642,652,663,672,682,695,702,711,722,732,742,752,761,772,781,792,802,812,822,832]},{"start":[343,762],"end":[1286,796],"points":[[343,762],[344,762],[345,762],[347,762],[348,762],[349,761],[351,761],[355,760],[357,760],[360,758],[364,758],[373,756],[379,754],[384,753],[387,752],[390,752],[392,752],[395,752],[399,751],[418,751],[426,751],[440,751],[473,751],[500,751],[521,751],[544,751],[579,752],[605,753],[653,757],[682,760],[738,766],[748,766],[770,769],[804,771],[828,773],[872,775],[894,776],[904,778],[949,782],[969,784],[1007,789],[1017,791],[1027,792],[1064,797],[1084,800],[1112,802],[1131,802],[1149,802],[1176,802],[1193,802],[1216,802],[1232,802],[1238,802],[1246,804],[1251,804],[1262,804],[1271,804],[1277,804],[1279,802],[1281,800],[1283,800],[1283,799],[1286,796]],"dx":[943,34],"dy":[943,34],"length":951.9880108989025,"timing":[17,26,50,65,84,92,102,112,122,133,142,152,161,171,182,192,205,212,222,232,242,252,262,272,282,293,302,311,323,331,342,352,361,373,382,392,403,414,422,432,442,452,463,472,482,492,507,522,533,542,553,562,573,583,593,602,611,623,657,672,684,692,702]},{"start":[1285,796],"end":[383,701],"points":[[1285,796],[1283,796],[1281,796],[1280,796],[1279,796],[1277,796],[1276,796],[1275,796],[1273,796],[1271,796],[1267,796],[1263,795],[1260,795],[1253,793],[1242,791],[1236,789],[1227,788],[1221,787],[1216,786],[1214,786],[1198,783],[1185,780],[1168,778],[1141,775],[1114,773],[1090,770],[1034,763],[1015,762],[980,760],[932,756],[894,753],[857,750],[821,748],[757,743],[718,739],[692,737],[622,730],[594,727],[570,726],[539,724],[531,724],[510,724],[502,726],[495,727],[480,728],[475,730],[470,730],[462,730],[453,730],[447,730],[443,730],[443,728],[441,728],[441,727],[440,727],[439,727],[439,726],[437,724],[436,723],[415,713],[406,709],[401,707],[396,706],[391,705],[384,702],[383,702],[383,701]],"dx":[-902,-95],"dy":[-902,-95],"length":917.6473528200065,"timing":[8,19,34,65,87,95,102,110,118,129,139,149,159,169,179,189,199,208,219,229,239,248,259,268,279,289,298,309,318,329,339,349,359,369,379,389,399,409,419,428,439,449,461,469,479,492,498,510,519,529,539,551,558,569,579,606,641,665,678,705,710,718,729,738,749,758,769]},{"start":[1206,520],"end":[611,52],"points":[[1206,520],[1204,520],[1203,520],[1202,520],[1200,520],[1198,521],[1198,521],[1196,521],[1195,521],[1193,523],[1191,523],[1189,523],[1186,523],[1182,524],[1172,525],[1169,525],[1160,527],[1138,527],[1116,524],[1086,514],[1079,511],[1063,501],[1030,481],[1016,471],[992,454],[968,436],[948,421],[930,408],[891,380],[870,364],[851,349],[822,324],[804,308],[786,290],[754,256],[747,247],[739,238],[713,204],[706,196],[698,186],[687,169],[687,167],[684,161],[683,154],[683,148],[683,144],[683,138],[683,134],[683,130],[683,124],[682,121],[680,117],[678,113],[674,109],[672,107],[667,101],[665,99],[662,95],[657,88],[654,85],[649,79],[645,75],[633,66],[631,64],[628,62],[623,59],[617,55],[613,53],[611,52]],"dx":[-595,-468],"dy":[-595,-468],"length":804.7464829649697,"timing":[41,58,66,83,99,114,120,130,150,163,173,180,190,202,210,220,231,240,253,270,280,290,300,310,320,330,340,351,360,373,379,389,400,410,425,430,440,450,460,471,480,490,500,510,520,531,540,550,561,570,580,590,600,609,621,630,640,651,659,670,680,690,699,711,720,731,741,750,761]},{"start":[598,64],"end":[1957,142],"points":[[598,64],[597,64],[597,65],[598,66],[605,69],[605,69],[630,77],[653,82],[683,87],[730,94],[769,100],[809,107],[893,118],[957,126],[996,130],[1047,135],[1081,138],[1127,143],[1220,149],[1243,151],[1281,153],[1363,159],[1398,161],[1429,162],[1450,162],[1489,165],[1515,165],[1552,166],[1564,166],[1578,166],[1589,166],[1603,165],[1612,165],[1633,162],[1655,160],[1660,160],[1672,159],[1679,159],[1695,156],[1706,155],[1711,153],[1715,153],[1723,152],[1753,151],[1781,151],[1802,151],[1823,151],[1829,152],[1844,152],[1879,155],[1890,155],[1916,156],[1919,156],[1928,156],[1931,156],[1932,156],[1933,156],[1935,155],[1936,155],[1938,153],[1940,153],[1941,153],[1942,152],[1944,152],[1946,151],[1948,151],[1950,149],[1951,149],[1951,148],[1953,147],[1953,146],[1954,146],[1955,143],[1955,142],[1957,142]],"dx":[1359,78],"dy":[1359,78],"length":1378.9775586932071,"timing":[46,52,246,257,269,277,287,298,306,316,328,336,346,359,369,376,388,396,407,416,427,437,446,456,467,476,486,497,506,516,527,537,547,556,570,576,587,597,607,617,627,636,647,657,667,677,686,698,707,717,726,736,747,757,767,777,786,796,807,817,832,847,856,866,877,887,897,907,973,990,1009,1017,1026,1037,1049]},{"start":[1953,142],"end":[1873,615],"points":[[1953,142],[1950,142],[1949,142],[1948,143],[1945,143],[1942,144],[1940,144],[1938,146],[1933,147],[1931,148],[1929,148],[1927,148],[1925,149],[1924,151],[1918,152],[1912,155],[1910,156],[1894,164],[1877,171],[1860,179],[1832,195],[1825,199],[1815,208],[1791,235],[1782,248],[1776,264],[1769,281],[1762,305],[1756,330],[1752,361],[1752,372],[1754,382],[1758,398],[1762,408],[1767,417],[1778,438],[1784,446],[1793,460],[1803,474],[1815,489],[1821,498],[1836,515],[1843,522],[1849,530],[1853,535],[1855,539],[1855,542],[1859,551],[1862,556],[1862,558],[1864,565],[1864,567],[1866,570],[1866,573],[1866,574],[1866,577],[1867,583],[1867,590],[1867,595],[1868,604],[1869,607],[1869,609],[1871,613],[1871,615],[1872,615],[1873,615]],"dx":[-80,473],"dy":[-80,473],"length":616.5628885889762,"timing":[0,10,21,31,40,51,61,71,81,91,101,111,121,131,141,151,161,171,181,191,201,211,222,232,241,253,260,272,282,292,301,311,322,331,342,351,361,372,382,391,402,411,422,432,441,452,461,472,481,491,502,511,521,531,541,551,562,572,582,592,601,612,621,633,674,769]},{"start":[1863,609],"end":[1530,716],"points":[[1863,609],[1862,608],[1859,607],[1855,606],[1852,604],[1842,600],[1838,599],[1830,598],[1816,594],[1804,593],[1798,591],[1776,586],[1768,585],[1743,580],[1726,576],[1696,572],[1677,569],[1669,569],[1655,568],[1639,568],[1631,569],[1625,570],[1621,570],[1617,572],[1613,573],[1596,581],[1592,585],[1586,593],[1583,603],[1582,609],[1579,629],[1578,635],[1577,642],[1574,647],[1572,652],[1569,656],[1566,663],[1564,667],[1563,668],[1561,672],[1560,674],[1559,677],[1555,685],[1553,687],[1553,689],[1548,694],[1547,696],[1542,700],[1539,703],[1534,708],[1534,708],[1531,711],[1531,712],[1531,713],[1530,715],[1530,716]],"dx":[-333,107],"dy":[-333,107],"length":430.25654373514647,"timing":[6,15,26,35,45,56,66,76,86,95,106,116,126,140,156,167,176,189,195,206,216,226,235,245,256,266,277,285,295,309,326,335,346,356,367,376,386,396,406,416,426,436,446,456,466,476,486,497,506,517,526,536,546,555,566,576]},{"start":[1530,715],"end":[673,240],"points":[[1530,715],[1529,713],[1527,712],[1526,711],[1525,709],[1523,709],[1517,706],[1512,704],[1507,702],[1488,698],[1477,695],[1468,693],[1430,685],[1423,683],[1406,681],[1354,668],[1318,657],[1292,648],[1224,624],[1211,617],[1183,605],[1122,577],[1087,559],[1063,546],[1018,520],[935,470],[925,464],[907,451],[901,445],[894,439],[883,425],[880,421],[876,416],[872,409],[870,405],[866,401],[854,388],[849,384],[841,378],[827,367],[819,362],[811,358],[799,351],[790,345],[782,340],[771,331],[763,325],[755,317],[747,309],[733,293],[727,286],[723,282],[712,273],[707,267],[702,263],[698,260],[694,256],[691,254],[689,252],[687,250],[684,248],[682,247],[680,244],[676,241],[674,241],[673,240]],"dx":[-857,-475],"dy":[-857,-475],"length":1002.177814822135,"timing":[114,125,134,143,153,164,173,184,194,203,214,224,232,246,253,263,273,284,293,302,313,323,333,344,353,385,393,403,413,423,433,443,453,463,473,483,494,503,514,523,533,546,554,563,573,584,593,606,613,623,633,644,653,665,674,683,693,704,714,723,734,743,753,764,773,784]},{"start":[673,241],"end":[1319,106],"points":[[673,241],[674,241],[681,245],[687,248],[691,249],[707,254],[717,257],[729,259],[755,262],[769,262],[773,262],[806,261],[824,257],[837,256],[867,249],[884,245],[911,239],[950,230],[970,226],[999,218],[1027,211],[1044,206],[1061,201],[1093,189],[1107,184],[1123,178],[1138,172],[1153,168],[1167,163],[1190,157],[1206,153],[1214,150],[1233,145],[1249,140],[1257,136],[1261,135],[1265,132],[1276,128],[1287,124],[1291,123],[1298,119],[1309,115],[1311,114],[1313,112],[1317,111],[1317,110],[1317,109],[1318,107],[1319,107],[1319,106]],"dx":[646,-135],"dy":[646,-135],"length":677.34487455823,"timing":[165,180,190,200,210,220,230,241,250,260,270,280,290,301,309,320,331,340,350,360,369,380,389,400,410,420,430,441,450,460,470,481,490,503,510,519,530,540,550,560,569,580,590,600,610,622,629,639,650,660]},{"start":[1317,109],"end":[132,280],"points":[[1317,109],[1315,109],[1314,110],[1313,111],[1311,111],[1311,112],[1310,112],[1309,115],[1307,115],[1306,116],[1304,119],[1302,120],[1301,122],[1300,123],[1298,124],[1296,125],[1294,127],[1283,135],[1275,138],[1262,144],[1232,154],[1207,162],[1176,172],[1118,188],[1107,192],[1073,201],[1001,219],[975,226],[934,233],[882,241],[845,246],[806,251],[768,254],[694,258],[661,259],[651,259],[592,263],[566,266],[530,271],[517,275],[510,276],[497,280],[466,289],[455,293],[442,297],[418,302],[412,302],[399,303],[373,303],[360,303],[344,303],[321,302],[313,302],[282,300],[274,300],[260,298],[240,298],[234,297],[221,296],[214,296],[187,292],[180,290],[166,288],[153,285],[148,284],[139,281],[133,280],[132,280]],"dx":[-1185,171],"dy":[-1185,171],"length":1219.5352251493448,"timing":[27,36,53,69,77,89,94,101,111,121,131,143,151,165,172,191,201,212,221,231,242,251,261,271,281,291,301,312,322,331,342,351,361,371,381,391,401,410,422,432,442,452,461,472,482,492,502,511,522,531,541,552,562,571,582,591,601,611,621,632,641,652,662,671,682,691,702,712]},{"start":[153,279],"end":[1503,488],"points":[[153,279],[155,279],[158,279],[165,279],[166,279],[171,279],[179,279],[184,279],[200,279],[207,279],[223,280],[233,281],[243,281],[253,283],[284,288],[296,289],[324,294],[339,297],[354,300],[399,306],[418,309],[427,309],[447,313],[492,318],[517,320],[544,324],[584,331],[613,336],[642,341],[712,355],[739,361],[765,366],[814,375],[848,381],[869,384],[925,392],[947,394],[991,398],[1015,400],[1039,401],[1063,401],[1110,403],[1130,406],[1141,407],[1177,411],[1194,414],[1210,415],[1240,419],[1247,420],[1269,422],[1284,423],[1292,424],[1305,426],[1320,428],[1324,428],[1334,431],[1340,432],[1344,433],[1357,437],[1360,438],[1368,441],[1383,446],[1394,450],[1406,454],[1423,459],[1432,462],[1437,463],[1451,467],[1455,468],[1458,470],[1463,471],[1467,472],[1471,474],[1480,477],[1484,480],[1485,480],[1493,484],[1496,485],[1497,487],[1501,488],[1502,488],[1503,488]],"dx":[1350,209],"dy":[1350,209],"length":1372.9238208842949,"timing":[5,17,25,35,47,55,65,75,84,95,105,115,124,134,145,156,164,174,184,195,205,215,226,235,244,255,265,276,285,294,306,314,324,335,345,355,365,375,385,395,406,415,425,436,445,455,466,475,486,494,506,515,525,535,546,555,565,575,585,596,606,615,625,636,645,655,666,675,685,695,705,715,725,735,745,756,766,775,785,795,805,838]},{"start":[1477,480],"end":[680,358],"points":[[1477,480],[1468,477],[1466,477],[1455,475],[1453,475],[1449,474],[1442,472],[1433,470],[1429,470],[1419,467],[1412,466],[1407,466],[1401,464],[1384,462],[1377,460],[1371,459],[1356,458],[1349,458],[1323,457],[1315,457],[1307,457],[1299,457],[1280,457],[1273,457],[1267,457],[1243,457],[1234,457],[1216,457],[1190,457],[1172,454],[1152,453],[1095,445],[1070,441],[1059,440],[1009,431],[985,425],[961,421],[904,411],[892,410],[881,407],[840,399],[823,397],[806,393],[786,389],[774,386],[770,385],[753,382],[749,382],[745,381],[741,381],[738,380],[734,379],[725,376],[722,376],[717,373],[709,372],[708,371],[704,369],[701,368],[700,368],[697,367],[697,366],[695,366],[692,364],[688,362],[685,360],[683,359],[682,358],[680,358]],"dx":[-797,-122],"dy":[-797,-122],"length":812.8797179037281,"timing":[0,10,21,30,40,51,61,70,81,91,100,111,121,131,141,150,160,171,180,190,200,211,220,231,241,251,261,271,280,290,301,311,321,331,341,353,361,370,381,391,400,411,421,429,443,451,460,471,481,491,501,511,521,530,541,550,561,571,581,590,601,611,621,631,640,651,661,671,680]},{"start":[700,367],"end":[1236,118],"points":[[700,367],[702,368],[704,369],[709,372],[714,375],[723,378],[728,381],[734,384],[740,385],[766,395],[775,399],[782,402],[805,411],[817,415],[825,417],[845,427],[849,428],[860,430],[878,436],[884,438],[891,440],[900,441],[901,441],[905,441],[910,440],[912,437],[914,434],[922,423],[927,415],[935,406],[957,382],[973,369],[983,360],[1005,346],[1021,336],[1031,329],[1053,315],[1064,307],[1073,300],[1088,289],[1099,281],[1121,261],[1131,252],[1140,243],[1152,232],[1155,229],[1161,222],[1168,217],[1179,206],[1183,203],[1186,200],[1196,191],[1204,183],[1212,176],[1214,172],[1224,161],[1229,153],[1230,151],[1231,147],[1231,146],[1234,142],[1234,140],[1234,138],[1235,133],[1235,130],[1236,125],[1236,121],[1236,120],[1236,118]],"dx":[536,-249],"dy":[536,-249],"length":693.6862906905641,"timing":[0,10,20,30,40,50,61,70,80,91,100,110,120,130,141,150,162,170,179,190,200,210,220,230,240,251,260,271,280,290,300,310,320,329,340,350,360,370,379,391,400,410,420,430,440,451,460,470,480,490,501,510,523,533,540,550,560,570,581,591,601,611,620,631,640,651,660,671,681]},{"start":[1233,118],"end":[696,21],"points":[[1233,118],[1233,120],[1231,120],[1230,121],[1229,122],[1227,124],[1226,125],[1225,126],[1222,129],[1221,130],[1220,133],[1220,134],[1218,134],[1218,135],[1216,137],[1213,138],[1208,140],[1196,146],[1186,150],[1170,153],[1152,159],[1105,164],[1087,164],[1079,164],[1053,164],[1008,159],[991,155],[974,151],[948,143],[930,138],[887,122],[870,117],[861,113],[836,105],[820,100],[809,96],[800,94],[785,87],[784,86],[783,86],[781,84],[780,83],[779,82],[774,79],[770,78],[768,77],[762,75],[759,73],[755,71],[751,69],[750,69],[746,65],[740,60],[735,56],[731,52],[725,47],[722,44],[718,40],[712,35],[710,32],[707,31],[705,29],[702,26],[699,23],[698,23],[697,22],[696,21]],"dx":[-537,-97],"dy":[-537,-97],"length":588.5054717466227,"timing":[44,52,62,73,82,93,102,112,123,133,143,153,163,197,212,224,232,242,254,261,272,283,292,303,313,323,332,343,352,362,373,383,392,403,413,423,433,442,453,463,473,482,493,503,512,523,533,542,552,563,573,583,593,603,613,622,633,642,653,663,673,682,693,704,713,723,734]},{"start":[699,27],"end":[1897,595],"points":[[699,27],[699,29],[701,30],[703,32],[705,35],[706,38],[710,41],[711,44],[714,47],[715,49],[716,51],[718,52],[719,53],[721,57],[725,62],[729,65],[733,69],[737,73],[741,75],[750,82],[755,84],[766,90],[772,92],[779,95],[797,101],[820,108],[844,116],[894,135],[928,151],[988,182],[1037,210],[1075,231],[1111,252],[1186,295],[1223,316],[1273,343],[1309,361],[1343,378],[1374,394],[1427,418],[1455,431],[1481,443],[1507,455],[1522,461],[1538,468],[1576,483],[1582,487],[1595,492],[1618,500],[1629,504],[1638,508],[1651,513],[1655,515],[1661,518],[1674,525],[1678,526],[1686,529],[1698,533],[1702,533],[1721,538],[1728,539],[1739,542],[1750,546],[1761,550],[1767,551],[1783,557],[1795,561],[1800,564],[1806,565],[1820,570],[1825,572],[1841,576],[1846,577],[1851,578],[1856,579],[1872,586],[1876,587],[1880,589],[1891,594],[1893,594],[1894,594],[1895,594],[1897,594],[1897,595]],"dx":[1198,568],"dy":[1198,568],"length":1340.1661257316068,"timing":[10,20,30,40,50,60,70,79,90,102,110,119,129,140,150,160,170,181,190,201,210,221,231,240,251,260,270,280,294,310,320,331,340,350,361,371,381,390,400,410,420,431,440,450,460,470,479,491,500,511,521,530,541,550,561,572,581,590,600,610,620,630,640,651,660,671,680,691,701,710,721,730,740,751,761,770,780,790,801,810,821,830,946,1003]},{"start":[1885,598],"end":[92,743],"points":[[1885,598],[1884,598],[1881,599],[1880,599],[1876,599],[1861,599],[1850,599],[1842,599],[1829,599],[1812,599],[1804,600],[1799,603],[1798,604],[1796,605],[1795,607],[1795,608],[1792,608],[1789,608],[1778,608],[1764,608],[1738,607],[1722,605],[1655,600],[1614,596],[1499,587],[1439,585],[1383,583],[1356,582],[1223,582],[1165,583],[1102,585],[999,587],[977,588],[929,588],[846,588],[802,590],[747,594],[734,595],[719,598],[704,601],[681,608],[673,613],[663,620],[659,622],[652,627],[638,638],[632,642],[622,646],[611,651],[604,652],[572,661],[533,669],[516,672],[507,673],[469,677],[451,679],[438,683],[417,695],[413,698],[399,711],[392,715],[383,720],[374,722],[369,722],[346,725],[336,725],[329,725],[321,725],[297,726],[292,726],[283,726],[267,727],[258,729],[249,729],[239,730],[238,730],[236,729],[235,727],[234,726],[228,725],[221,724],[200,721],[196,721],[188,720],[180,720],[179,718],[178,718],[176,718],[174,718],[171,718],[161,720],[158,720],[156,721],[154,721],[154,722],[153,722],[152,724],[148,726],[148,727],[147,727],[144,727],[143,727],[141,727],[139,727],[136,727],[135,727],[134,727],[132,727],[124,730],[121,731],[115,733],[110,735],[105,738],[104,738],[100,740],[98,740],[97,742],[96,742],[92,743]],"dx":[-1793,145],"dy":[-1793,145],"length":1839.959692862202,"timing":[41,48,59,66,76,86,97,106,117,126,138,147,157,167,176,187,241,257,268,276,287,297,307,318,326,337,347,357,367,377,386,397,407,417,427,437,447,457,467,477,487,497,506,517,526,537,547,557,567,581,597,607,617,627,637,647,656,667,678,687,697,712,719,739,739,747,757,766,776,786,797,808,817,828,837,847,878,888,897,906,917,927,937,947,957,967,977,993,1008,1018,1028,1038,1047,1057,1099,1107,1118,1127,1139,1151,1200,1207,1217,1228,1237,1249,1292,1307,1318,1327,1337,1347,1357,1367,1378,1387,1398,1407,1417]},{"start":[298,665],"end":[1597,474],"points":[[298,665],[313,656],[320,652],[325,650],[331,647],[346,640],[357,635],[363,631],[368,629],[374,626],[390,620],[399,616],[408,613],[418,609],[451,599],[472,594],[491,590],[500,590],[502,590],[502,588],[503,588],[504,588],[511,590],[520,592],[531,595],[572,599],[624,599],[676,595],[721,588],[760,583],[851,568],[899,560],[947,553],[1020,544],[1067,539],[1110,535],[1140,531],[1210,525],[1227,522],[1254,518],[1295,512],[1339,503],[1353,500],[1366,496],[1391,491],[1408,487],[1419,486],[1430,484],[1452,482],[1458,482],[1470,480],[1499,480],[1512,480],[1523,479],[1538,479],[1548,478],[1549,477],[1551,477],[1553,477],[1556,475],[1561,475],[1566,474],[1577,474],[1582,474],[1588,474],[1590,474],[1591,474],[1592,474],[1593,474],[1595,474],[1596,474],[1597,474]],"dx":[1299,-191],"dy":[1299,-191],"length":1327.7816824300555,"timing":[2,12,21,31,42,52,72,81,92,102,112,121,131,142,150,161,171,181,191,201,212,221,231,241,252,261,281,292,301,311,321,331,342,352,361,372,382,392,404,412,422,430,442,452,461,474,481,491,502,512,522,531,542,552,561,572,582,591,611,621,632,642,652,662,671,682,691,702,714,721,732,741]},{"start":[1584,474],"end":[705,934],"points":[[1584,474],[1578,474],[1575,474],[1564,474],[1556,475],[1553,477],[1541,479],[1539,480],[1532,483],[1525,486],[1514,488],[1502,492],[1482,496],[1474,497],[1457,501],[1441,504],[1434,505],[1424,509],[1418,512],[1415,513],[1414,514],[1410,515],[1408,518],[1393,526],[1381,531],[1365,538],[1332,549],[1305,557],[1248,577],[1223,587],[1194,601],[1167,618],[1147,631],[1094,665],[1060,684],[1038,699],[1014,713],[965,740],[942,752],[889,781],[867,792],[854,801],[837,816],[826,825],[804,843],[796,849],[772,869],[760,878],[752,885],[741,891],[729,899],[724,903],[718,905],[716,908],[713,909],[712,912],[711,913],[711,914],[709,914],[709,917],[708,921],[707,925],[707,926],[705,927],[705,930],[704,930],[704,931],[704,934],[705,934]],"dx":[-879,460],"dy":[-879,460],"length":1018.6192642110913,"timing":[2,11,22,31,52,62,70,82,92,102,112,122,132,140,153,162,172,182,192,202,211,222,231,242,251,262,272,282,292,302,312,322,333,342,352,362,372,383,391,403,412,423,432,442,452,472,483,491,503,513,522,533,548,552,564,572,581,593,602,612,622,631,642,652,662,672,682,692,842]},{"start":[720,905],"end":[96,250],"points":[[720,905],[721,903],[726,892],[729,888],[737,881],[744,871],[750,865],[751,862],[753,860],[753,858],[755,858],[757,855],[759,853],[761,851],[765,848],[765,847],[766,845],[766,842],[766,840],[766,835],[765,832],[763,829],[757,821],[739,799],[724,783],[709,769],[691,752],[651,718],[622,695],[562,652],[523,623],[510,614],[471,585],[410,536],[389,517],[335,468],[305,442],[296,435],[265,405],[249,388],[240,376],[233,366],[231,351],[229,342],[231,334],[235,323],[236,318],[237,312],[237,308],[237,307],[237,305],[235,301],[232,295],[224,288],[213,276],[206,271],[200,266],[192,258],[185,253],[180,249],[170,242],[161,238],[155,237],[150,234],[128,227],[123,225],[112,223],[103,220],[98,219],[94,217],[92,216],[90,216],[90,217],[90,219],[90,223],[90,224],[92,228],[92,229],[92,230],[92,233],[92,234],[92,236],[93,238],[94,239],[94,242],[94,243],[94,245],[94,246],[94,247],[94,250],[96,250]],"dx":[-624,-655],"dy":[-624,-655],"length":1078.4891815243902,"timing":[16,35,55,56,76,94,128,136,146,156,166,176,186,196,206,216,226,236,247,256,266,276,286,296,307,316,327,336,346,356,366,377,389,396,408,416,427,437,446,461,467,476,488,497,507,517,526,537,558,566,576,587,597,617,626,636,648,656,666,677,687,696,708,717,727,738,747,759,767,777,786,847,978,987,997,1006,1017,1026,1037,1047,1060,1066,1077,1089,1097,1117,1147,1157,1177,1186,1237]},{"start":[107,251],"end":[1647,284],"points":[[107,251],[111,251],[114,251],[116,250],[119,250],[121,250],[127,250],[131,250],[147,250],[159,251],[168,252],[190,256],[198,258],[206,260],[222,264],[229,265],[238,268],[261,275],[268,276],[311,285],[329,289],[349,293],[406,300],[433,304],[448,306],[476,307],[550,308],[582,308],[632,307],[683,306],[736,304],[786,303],[883,302],[926,302],[990,302],[1069,302],[1100,302],[1167,300],[1198,298],[1241,295],[1271,294],[1289,293],[1332,290],[1346,290],[1369,289],[1388,289],[1406,289],[1427,287],[1436,287],[1449,285],[1453,285],[1458,284],[1459,284],[1466,282],[1482,282],[1495,282],[1523,284],[1537,284],[1557,285],[1589,285],[1601,285],[1610,285],[1619,285],[1632,284],[1637,284],[1642,284],[1644,284],[1645,284],[1646,284],[1647,284]],"dx":[1540,33],"dy":[1540,33],"length":1547.200354444556,"timing":[9,24,34,44,56,63,74,84,93,104,114,124,135,145,154,165,173,184,195,204,215,225,235,244,255,265,276,285,295,306,314,325,333,345,354,374,383,396,403,415,425,435,444,456,464,486,494,522,534,545,554,564,576,584,605,615,624,634,644,654,664,675,685,695,704,726,734,814,825,835]},{"start":[1553,323],"end":[66,753],"points":[[1553,323],[1532,329],[1490,339],[1454,349],[1436,354],[1426,356],[1385,368],[1365,374],[1345,380],[1311,387],[1299,390],[1276,395],[1224,406],[1200,412],[1179,419],[1157,428],[1143,436],[1134,442],[1130,447],[1126,451],[1122,455],[1118,458],[1114,460],[1109,464],[1087,476],[1070,482],[1064,484],[1040,490],[975,504],[945,512],[869,529],[828,538],[804,543],[765,551],[676,569],[629,580],[581,589],[516,602],[483,608],[444,616],[416,624],[377,638],[354,651],[341,659],[329,669],[317,680],[299,699],[289,711],[278,720],[271,729],[265,733],[259,738],[249,744],[241,746],[238,746],[220,747],[210,747],[200,747],[186,747],[182,747],[180,747],[174,747],[164,747],[156,747],[152,747],[139,747],[128,746],[120,745],[117,745],[112,744],[109,744],[99,742],[91,742],[83,742],[72,746],[68,749],[65,751],[65,753],[66,753]],"dx":[-1487,430],"dy":[-1487,430],"length":1582.3266265041257,"timing":[2,11,31,40,51,60,70,80,90,101,110,121,131,141,150,161,170,181,190,201,211,221,231,240,251,260,271,282,291,300,311,320,331,340,351,361,371,381,394,402,412,421,432,441,450,461,471,480,491,501,511,521,533,541,551,561,571,582,591,601,611,622,630,642,651,660,671,681,691,701,711,721,731,742,751,762,772,781,911]},{"start":[212,737],"end":[1775,35],"points":[[212,737],[213,737],[214,737],[221,737],[239,734],[262,730],[311,720],[379,703],[413,694],[451,685],[532,660],[567,648],[617,629],[673,606],[780,559],[806,546],[859,516],[961,448],[1013,411],[1107,348],[1140,330],[1201,297],[1256,270],[1280,257],[1302,247],[1328,232],[1348,221],[1378,199],[1401,183],[1418,174],[1435,165],[1447,158],[1470,149],[1481,144],[1491,140],[1496,137],[1520,130],[1552,119],[1579,113],[1603,106],[1626,100],[1633,97],[1635,96],[1638,95],[1640,93],[1646,92],[1661,87],[1673,84],[1688,79],[1701,75],[1713,71],[1729,65],[1734,62],[1738,61],[1744,57],[1747,56],[1750,53],[1753,50],[1755,49],[1757,46],[1760,45],[1761,44],[1764,43],[1766,41],[1768,40],[1769,40],[1772,37],[1773,37],[1774,36],[1775,35]],"dx":[1563,-702],"dy":[1563,-702],"length":1731.6556949250207,"timing":[140,212,220,231,251,260,280,290,301,310,320,329,342,350,361,371,380,390,400,411,420,438,451,461,471,481,491,500,521,530,541,551,560,570,580,591,600,611,630,640,660,670,681,690,703,710,730,740,750,761,771,780,790,801,810,821,831,841,850,860,871,881,890,903,910,921,930,941,951,1081]},{"start":[1736,56],"end":[549,367],"points":[[1736,56],[1731,59],[1721,65],[1705,74],[1691,82],[1679,88],[1653,101],[1639,109],[1604,126],[1584,136],[1562,145],[1539,156],[1502,171],[1476,180],[1432,197],[1376,215],[1348,223],[1287,240],[1248,248],[1214,254],[1193,258],[1180,261],[1166,263],[1141,270],[1125,274],[1101,280],[1073,288],[1019,301],[994,306],[971,312],[911,323],[845,334],[820,338],[808,339],[770,343],[722,345],[666,347],[624,347],[591,347],[583,347],[579,347],[577,345],[575,345],[574,345],[570,345],[568,345],[565,347],[560,349],[557,350],[555,352],[551,354],[544,358],[540,361],[536,363],[526,371],[523,374],[518,379],[517,382],[518,380],[520,380],[520,379],[526,376],[531,375],[534,374],[540,371],[548,369],[549,367]],"dx":[-1187,311],"dy":[-1187,311],"length":1319.3669305376088,"timing":[9,19,30,39,60,70,80,90,101,120,130,141,150,160,170,190,199,219,230,252,260,269,281,290,300,311,320,330,342,350,360,370,380,390,400,410,431,440,464,470,480,490,500,530,541,549,560,570,579,590,600,610,620,630,643,650,671,680,921,943,950,975,991,1001,1010,1030,1040]},{"start":[555,367],"end":[1945,836],"points":[[555,367],[557,367],[558,367],[560,369],[565,369],[570,370],[573,370],[586,371],[603,373],[617,374],[622,375],[625,375],[629,376],[640,379],[664,384],[682,388],[743,399],[778,405],[817,411],[902,426],[965,437],[1015,448],[1125,471],[1186,484],[1272,504],[1332,518],[1429,540],[1522,562],[1553,570],[1568,575],[1622,592],[1676,613],[1700,626],[1722,640],[1745,658],[1769,679],[1783,694],[1795,705],[1796,708],[1805,716],[1810,722],[1814,726],[1817,730],[1819,735],[1825,744],[1830,753],[1834,760],[1838,766],[1845,777],[1848,781],[1856,788],[1857,788],[1858,790],[1860,791],[1861,792],[1863,796],[1867,803],[1870,809],[1874,814],[1875,818],[1880,825],[1887,831],[1891,834],[1893,834],[1905,835],[1912,835],[1914,835],[1918,835],[1921,835],[1923,835],[1926,835],[1930,835],[1938,835],[1939,836],[1940,836],[1943,836],[1944,836],[1945,836]],"dx":[1390,469],"dy":[1390,469],"length":1519.4858707696392,"timing":[10,40,140,150,159,169,179,190,200,220,231,239,250,260,279,290,300,310,320,330,350,359,369,380,390,403,410,430,440,451,460,470,480,490,500,520,531,550,560,570,581,590,600,610,622,640,650,660,670,680,690,700,710,720,730,740,760,769,779,791,800,822,829,850,860,870,880,890,900,910,920,940,950,960,970,980,990,1010]},{"start":[1921,822],"end":[792,12],"points":[[1921,822],[1908,817],[1885,809],[1870,804],[1843,796],[1804,786],[1778,780],[1737,771],[1716,767],[1696,764],[1664,758],[1649,754],[1624,749],[1589,740],[1546,728],[1533,725],[1527,723],[1521,722],[1520,722],[1519,721],[1514,717],[1501,709],[1479,700],[1460,692],[1438,683],[1420,675],[1365,649],[1312,618],[1278,592],[1234,550],[1195,502],[1164,458],[1133,406],[1111,364],[1099,346],[1088,328],[1073,302],[1064,284],[1056,268],[1043,237],[1040,229],[1038,221],[1034,208],[1029,195],[1021,180],[1014,171],[1003,159],[999,155],[988,147],[979,139],[973,134],[966,126],[960,120],[957,119],[951,115],[938,111],[926,107],[918,104],[908,100],[904,98],[893,93],[875,84],[852,69],[848,67],[836,59],[831,56],[821,48],[817,43],[812,39],[809,35],[805,32],[802,29],[801,28],[799,22],[797,21],[796,17],[796,16],[793,12],[792,12]],"dx":[-1129,-810],"dy":[-1129,-810],"length":1471.6597542125887,"timing":[6,16,36,46,55,78,86,95,105,115,125,135,156,166,175,186,196,205,216,225,235,256,265,286,295,305,316,325,348,355,376,385,406,415,426,436,446,455,467,475,485,497,507,516,526,535,546,557,565,585,596,616,626,649,656,676,685,697,709,725,736,745,767,776,786,796,806,826,836,847,857,867,876,887,896,906,917,926,946]},{"start":[785,19],"end":[1818,237],"points":[[785,19],[783,22],[780,26],[776,33],[775,37],[771,47],[770,54],[769,60],[766,68],[765,76],[761,89],[756,106],[752,117],[750,121],[750,122],[750,125],[753,130],[765,138],[767,139],[780,145],[795,148],[836,156],[862,160],[915,167],[988,174],[1058,182],[1130,190],[1174,195],[1218,199],[1311,206],[1386,210],[1443,212],[1512,216],[1541,217],[1560,217],[1603,219],[1612,219],[1626,219],[1652,219],[1681,220],[1699,222],[1720,226],[1736,229],[1746,232],[1753,233],[1763,235],[1769,237],[1775,238],[1781,238],[1782,238],[1784,238],[1786,238],[1788,238],[1792,238],[1802,238],[1806,238],[1811,238],[1816,238],[1818,237]],"dx":[1033,218],"dy":[1033,218],"length":1193.8828497607667,"timing":[4,14,34,55,64,74,85,95,104,125,145,155,165,174,184,197,215,224,237,245,255,271,284,294,314,324,345,354,364,375,384,405,414,425,435,447,454,463,474,495,505,525,534,544,555,565,574,586,594,615,644,655,664,675,684,695,705,714,735]},{"start":[1715,260],"end":[680,377],"points":[[1715,260],[1700,261],[1686,263],[1658,267],[1643,268],[1635,269],[1602,273],[1582,277],[1561,280],[1515,287],[1491,291],[1479,294],[1420,306],[1398,309],[1375,315],[1353,320],[1321,329],[1299,334],[1258,345],[1229,350],[1200,355],[1165,359],[1135,363],[1114,365],[1091,368],[1056,373],[1032,376],[1008,380],[959,384],[935,385],[911,385],[900,385],[857,385],[837,384],[822,382],[800,381],[789,381],[771,381],[763,381],[755,381],[741,381],[737,381],[731,381],[716,381],[710,380],[703,380],[698,380],[693,378],[689,378],[686,378],[684,378],[681,378],[680,377]],"dx":[-1035,117],"dy":[-1035,117],"length":1047.3893745462676,"timing":[3,13,23,33,42,53,62,73,83,92,102,113,123,133,144,153,163,173,182,203,212,233,242,252,262,272,282,292,302,313,322,332,343,353,363,372,384,393,402,413,423,432,442,452,462,472,484,492,503,514,522,543,564]},{"start":[682,377],"end":[576,205],"points":[[682,377],[684,377],[685,377],[688,376],[690,376],[694,376],[701,376],[706,374],[712,374],[724,374],[731,374],[740,374],[751,374],[762,374],[776,374],[788,374],[805,374],[810,374],[819,376],[829,376],[854,377],[867,378],[880,380],[902,381],[916,381],[945,383],[951,383],[962,383],[966,383],[971,383],[970,381],[967,380],[961,374],[941,365],[899,348],[877,341],[851,330],[824,321],[777,304],[767,300],[721,282],[691,269],[673,261],[656,252],[624,235],[608,227],[597,221],[585,216],[574,209],[574,208],[574,207],[576,207],[576,205]],"dx":[-106,-172],"dy":[-106,-172],"length":731.4413932582613,"timing":[8,19,28,38,47,58,69,78,88,98,107,119,128,138,148,158,168,177,187,198,207,218,229,237,249,258,268,278,288,299,308,317,330,338,348,358,367,378,388,398,408,418,428,438,448,458,469,478,488,498,518,528,538]},{"start":[612,221],"end":[923,839],"points":[[612,221],[617,224],[621,227],[625,230],[630,234],[633,237],[635,239],[638,242],[638,243],[641,244],[642,246],[643,247],[645,248],[646,249],[647,251],[647,252],[647,255],[647,256],[648,260],[650,262],[652,270],[654,275],[655,278],[659,286],[668,307],[673,321],[682,346],[689,364],[702,399],[710,416],[723,442],[751,485],[777,522],[804,556],[820,573],[833,589],[856,617],[868,633],[885,656],[895,671],[904,684],[912,697],[924,713],[928,725],[928,732],[928,743],[928,747],[928,754],[928,756],[928,758],[928,759],[928,760],[927,763],[925,769],[925,775],[925,778],[924,784],[924,786],[924,788],[924,791],[924,794],[923,798],[923,803],[923,814],[921,819],[921,824],[921,828],[923,832],[923,834],[924,836],[924,838],[924,839],[923,839]],"dx":[311,618],"dy":[311,618],"length":721.013391974913,"timing":[4,14,25,35,44,54,64,85,94,105,115,135,145,155,165,175,185,193,205,215,225,235,245,254,264,275,284,304,319,334,350,356,364,374,384,395,404,415,425,435,444,455,465,475,485,495,503,515,535,545,575,585,595,605,624,634,645,654,666,674,689,695,705,714,726,734,745,756,765,774,784,795,855]},{"start":[921,836],"end":[224,83],"points":[[921,836],[921,834],[921,833],[921,830],[921,829],[920,828],[920,826],[919,825],[919,824],[919,823],[919,820],[919,819],[919,817],[917,816],[917,813],[916,811],[916,810],[916,808],[916,807],[914,802],[912,799],[910,795],[899,781],[872,758],[836,728],[793,695],[728,647],[667,596],[630,564],[595,529],[561,491],[521,440],[492,403],[474,379],[447,347],[403,296],[371,264],[351,244],[332,225],[327,213],[326,205],[326,201],[326,200],[326,192],[326,187],[327,182],[328,172],[328,169],[328,163],[328,159],[325,150],[323,148],[321,144],[319,141],[315,139],[310,133],[308,132],[302,130],[286,120],[276,115],[266,110],[261,107],[248,100],[241,96],[235,93],[230,88],[227,85],[226,85],[226,84],[224,83]],"dx":[-697,-753],"dy":[-697,-753],"length":1060.8730112151939,"timing":[7,18,28,38,68,77,88,98,107,117,127,137,147,158,168,187,198,207,218,226,237,248,257,278,287,307,317,338,347,358,368,378,387,397,407,429,437,458,468,488,497,507,518,528,538,547,558,566,578,588,597,607,617,637,647,667,680,688,700,709,717,729,737,747,757,767,778,788,798,808]},{"start":[265,103],"end":[855,149],"points":[[265,103],[275,109],[280,111],[300,122],[314,129],[337,144],[354,154],[363,159],[371,165],[389,175],[406,185],[425,196],[443,206],[462,218],[473,223],[483,230],[514,246],[525,253],[535,259],[547,267],[573,283],[599,300],[623,314],[646,326],[655,330],[685,335],[709,334],[734,327],[751,319],[759,314],[777,297],[785,288],[800,270],[803,267],[807,261],[816,249],[818,245],[822,241],[825,236],[827,231],[830,226],[833,219],[837,205],[838,198],[838,194],[838,192],[839,183],[842,176],[843,174],[846,168],[850,163],[851,159],[852,155],[853,154],[853,153],[855,150],[855,149]],"dx":[590,46],"dy":[590,46],"length":756.812801090845,"timing":[8,19,30,39,60,69,79,89,99,108,119,128,140,149,158,170,178,189,198,209,219,228,239,249,259,269,289,299,319,330,339,349,359,368,379,389,398,409,418,432,439,450,459,469,480,489,499,509,529,541,549,560,569,580,589,599,609]},{"start":[853,153],"end":[1572,830],"points":[[853,153],[852,154],[852,155],[851,155],[850,158],[850,161],[850,162],[848,163],[848,166],[847,170],[846,172],[844,176],[843,179],[843,180],[843,185],[843,189],[846,192],[853,205],[860,212],[882,240],[899,261],[916,284],[948,328],[963,350],[978,374],[1029,445],[1048,469],[1099,523],[1112,535],[1148,566],[1173,586],[1195,602],[1246,644],[1260,658],[1271,667],[1284,680],[1294,691],[1301,699],[1310,709],[1325,727],[1328,731],[1346,751],[1353,757],[1373,775],[1382,784],[1393,792],[1395,795],[1415,805],[1420,808],[1427,810],[1445,816],[1450,817],[1458,818],[1480,823],[1498,826],[1508,826],[1514,826],[1516,825],[1519,821],[1520,819],[1521,818],[1523,817],[1525,817],[1528,816],[1534,816],[1538,817],[1555,822],[1562,825],[1563,825],[1566,825],[1567,826],[1568,827],[1570,827],[1571,830],[1572,830]],"dx":[719,677],"dy":[719,677],"length":1055.9644253767133,"timing":[18,59,82,89,109,118,129,140,150,164,168,190,200,210,218,230,239,249,260,269,280,289,300,310,320,328,339,350,359,368,380,389,400,410,419,431,440,450,459,469,479,489,499,510,520,530,540,548,560,569,579,590,600,610,630,640,648,660,669,680,689,699,709,720,730,740,766,779,789,799,810,819,830,839,910]},{"start":[1566,826],"end":[537,821],"points":[[1566,826],[1560,823],[1558,821],[1553,819],[1545,814],[1541,813],[1538,812],[1533,809],[1521,804],[1508,796],[1498,791],[1489,787],[1485,784],[1452,770],[1437,764],[1385,745],[1348,732],[1338,728],[1304,715],[1238,689],[1205,676],[1186,669],[1152,654],[1137,646],[1109,632],[1098,626],[1087,620],[1081,617],[1068,613],[1057,611],[1049,610],[1027,611],[1016,614],[1000,617],[991,618],[942,630],[873,645],[836,653],[801,661],[758,669],[731,675],[709,682],[675,695],[662,700],[654,702],[644,709],[626,722],[617,734],[613,739],[611,743],[605,752],[600,758],[594,763],[588,769],[571,782],[566,784],[550,795],[544,800],[540,804],[536,809],[536,810],[536,811],[536,813],[536,814],[536,815],[536,818],[537,818],[537,819],[537,821]],"dx":[-1029,-5],"dy":[-1029,-5],"length":1143.1660214346439,"timing":[3,12,22,31,42,52,62,72,83,92,103,111,123,133,142,153,162,171,182,192,201,213,221,232,242,253,263,272,281,291,303,313,324,333,343,352,363,372,382,393,401,413,422,432,442,451,461,483,492,503,512,522,532,543,552,562,573,584,592,603,613,622,643,652,662,672,682,693,722]},{"start":[551,810],"end":[427,924],"points":[[551,810],[555,809],[558,808],[561,806],[568,801],[574,797],[576,796],[580,792],[583,791],[587,788],[590,784],[593,783],[597,782],[602,778],[610,772],[622,767],[626,765],[627,765],[628,763],[626,763],[622,765],[619,767],[615,769],[603,779],[585,792],[577,797],[570,801],[555,809],[528,823],[514,831],[501,840],[486,850],[468,865],[458,874],[441,892],[434,901],[432,904],[425,914],[423,922],[423,923],[423,924],[424,924],[425,923],[427,923],[427,922],[427,923],[427,924]],"dx":[-124,114],"dy":[-124,114],"length":365.92140711402664,"timing":[1,11,21,31,42,51,61,71,81,92,102,111,122,131,144,152,173,181,192,251,261,271,281,292,301,312,321,332,342,356,361,372,382,392,403,412,423,432,447,462,472,492,512,522,542,583,592]},{"start":[460,900],"end":[1566,740],"points":[[460,900],[468,893],[472,888],[473,885],[477,883],[477,882],[479,880],[482,878],[484,875],[486,874],[494,869],[495,866],[498,865],[499,865],[502,862],[508,861],[524,856],[540,852],[580,840],[606,833],[631,829],[667,822],[724,813],[774,806],[810,802],[894,798],[930,798],[987,797],[1063,796],[1102,794],[1139,792],[1193,788],[1216,785],[1236,783],[1282,776],[1305,772],[1336,767],[1340,766],[1355,763],[1374,758],[1381,757],[1390,755],[1401,753],[1403,751],[1407,751],[1412,749],[1413,748],[1414,746],[1417,744],[1422,741],[1426,740],[1430,738],[1436,737],[1442,736],[1451,736],[1461,735],[1475,732],[1482,732],[1487,731],[1495,729],[1498,728],[1507,727],[1514,727],[1518,725],[1530,725],[1533,724],[1539,724],[1542,724],[1543,723],[1544,723],[1546,723],[1547,723],[1548,723],[1549,723],[1553,724],[1556,724],[1556,725],[1557,725],[1559,725],[1559,727],[1560,727],[1560,728],[1561,729],[1562,731],[1562,732],[1564,732],[1564,733],[1564,735],[1565,736],[1565,737],[1565,738],[1566,738],[1566,740]],"dx":[1106,-160],"dy":[1106,-160],"length":1154.0769963851437,"timing":[5,15,35,46,55,67,75,85,96,105,115,130,135,195,216,226,235,247,254,265,277,286,295,306,315,326,335,345,367,375,385,396,406,415,425,435,446,455,465,474,486,496,506,515,526,536,544,556,566,576,586,595,605,616,626,645,655,676,687,694,706,716,726,736,745,756,765,776,785,805,815,826,835,845,855,866,875,895,926,936,946,956,964,976,985,996,1006,1016,1026,1036,1046,1076,1156]},{"start":[1565,740],"end":[656,725],"points":[[1565,740],[1564,740],[1561,740],[1559,738],[1557,738],[1555,738],[1551,738],[1544,738],[1518,738],[1492,738],[1464,737],[1395,733],[1296,725],[1245,720],[1208,718],[1149,712],[1081,707],[1049,706],[987,703],[941,703],[912,703],[903,705],[893,706],[877,711],[873,714],[868,715],[864,718],[849,723],[841,725],[830,727],[804,731],[790,732],[756,732],[724,732],[708,732],[702,732],[698,732],[695,732],[694,732],[693,732],[687,731],[684,731],[680,729],[672,728],[667,727],[664,727],[663,725],[661,725],[660,725],[659,725],[658,725],[656,725]],"dx":[-909,-15],"dy":[-909,-15],"length":917.8226304949789,"timing":[61,70,79,89,100,251,260,270,281,290,300,309,329,341,350,362,380,391,400,420,431,440,450,461,470,482,491,500,510,520,530,540,550,570,579,590,599,610,620,661,681,691,701,710,726,730,740,750,790,799,845,871]},{"start":[658,725],"end":[1326,759],"points":[[658,725],[659,725],[660,725],[661,725],[663,725],[664,725],[665,725],[667,725],[668,725],[671,725],[681,721],[687,719],[697,718],[723,715],[729,714],[756,714],[787,715],[804,716],[824,718],[854,723],[877,725],[901,729],[938,734],[963,737],[999,741],[1010,741],[1055,743],[1077,743],[1089,743],[1111,746],[1142,749],[1153,750],[1174,751],[1202,754],[1228,755],[1242,756],[1263,756],[1275,756],[1280,756],[1291,756],[1296,758],[1300,758],[1301,758],[1302,758],[1304,758],[1305,758],[1309,758],[1313,758],[1318,758],[1319,758],[1322,759],[1323,759],[1324,759],[1326,759]],"dx":[668,34],"dy":[668,34],"length":672.3387488561209,"timing":[75,84,105,115,144,165,175,185,195,205,214,224,235,245,257,264,287,294,304,316,324,335,345,354,365,375,385,394,404,414,424,436,444,455,465,485,496,505,515,525,535,544,555,565,615,635,645,655,664,675,684,696,701,754]},{"start":[1323,759],"end":[1933,820],"points":[[1323,759],[1320,759],[1316,759],[1313,759],[1309,759],[1306,759],[1305,759],[1305,758],[1302,758],[1300,758],[1297,758],[1296,756],[1294,756],[1298,756],[1306,756],[1320,756],[1345,758],[1383,762],[1400,763],[1424,767],[1467,772],[1487,775],[1517,779],[1569,786],[1591,789],[1613,792],[1654,797],[1674,798],[1692,799],[1709,801],[1740,802],[1748,803],[1762,805],[1775,805],[1800,807],[1812,807],[1817,807],[1834,807],[1855,807],[1858,807],[1869,808],[1878,810],[1887,811],[1897,814],[1903,814],[1912,816],[1923,819],[1927,819],[1929,819],[1930,819],[1931,820],[1933,820]],"dx":[610,61],"dy":[610,61],"length":675.1117667015254,"timing":[49,59,78,89,109,118,129,139,150,169,179,189,199,249,259,269,290,299,309,320,329,339,349,359,370,380,389,399,409,420,430,440,450,459,470,480,489,500,513,518,530,540,550,559,569,579,589,599,609,630,680,759]},{"start":[1931,820],"end":[1545,923],"points":[[1931,820],[1930,820],[1929,820],[1927,820],[1922,819],[1916,817],[1904,815],[1897,814],[1892,814],[1886,812],[1868,807],[1861,806],[1849,802],[1834,797],[1812,789],[1803,785],[1792,782],[1760,775],[1752,773],[1723,771],[1700,771],[1684,776],[1678,782],[1670,794],[1661,808],[1656,821],[1654,824],[1653,830],[1650,841],[1649,847],[1648,851],[1645,859],[1644,863],[1644,867],[1641,872],[1640,876],[1637,878],[1635,882],[1628,886],[1623,889],[1617,891],[1605,898],[1602,899],[1597,903],[1589,908],[1584,911],[1580,912],[1567,917],[1559,920],[1552,921],[1546,923],[1545,923]],"dx":[-386,103],"dy":[-386,103],"length":474.09831835055473,"timing":[30,50,59,70,78,91,109,121,130,140,150,160,170,180,189,200,210,220,230,238,259,269,292,301,320,330,340,350,359,369,381,390,399,411,420,429,440,450,460,470,480,489,499,510,519,530,542,550,570,580,600,609]},{"start":[1544,923],"end":[468,644],"points":[[1544,923],[1544,921],[1542,920],[1541,916],[1539,915],[1537,912],[1532,910],[1527,906],[1526,904],[1523,903],[1520,901],[1519,899],[1515,895],[1506,889],[1498,884],[1476,873],[1464,868],[1445,862],[1399,847],[1353,834],[1306,824],[1269,816],[1243,811],[1159,794],[1089,781],[1060,777],[982,763],[909,751],[879,746],[852,741],[843,739],[818,735],[778,728],[740,724],[712,720],[687,717],[665,715],[648,713],[640,713],[638,713],[625,712],[619,711],[615,711],[609,709],[605,709],[604,709],[600,708],[595,707],[582,704],[573,702],[563,699],[560,698],[550,694],[539,690],[536,689],[531,686],[528,685],[527,682],[524,681],[521,677],[518,674],[515,673],[511,672],[507,669],[506,668],[504,666],[500,664],[493,660],[491,659],[487,656],[483,653],[479,651],[472,646],[470,646],[470,644],[468,644]],"dx":[-1076,-279],"dy":[-1076,-279],"length":1132.9299052759045,"timing":[51,74,80,100,110,120,130,140,150,160,181,189,200,210,220,231,240,250,260,281,290,300,310,320,335,351,361,370,380,390,401,410,421,430,451,460,481,490,501,511,520,529,540,550,561,570,580,591,604,621,630,641,650,660,671,681,704,710,731,741,750,761,771,780,792,801,811,821,831,839,851,861,871,881,890,971]},{"start":[470,644],"end":[1712,647],"points":[[470,644],[471,644],[472,646],[475,646],[476,646],[478,646],[479,646],[480,646],[484,647],[485,647],[491,648],[493,648],[498,648],[505,650],[514,650],[519,650],[524,650],[541,650],[570,648],[583,647],[597,647],[640,643],[684,642],[734,640],[802,639],[832,639],[906,638],[983,633],[1013,631],[1056,627],[1140,621],[1178,620],[1261,616],[1285,614],[1317,614],[1384,614],[1467,614],[1493,614],[1527,614],[1545,614],[1559,616],[1562,616],[1566,617],[1575,618],[1577,618],[1578,618],[1584,618],[1585,618],[1588,618],[1589,618],[1590,618],[1593,618],[1595,620],[1606,621],[1615,623],[1629,629],[1640,631],[1651,635],[1666,639],[1671,640],[1680,642],[1686,642],[1690,643],[1692,643],[1694,643],[1697,644],[1698,644],[1699,644],[1705,646],[1708,647],[1712,647]],"dx":[1242,3],"dy":[1242,3],"length":1250.0470283267068,"timing":[8,28,37,68,77,88,98,107,118,128,138,147,158,178,188,197,208,218,239,248,259,267,279,298,308,328,339,358,368,379,388,398,408,417,439,449,458,478,488,508,518,528,538,548,557,568,577,588,598,608,619,629,639,648,660,669,678,688,698,708,719,738,749,758,788,809,818,828,838,849,868]},{"start":[1710,647],"end":[1869,246],"points":[[1710,647],[1707,647],[1703,647],[1701,647],[1697,647],[1694,647],[1693,647],[1688,647],[1678,646],[1672,646],[1660,644],[1645,642],[1626,640],[1602,639],[1597,638],[1587,638],[1578,638],[1569,635],[1567,634],[1567,631],[1569,627],[1572,625],[1581,618],[1587,613],[1594,608],[1607,597],[1625,579],[1643,564],[1668,540],[1689,517],[1697,508],[1720,470],[1737,440],[1751,409],[1763,387],[1782,350],[1797,326],[1811,301],[1840,253],[1846,242],[1868,205],[1871,197],[1873,193],[1873,194],[1872,196],[1872,198],[1869,200],[1868,202],[1867,205],[1866,218],[1866,222],[1866,227],[1867,231],[1867,235],[1867,237],[1867,239],[1867,240],[1868,242],[1869,245],[1869,246]],"dx":[159,-401],"dy":[159,-401],"length":743.9417202759337,"timing":[0,11,30,41,50,61,71,80,90,100,120,131,150,161,171,181,191,211,221,230,244,250,271,282,289,301,312,330,341,361,371,381,391,400,410,422,430,441,450,462,471,481,490,571,581,591,601,609,621,631,640,651,662,671,681,691,711,733,751,771]},{"start":[1868,246],"end":[900,728],"points":[[1868,246],[1867,246],[1864,246],[1860,248],[1856,248],[1853,249],[1847,249],[1842,250],[1827,253],[1810,255],[1788,261],[1762,266],[1699,281],[1647,301],[1590,327],[1517,365],[1440,402],[1417,414],[1383,430],[1303,465],[1230,500],[1195,517],[1178,527],[1165,536],[1148,550],[1141,557],[1136,563],[1131,570],[1126,578],[1121,583],[1111,591],[1095,604],[1084,610],[1058,628],[1049,632],[1040,638],[1036,640],[1022,649],[1014,654],[1007,660],[993,670],[989,673],[981,676],[968,686],[965,687],[958,691],[952,693],[946,697],[940,700],[931,704],[922,709],[913,714],[911,715],[906,719],[905,719],[905,721],[903,723],[900,727],[900,728]],"dx":[-968,482],"dy":[-968,482],"length":1097.8950220804218,"timing":[112,123,132,143,152,163,174,182,193,202,212,224,233,252,262,283,292,301,313,322,342,353,362,374,383,392,403,412,422,435,442,465,473,492,502,512,522,532,542,553,562,572,583,592,603,613,622,632,642,652,672,683,692,703,712,733,742,785,802]},{"start":[898,727],"end":[1852,558],"points":[[898,727],[898,726],[898,725],[898,723],[898,722],[898,721],[898,717],[898,715],[898,712],[898,708],[900,705],[901,701],[901,700],[902,699],[909,695],[911,693],[919,689],[940,684],[955,680],[963,678],[1005,669],[1028,663],[1052,658],[1078,653],[1131,644],[1165,639],[1226,630],[1263,624],[1288,620],[1338,611],[1400,602],[1434,597],[1484,591],[1504,588],[1539,583],[1555,580],[1570,579],[1605,575],[1618,574],[1630,572],[1646,570],[1656,568],[1665,566],[1677,562],[1683,559],[1687,559],[1694,557],[1703,554],[1711,554],[1722,553],[1731,553],[1735,553],[1750,553],[1768,554],[1770,555],[1773,555],[1776,555],[1781,555],[1785,555],[1787,555],[1795,555],[1798,555],[1802,555],[1804,555],[1813,555],[1818,557],[1821,557],[1826,557],[1829,558],[1837,558],[1842,558],[1848,558],[1850,558],[1852,558]],"dx":[954,-169],"dy":[954,-169],"length":995.6599182657917,"timing":[18,78,87,118,127,138,147,158,167,188,198,208,218,228,237,247,258,273,278,288,298,307,318,327,338,348,358,368,379,388,407,418,428,437,448,458,469,478,488,498,507,517,529,538,548,558,567,578,587,597,608,618,628,648,657,668,678,688,697,709,718,728,739,749,758,768,779,788,799,808,828,839,848,859]},{"start":[1807,566],"end":[1652,574],"points":[[1807,566],[1802,567],[1792,568],[1779,571],[1773,572],[1757,575],[1727,579],[1717,580],[1696,583],[1647,585],[1621,587],[1603,588],[1578,588],[1555,588],[1542,588],[1523,588],[1502,588],[1496,588],[1488,588],[1489,588],[1491,588],[1505,587],[1509,585],[1513,585],[1522,585],[1526,585],[1544,584],[1549,584],[1564,584],[1569,584],[1579,584],[1599,583],[1605,583],[1619,580],[1632,579],[1639,577],[1648,575],[1652,574]],"dx":[-155,8],"dy":[-155,8],"length":486.0656100421972,"timing":[5,15,25,36,45,55,65,75,86,95,105,116,125,136,146,155,166,175,185,376,385,396,405,415,426,436,446,456,466,476,485,496,505,515,526,536,545,556]},{"start":[1638,579],"end":[118,348],"points":[[1638,579],[1635,579],[1632,580],[1629,580],[1623,581],[1621,583],[1614,584],[1603,585],[1597,587],[1587,588],[1575,589],[1567,590],[1545,593],[1527,594],[1518,594],[1513,594],[1504,596],[1501,596],[1498,597],[1489,598],[1482,598],[1457,599],[1439,599],[1415,599],[1367,597],[1340,594],[1311,590],[1237,579],[1194,571],[1168,566],[1071,545],[1033,536],[984,524],[885,502],[838,492],[815,486],[772,477],[695,463],[663,458],[596,446],[574,443],[521,434],[473,427],[449,421],[426,416],[413,414],[400,411],[392,410],[373,406],[362,403],[358,403],[352,402],[339,398],[334,397],[328,395],[318,393],[315,391],[304,389],[298,388],[287,385],[282,384],[278,384],[267,381],[259,378],[248,376],[230,372],[217,368],[210,367],[204,367],[184,363],[179,362],[176,360],[172,360],[170,359],[163,358],[158,356],[155,356],[148,355],[137,352],[133,352],[124,351],[120,350],[118,350],[118,348]],"dx":[-1520,-231],"dy":[-1520,-231],"length":1550.9764691837313,"timing":[10,19,30,40,50,59,70,79,90,99,109,120,129,140,160,171,181,191,199,209,221,230,240,250,260,270,279,290,300,309,320,331,341,350,360,369,379,390,401,410,431,440,450,460,471,480,490,500,510,520,530,539,550,561,569,581,589,601,611,620,630,640,650,660,670,680,690,700,710,720,731,740,750,760,770,781,790,800,811,820,830,841,850,860]},{"start":[291,373],"end":[602,134],"points":[[291,373],[320,377],[331,380],[349,382],[367,385],[383,387],[392,389],[400,389],[431,393],[441,394],[465,397],[488,399],[510,402],[528,404],[548,407],[552,408],[558,408],[562,409],[566,409],[573,411],[577,411],[601,411],[610,409],[619,407],[632,402],[649,395],[652,393],[656,389],[660,383],[662,368],[662,359],[658,342],[653,326],[644,302],[638,283],[632,266],[623,238],[621,229],[617,211],[615,188],[614,175],[614,170],[613,156],[612,149],[608,140],[605,138],[604,135],[604,134],[602,134]],"dx":[311,-239],"dy":[311,-239],"length":641.1128928745192,"timing":[4,14,24,34,44,54,64,74,84,94,105,114,135,145,155,166,174,184,195,204,215,224,235,244,254,264,274,285,294,305,315,324,334,345,354,364,374,384,394,404,415,424,434,444,465,475,495,504,655]},{"start":[660,244],"end":[581,884],"points":[[660,244],[671,261],[675,268],[680,278],[687,287],[691,295],[699,308],[700,312],[704,318],[705,324],[708,334],[710,342],[713,347],[716,352],[718,355],[718,356],[717,357],[710,361],[703,366],[699,369],[693,374],[684,391],[679,402],[671,420],[661,443],[649,468],[628,509],[619,525],[608,548],[602,561],[596,580],[593,593],[588,608],[584,624],[582,632],[582,634],[576,647],[575,651],[570,660],[558,681],[556,686],[552,698],[548,715],[546,726],[545,730],[545,751],[545,755],[545,760],[545,772],[546,778],[546,782],[549,789],[550,793],[556,806],[557,808],[558,814],[559,819],[559,821],[562,827],[563,829],[565,832],[566,834],[567,838],[568,839],[570,846],[571,852],[571,855],[572,862],[575,869],[576,873],[576,876],[576,877],[578,878],[578,880],[579,881],[580,882],[581,882],[581,884]],"dx":[-79,640],"dy":[-79,640],"length":709.0836066966369,"timing":[5,16,26,35,55,66,75,84,94,105,125,136,155,164,175,225,235,246,255,266,276,285,295,304,316,325,335,344,355,365,381,384,395,405,415,425,435,446,455,465,474,485,494,505,516,526,536,545,555,566,585,595,606,615,625,635,645,655,665,675,685,694,705,714,725,745,755,765,786,795,806,816,828,835,846,855,895,905]},{"start":[588,862],"end":[648,87],"points":[[588,862],[589,859],[592,856],[593,852],[596,850],[597,846],[601,841],[602,838],[604,837],[606,832],[607,829],[609,825],[611,821],[613,816],[614,810],[615,804],[615,800],[616,800],[616,798],[618,794],[619,791],[622,786],[632,765],[637,755],[645,735],[670,668],[685,608],[691,582],[694,570],[706,508],[710,484],[717,426],[717,404],[717,373],[717,364],[711,326],[696,282],[694,276],[689,269],[685,262],[680,253],[678,247],[675,240],[675,237],[674,235],[672,231],[667,223],[666,221],[661,215],[658,210],[657,208],[654,200],[654,195],[653,187],[652,180],[652,175],[650,167],[650,162],[649,159],[648,154],[646,146],[645,141],[645,139],[644,133],[641,126],[637,118],[637,113],[636,111],[636,110],[637,107],[637,106],[637,105],[638,105],[638,103],[641,100],[642,96],[642,94],[644,93],[645,92],[646,89],[648,88],[648,87]],"dx":[60,-775],"dy":[60,-775],"length":822.2838828189947,"timing":[1,10,21,31,41,51,60,71,91,101,110,121,130,142,150,171,181,191,201,211,221,231,240,250,261,285,300,311,320,330,340,350,361,371,380,391,410,421,430,441,451,461,471,480,492,500,510,521,531,551,560,571,581,590,601,611,622,631,642,650,661,672,682,691,701,711,732,741,751,761,771,781,790,801,811,831,841,851,862,871,881,891]},{"start":[644,96],"end":[1112,38],"points":[[644,96],[644,97],[644,100],[642,103],[641,106],[640,114],[638,118],[637,122],[637,127],[636,137],[636,144],[636,150],[638,163],[642,177],[645,184],[648,190],[649,196],[650,200],[654,210],[658,215],[662,220],[672,228],[707,244],[729,250],[754,254],[796,258],[824,258],[853,258],[875,258],[927,250],[935,248],[957,242],[998,228],[1019,219],[1049,203],[1060,196],[1065,193],[1080,176],[1084,168],[1087,162],[1091,146],[1092,142],[1093,137],[1097,125],[1100,120],[1101,118],[1104,109],[1105,98],[1105,92],[1105,84],[1105,76],[1105,68],[1105,59],[1104,49],[1104,46],[1105,43],[1108,42],[1110,40],[1112,40],[1112,38]],"dx":[468,-58],"dy":[468,-58],"length":725.0886509254449,"timing":[8,18,28,37,48,58,68,79,99,110,118,128,138,159,170,178,188,198,208,218,228,237,248,259,268,279,291,298,310,319,328,338,348,359,369,380,388,398,409,418,428,438,448,458,469,478,487,504,519,533,538,561,568,593,599,621,628,639,648,658]}]
\ No newline at end of file
diff --git a/additions/juggler/input/cursory/trajectorySelection.js b/additions/juggler/input/cursory/trajectorySelection.js
new file mode 100644
index 000000000..d9e171c7f
--- /dev/null
+++ b/additions/juggler/input/cursory/trajectorySelection.js
@@ -0,0 +1,354 @@
+/** Port of `cursory/trajectory_selection.py`. */
+
+import { LOADED_TRAJECTORIES } from './data.js';
+import { argSortTopN, EPSILON, hypot, searchSortedRight, sum } from './numeric.js';
+
+export { LOADED_TRAJECTORIES };
+
+const TRAJECTORY_COUNT = LOADED_TRAJECTORIES.length;
+
+function endpointDelta(trajectory, axis) {
+ const { points } = trajectory;
+ return points[points.length - 1][axis] - points[0][axis];
+}
+
+/** Straight-line displacement of each recording, and its direction as a unit vector. */
+const TRAJECTORIES_DX = Float64Array.from(LOADED_TRAJECTORIES, (t) => endpointDelta(t, 0));
+const TRAJECTORIES_DY = Float64Array.from(LOADED_TRAJECTORIES, (t) => endpointDelta(t, 1));
+const TRAJECTORIES_DISPLACEMENTS = Float64Array.from(TRAJECTORIES_DX, (dx, i) =>
+ hypot(dx, TRAJECTORIES_DY[i]),
+);
+const TRAJECTORIES_NORM_DX = Float64Array.from(TRAJECTORIES_DX, (dx, i) =>
+ TRAJECTORIES_DISPLACEMENTS[i] === 0 ? 0 : dx / TRAJECTORIES_DISPLACEMENTS[i],
+);
+const TRAJECTORIES_NORM_DY = Float64Array.from(TRAJECTORIES_DY, (dy, i) =>
+ TRAJECTORIES_DISPLACEMENTS[i] === 0 ? 0 : dy / TRAJECTORIES_DISPLACEMENTS[i],
+);
+const TRAJECTORIES_LENGTHS = Float64Array.from(LOADED_TRAJECTORIES, (t) => t.length);
+
+/**
+ * Displacement over path length: 1 for a perfectly straight recording, lower the
+ * more the hand wandered. Sorted so a candidate's efficiency can be ranked
+ * against every recording rather than against its own handful of rivals.
+ */
+const TRAJECTORIES_EFFICIENCIES = Float64Array.from(TRAJECTORIES_DISPLACEMENTS, (displacement, i) =>
+ TRAJECTORIES_LENGTHS[i] > 0 ? displacement / TRAJECTORIES_LENGTHS[i] : 1,
+);
+const SORTED_TRAJECTORY_EFFICIENCIES = Float64Array.from(TRAJECTORIES_EFFICIENCIES).sort();
+
+/**
+ * The `topN` recordings closest to the target in direction and in length.
+ */
+export function findNearestTrajectory(
+ targetStart,
+ targetEnd,
+ { directionWeight = 0.8, lengthWeight = 0.2, topN = 5 } = {},
+) {
+ const dxTarget = targetEnd[0] - targetStart[0];
+ const dyTarget = targetEnd[1] - targetStart[1];
+ const lengthTarget = hypot(dxTarget, dyTarget);
+
+ if (lengthTarget === 0) {
+ return argSortTopN(TRAJECTORIES_LENGTHS, topN).map((index) => LOADED_TRAJECTORIES[index]);
+ }
+
+ const normDxTarget = dxTarget / lengthTarget;
+ const normDyTarget = dyTarget / lengthTarget;
+ const scores = new Float64Array(TRAJECTORY_COUNT);
+
+ for (let i = 0; i < TRAJECTORY_COUNT; i += 1) {
+ // Cosine distance: 0 for the same heading, 2 for the opposite one.
+ const directionDistance =
+ 1 - (TRAJECTORIES_NORM_DX[i] * normDxTarget + TRAJECTORIES_NORM_DY[i] * normDyTarget);
+ const lengthDifferenceRatio =
+ Math.abs(TRAJECTORIES_DISPLACEMENTS[i] - lengthTarget) / Math.max(lengthTarget, 1);
+ scores[i] = directionWeight * directionDistance + lengthWeight * lengthDifferenceRatio;
+ }
+
+ return argSortTopN(scores, topN).map((index) => LOADED_TRAJECTORIES[index]);
+}
+
+/**
+ * Pick a direction-, distance- and efficiency-appropriate recording.
+ *
+ * The pool is widened by re-querying around jittered endpoints, then one
+ * candidate is drawn at random with a soft preference for the requested
+ * directness. Unusually direct and unusually wandering paths stay possible.
+ */
+export function findClosestTrajectory(
+ targetStart,
+ targetEnd,
+ rng,
+ {
+ numNearestToSample = 5,
+ randomSampleIterations = 20,
+ directness = 0.65,
+ } = {},
+) {
+ const dxTarget = targetEnd[0] - targetStart[0];
+ const dyTarget = targetEnd[1] - targetStart[1];
+ const lengthTarget = hypot(dxTarget, dyTarget);
+ if (!(directness >= 0 && directness <= 1)) {
+ throw new RangeError('directness must be between zero and one');
+ }
+
+ const candidates = findNearestTrajectory(targetStart, targetEnd, { topN: numNearestToSample });
+ const jitter = lengthTarget * 0.1;
+ for (let iteration = 0; iteration < randomSampleIterations; iteration += 1) {
+ const perturbedEnd = [
+ targetEnd[0] + rng.uniform(-jitter, jitter),
+ targetEnd[1] + rng.uniform(-jitter, jitter),
+ ];
+ candidates.push(
+ ...findNearestTrajectory(targetStart, perturbedEnd, { topN: numNearestToSample }),
+ );
+ }
+
+ // Rank each candidate's efficiency against every recording, so the preference
+ // means the same thing whatever direction and distance was asked for.
+ const preferredRank = 0.2 + 0.75 * directness;
+ const weights = new Float64Array(candidates.length);
+ for (let i = 0; i < candidates.length; i += 1) {
+ const candidate = candidates[i];
+ const displacement = hypot(endpointDelta(candidate, 0), endpointDelta(candidate, 1));
+ const efficiency = candidate.length > 0 ? displacement / candidate.length : 1;
+ const rank =
+ searchSortedRight(SORTED_TRAJECTORY_EFFICIENCIES, efficiency) / TRAJECTORY_COUNT;
+
+ const offset = (rank - preferredRank) / 0.2;
+ const core = Math.exp(-0.5 * (offset * offset));
+ // A small lift at both tails keeps the extremes reachable without making
+ // either of them the default.
+ const centeredRank = 2 * rank - 1;
+ const tailFloor = 0.05 * (1 + 0.1 * Math.abs(centeredRank) ** 3);
+ weights[i] = core + tailFloor;
+ }
+
+ const total = sum(weights);
+ for (let i = 0; i < weights.length; i += 1) {
+ weights[i] /= total;
+ }
+
+ return { trajectory: candidates[rng.choice(weights)], dxTarget, dyTarget, lengthTarget };
+}
+
+/**
+ * Scale, rotate and translate a path so it runs exactly from `targetStart` to
+ * `targetEnd` while keeping its shape.
+ */
+export function morphTrajectory(
+ points,
+ targetStart,
+ targetEnd,
+ dxTarget,
+ dyTarget,
+ lengthTarget,
+) {
+ const start = points[0];
+ const end = points[points.length - 1];
+
+ const dxOriginal = end[0] - start[0];
+ const dyOriginal = end[1] - start[1];
+ const lengthOriginal = Math.sqrt(dxOriginal * dxOriginal + dyOriginal * dyOriginal);
+ const scale = lengthOriginal !== 0 ? lengthTarget / lengthOriginal : 1.0;
+
+ const rotation = Math.atan2(dyTarget, dxTarget) - Math.atan2(dyOriginal, dxOriginal);
+ const cos = Math.cos(rotation);
+ const sin = Math.sin(rotation);
+
+ const morphed = points.map((point) => {
+ const x = (point[0] - start[0]) * scale;
+ const y = (point[1] - start[1]) * scale;
+ return [x * cos - y * sin + targetStart[0], x * sin + y * cos + targetStart[1]];
+ });
+
+ // Land on the requested endpoints exactly rather than within a rounding error.
+ morphed[0] = [targetStart[0], targetStart[1]];
+ morphed[morphed.length - 1] = [targetEnd[0], targetEnd[1]];
+ return morphed;
+}
+
+/**
+ * Nudge each point sideways by a drifting amount.
+ *
+ * The offsets are correlated from point to point, so the path wavers the way a
+ * hand does instead of buzzing back and forth across the ideal line.
+ */
+export function jitterTrajectory(points, trajectoryLength, rng, scale = 0.01) {
+ const count = points.length;
+ const lengthScale = Math.min(1.0, trajectoryLength / 400);
+
+ // Spacing around each point, used to keep the jitter proportional to how fast
+ // the cursor was moving there.
+ const gaps = new Float64Array(Math.max(count - 1, 0));
+ for (let i = 0; i < count - 1; i += 1) {
+ const dx = points[i + 1][0] - points[i][0];
+ const dy = points[i + 1][1] - points[i][1];
+ gaps[i] = Math.sqrt(dx * dx + dy * dy);
+ }
+
+ const adaptiveScales = new Float64Array(count);
+ for (let i = 0; i < count; i += 1) {
+ const averageGap = ((i > 0 ? gaps[i - 1] : 0) + (i < count - 1 ? gaps[i] : 0)) / 2;
+ adaptiveScales[i] = scale * (averageGap / Math.max(averageGap, 1)) * lengthScale;
+ }
+
+ // Unit normal at each point, from the local tangent.
+ //
+ // On whole-pixel input the normals are truncated towards zero, leaving only
+ // 0 and +/-1. That is not a simplification: numpy types an array of recorded
+ // integer coordinates as int64, so the original's `np.zeros_like(tangents)`
+ // is an integer array and storing a unit vector in it rounds it off. Most
+ // recordings in the database are whole-pixel, so this shapes most of the
+ // jitter Cursory actually produces, and dropping it would put this port on a
+ // different path from the Python original for the same seed.
+ const quantizeNormals = isWholePixelPath(points);
+ const normalX = new Float64Array(count);
+ const normalY = new Float64Array(count);
+ for (let i = 0; i < count; i += 1) {
+ const ahead = i === count - 1 ? points[count - 1] : points[Math.min(i + 1, count - 1)];
+ const behind = i === 0 ? points[0] : points[Math.max(i - 1, 0)];
+ const tangentX = ahead[0] - behind[0];
+ const tangentY = ahead[1] - behind[1];
+ const tangentLength = Math.sqrt(tangentX * tangentX + tangentY * tangentY);
+ if (tangentLength > EPSILON) {
+ normalX[i] = -tangentY / tangentLength;
+ normalY[i] = tangentX / tangentLength;
+ if (quantizeNormals) {
+ normalX[i] = Math.trunc(normalX[i]);
+ normalY[i] = Math.trunc(normalY[i]);
+ }
+ }
+ }
+
+ const innovations = rng.standardNormalArray(count);
+ const correlation = 0.75;
+ const innovationScale = Math.sqrt(1 - correlation * correlation);
+
+ const jittered = new Array(count);
+ let lateralOffset = 0;
+ for (let i = 0; i < count; i += 1) {
+ lateralOffset =
+ i === 0 ? innovations[0] : correlation * lateralOffset + innovationScale * innovations[i];
+ const displacement = lateralOffset * adaptiveScales[i];
+ jittered[i] = [
+ points[i][0] + normalX[i] * displacement,
+ points[i][1] + normalY[i] * displacement,
+ ];
+ }
+ return jittered;
+}
+
+/**
+ * A random point inside the rectangle spanned by two corners, pulled towards the
+ * middle by a Gaussian.
+ */
+export function generateMiddleBiasedPoint(x1, y1, x2, y2, rng, biasFactor = 2.0) {
+ const minX = Math.min(x1, x2);
+ const maxX = Math.max(x1, x2);
+ const minY = Math.min(y1, y2);
+ const maxY = Math.max(y1, y2);
+
+ const offsetX = rng.normal(0, (maxX - minX) / (2 * biasFactor));
+ const offsetY = rng.normal(0, (maxY - minY) / (2 * biasFactor));
+
+ return [
+ Math.max(minX, Math.min(maxX, (minX + maxX) / 2 + offsetX)),
+ Math.max(minY, Math.min(maxY, (minY + maxY) / 2 + offsetY)),
+ ];
+}
+
+/**
+ * Bend the path towards a few random points, as if the hand had drifted on its
+ * way across. Displacements are square-rooted so near points are pulled far less
+ * than the raw pull would suggest.
+ */
+export function knotTrajectory(
+ points,
+ targetStart,
+ targetEnd,
+ rng,
+ numKnots = 5,
+ knotStrength = 0.15,
+) {
+ const count = points.length;
+ const offsetX = new Float64Array(count);
+ const offsetY = new Float64Array(count);
+
+ for (let knotIndex = 0; knotIndex < numKnots; knotIndex += 1) {
+ const knot = generateMiddleBiasedPoint(
+ targetStart[0],
+ targetStart[1],
+ targetEnd[0],
+ targetEnd[1],
+ rng,
+ );
+
+ const toKnotX = new Float64Array(count);
+ const toKnotY = new Float64Array(count);
+ const distances = new Float64Array(count);
+ let maxDistance = -Infinity;
+ for (let i = 0; i < count; i += 1) {
+ toKnotX[i] = knot[0] - points[i][0];
+ toKnotY[i] = knot[1] - points[i][1];
+ distances[i] = Math.sqrt(toKnotX[i] * toKnotX[i] + toKnotY[i] * toKnotY[i]);
+ if (distances[i] > maxDistance) {
+ maxDistance = distances[i];
+ }
+ }
+ if (maxDistance < 1e-6) {
+ continue;
+ }
+
+ for (let i = 0; i < count; i += 1) {
+ const scaling = (1.0 - distances[i] / maxDistance) * knotStrength;
+ offsetX[i] += toKnotX[i] * scaling;
+ offsetY[i] += toKnotY[i] * scaling;
+ }
+ }
+
+ return points.map((point, i) => [
+ point[0] + signedSqrt(offsetX[i]),
+ point[1] + signedSqrt(offsetY[i]),
+ ]);
+}
+
+/** Whether numpy would have typed these coordinates as integers rather than floats. */
+function isWholePixelPath(points) {
+ return points.every((point) => Number.isInteger(point[0]) && Number.isInteger(point[1]));
+}
+
+/** `np.copysign(np.sqrt(np.abs(x)), x)`. */
+function signedSqrt(value) {
+ const root = Math.sqrt(Math.abs(value));
+ return value < 0 ? -root : root;
+}
+
+/**
+ * Select a recording for this movement, then jitter, knot and morph it onto the
+ * requested endpoints.
+ */
+export function findTrajectory(targetStart, targetEnd, rng, directness = 0.65) {
+ const { trajectory, dxTarget, dyTarget, lengthTarget } = findClosestTrajectory(
+ targetStart,
+ targetEnd,
+ rng,
+ { directness },
+ );
+
+ // A recording replayed over a shorter distance should not take as long as it
+ // originally did. Square-root scaling keeps very short movements long enough
+ // to still be sampled at a normal polling rate.
+ const recordedLength = trajectory.length;
+ let timings = [...trajectory.timing];
+ if (lengthTarget > 0 && lengthTarget < recordedLength) {
+ const timeScale = Math.sqrt(lengthTarget / recordedLength);
+ const startTime = timings[0];
+ timings = timings.map((timing) => startTime + (timing - startTime) * timeScale);
+ }
+
+ const jittered = jitterTrajectory(trajectory.points, lengthTarget, rng);
+ const knotted = knotTrajectory(jittered, targetStart, targetEnd, rng);
+ const points = morphTrajectory(knotted, targetStart, targetEnd, dxTarget, dyTarget, lengthTarget);
+ return { points, timings };
+}
diff --git a/additions/juggler/jar.mn b/additions/juggler/jar.mn
index 9ed198b1c..ca8d72edb 100644
--- a/additions/juggler/jar.mn
+++ b/additions/juggler/jar.mn
@@ -9,6 +9,20 @@ juggler.jar:
content/Helper.js (Helper.js)
content/input/MouseDispatch.js (input/MouseDispatch.js)
+ content/input/CursorTrajectory.js (input/CursorTrajectory.js)
+ # Cursory, vendored -- LGPLv3-or-later, not MPL-2.0. LICENSE and NOTICE ship
+ # alongside the code so every build carries them; see input/cursory/README.md.
+ content/input/cursory/LICENSE (input/cursory/LICENSE)
+ content/input/cursory/NOTICE (input/cursory/NOTICE)
+ content/input/cursory/cursory.js (input/cursory/cursory.js)
+ content/input/cursory/data.js (input/cursory/data.js)
+ content/input/cursory/numeric.js (input/cursory/numeric.js)
+ content/input/cursory/trajectorySelection.js (input/cursory/trajectorySelection.js)
+ content/input/cursory/trajectories.json (input/cursory/trajectories.json)
+ content/input/cursory/random/generator.js (input/cursory/random/generator.js)
+ content/input/cursory/random/pcg64.js (input/cursory/random/pcg64.js)
+ content/input/cursory/random/seedSequence.js (input/cursory/random/seedSequence.js)
+ content/input/cursory/random/ziggurat.js (input/cursory/random/ziggurat.js)
content/NetworkObserver.js (NetworkObserver.js)
content/ChannelEventSink.sys.mjs (ChannelEventSink.sys.mjs)
content/TargetRegistry.js (TargetRegistry.js)
diff --git a/additions/juggler/protocol/PageHandler.js b/additions/juggler/protocol/PageHandler.js
index d10e8ee80..774320562 100644
--- a/additions/juggler/protocol/PageHandler.js
+++ b/additions/juggler/protocol/PageHandler.js
@@ -10,6 +10,7 @@ const {NetworkObserver, PageNetwork} = ChromeUtils.importESModule('chrome://jugg
const {PageTarget} = ChromeUtils.importESModule('chrome://juggler/content/TargetRegistry.js');
const {setTimeout} = ChromeUtils.importESModule('resource://gre/modules/Timer.sys.mjs');
const {MouseDispatch} = ChromeUtils.importESModule('chrome://juggler/content/input/MouseDispatch.js');
+const {humanizedSteps} = ChromeUtils.importESModule('chrome://juggler/content/input/CursorTrajectory.js');
const Cc = Components.classes;
const Ci = Components.interfaces;
@@ -440,7 +441,15 @@ export class PageHandler {
async ['Page.goBack']({}) {
const browsingContext = this._pageTarget.linkedBrowser().browsingContext;
- if (!browsingContext.embedderElement?.canGoBack)
+ // Camoufox: canGoBack is the BACK BUTTON's answer -- with
+ // browser.navigation.requireUserInteraction (Firefox's default) it reports
+ // false when every entry behind this one was pushed without the user
+ // touching the page, because the button skips those. goBack() itself does
+ // not skip them, and neither does history.back(). Ask the question the
+ // traversal actually answers, as Marionette does (driver.sys.mjs).
+ const embedder = browsingContext.embedderElement;
+ const canGoBack = embedder?.canGoBackIgnoringUserInteraction ?? embedder?.canGoBack;
+ if (!canGoBack)
return { success: false };
browsingContext.goBack();
return { success: true };
@@ -522,28 +531,34 @@ export class PageHandler {
const sendEvents = async (types) => {
// 1. Scroll element to the desired location first; the coordinates are relative to the element.
this._pageTarget._linkedBrowser.scrollRectIntoViewIfNeeded(x, y, 0, 0);
- // 2. Get element's bounding box in the browser after the scroll is completed.
+ // 2. Make sure compositor is flushed after scrolling.
+ if (win.windowUtils.flushApzRepaints())
+ await helper.awaitTopic('apz-repaints-flushed');
+ // 3. Get element's bounding box in the browser after the scroll is completed.
// MouseDispatch owns every conversion from these relative coordinates to
// absolute ones, and every wait for a renderer ack.
+ //
+ // Camoufox: measured AFTER the await above, synchronously before the
+ // dispatch. The rect was previously taken before it, and the chrome can
+ // change height during that wait (the toolbar grows 1 px when a
+ // startup addon's button lands): a relative y of 0 then dispatched at
+ // the stale top, one row above the content, arrived in the renderer as
+ // an exit event at client y == -1, produced no ack, and the page saw no
+ // mousemove (tests/patches/near-edge-mouse-deadlock.py, ~1 in 25 runs).
const dispatch = MouseDispatch.forBrowser(win, this._pageTarget._linkedBrowser, eventArgs);
- // 3. Make sure compositor is flushed after scrolling.
- if (win.windowUtils.flushApzRepaints())
- await helper.awaitTopic('apz-repaints-flushed');
const watcher = new EventWatcher(this._pageEventSink, types, this._pendingEventWatchers);
const promises = [];
for (const eventType of types) {
// Camoufox: when humanize is enabled, expand a direct mousemove into a
- // human-like trajectory of intermediate mousemoves generated in C++
- // (ChromeUtils.camouGetMouseTrajectory / MouseTrajectories.hpp).
+ // human-like trajectory of intermediate mousemoves, replayed from a
+ // recording of a real hand (input/CursorTrajectory.js -> Cursory).
if (eventType === 'mousemove' && ChromeUtils.camouGetBool('humanize', false)) {
- const trajectory = ChromeUtils.camouGetMouseTrajectory(this._lastTrackedPos.x, this._lastTrackedPos.y, x, y);
- // The first and last pairs are skipped: the last pair is the exact
- // destination, which is dispatched explicitly below.
- const points = [];
- for (let i = 2; i < trajectory.length - 2; i += 2)
- points.push([trajectory[i], trajectory[i + 1]]);
- await dispatch.sendTrajectoryAcked(watcher, 'mousemove', points);
+ // The endpoints are excluded: the cursor is already on the first, and
+ // the last is the destination dispatched explicitly below.
+ const {steps, trailingDelayMs} =
+ humanizedSteps(this._lastTrackedPos.x, this._lastTrackedPos.y, x, y);
+ await dispatch.sendTrajectoryAcked(watcher, 'mousemove', steps, trailingDelayMs);
// Always finish exactly on the requested destination.
promises.push(dispatch.sendAcked(watcher, 'mousemove', x, y));
} else {
@@ -569,6 +584,13 @@ export class PageHandler {
// viewport coordinates, then move the mouse off from the Web Content.
// This way we can eliminate all the hover effects.
dispatch.parkOffContent();
+ // Camoufox: the pointer really moved (off content), so forget the tracked
+ // position. Otherwise a later move back to the same coordinates was
+ // treated as a no-op and skipped, and the following mousedown made the
+ // pointer re-enter content with the button already down -- pointerover /
+ // pointerenter / mouseover carried buttons=1 and pressure=0.5, which a
+ // real mouse never does (measured 2026-09-14 against XTEST input).
+ this._lastTrackedPos = { x: NaN, y: NaN };
return;
}
@@ -576,7 +598,11 @@ export class PageHandler {
if (this._isDragging)
return;
- const eventNames = button === 2 ? ['mousedown', 'contextmenu'] : ['mousedown'];
+ // Camoufox: Windows shows the context menu on button RELEASE, so the
+ // contextmenu event arrives after mouseup with buttons=0; GTK and macOS
+ // fire it on press. Follow the claimed OS (measured 2026-09-14: stock
+ // Windows contextmenu.buttons=0, camoufox 2).
+ const eventNames = (button === 2 && !this._contextMenuOnMouseUp()) ? ['mousedown', 'contextmenu'] : ['mousedown'];
await sendEvents(eventNames);
return;
}
@@ -637,17 +663,45 @@ export class PageHandler {
await watcher.ensureEventsAndDispose(['dragover']);
this._isDragging = false;
} else {
- await sendEvents(['mouseup']);
+ const eventNames = (button === 2 && this._contextMenuOnMouseUp()) ? ['mouseup', 'contextmenu'] : ['mouseup'];
+ await sendEvents(eventNames);
}
return;
}
}, { muteNotificationsPopup: true });
}
+ _contextMenuOnMouseUp() {
+ let platform = '';
+ try { platform = ChromeUtils.camouGetString('navigator.platform') || ''; } catch (e) {}
+ if (platform)
+ return platform.startsWith('Win');
+ return Services.appinfo.OS === 'WINNT';
+ }
+
async ['Page.dispatchWheelEvent']({x, y, button, deltaX, deltaY, deltaZ, modifiers }) {
- const deltaMode = 0; // WheelEvent.DOM_DELTA_PIXEL
- const lineOrPageDeltaX = deltaX > 0 ? Math.floor(deltaX) : Math.ceil(deltaX);
- const lineOrPageDeltaY = deltaY > 0 ? Math.floor(deltaY) : Math.ceil(deltaY);
+ // Camoufox: with humanize on, scroll the way a physical wheel does, in
+ // notches. Each notch is its own event of 3 LINES carrying one native tick,
+ // so the page sees deltaMode 1, DOMMouseScroll.detail 3 and wheelDelta -120
+ // per notch, and a longer scroll arrives as several such events a few tens
+ // of ms apart. Playwright's pixel delta gives detail = 100 and no line
+ // delta; lines without ticks give wheelDelta -396 for one notch and one big
+ // event for several (measured against XTEST input). 100 px == one notch.
+ //
+ // Off by default: mouse.wheel(0, 100) has to deliver deltaY 100 in
+ // deltaMode 0, which is the delta the caller asked for and what upstream's
+ // own suite asserts. Quantising into notches changes the number the page
+ // sees, so it is opt-in with the rest of the humanized input.
+ const nativeNotches = ChromeUtils.camouGetBool('humanize', false);
+ const PX_PER_NOTCH = 100;
+ const LINES_PER_NOTCH = 3;
+ const toNotches = (d) => (d === 0 ? 0 : Math.sign(d) * Math.max(1, Math.round(Math.abs(d) / PX_PER_NOTCH)));
+ const notchesX = nativeNotches ? toNotches(deltaX) : 0;
+ const notchesY = nativeNotches ? toNotches(deltaY) : 0;
+ const notchCount = nativeNotches ? Math.max(1, Math.abs(notchesX), Math.abs(notchesY)) : 1;
+ // Upstream's conversion, used when the notches are off.
+ const pixelLineOrPageDeltaX = deltaX > 0 ? Math.floor(deltaX) : Math.ceil(deltaX);
+ const pixelLineOrPageDeltaY = deltaY > 0 ? Math.floor(deltaY) : Math.ceil(deltaY);
await this._pageTarget.activateAndRun(async () => {
this._pageTarget.ensureContextMenuClosed();
@@ -656,21 +710,35 @@ export class PageHandler {
this._pageTarget._linkedBrowser.scrollRectIntoViewIfNeeded(x, y, 0, 0);
// 2. Get element's bounding box in the browser after the scroll is completed.
const win = this._pageTarget._window;
- const dispatch = MouseDispatch.forBrowser(win, this._pageTarget._linkedBrowser, {modifiers});
// 3. Make sure compositor is flushed after scrolling.
if (win.windowUtils.flushApzRepaints())
await helper.awaitTopic('apz-repaints-flushed');
-
- // Same conversion as a mouse event: a wheel at relative y == 0 would
- // otherwise land on the chrome/content boundary and scroll the tab strip.
- dispatch.sendWheel(x, y, {
- deltaX,
- deltaY,
- deltaZ,
- deltaMode,
- lineOrPageDeltaX,
- lineOrPageDeltaY,
- });
+ for (let i = 0; i < notchCount; i++) {
+ if (i)
+ await new Promise(resolve => setTimeout(resolve, 18 + Math.random() * 42));
+ const stepX = i < Math.abs(notchesX) ? Math.sign(notchesX) * LINES_PER_NOTCH : 0;
+ const stepY = i < Math.abs(notchesY) ? Math.sign(notchesY) * LINES_PER_NOTCH : 0;
+ // Camoufox: measure after the await, like Page.dispatchMouseEvent does.
+ const dispatch = MouseDispatch.forBrowser(win, this._pageTarget._linkedBrowser, {modifiers});
+ // Same conversion as a mouse event: a wheel at relative y == 0 would
+ // otherwise land on the chrome/content boundary and scroll the tab strip.
+ dispatch.sendWheel(x, y, nativeNotches ? {
+ deltaX: stepX,
+ deltaY: stepY,
+ deltaZ: i ? 0 : deltaZ,
+ deltaMode: 1 /* WheelEvent.DOM_DELTA_LINE */,
+ lineOrPageDeltaX: stepX,
+ lineOrPageDeltaY: stepY,
+ nativeNotches: true,
+ } : {
+ deltaX,
+ deltaY,
+ deltaZ,
+ deltaMode: 0 /* WheelEvent.DOM_DELTA_PIXEL */,
+ lineOrPageDeltaX: pixelLineOrPageDeltaX,
+ lineOrPageDeltaY: pixelLineOrPageDeltaY,
+ });
+ }
}, { muteNotificationsPopup: true });
}
diff --git a/bundle/FONTS-README.txt b/bundle/FONTS-README.txt
new file mode 100644
index 000000000..5d8d55d89
--- /dev/null
+++ b/bundle/FONTS-README.txt
@@ -0,0 +1,98 @@
+DO NOT MODIFY THE CONTENTS OF THIS DIRECTORY
+
+Any adjustment to bundled fonts will result in an altered fingerprint. Font
+fingerprinting is more than just detecting what fonts you have, it also includes
+font fallbacks and characters (unicode code points) and any change in those can
+be measured.
+
+
+WHAT IS HERE
+
+NOTHING, until you run `make fetch-fonts`. The bundle is a RELEASE ASSET, not
+repo content: ~2.1 GB extracted, ~843 MB as .tar.xz. GitHub rejects files over
+100 MiB, and an xz archive cannot be delta-compressed, so committing it would
+append the whole archive to history on every font change. It is pinned by
+scripts/data/font-bundle.json (asset name + size + sha256) so a given commit
+still names exactly one bundle. See scripts/fetch-fonts.py.
+
+ make fetch-fonts download + verify the archive (bundle/fonts-bundle-*.tar.xz)
+ make fonts-extract unpack it to bundle/fonts/ (gitignored; a no-op once
+ unpacked -- the tree is stamped with the archive's sha256)
+ make fonts-check verify the archive against the pin
+ make fonts-clean delete the unpacked copy, keep the archive
+
+Once extracted, each face is stored EXACTLY ONCE, in a directory named for the
+set of OSes that use it:
+
+ L M W used by one OS only
+ LM LW MW used by two
+ LMW used by all three
+
+ 1513 faces, 2.1 GB, with bundle/fonts/groups.json recording which groups
+ each OS reads:
+ lin -> L + LM + LMW + LW (792 files)
+ mac -> LM + LMW + M + MW (779 files)
+ win -> LMW + LW + MW + W (809 files)
+
+The bundle used to be three per-OS directories, which meant 41% of it (1.63 GB)
+was byte-identical copies of the same faces. Grouping removed that without
+changing a single reportable family -- pythonlib/camoufox/fonts.json is
+byte-identical across the change.
+
+The group directory is also the per-OS GATE on Linux: utils._generate_fontconfig
+hands fontconfig exactly the four directories the claimed OS reads, so a face
+Windows must not see is never on the search path. That replaced a 455-entry
+ glob list in ../fontconfig/windows/fonts.conf, which was unsound
+anyway -- 114 bundled filenames contain [ ] (e.g. ReemKufi[wght].ttf), which
+fontconfig parses as a character class, so those rejects silently matched
+nothing. macOS (CoreText) and Windows (DirectWrite) cannot read subfolders, so
+package.py flattens the groups for those targets and the allowlist does the
+gating there, as it always did.
+
+File names carry the prefixes Holo's merge-drop.sh gave them (NN__, z__, u__);
+they make basenames unique across groups, which is what lets the macOS/Windows
+packages flatten safely (scripts/verify-fonts.py checks).
+
+
+SOURCES
+
+- Linux: the Tor Browser bundle set plus Ubuntu / Mint desktop defaults
+ (Noto, DejaVu, Ubuntu, Liberation, URW base35, ...) and the open additions
+ (LibreOffice, developer and web fonts) Holo's fonts-manifests.ts draws from.
+- Windows: the Windows 11 default families (measured on real hardware; the
+ Windows 10 base was dropped from the model on 2026-09-23), the Office and
+ Pan-European FOD sets, LibreOffice, and open developer/web fonts.
+ The Windows CJK Feature-on-Demand fonts and third-party Adobe/Kozuka CJK
+ are deliberately absent (Holo's CJK_EXCLUDE_WIN).
+- macOS: the Sonoma, Tahoe 26 and macOS 27 system fonts, including PingFang and
+ Kefa, plus Apple's optional "document support" families and open
+ developer/web fonts. A few Devanagari families are still absent.
+
+Adobe's fonts (Minion Pro, Myriad Pro, the Adobe/Kozuka CJK and script
+faces -- 185 files, 240 MB) were REMOVED on 2026-09-22: Adobe permits no
+redistribution, and the fpgen corpus puts every one of those families on under
+2% of real machines (Minion Pro 1.5%, the rest at 0.0%), so shipping them bought
+no realism. The `adobe-cc` unit was dropped from scripts/data/font-manifests.json
+in the same change, because reporting a family the bundle cannot render is a
+reverse leak. Run scripts/font-metrics/licences.py for the current licence split.
+
+The per-OS list of families the launcher may REPORT is generated from these
+files, in this order, and checked by scripts/verify-fonts.py:
+
+ scripts/gen-fonts-json.py bundle + font-manifests.json -> fonts.json
+ (--print-bases also prints the
+ _ESSENTIAL_FONTS_* literals for
+ pythonlib/camoufox/fingerprints.py, which are
+ the INTERSECTION of that OS's version bases)
+ scripts/gen-font-groups.py fonts.json + font-manifests.json ->
+ font-groups.json (the addition units, each
+ with its own real-world probability) and
+ font-bases.json (the OS-version bases with
+ their weights)
+
+Run both after the bundle or the manifest changes, in that order.
+
+
+Disclaimer:
+
+This project utilizes copyrighted fonts solely for academic and research purposes. The fonts used in this project are the intellectual property of their respective owners. No commercial use or distribution of these fonts is intended or permitted. All rights to the fonts are retained by their respective copyright holders. If you wish to use these fonts for any other purpose, please contact the copyright owners for appropriate permissions. If you wish a font to be removed from this repository, please open an issue.
diff --git a/bundle/fontconfig/linux/fonts.conf b/bundle/fontconfig/linux/fonts.conf
index ae09edc06..6ec7e8a2e 100644
--- a/bundle/fontconfig/linux/fonts.conf
+++ b/bundle/fontconfig/linux/fonts.conf
@@ -181,42 +181,1181 @@ PERFORMANCE OF THIS SOFTWARE.
MONO
- Cousine
+ DejaVu Sans Mono
+
+
+ Set substitutions for similar/metric-compatible families
+
+
+
+
+
+ Set substitutions for non-Latin fonts
+
+
+
+
+ Nazli
+ serif
+
+
+ Lotoos
+ serif
+
+
+ Mitra
+ serif
+
+
+ Ferdosi
+ serif
+
+
+ Badr
+ serif
+
+
+ Zar
+ serif
+
+
+ Titr
+ serif
+
+
+ Jadid
+ serif
+
+
+ Kochi Mincho
+ serif
+
+
+ AR PL SungtiL GB
+ serif
+
+
+ AR PL Mingti2L Big5
+ serif
+
+
+ MS 明朝
+ serif
+
+
+ NanumMyeongjo
+ serif
+
+
+ UnBatang
+ serif
+
+
+ Baekmuk Batang
+ serif
+
+
+ MgOpen Canonica
+ serif
+
+
+ Sazanami Mincho
+ serif
+
+
+ AR PL ZenKai Uni
+ serif
+
+
+ ZYSong18030
+ serif
+
+
+ FreeSerif
+ serif
+
+
+ SimSun
+ serif
+
+
+
+ Arshia
+ sans-serif
+
+
+ Elham
+ sans-serif
+
+
+ Farnaz
+ sans-serif
+
+
+ Nasim
+ sans-serif
+
+
+ Sina
+ sans-serif
+
+
+ Roya
+ sans-serif
+
+
+ Koodak
+ sans-serif
+
+
+ Terafik
+ sans-serif
+
+
+ Kochi Gothic
+ sans-serif
+
+
+ AR PL KaitiM GB
+ sans-serif
+
+
+ AR PL KaitiM Big5
+ sans-serif
+
+
+ MS ゴシック
+ sans-serif
+
+
+ NanumGothic
+ sans-serif
+
+
+ UnDotum
+ sans-serif
+
+
+ Baekmuk Dotum
+ sans-serif
+
+
+ MgOpen Moderna
+ sans-serif
+
+
+ MgOpen Modata
+ sans-serif
+
+
+ MgOpen Cosmetica
+ sans-serif
+
+
+ Sazanami Gothic
+ sans-serif
+
+
+ AR PL ShanHeiSun Uni
+ sans-serif
+
+
+ ZYSong18030
+ sans-serif
+
+
+ FreeSans
+ sans-serif
+
+
+
+ NSimSun
+ monospace
+
+
+ ZYSong18030
+ monospace
+
+
+ NanumGothicCoding
+ monospace
+
+
+ FreeMono
+ monospace
+
+
+
+
+ Homa
+ fantasy
+
+
+ Kamran
+ fantasy
+
+
+ Fantezi
+ fantasy
+
+
+ Tabassom
+ fantasy
+
+
+
+
+ IranNastaliq
+ cursive
+
+
+ Nafees Nastaleeq
+ cursive
+
+
+
+
+ Noto Sans Arabic UI
+ system-ui
+
+
+ Noto Sans Bengali UI
+ system-ui
+
+
+ Noto Sans Devanagari UI
+ system-ui
+
+
+ Noto Sans Gujarati UI
+ system-ui
+
+
+ Noto Sans Gurmukhi UI
+ system-ui
+
+
+ Noto Sans Kannada UI
+ system-ui
+
+
+ Noto Sans Khmer UI
+ system-ui
+
+
+ Noto Sans Lao UI
+ system-ui
+
+
+ Noto Sans Malayalam UI
+ system-ui
+
+
+ Noto Sans Myanmar UI
+ system-ui
+
+
+ Noto Sans Oriya UI
+ system-ui
+
+
+ Noto Sans Sinhala UI
+ system-ui
+
+
+ Noto Sans Tamil UI
+ system-ui
+
+
+ Noto Sans Telugu UI
+ system-ui
+
+
+ Noto Sans Thai UI
+ system-ui
+
+
+ Leelawadee UI
+ system-ui
+
+
+ Nirmala UI
+ system-ui
+
+
+ Yu Gothic UI
+ system-ui
+
+
+ Meiryo UI
+ system-ui
+
+
+ MS UI Gothic
+ system-ui
+
+
+ Khmer UI
+ system-ui
+
+
+ Lao UI
+ system-ui
+
+
+ Microsoft JhengHei UI
+ system-ui
+
+
+ Microsoft YaHei UI
+ system-ui
+
+
+
+
+
+
+
+ Helvetica LT Std
+
+ Helvetica
+
+
+
+
+ Nimbus Sans L
+
+ Helvetica
+
+
+
+
+ Nimbus Sans
+
+ Helvetica
+
+
+
+
+ TeX Gyre Heros
+
+ Helvetica
+
+
+
+
+ Nimbus Sans Narrow
+
+ Helvetica Narrow
+
+
+
+
+ TeX Gyre Heros Cn
+
+ Helvetica Narrow
+
+
+
+
+ Nimbus Roman No9 L
+
+ Times
+
+
+
+
+ Nimbus Roman
+
+ Times
+
+
+
+
+ TeX Gyre Termes
+
+ Times
+
+
+
+
+ Courier Std
+
+ Courier
+
+
+
+
+ Nimbus Mono L
+
+ Courier
+
+
+
+
+ Nimbus Mono
+
+ Courier
+
+
+
+
+ Nimbus Mono PS
+
+ Courier
+
+
+
+
+ TeX Gyre Cursor
+
+ Courier
+
+
+
+
+ Avant Garde
+
+ ITC Avant Garde Gothic
+
+
+
+
+ URW Gothic L
+
+ ITC Avant Garde Gothic
+
+
+
+
+ URW Gothic
+
+ ITC Avant Garde Gothic
+
+
+
+
+ TeX Gyre Adventor
+
+ ITC Avant Garde Gothic
+
+
+
+
+ Bookman
+
+ ITC Bookman
+
+
+
+
+ URW Bookman L
+
+ ITC Bookman
+
+
+
+
+ Bookman URW
+
+ ITC Bookman
+
+
+
+
+ URW Bookman
+
+ ITC Bookman
+
+
+
+
+ TeX Gyre Bonum
+
+ ITC Bookman
+
+
+
+
+ Bookman Old Style
+
+ ITC Bookman
+
+
+
+
+ Zapf Chancery
+
+ ITC Zapf Chancery
+
+
+
+
+ URW Chancery L
+
+ ITC Zapf Chancery
+
+
+
+
+ Chancery URW
+
+ ITC Zapf Chancery
+
+
+
+
+ Z003
+
+ ITC Zapf Chancery
+
+
+
+
+ TeX Gyre Chorus
+
+ ITC Zapf Chancery
+
+
+
+
+ URW Palladio L
+
+ Palatino
+
+
+
+
+ Palladio URW
+
+ Palatino
+
+
+
+
+ P052
+
+ Palatino
+
+
+
+
+ TeX Gyre Pagella
+
+ Palatino
+
+
+
+
+ Palatino Linotype
+
+ Palatino
+
+
+
+
+ Century Schoolbook L
+
+ New Century Schoolbook
+
+
+
+
+ Century SchoolBook URW
+
+ New Century Schoolbook
+
+
+
+
+ C059
+
+ New Century Schoolbook
+
+
+
+
+ TeX Gyre Schola
+
+ New Century Schoolbook
+
+
+
+
+ Century Schoolbook
+
+ New Century Schoolbook
+
+
+
+
+
+ Arimo
+
+ Arial
+
+
+
+
+ Liberation Sans
+
+ Arial
+
+
+
+
+ Liberation Sans Narrow
+
+ Arial Narrow
+
+
+
+
+ Albany
+
+ Arial
+
+
+
+
+ Albany AMT
+
+ Arial
+
+
+
+
+ Tinos
+
+ Times New Roman
+
+
+
+
+ Liberation Serif
+
+ Times New Roman
+
+
+
+
+ Thorndale
+
+ Times New Roman
+
+
+
+
+ Thorndale AMT
+
+ Times New Roman
+
+
+
+
+ Cousine
+
+ Courier New
+
+
+
+
+ Liberation Mono
+
+ Courier New
+
+
+
+
+ Cumberland
+
+ Courier New
+
+
+
+
+ Cumberland AMT
+
+ Courier New
+
+
+
+
+ Gelasio
+
+ Georgia
+
+
+
+
+ Caladea
+
+ Cambria
+
+
+
+
+ Carlito
+
+ Calibri
+
+
+
+
+ SymbolNeu
+
+ Symbol
+
+
+
+
+
+
+
+ Helvetica
+
+ Arial
+
+
+
+
+ Helvetica Narrow
+
+ Arial Narrow
+
+
+
+
+ Times
+
+ Times New Roman
+
+
+
+
+ Courier
+
+ Courier New
+
+
+
+
+
+ Arial
+
+ Helvetica
+
+
+
+
+ Arial Narrow
+
+ Helvetica Narrow
+
+
+
+
+ Times New Roman
+
+ Times
+
+
+
+
+ Courier New
+
+ Courier
+
+
+
+
+
+
+
+ Helvetica
+
+ Helvetica LT Std
+
+
+
+
+ Helvetica
+
+ TeX Gyre Heros
+
+
+
+
+ Helvetica Narrow
+
+ TeX Gyre Heros Cn
+
+
+
+
+ Times
+
+ TeX Gyre Termes
+
+
+
+
+ Courier
+
+ TeX Gyre Cursor
+
+
+
+
+ Courier
+
+ Courier Std
+
+
+
+
+ ITC Avant Garde Gothic
+
+ TeX Gyre Adventor
+
+
+
+
+ ITC Bookman
+
+ Bookman Old Style
+ TeX Gyre Bonum
+
+
+
+
+ ITC Zapf Chancery
+
+ TeX Gyre Chorus
+
+
+
+
+ Palatino
+
+ Palatino Linotype
+ TeX Gyre Pagella
+
+
+
+
+ New Century Schoolbook
+
+ Century Schoolbook
+ TeX Gyre Schola
+
+
+
+
+
+ Arial
+
+ Arimo
+ Liberation Sans
+ Albany
+ Albany AMT
+
+
+
+
+ Arial Narrow
+
+ Liberation Sans Narrow
+
+
+
+
+ Times New Roman
+
+ Tinos
+ Liberation Serif
+ Thorndale
+ Thorndale AMT
+
+
+
+
+ Courier New
+
+ Cousine
+ Liberation Mono
+ Cumberland
+ Cumberland AMT
+
+
+
+
+ Georgia
+
+ Gelasio
+
+
+
+
+ Cambria
+
+ Caladea
+
+
+
+
+ Calibri
+
+ Carlito
+
+
+
+
+ Symbol
+
+ SymbolNeu
+
+
+
+
+
+
+
+
+ sans-serif
+ serif
+ monospace
+ sans-serif
+
+
+
+
+ Set preferable fonts for Latin
+
+ serif
+
+ Noto Serif
+ DejaVu Serif
+ Times New Roman
+ Thorndale AMT
+ Luxi Serif
+ Nimbus Roman No9 L
+ Nimbus Roman
+ Times
+
+
+
+ sans-serif
+
+ Noto Sans
+ DejaVu Sans
+ Verdana
+ Arial
+ Albany AMT
+ Luxi Sans
+ Nimbus Sans L
+ Nimbus Sans
+ Helvetica
+ Lucida Sans Unicode
+ BPG Glaho International
+ Tahoma
+
+
+
+ monospace
+
+ DejaVu Sans Mono
+ Noto Mono
+ Noto Sans Mono
+ Inconsolata
+ Andale Mono
+ Courier New
+ Cumberland AMT
+ Luxi Mono
+ Nimbus Mono L
+ Nimbus Mono
+ Nimbus Mono PS
+ Courier
+
+
+
+
+ fantasy
+
+ Impact
+ Copperplate Gothic Std
+ Cooper Std
+ Bauhaus Std
+
+
+
+
+ cursive
+
+ ITC Zapf Chancery Std
+ Zapfino
+ Comic Sans MS
+
+
+
+
+ system-ui
+
+ Adwaita Sans
+ Cantarell
+ Noto Sans UI
+ Segoe UI
+ Segoe UI Historic
+ Segoe UI Symbol
+
+
+
+
+
- sans-serif
-
-
- Arimo
-
-
-
-
- serif
+ cursive
- Tinos
+ Z003
- monospace
+ fantasy
- Cousine
+ Noto Sans
@@ -233,13 +1372,1110 @@ PERFORMANCE OF THIS SOFTWARE.
-
+
true
false
true
- hintfull
+ hintslight
lcddefault
none
+
+
+
+
+
+
+ serif
+
+ URW Bookman
+
+
+
+
+
+ URW Bookman
+
+ serif
+
+
+
+
+
+ URW Bookman
+
+ ITC Bookman
+
+
+
+
+
+ ITC Bookman
+
+ URW Bookman
+
+
+
+
+ Bookman Old Style
+
+ URW Bookman
+
+
+
+
+ TeX Gyre Bonum
+
+ URW Bookman
+
+
+
+
+
+
+ serif
+
+ C059
+
+
+
+
+
+ C059
+
+ serif
+
+
+
+
+
+ C059
+
+ New Century Schoolbook
+
+
+
+
+
+ New Century Schoolbook
+
+ C059
+
+
+
+
+ Century Schoolbook
+
+ C059
+
+
+
+
+ Century
+
+ C059
+
+
+
+
+ Tex Gyre Schola
+
+ C059
+
+
+
+
+
+
+ D050000L
+
+ ITC Zapf Dingbats
+
+
+
+
+
+ ITC Zapf Dingbats
+
+ D050000L
+
+
+
+
+ ITC Zapf Dingbats Std
+
+ D050000L
+
+
+
+
+ Zapf Dingbats
+
+ D050000L
+
+
+
+
+
+
+ Century Schoolbook L
+
+ C059
+
+
+
+
+ Century SchoolBook URW
+
+ C059
+
+
+
+
+ Dingbats
+
+ D050000L
+
+
+
+
+ Nimbus Mono
+
+ Nimbus Mono PS
+
+
+
+
+ Nimbus Mono L
+
+ Nimbus Mono PS
+
+
+
+
+ Nimbus Roman No9 L
+
+ Nimbus Roman
+
+
+
+
+ Nimbus Sans L
+
+ Nimbus Sans
+
+
+
+
+
+
+ Palladio URW
+
+ P052
+
+
+
+
+ URW Palladio L
+
+ P052
+
+
+
+
+ Standard Symbols L
+
+ Standard Symbols PS
+
+
+
+
+ Bookman URW
+
+ URW Bookman
+
+
+
+
+ URW Bookman L
+
+ URW Bookman
+
+
+
+
+ URW Gothic L
+
+ URW Gothic
+
+
+
+
+ Chancery URW
+
+ Z003
+
+
+
+
+ URW Chancery L
+
+ Z003
+
+
+
+
+
+
+ Courier
+
+ Nimbus Mono
+ Nimbus Mono L
+
+
+
+
+ Helvetica
+
+ Nimbus Sans L
+
+
+
+
+ ITC Avant Garde Gothic
+
+ URW Gothic L
+
+
+
+
+ ITC Bookman
+
+ Bookman URW
+ URW Bookman L
+
+
+
+
+ ITC Zapf Chancery
+
+ Chancery URW
+ URW Chancery L
+
+
+
+
+ ITC Zapf Dingbats
+
+ Dingbats
+
+
+
+
+ New Century Schoolbook
+
+ Century Schoolbook L
+ Century SchoolBook URW
+
+
+
+
+ Palatino
+
+ Palladio URW
+ URW Palladio L
+
+
+
+
+ Symbol
+
+ Standard Symbols L
+
+
+
+
+ Times
+
+ Nimbus Roman No9 L
+
+
+
+
+
+
+ sans-serif
+
+ URW Gothic
+
+
+
+
+
+ URW Gothic
+
+ sans-serif
+
+
+
+
+
+ URW Gothic
+
+ ITC Avant Garde Gothic
+
+
+
+
+
+ ITC Avant Garde Gothic
+
+ URW Gothic
+
+
+
+
+ TeX Gyre Adventor
+
+ URW Gothic
+
+
+
+
+
+
+ monospace
+
+ Nimbus Mono PS
+
+
+
+
+
+ Nimbus Mono PS
+
+ monospace
+
+
+
+
+
+ Nimbus Mono PS
+
+ Courier
+
+
+
+
+
+ Courier
+
+ Nimbus Mono PS
+
+
+
+
+ TeX Gyre Cursor
+
+ Nimbus Mono PS
+
+
+
+
+
+
+ serif
+
+ Nimbus Roman
+
+
+
+
+
+ Nimbus Roman
+
+ serif
+
+
+
+
+
+ Nimbus Roman
+
+ Times
+
+
+
+
+
+ Times
+
+ Nimbus Roman
+
+
+
+
+ TeX Gyre Termes
+
+ Nimbus Roman
+
+
+
+
+
+
+ sans-serif
+
+ Nimbus Sans
+
+
+
+
+ sans-serif
+
+ Nimbus Sans Narrow
+
+
+
+
+
+ Nimbus Sans
+
+ sans-serif
+
+
+
+
+ Nimbus Sans Narrow
+
+ sans-serif
+
+
+
+
+
+ Nimbus Sans
+
+ Helvetica
+
+
+
+
+ Nimbus Sans Narrow
+
+ Helvetica Narrow
+
+
+
+
+
+ Helvetica
+
+ Nimbus Sans
+
+
+
+
+ Helvetica Narrow
+
+ Nimbus Sans Narrow
+
+
+
+
+ TeX Gyre Heros
+
+ Nimbus Sans
+
+
+
+
+ TeX Gyre Heros Cn
+
+ Nimbus Sans Narrow
+
+
+
+
+
+
+ serif
+
+ P052
+
+
+
+
+
+ P052
+
+ serif
+
+
+
+
+
+ P052
+
+ Palatino
+
+
+
+
+
+ Palatino
+
+ P052
+
+
+
+
+ Palatino Linotype
+
+ P052
+
+
+
+
+ Tex Gyre Pagella
+
+ P052
+
+
+
+
+
+
+ serif
+
+ Standard Symbols PS
+
+
+
+
+
+ Standard Symbols PS
+
+ serif
+
+
+
+
+
+ Standard Symbols PS
+
+ Symbol
+
+
+
+
+
+ Symbol
+
+ Standard Symbols PS
+
+
+
+
+ SymbolNeu
+
+ Standard Symbols PS
+
+
+
+
+ Symbol Neu for Powerline
+
+ Standard Symbols PS
+
+
+
+
+
+
+ cursive
+
+ Z003
+
+
+
+
+
+ Z003
+
+ cursive
+
+
+
+
+
+ Z003
+
+ ITC Zapf Chancery
+
+
+
+
+
+ ITC Zapf Chancery
+
+ Z003
+
+
+
+
+ TeX Gyre Chorus
+
+ Z003
+
+
+
+
+
+
+ sans-serif
+
+ Droid Sans Fallback
+
+
+
+
+
+ Set preferable fonts for non-Latin
+
+ serif
+
+ Artsounk
+ BPG UTF8 M
+ Kinnari
+ Norasi
+ Frank Ruehl
+ Dror
+ JG LaoTimes
+ Saysettha Unicode
+ Pigiarniq
+ B Davat
+ B Compset
+ Kacst-Qr
+ Urdu Nastaliq Unicode
+ Raghindi
+ Mukti Narrow
+ padmaa
+ Hapax Berbère
+ MS Mincho
+ SimSun
+ PMingLiu
+ WenQuanYi Zen Hei
+ WenQuanYi Bitmap Song
+ AR PL ShanHeiSun Uni
+ AR PL New Sung
+ ZYSong18030
+ HanyiSong
+ Hiragino Mincho ProN
+ Songti SC
+ Songti TC
+ SimSong
+ MgOpen Canonica
+ Sazanami Mincho
+ IPAMonaMincho
+ IPAMincho
+ Kochi Mincho
+ AR PL SungtiL GB
+ AR PL Mingti2L Big5
+ AR PL Zenkai Uni
+ MS 明朝
+ ZYSong18030
+ NanumMyeongjo
+ UnBatang
+ Baekmuk Batang
+ AppleMyungjo
+ KacstQura
+ Frank Ruehl CLM
+ Lohit Bengali
+ Lohit Gujarati
+ Lohit Hindi
+ Lohit Marathi
+ Lohit Maithili
+ Lohit Kashmiri
+ Lohit Konkani
+ Lohit Nepali
+ Lohit Sindhi
+ Lohit Punjabi
+ Lohit Tamil
+ Rachana
+ Lohit Malayalam
+ Lohit Kannada
+ Lohit Telugu
+ Lohit Odia
+ LKLUG
+
+
+
+ sans-serif
+
+ Nachlieli
+ Lucida Sans Unicode
+ Yudit Unicode
+ Kerkis
+ ArmNet Helvetica
+ Artsounk
+ BPG UTF8 M
+ Waree
+ Loma
+ Garuda
+ Umpush
+ Saysettha Unicode
+ JG Lao Old Arial
+ GF Zemen Unicode
+ Pigiarniq
+ B Davat
+ B Compset
+ Kacst-Qr
+ Urdu Nastaliq Unicode
+ Raghindi
+ Mukti Narrow
+ padmaa
+ Hapax Berbère
+ MS Gothic
+ UmePlus P Gothic
+ Microsoft YaHei
+ Microsoft JhengHei
+ WenQuanYi Zen Hei
+ WenQuanYi Bitmap Song
+ AR PL ShanHeiSun Uni
+ AR PL New Sung
+ Hiragino Sans
+ PingFang SC
+ PingFang TC
+ PingFang HK
+ Hiragino Sans CNS
+ Hiragino Sans GB
+ MgOpen Moderna
+ MgOpen Modata
+ MgOpen Cosmetica
+ VL Gothic
+ IPAMonaGothic
+ IPAGothic
+ Sazanami Gothic
+ Kochi Gothic
+ AR PL KaitiM GB
+ AR PL KaitiM Big5
+ AR PL ShanHeiSun Uni
+ AR PL SungtiL GB
+ AR PL Mingti2L Big5
+ MS ゴシック
+ ZYSong18030
+ NanumGothic
+ UnDotum
+ Baekmuk Dotum
+ Baekmuk Gulim
+ Apple SD Gothic Neo
+ KacstQura
+ Lohit Bengali
+ Lohit Gujarati
+ Lohit Hindi
+ Lohit Marathi
+ Lohit Maithili
+ Lohit Kashmiri
+ Lohit Konkani
+ Lohit Nepali
+ Lohit Sindhi
+ Lohit Punjabi
+ Lohit Tamil
+ Meera
+ Lohit Malayalam
+ Lohit Kannada
+ Lohit Telugu
+ Lohit Odia
+ LKLUG
+
+
+
+ monospace
+
+ Miriam Mono
+ VL Gothic
+ IPAMonaGothic
+ IPAGothic
+ Sazanami Gothic
+ Kochi Gothic
+ AR PL KaitiM GB
+ MS Gothic
+ UmePlus Gothic
+ NSimSun
+ MingLiu
+ AR PL ShanHeiSun Uni
+ AR PL New Sung Mono
+ HanyiSong
+ AR PL SungtiL GB
+ AR PL Mingti2L Big5
+ ZYSong18030
+ NanumGothicCoding
+ NanumGothic
+ UnDotum
+ Baekmuk Dotum
+ Baekmuk Gulim
+ TlwgTypo
+ TlwgTypist
+ TlwgTypewriter
+ TlwgMono
+ Hasida
+ GF Zemen Unicode
+ Hapax Berbère
+ Lohit Bengali
+ Lohit Gujarati
+ Lohit Hindi
+ Lohit Marathi
+ Lohit Maithili
+ Lohit Kashmiri
+ Lohit Konkani
+ Lohit Nepali
+ Lohit Sindhi
+ Lohit Punjabi
+ Lohit Tamil
+ Meera
+ Lohit Malayalam
+ Lohit Kannada
+ Lohit Telugu
+ Lohit Odia
+ LKLUG
+
+
+
+
+ system-ui
+
+ Noto Sans Arabic UI
+ Noto Sans Bengali UI
+ Noto Sans Devanagari UI
+ Noto Sans Gujarati UI
+ Noto Sans Gurmukhi UI
+ Noto Sans Kannada UI
+ Noto Sans Khmer UI
+ Noto Sans Lao UI
+ Noto Sans Malayalam UI
+ Noto Sans Myanmar UI
+ Noto Sans Oriya UI
+ Noto Sans Sinhala UI
+ Noto Sans Tamil UI
+ Noto Sans Telugu UI
+ Noto Sans Thai UI
+ Leelawadee UI
+ Nirmala UI
+ Yu Gothic UI
+ Meiryo UI
+ MS UI Gothic
+ Khmer UI
+ Lao UI
+ Microsoft YaHei UI
+ Microsoft JhengHei UI
+
+
+
+
+
+
+
+ ja
+
+
+ serif
+
+
+ Noto Serif CJK JP
+
+
+
+
+
+ ko
+
+
+ serif
+
+
+ Noto Serif CJK KR
+
+
+
+
+
+ zh-cn
+
+
+ serif
+
+
+ Noto Serif CJK SC
+
+
+
+
+
+ zh-tw
+
+
+ serif
+
+
+ Noto Serif CJK TC
+
+
+
+
+
+ zh-hk
+
+
+ serif
+
+
+ Noto Serif CJK HK
+
+
+
+
+
+ ja
+
+
+ sans-serif
+
+
+ Noto Sans CJK JP
+
+
+
+
+
+ ko
+
+
+ sans-serif
+
+
+ Noto Sans CJK KR
+
+
+
+
+
+ zh-cn
+
+
+ sans-serif
+
+
+ Noto Sans CJK SC
+
+
+
+
+
+ zh-tw
+
+
+ sans-serif
+
+
+ Noto Sans CJK TC
+
+
+
+
+
+ zh-hk
+
+
+ sans-serif
+
+
+ Noto Sans CJK HK
+
+
+
+
+
+ ja
+
+
+ monospace
+
+
+ Noto Sans Mono CJK JP
+
+
+
+
+
+ ko
+
+
+ monospace
+
+
+ Noto Sans Mono CJK KR
+
+
+
+
+
+ zh-cn
+
+
+ monospace
+
+
+ Noto Sans Mono CJK SC
+
+
+
+
+
+ zh-tw
+
+
+ monospace
+
+
+ Noto Sans Mono CJK TC
+
+
+
+
+
+ zh-hk
+
+
+ monospace
+
+
+ Noto Sans Mono CJK HK
+
+
+
+
diff --git a/bundle/fontconfig/macos/fonts.conf b/bundle/fontconfig/macos/fonts.conf
index 86d181fa1..296200af3 100644
--- a/bundle/fontconfig/macos/fonts.conf
+++ b/bundle/fontconfig/macos/fonts.conf
@@ -82,30 +82,6 @@ PERFORMANCE OF THIS SOFTWARE.
On macOS, TTC collections register each weight as a separate family name.
On Linux, fontconfig only registers the base family.
-->
-
-
- PingFang HK Light
-
-
- PingFang HK
-
-
-
-
- PingFang SC Light
-
-
- PingFang SC
-
-
-
-
- PingFang TC Light
-
-
- PingFang TC
-
-
InaiMathi Bold
diff --git a/bundle/fontconfig/windows/fonts.conf b/bundle/fontconfig/windows/fonts.conf
index 5cea99d04..934a613d2 100644
--- a/bundle/fontconfig/windows/fonts.conf
+++ b/bundle/fontconfig/windows/fonts.conf
@@ -41,6 +41,126 @@ PERFORMANCE OF THIS SOFTWARE.
fonts
+
+
+
+ Courier
+
+
+ Courier New
+
+
+
+
+ Helvetica
+
+
+ Arial
+
+
+
+
+ MS Sans Serif
+
+
+ Microsoft Sans Serif
+
+
+
+
+ Small Fonts
+
+
+ Arial
+
+
+
+
+ MS Serif
+
+
+ Times New Roman
+
+
+
+
+ Roman
+
+
+ Times New Roman
+
+
+
+
+ Times
+
+
+ Times New Roman
+
+
+
+
+ Calibri Light
+
+
+ Calibri
+
+
+
+
+ Candara Light
+
+
+ Candara
+
+
+
+
+ Corbel Light
+
+
+ Corbel
+
+
+
+
+ Leelawadee UI Semilight
+
+
+ Leelawadee UI
+
+
+
+
+ Nirmala Text Semilight
+
+
+ Nirmala UI
+
+
+
+
+ Nirmala UI Semilight
+
+
+ Nirmala UI
+
+
+
@@ -77,6 +197,25 @@ PERFORMANCE OF THIS SOFTWARE.
+
+
+
+ MS Shell Dlg 2
+
+
+ Tahoma
+
+
+
+
+
+ cursive
+
+
+ Comic Sans MS
+
+
+
+
+ fantasy
+
+
+ Arial
+
+
@@ -250,4 +412,62 @@ PERFORMANCE OF THIS SOFTWARE.
lcddefault
none
+
+
+
+
+
+
+ Sitka
+ Sitka Small
+ Sitka Subheading
+ Sitka Heading
+ Sitka Display
+ Sitka Banner
+
+
+ Segoe UI Variable
+ Segoe UI Variable Small
+ Segoe UI Variable Text
+ Segoe UI Variable Display
+
+
+
diff --git a/bundle/fonts/000_README.txt b/bundle/fonts/000_README.txt
deleted file mode 100644
index 300274ac8..000000000
--- a/bundle/fonts/000_README.txt
+++ /dev/null
@@ -1,18 +0,0 @@
-DO NOT MODIFY THE CONTENTS OF THIS DIRECTORY
-
-Any adjustment to bundled fonts will result in an altered fingerprint. Font
-fingerprinting is more than just detecting what fonts you have, it also includes
-font fallbacks and characters (unicode code points) and any change in those can
-be measured.
-
-
-SOURCES:
-
-- Linux fonts are from TOR Browser bundle
-- Windows fonts are from Windows 11 22H2.
-- Mac OS fonts are from macOS Sonoma.
-
-
-Disclaimer:
-
-This project utilizes copyrighted fonts solely for academic and research purposes. The fonts used in this project are the intellectual property of their respective owners. No commercial use or distribution of these fonts is intended or permitted. All rights to the fonts are retained by their respective copyright holders. If you wish to use these fonts for any other purpose, please contact the copyright owners for appropriate permissions. If you wish a font to be removed from this repository, please open an issue.
diff --git a/bundle/fonts/linux/Arimo-Bold.ttf b/bundle/fonts/linux/Arimo-Bold.ttf
deleted file mode 100644
index eef6ebb2e..000000000
Binary files a/bundle/fonts/linux/Arimo-Bold.ttf and /dev/null differ
diff --git a/bundle/fonts/linux/Arimo-BoldItalic.ttf b/bundle/fonts/linux/Arimo-BoldItalic.ttf
deleted file mode 100644
index 2ea1a3328..000000000
Binary files a/bundle/fonts/linux/Arimo-BoldItalic.ttf and /dev/null differ
diff --git a/bundle/fonts/linux/Arimo-Italic.ttf b/bundle/fonts/linux/Arimo-Italic.ttf
deleted file mode 100644
index eb78c138e..000000000
Binary files a/bundle/fonts/linux/Arimo-Italic.ttf and /dev/null differ
diff --git a/bundle/fonts/linux/Arimo-Regular.ttf b/bundle/fonts/linux/Arimo-Regular.ttf
deleted file mode 100644
index 22d58b65b..000000000
Binary files a/bundle/fonts/linux/Arimo-Regular.ttf and /dev/null differ
diff --git a/bundle/fonts/linux/Cousine-Bold.ttf b/bundle/fonts/linux/Cousine-Bold.ttf
deleted file mode 100644
index 2a67f91da..000000000
Binary files a/bundle/fonts/linux/Cousine-Bold.ttf and /dev/null differ
diff --git a/bundle/fonts/linux/Cousine-BoldItalic.ttf b/bundle/fonts/linux/Cousine-BoldItalic.ttf
deleted file mode 100644
index 321641061..000000000
Binary files a/bundle/fonts/linux/Cousine-BoldItalic.ttf and /dev/null differ
diff --git a/bundle/fonts/linux/Cousine-Italic.ttf b/bundle/fonts/linux/Cousine-Italic.ttf
deleted file mode 100644
index d99849275..000000000
Binary files a/bundle/fonts/linux/Cousine-Italic.ttf and /dev/null differ
diff --git a/bundle/fonts/linux/Cousine-Regular.ttf b/bundle/fonts/linux/Cousine-Regular.ttf
deleted file mode 100644
index 644bc1c4e..000000000
Binary files a/bundle/fonts/linux/Cousine-Regular.ttf and /dev/null differ
diff --git a/bundle/fonts/linux/NotoNaskhArabic-Regular.ttf b/bundle/fonts/linux/NotoNaskhArabic-Regular.ttf
deleted file mode 100644
index ee51fb748..000000000
Binary files a/bundle/fonts/linux/NotoNaskhArabic-Regular.ttf and /dev/null differ
diff --git a/bundle/fonts/linux/NotoSansAdlam-Regular.ttf b/bundle/fonts/linux/NotoSansAdlam-Regular.ttf
deleted file mode 100644
index b8370d744..000000000
Binary files a/bundle/fonts/linux/NotoSansAdlam-Regular.ttf and /dev/null differ
diff --git a/bundle/fonts/linux/NotoSansArmenian-Regular.ttf b/bundle/fonts/linux/NotoSansArmenian-Regular.ttf
deleted file mode 100644
index 3d00acbb4..000000000
Binary files a/bundle/fonts/linux/NotoSansArmenian-Regular.ttf and /dev/null differ
diff --git a/bundle/fonts/linux/NotoSansBalinese-Regular.ttf b/bundle/fonts/linux/NotoSansBalinese-Regular.ttf
deleted file mode 100644
index e1fc5fd39..000000000
Binary files a/bundle/fonts/linux/NotoSansBalinese-Regular.ttf and /dev/null differ
diff --git a/bundle/fonts/linux/NotoSansBamum-Regular.ttf b/bundle/fonts/linux/NotoSansBamum-Regular.ttf
deleted file mode 100644
index cd754cdce..000000000
Binary files a/bundle/fonts/linux/NotoSansBamum-Regular.ttf and /dev/null differ
diff --git a/bundle/fonts/linux/NotoSansBassaVah-Regular.ttf b/bundle/fonts/linux/NotoSansBassaVah-Regular.ttf
deleted file mode 100644
index b427d466c..000000000
Binary files a/bundle/fonts/linux/NotoSansBassaVah-Regular.ttf and /dev/null differ
diff --git a/bundle/fonts/linux/NotoSansBatak-Regular.ttf b/bundle/fonts/linux/NotoSansBatak-Regular.ttf
deleted file mode 100644
index a943c681b..000000000
Binary files a/bundle/fonts/linux/NotoSansBatak-Regular.ttf and /dev/null differ
diff --git a/bundle/fonts/linux/NotoSansBengali-Regular.ttf b/bundle/fonts/linux/NotoSansBengali-Regular.ttf
deleted file mode 100644
index 756414c58..000000000
Binary files a/bundle/fonts/linux/NotoSansBengali-Regular.ttf and /dev/null differ
diff --git a/bundle/fonts/linux/NotoSansBuginese-Regular.ttf b/bundle/fonts/linux/NotoSansBuginese-Regular.ttf
deleted file mode 100644
index 3f8a02dbb..000000000
Binary files a/bundle/fonts/linux/NotoSansBuginese-Regular.ttf and /dev/null differ
diff --git a/bundle/fonts/linux/NotoSansBuhid-Regular.ttf b/bundle/fonts/linux/NotoSansBuhid-Regular.ttf
deleted file mode 100644
index a4ff9be32..000000000
Binary files a/bundle/fonts/linux/NotoSansBuhid-Regular.ttf and /dev/null differ
diff --git a/bundle/fonts/linux/NotoSansCanadianAboriginal-Regular.ttf b/bundle/fonts/linux/NotoSansCanadianAboriginal-Regular.ttf
deleted file mode 100644
index 84deca845..000000000
Binary files a/bundle/fonts/linux/NotoSansCanadianAboriginal-Regular.ttf and /dev/null differ
diff --git a/bundle/fonts/linux/NotoSansChakma-Regular.ttf b/bundle/fonts/linux/NotoSansChakma-Regular.ttf
deleted file mode 100644
index c09c88023..000000000
Binary files a/bundle/fonts/linux/NotoSansChakma-Regular.ttf and /dev/null differ
diff --git a/bundle/fonts/linux/NotoSansCham-Regular.ttf b/bundle/fonts/linux/NotoSansCham-Regular.ttf
deleted file mode 100644
index b63549e02..000000000
Binary files a/bundle/fonts/linux/NotoSansCham-Regular.ttf and /dev/null differ
diff --git a/bundle/fonts/linux/NotoSansCherokee-Regular.ttf b/bundle/fonts/linux/NotoSansCherokee-Regular.ttf
deleted file mode 100644
index de446dc7d..000000000
Binary files a/bundle/fonts/linux/NotoSansCherokee-Regular.ttf and /dev/null differ
diff --git a/bundle/fonts/linux/NotoSansCoptic-Regular.ttf b/bundle/fonts/linux/NotoSansCoptic-Regular.ttf
deleted file mode 100644
index 632bb6ee7..000000000
Binary files a/bundle/fonts/linux/NotoSansCoptic-Regular.ttf and /dev/null differ
diff --git a/bundle/fonts/linux/NotoSansDeseret-Regular.ttf b/bundle/fonts/linux/NotoSansDeseret-Regular.ttf
deleted file mode 100644
index a1cfa42a3..000000000
Binary files a/bundle/fonts/linux/NotoSansDeseret-Regular.ttf and /dev/null differ
diff --git a/bundle/fonts/linux/NotoSansDevanagari-Regular.ttf b/bundle/fonts/linux/NotoSansDevanagari-Regular.ttf
deleted file mode 100644
index 7f44f3ff6..000000000
Binary files a/bundle/fonts/linux/NotoSansDevanagari-Regular.ttf and /dev/null differ
diff --git a/bundle/fonts/linux/NotoSansElbasan-Regular.ttf b/bundle/fonts/linux/NotoSansElbasan-Regular.ttf
deleted file mode 100644
index ec74cd505..000000000
Binary files a/bundle/fonts/linux/NotoSansElbasan-Regular.ttf and /dev/null differ
diff --git a/bundle/fonts/linux/NotoSansEthiopic-Regular.ttf b/bundle/fonts/linux/NotoSansEthiopic-Regular.ttf
deleted file mode 100644
index 8820031ea..000000000
Binary files a/bundle/fonts/linux/NotoSansEthiopic-Regular.ttf and /dev/null differ
diff --git a/bundle/fonts/linux/NotoSansGeorgian-Regular.ttf b/bundle/fonts/linux/NotoSansGeorgian-Regular.ttf
deleted file mode 100644
index 8e7328b69..000000000
Binary files a/bundle/fonts/linux/NotoSansGeorgian-Regular.ttf and /dev/null differ
diff --git a/bundle/fonts/linux/NotoSansGrantha-Regular.ttf b/bundle/fonts/linux/NotoSansGrantha-Regular.ttf
deleted file mode 100644
index 7f13cf95b..000000000
Binary files a/bundle/fonts/linux/NotoSansGrantha-Regular.ttf and /dev/null differ
diff --git a/bundle/fonts/linux/NotoSansGujarati-Regular.ttf b/bundle/fonts/linux/NotoSansGujarati-Regular.ttf
deleted file mode 100644
index b5fb4dddc..000000000
Binary files a/bundle/fonts/linux/NotoSansGujarati-Regular.ttf and /dev/null differ
diff --git a/bundle/fonts/linux/NotoSansGunjalaGondi-Regular.ttf b/bundle/fonts/linux/NotoSansGunjalaGondi-Regular.ttf
deleted file mode 100644
index 7a2eced5f..000000000
Binary files a/bundle/fonts/linux/NotoSansGunjalaGondi-Regular.ttf and /dev/null differ
diff --git a/bundle/fonts/linux/NotoSansGurmukhi-Regular.ttf b/bundle/fonts/linux/NotoSansGurmukhi-Regular.ttf
deleted file mode 100644
index 3b08955a2..000000000
Binary files a/bundle/fonts/linux/NotoSansGurmukhi-Regular.ttf and /dev/null differ
diff --git a/bundle/fonts/linux/NotoSansHanifiRohingya-Regular.ttf b/bundle/fonts/linux/NotoSansHanifiRohingya-Regular.ttf
deleted file mode 100644
index d6a8fe4b8..000000000
Binary files a/bundle/fonts/linux/NotoSansHanifiRohingya-Regular.ttf and /dev/null differ
diff --git a/bundle/fonts/linux/NotoSansHanunoo-Regular.ttf b/bundle/fonts/linux/NotoSansHanunoo-Regular.ttf
deleted file mode 100644
index e947a9848..000000000
Binary files a/bundle/fonts/linux/NotoSansHanunoo-Regular.ttf and /dev/null differ
diff --git a/bundle/fonts/linux/NotoSansHebrew-Regular.ttf b/bundle/fonts/linux/NotoSansHebrew-Regular.ttf
deleted file mode 100644
index 7a9a4218f..000000000
Binary files a/bundle/fonts/linux/NotoSansHebrew-Regular.ttf and /dev/null differ
diff --git a/bundle/fonts/linux/NotoSansJP-Regular.otf b/bundle/fonts/linux/NotoSansJP-Regular.otf
deleted file mode 100644
index 4af556abb..000000000
Binary files a/bundle/fonts/linux/NotoSansJP-Regular.otf and /dev/null differ
diff --git a/bundle/fonts/linux/NotoSansJavanese-Regular.ttf b/bundle/fonts/linux/NotoSansJavanese-Regular.ttf
deleted file mode 100644
index 348189be2..000000000
Binary files a/bundle/fonts/linux/NotoSansJavanese-Regular.ttf and /dev/null differ
diff --git a/bundle/fonts/linux/NotoSansKR-Regular.otf b/bundle/fonts/linux/NotoSansKR-Regular.otf
deleted file mode 100644
index b8c11425a..000000000
Binary files a/bundle/fonts/linux/NotoSansKR-Regular.otf and /dev/null differ
diff --git a/bundle/fonts/linux/NotoSansKannada-Regular.ttf b/bundle/fonts/linux/NotoSansKannada-Regular.ttf
deleted file mode 100644
index 64d8a70c3..000000000
Binary files a/bundle/fonts/linux/NotoSansKannada-Regular.ttf and /dev/null differ
diff --git a/bundle/fonts/linux/NotoSansKayahLi-Regular.ttf b/bundle/fonts/linux/NotoSansKayahLi-Regular.ttf
deleted file mode 100644
index 7004d01a9..000000000
Binary files a/bundle/fonts/linux/NotoSansKayahLi-Regular.ttf and /dev/null differ
diff --git a/bundle/fonts/linux/NotoSansKhmer-Regular.ttf b/bundle/fonts/linux/NotoSansKhmer-Regular.ttf
deleted file mode 100644
index 037a30ea8..000000000
Binary files a/bundle/fonts/linux/NotoSansKhmer-Regular.ttf and /dev/null differ
diff --git a/bundle/fonts/linux/NotoSansKhojki-Regular.ttf b/bundle/fonts/linux/NotoSansKhojki-Regular.ttf
deleted file mode 100644
index 92891df31..000000000
Binary files a/bundle/fonts/linux/NotoSansKhojki-Regular.ttf and /dev/null differ
diff --git a/bundle/fonts/linux/NotoSansKhudawadi-Regular.ttf b/bundle/fonts/linux/NotoSansKhudawadi-Regular.ttf
deleted file mode 100644
index f2e58993b..000000000
Binary files a/bundle/fonts/linux/NotoSansKhudawadi-Regular.ttf and /dev/null differ
diff --git a/bundle/fonts/linux/NotoSansLao-Regular.ttf b/bundle/fonts/linux/NotoSansLao-Regular.ttf
deleted file mode 100644
index 72cb42407..000000000
Binary files a/bundle/fonts/linux/NotoSansLao-Regular.ttf and /dev/null differ
diff --git a/bundle/fonts/linux/NotoSansLepcha-Regular.ttf b/bundle/fonts/linux/NotoSansLepcha-Regular.ttf
deleted file mode 100644
index 818c482e2..000000000
Binary files a/bundle/fonts/linux/NotoSansLepcha-Regular.ttf and /dev/null differ
diff --git a/bundle/fonts/linux/NotoSansLimbu-Regular.ttf b/bundle/fonts/linux/NotoSansLimbu-Regular.ttf
deleted file mode 100644
index 41ec9217f..000000000
Binary files a/bundle/fonts/linux/NotoSansLimbu-Regular.ttf and /dev/null differ
diff --git a/bundle/fonts/linux/NotoSansLisu-Regular.ttf b/bundle/fonts/linux/NotoSansLisu-Regular.ttf
deleted file mode 100644
index 411346f8c..000000000
Binary files a/bundle/fonts/linux/NotoSansLisu-Regular.ttf and /dev/null differ
diff --git a/bundle/fonts/linux/NotoSansMahajani-Regular.ttf b/bundle/fonts/linux/NotoSansMahajani-Regular.ttf
deleted file mode 100644
index e041bb300..000000000
Binary files a/bundle/fonts/linux/NotoSansMahajani-Regular.ttf and /dev/null differ
diff --git a/bundle/fonts/linux/NotoSansMalayalam-Regular.ttf b/bundle/fonts/linux/NotoSansMalayalam-Regular.ttf
deleted file mode 100644
index 32dc2c625..000000000
Binary files a/bundle/fonts/linux/NotoSansMalayalam-Regular.ttf and /dev/null differ
diff --git a/bundle/fonts/linux/NotoSansMandaic-Regular.ttf b/bundle/fonts/linux/NotoSansMandaic-Regular.ttf
deleted file mode 100644
index e95e1e327..000000000
Binary files a/bundle/fonts/linux/NotoSansMandaic-Regular.ttf and /dev/null differ
diff --git a/bundle/fonts/linux/NotoSansMasaramGondi-Regular.ttf b/bundle/fonts/linux/NotoSansMasaramGondi-Regular.ttf
deleted file mode 100644
index fe3cc5727..000000000
Binary files a/bundle/fonts/linux/NotoSansMasaramGondi-Regular.ttf and /dev/null differ
diff --git a/bundle/fonts/linux/NotoSansMedefaidrin-Regular.ttf b/bundle/fonts/linux/NotoSansMedefaidrin-Regular.ttf
deleted file mode 100644
index 6bf52e3cd..000000000
Binary files a/bundle/fonts/linux/NotoSansMedefaidrin-Regular.ttf and /dev/null differ
diff --git a/bundle/fonts/linux/NotoSansMeeteiMayek-Regular.ttf b/bundle/fonts/linux/NotoSansMeeteiMayek-Regular.ttf
deleted file mode 100644
index 7d4bdcdee..000000000
Binary files a/bundle/fonts/linux/NotoSansMeeteiMayek-Regular.ttf and /dev/null differ
diff --git a/bundle/fonts/linux/NotoSansMendeKikakui-Regular.ttf b/bundle/fonts/linux/NotoSansMendeKikakui-Regular.ttf
deleted file mode 100644
index bcf002905..000000000
Binary files a/bundle/fonts/linux/NotoSansMendeKikakui-Regular.ttf and /dev/null differ
diff --git a/bundle/fonts/linux/NotoSansMiao-Regular.ttf b/bundle/fonts/linux/NotoSansMiao-Regular.ttf
deleted file mode 100644
index 7e8fd2b93..000000000
Binary files a/bundle/fonts/linux/NotoSansMiao-Regular.ttf and /dev/null differ
diff --git a/bundle/fonts/linux/NotoSansModi-Regular.ttf b/bundle/fonts/linux/NotoSansModi-Regular.ttf
deleted file mode 100644
index f5c565206..000000000
Binary files a/bundle/fonts/linux/NotoSansModi-Regular.ttf and /dev/null differ
diff --git a/bundle/fonts/linux/NotoSansMongolian-Regular.ttf b/bundle/fonts/linux/NotoSansMongolian-Regular.ttf
deleted file mode 100644
index a475306ae..000000000
Binary files a/bundle/fonts/linux/NotoSansMongolian-Regular.ttf and /dev/null differ
diff --git a/bundle/fonts/linux/NotoSansMro-Regular.ttf b/bundle/fonts/linux/NotoSansMro-Regular.ttf
deleted file mode 100644
index de8dd6cfc..000000000
Binary files a/bundle/fonts/linux/NotoSansMro-Regular.ttf and /dev/null differ
diff --git a/bundle/fonts/linux/NotoSansMultani-Regular.ttf b/bundle/fonts/linux/NotoSansMultani-Regular.ttf
deleted file mode 100644
index fa5856eca..000000000
Binary files a/bundle/fonts/linux/NotoSansMultani-Regular.ttf and /dev/null differ
diff --git a/bundle/fonts/linux/NotoSansMyanmar-Regular.ttf b/bundle/fonts/linux/NotoSansMyanmar-Regular.ttf
deleted file mode 100644
index 5c0da8c0a..000000000
Binary files a/bundle/fonts/linux/NotoSansMyanmar-Regular.ttf and /dev/null differ
diff --git a/bundle/fonts/linux/NotoSansNKo-Regular.ttf b/bundle/fonts/linux/NotoSansNKo-Regular.ttf
deleted file mode 100644
index 89e5330bd..000000000
Binary files a/bundle/fonts/linux/NotoSansNKo-Regular.ttf and /dev/null differ
diff --git a/bundle/fonts/linux/NotoSansNewTaiLue-Regular.ttf b/bundle/fonts/linux/NotoSansNewTaiLue-Regular.ttf
deleted file mode 100644
index f673bcb39..000000000
Binary files a/bundle/fonts/linux/NotoSansNewTaiLue-Regular.ttf and /dev/null differ
diff --git a/bundle/fonts/linux/NotoSansNewa-Regular.ttf b/bundle/fonts/linux/NotoSansNewa-Regular.ttf
deleted file mode 100644
index a1941a36a..000000000
Binary files a/bundle/fonts/linux/NotoSansNewa-Regular.ttf and /dev/null differ
diff --git a/bundle/fonts/linux/NotoSansOlChiki-Regular.ttf b/bundle/fonts/linux/NotoSansOlChiki-Regular.ttf
deleted file mode 100644
index cec19f332..000000000
Binary files a/bundle/fonts/linux/NotoSansOlChiki-Regular.ttf and /dev/null differ
diff --git a/bundle/fonts/linux/NotoSansOriya-Regular.ttf b/bundle/fonts/linux/NotoSansOriya-Regular.ttf
deleted file mode 100644
index 20b8023ba..000000000
Binary files a/bundle/fonts/linux/NotoSansOriya-Regular.ttf and /dev/null differ
diff --git a/bundle/fonts/linux/NotoSansOsage-Regular.ttf b/bundle/fonts/linux/NotoSansOsage-Regular.ttf
deleted file mode 100644
index d1770fac5..000000000
Binary files a/bundle/fonts/linux/NotoSansOsage-Regular.ttf and /dev/null differ
diff --git a/bundle/fonts/linux/NotoSansOsmanya-Regular.ttf b/bundle/fonts/linux/NotoSansOsmanya-Regular.ttf
deleted file mode 100644
index 52bf66cec..000000000
Binary files a/bundle/fonts/linux/NotoSansOsmanya-Regular.ttf and /dev/null differ
diff --git a/bundle/fonts/linux/NotoSansPahawhHmong-Regular.ttf b/bundle/fonts/linux/NotoSansPahawhHmong-Regular.ttf
deleted file mode 100644
index 4ab4d08a7..000000000
Binary files a/bundle/fonts/linux/NotoSansPahawhHmong-Regular.ttf and /dev/null differ
diff --git a/bundle/fonts/linux/NotoSansPauCinHau-Regular.ttf b/bundle/fonts/linux/NotoSansPauCinHau-Regular.ttf
deleted file mode 100644
index f883261fa..000000000
Binary files a/bundle/fonts/linux/NotoSansPauCinHau-Regular.ttf and /dev/null differ
diff --git a/bundle/fonts/linux/NotoSansRejang-Regular.ttf b/bundle/fonts/linux/NotoSansRejang-Regular.ttf
deleted file mode 100644
index 2816e5b11..000000000
Binary files a/bundle/fonts/linux/NotoSansRejang-Regular.ttf and /dev/null differ
diff --git a/bundle/fonts/linux/NotoSansRunic-Regular.ttf b/bundle/fonts/linux/NotoSansRunic-Regular.ttf
deleted file mode 100644
index 565fc7cfc..000000000
Binary files a/bundle/fonts/linux/NotoSansRunic-Regular.ttf and /dev/null differ
diff --git a/bundle/fonts/linux/NotoSansSC-Regular.otf b/bundle/fonts/linux/NotoSansSC-Regular.otf
deleted file mode 100644
index fc0fda939..000000000
Binary files a/bundle/fonts/linux/NotoSansSC-Regular.otf and /dev/null differ
diff --git a/bundle/fonts/linux/NotoSansSamaritan-Regular.ttf b/bundle/fonts/linux/NotoSansSamaritan-Regular.ttf
deleted file mode 100644
index 85b42c5d6..000000000
Binary files a/bundle/fonts/linux/NotoSansSamaritan-Regular.ttf and /dev/null differ
diff --git a/bundle/fonts/linux/NotoSansSaurashtra-Regular.ttf b/bundle/fonts/linux/NotoSansSaurashtra-Regular.ttf
deleted file mode 100644
index 740e1d43b..000000000
Binary files a/bundle/fonts/linux/NotoSansSaurashtra-Regular.ttf and /dev/null differ
diff --git a/bundle/fonts/linux/NotoSansSharada-Regular.ttf b/bundle/fonts/linux/NotoSansSharada-Regular.ttf
deleted file mode 100644
index 44f3f0c03..000000000
Binary files a/bundle/fonts/linux/NotoSansSharada-Regular.ttf and /dev/null differ
diff --git a/bundle/fonts/linux/NotoSansShavian-Regular.ttf b/bundle/fonts/linux/NotoSansShavian-Regular.ttf
deleted file mode 100644
index 9dee5630a..000000000
Binary files a/bundle/fonts/linux/NotoSansShavian-Regular.ttf and /dev/null differ
diff --git a/bundle/fonts/linux/NotoSansSinhala-Regular.ttf b/bundle/fonts/linux/NotoSansSinhala-Regular.ttf
deleted file mode 100644
index 535e58d0b..000000000
Binary files a/bundle/fonts/linux/NotoSansSinhala-Regular.ttf and /dev/null differ
diff --git a/bundle/fonts/linux/NotoSansSoraSompeng-Regular.ttf b/bundle/fonts/linux/NotoSansSoraSompeng-Regular.ttf
deleted file mode 100644
index 6cd8db7e9..000000000
Binary files a/bundle/fonts/linux/NotoSansSoraSompeng-Regular.ttf and /dev/null differ
diff --git a/bundle/fonts/linux/NotoSansSoyombo-Regular.ttf b/bundle/fonts/linux/NotoSansSoyombo-Regular.ttf
deleted file mode 100644
index 758363c72..000000000
Binary files a/bundle/fonts/linux/NotoSansSoyombo-Regular.ttf and /dev/null differ
diff --git a/bundle/fonts/linux/NotoSansSundanese-Regular.ttf b/bundle/fonts/linux/NotoSansSundanese-Regular.ttf
deleted file mode 100644
index e1deff165..000000000
Binary files a/bundle/fonts/linux/NotoSansSundanese-Regular.ttf and /dev/null differ
diff --git a/bundle/fonts/linux/NotoSansSylotiNagri-Regular.ttf b/bundle/fonts/linux/NotoSansSylotiNagri-Regular.ttf
deleted file mode 100644
index 5274b63f1..000000000
Binary files a/bundle/fonts/linux/NotoSansSylotiNagri-Regular.ttf and /dev/null differ
diff --git a/bundle/fonts/linux/NotoSansSymbols-Regular.ttf b/bundle/fonts/linux/NotoSansSymbols-Regular.ttf
deleted file mode 100644
index f39694c96..000000000
Binary files a/bundle/fonts/linux/NotoSansSymbols-Regular.ttf and /dev/null differ
diff --git a/bundle/fonts/linux/NotoSansSymbols2-Regular.ttf b/bundle/fonts/linux/NotoSansSymbols2-Regular.ttf
deleted file mode 100644
index 550d427e3..000000000
Binary files a/bundle/fonts/linux/NotoSansSymbols2-Regular.ttf and /dev/null differ
diff --git a/bundle/fonts/linux/NotoSansSyriac-Regular.ttf b/bundle/fonts/linux/NotoSansSyriac-Regular.ttf
deleted file mode 100644
index cae88c8af..000000000
Binary files a/bundle/fonts/linux/NotoSansSyriac-Regular.ttf and /dev/null differ
diff --git a/bundle/fonts/linux/NotoSansTC-Regular.otf b/bundle/fonts/linux/NotoSansTC-Regular.otf
deleted file mode 100644
index 63c342238..000000000
Binary files a/bundle/fonts/linux/NotoSansTC-Regular.otf and /dev/null differ
diff --git a/bundle/fonts/linux/NotoSansTagalog-Regular.ttf b/bundle/fonts/linux/NotoSansTagalog-Regular.ttf
deleted file mode 100644
index d032d70e5..000000000
Binary files a/bundle/fonts/linux/NotoSansTagalog-Regular.ttf and /dev/null differ
diff --git a/bundle/fonts/linux/NotoSansTagbanwa-Regular.ttf b/bundle/fonts/linux/NotoSansTagbanwa-Regular.ttf
deleted file mode 100644
index c3a342bd5..000000000
Binary files a/bundle/fonts/linux/NotoSansTagbanwa-Regular.ttf and /dev/null differ
diff --git a/bundle/fonts/linux/NotoSansTaiLe-Regular.ttf b/bundle/fonts/linux/NotoSansTaiLe-Regular.ttf
deleted file mode 100644
index 54d1271ab..000000000
Binary files a/bundle/fonts/linux/NotoSansTaiLe-Regular.ttf and /dev/null differ
diff --git a/bundle/fonts/linux/NotoSansTaiTham-Regular.ttf b/bundle/fonts/linux/NotoSansTaiTham-Regular.ttf
deleted file mode 100644
index c88b1a0d9..000000000
Binary files a/bundle/fonts/linux/NotoSansTaiTham-Regular.ttf and /dev/null differ
diff --git a/bundle/fonts/linux/NotoSansTaiViet-Regular.ttf b/bundle/fonts/linux/NotoSansTaiViet-Regular.ttf
deleted file mode 100644
index e81341246..000000000
Binary files a/bundle/fonts/linux/NotoSansTaiViet-Regular.ttf and /dev/null differ
diff --git a/bundle/fonts/linux/NotoSansTakri-Regular.ttf b/bundle/fonts/linux/NotoSansTakri-Regular.ttf
deleted file mode 100644
index 05296f5ec..000000000
Binary files a/bundle/fonts/linux/NotoSansTakri-Regular.ttf and /dev/null differ
diff --git a/bundle/fonts/linux/NotoSansTamil-Regular.ttf b/bundle/fonts/linux/NotoSansTamil-Regular.ttf
deleted file mode 100644
index 3999af8ea..000000000
Binary files a/bundle/fonts/linux/NotoSansTamil-Regular.ttf and /dev/null differ
diff --git a/bundle/fonts/linux/NotoSansTelugu-Regular.ttf b/bundle/fonts/linux/NotoSansTelugu-Regular.ttf
deleted file mode 100644
index dab6d3cfd..000000000
Binary files a/bundle/fonts/linux/NotoSansTelugu-Regular.ttf and /dev/null differ
diff --git a/bundle/fonts/linux/NotoSansThaana-Regular.ttf b/bundle/fonts/linux/NotoSansThaana-Regular.ttf
deleted file mode 100644
index 04d7b96d9..000000000
Binary files a/bundle/fonts/linux/NotoSansThaana-Regular.ttf and /dev/null differ
diff --git a/bundle/fonts/linux/NotoSansThai-Regular.ttf b/bundle/fonts/linux/NotoSansThai-Regular.ttf
deleted file mode 100644
index ced12d665..000000000
Binary files a/bundle/fonts/linux/NotoSansThai-Regular.ttf and /dev/null differ
diff --git a/bundle/fonts/linux/NotoSansTifinagh-Regular.ttf b/bundle/fonts/linux/NotoSansTifinagh-Regular.ttf
deleted file mode 100644
index be0f0bad2..000000000
Binary files a/bundle/fonts/linux/NotoSansTifinagh-Regular.ttf and /dev/null differ
diff --git a/bundle/fonts/linux/NotoSansTifinaghAPT-Regular.ttf b/bundle/fonts/linux/NotoSansTifinaghAPT-Regular.ttf
deleted file mode 100644
index 03ef4d034..000000000
Binary files a/bundle/fonts/linux/NotoSansTifinaghAPT-Regular.ttf and /dev/null differ
diff --git a/bundle/fonts/linux/NotoSansTifinaghAdrar-Regular.ttf b/bundle/fonts/linux/NotoSansTifinaghAdrar-Regular.ttf
deleted file mode 100644
index 7d4e76dfe..000000000
Binary files a/bundle/fonts/linux/NotoSansTifinaghAdrar-Regular.ttf and /dev/null differ
diff --git a/bundle/fonts/linux/NotoSansTifinaghAgrawImazighen-Regular.ttf b/bundle/fonts/linux/NotoSansTifinaghAgrawImazighen-Regular.ttf
deleted file mode 100644
index d9a2e4983..000000000
Binary files a/bundle/fonts/linux/NotoSansTifinaghAgrawImazighen-Regular.ttf and /dev/null differ
diff --git a/bundle/fonts/linux/NotoSansTifinaghAhaggar-Regular.ttf b/bundle/fonts/linux/NotoSansTifinaghAhaggar-Regular.ttf
deleted file mode 100644
index 668bc8d90..000000000
Binary files a/bundle/fonts/linux/NotoSansTifinaghAhaggar-Regular.ttf and /dev/null differ
diff --git a/bundle/fonts/linux/NotoSansTifinaghAir-Regular.ttf b/bundle/fonts/linux/NotoSansTifinaghAir-Regular.ttf
deleted file mode 100644
index 04ef67e07..000000000
Binary files a/bundle/fonts/linux/NotoSansTifinaghAir-Regular.ttf and /dev/null differ
diff --git a/bundle/fonts/linux/NotoSansTifinaghAzawagh-Regular.ttf b/bundle/fonts/linux/NotoSansTifinaghAzawagh-Regular.ttf
deleted file mode 100644
index 1dd4c0094..000000000
Binary files a/bundle/fonts/linux/NotoSansTifinaghAzawagh-Regular.ttf and /dev/null differ
diff --git a/bundle/fonts/linux/NotoSansTifinaghGhat-Regular.ttf b/bundle/fonts/linux/NotoSansTifinaghGhat-Regular.ttf
deleted file mode 100644
index 069352176..000000000
Binary files a/bundle/fonts/linux/NotoSansTifinaghGhat-Regular.ttf and /dev/null differ
diff --git a/bundle/fonts/linux/NotoSansTifinaghHawad-Regular.ttf b/bundle/fonts/linux/NotoSansTifinaghHawad-Regular.ttf
deleted file mode 100644
index e27572c7b..000000000
Binary files a/bundle/fonts/linux/NotoSansTifinaghHawad-Regular.ttf and /dev/null differ
diff --git a/bundle/fonts/linux/NotoSansTifinaghRhissaIxa-Regular.ttf b/bundle/fonts/linux/NotoSansTifinaghRhissaIxa-Regular.ttf
deleted file mode 100644
index f26c4eb7a..000000000
Binary files a/bundle/fonts/linux/NotoSansTifinaghRhissaIxa-Regular.ttf and /dev/null differ
diff --git a/bundle/fonts/linux/NotoSansTifinaghSIL-Regular.ttf b/bundle/fonts/linux/NotoSansTifinaghSIL-Regular.ttf
deleted file mode 100644
index 8135a62c9..000000000
Binary files a/bundle/fonts/linux/NotoSansTifinaghSIL-Regular.ttf and /dev/null differ
diff --git a/bundle/fonts/linux/NotoSansTifinaghTawellemmet-Regular.ttf b/bundle/fonts/linux/NotoSansTifinaghTawellemmet-Regular.ttf
deleted file mode 100644
index 98864760e..000000000
Binary files a/bundle/fonts/linux/NotoSansTifinaghTawellemmet-Regular.ttf and /dev/null differ
diff --git a/bundle/fonts/linux/NotoSansTirhuta-Regular.ttf b/bundle/fonts/linux/NotoSansTirhuta-Regular.ttf
deleted file mode 100644
index 6083fa7cf..000000000
Binary files a/bundle/fonts/linux/NotoSansTirhuta-Regular.ttf and /dev/null differ
diff --git a/bundle/fonts/linux/NotoSansVai-Regular.ttf b/bundle/fonts/linux/NotoSansVai-Regular.ttf
deleted file mode 100644
index 0e792e5e5..000000000
Binary files a/bundle/fonts/linux/NotoSansVai-Regular.ttf and /dev/null differ
diff --git a/bundle/fonts/linux/NotoSansWancho-Regular.ttf b/bundle/fonts/linux/NotoSansWancho-Regular.ttf
deleted file mode 100644
index 59e7eafb1..000000000
Binary files a/bundle/fonts/linux/NotoSansWancho-Regular.ttf and /dev/null differ
diff --git a/bundle/fonts/linux/NotoSansWarangCiti-Regular.ttf b/bundle/fonts/linux/NotoSansWarangCiti-Regular.ttf
deleted file mode 100644
index d02cd9c7a..000000000
Binary files a/bundle/fonts/linux/NotoSansWarangCiti-Regular.ttf and /dev/null differ
diff --git a/bundle/fonts/linux/NotoSansYi-Regular.ttf b/bundle/fonts/linux/NotoSansYi-Regular.ttf
deleted file mode 100644
index da4bb0963..000000000
Binary files a/bundle/fonts/linux/NotoSansYi-Regular.ttf and /dev/null differ
diff --git a/bundle/fonts/linux/NotoSansZanabazarSquare-Regular.ttf b/bundle/fonts/linux/NotoSansZanabazarSquare-Regular.ttf
deleted file mode 100644
index c18542dbe..000000000
Binary files a/bundle/fonts/linux/NotoSansZanabazarSquare-Regular.ttf and /dev/null differ
diff --git a/bundle/fonts/linux/NotoSerifArmenian-Regular.ttf b/bundle/fonts/linux/NotoSerifArmenian-Regular.ttf
deleted file mode 100644
index 0facd51b1..000000000
Binary files a/bundle/fonts/linux/NotoSerifArmenian-Regular.ttf and /dev/null differ
diff --git a/bundle/fonts/linux/NotoSerifBalinese-Regular.ttf b/bundle/fonts/linux/NotoSerifBalinese-Regular.ttf
deleted file mode 100644
index 9b97f3ac1..000000000
Binary files a/bundle/fonts/linux/NotoSerifBalinese-Regular.ttf and /dev/null differ
diff --git a/bundle/fonts/linux/NotoSerifBengali-Regular.ttf b/bundle/fonts/linux/NotoSerifBengali-Regular.ttf
deleted file mode 100644
index 792a08464..000000000
Binary files a/bundle/fonts/linux/NotoSerifBengali-Regular.ttf and /dev/null differ
diff --git a/bundle/fonts/linux/NotoSerifDevanagari-Regular.ttf b/bundle/fonts/linux/NotoSerifDevanagari-Regular.ttf
deleted file mode 100644
index e04cf7eb6..000000000
Binary files a/bundle/fonts/linux/NotoSerifDevanagari-Regular.ttf and /dev/null differ
diff --git a/bundle/fonts/linux/NotoSerifDogra-Regular.ttf b/bundle/fonts/linux/NotoSerifDogra-Regular.ttf
deleted file mode 100644
index 6e241bb11..000000000
Binary files a/bundle/fonts/linux/NotoSerifDogra-Regular.ttf and /dev/null differ
diff --git a/bundle/fonts/linux/NotoSerifEthiopic-Regular.ttf b/bundle/fonts/linux/NotoSerifEthiopic-Regular.ttf
deleted file mode 100644
index 0c5d26ac3..000000000
Binary files a/bundle/fonts/linux/NotoSerifEthiopic-Regular.ttf and /dev/null differ
diff --git a/bundle/fonts/linux/NotoSerifGeorgian-Regular.ttf b/bundle/fonts/linux/NotoSerifGeorgian-Regular.ttf
deleted file mode 100644
index c57fe6f0a..000000000
Binary files a/bundle/fonts/linux/NotoSerifGeorgian-Regular.ttf and /dev/null differ
diff --git a/bundle/fonts/linux/NotoSerifGrantha-Regular.ttf b/bundle/fonts/linux/NotoSerifGrantha-Regular.ttf
deleted file mode 100644
index 7438fb779..000000000
Binary files a/bundle/fonts/linux/NotoSerifGrantha-Regular.ttf and /dev/null differ
diff --git a/bundle/fonts/linux/NotoSerifGujarati-Regular.ttf b/bundle/fonts/linux/NotoSerifGujarati-Regular.ttf
deleted file mode 100644
index 75dd95771..000000000
Binary files a/bundle/fonts/linux/NotoSerifGujarati-Regular.ttf and /dev/null differ
diff --git a/bundle/fonts/linux/NotoSerifGurmukhi-Regular.ttf b/bundle/fonts/linux/NotoSerifGurmukhi-Regular.ttf
deleted file mode 100644
index cf5315e2e..000000000
Binary files a/bundle/fonts/linux/NotoSerifGurmukhi-Regular.ttf and /dev/null differ
diff --git a/bundle/fonts/linux/NotoSerifHebrew-Regular.ttf b/bundle/fonts/linux/NotoSerifHebrew-Regular.ttf
deleted file mode 100644
index ff55a38fc..000000000
Binary files a/bundle/fonts/linux/NotoSerifHebrew-Regular.ttf and /dev/null differ
diff --git a/bundle/fonts/linux/NotoSerifKannada-Regular.ttf b/bundle/fonts/linux/NotoSerifKannada-Regular.ttf
deleted file mode 100644
index e9ad9fc69..000000000
Binary files a/bundle/fonts/linux/NotoSerifKannada-Regular.ttf and /dev/null differ
diff --git a/bundle/fonts/linux/NotoSerifKhmer-Regular.ttf b/bundle/fonts/linux/NotoSerifKhmer-Regular.ttf
deleted file mode 100644
index badb1b381..000000000
Binary files a/bundle/fonts/linux/NotoSerifKhmer-Regular.ttf and /dev/null differ
diff --git a/bundle/fonts/linux/NotoSerifKhojki-Regular.ttf b/bundle/fonts/linux/NotoSerifKhojki-Regular.ttf
deleted file mode 100644
index 65d813015..000000000
Binary files a/bundle/fonts/linux/NotoSerifKhojki-Regular.ttf and /dev/null differ
diff --git a/bundle/fonts/linux/NotoSerifLao-Regular.ttf b/bundle/fonts/linux/NotoSerifLao-Regular.ttf
deleted file mode 100644
index 6885c3306..000000000
Binary files a/bundle/fonts/linux/NotoSerifLao-Regular.ttf and /dev/null differ
diff --git a/bundle/fonts/linux/NotoSerifMalayalam-Regular.ttf b/bundle/fonts/linux/NotoSerifMalayalam-Regular.ttf
deleted file mode 100644
index feb046a19..000000000
Binary files a/bundle/fonts/linux/NotoSerifMalayalam-Regular.ttf and /dev/null differ
diff --git a/bundle/fonts/linux/NotoSerifMyanmar-Regular.ttf b/bundle/fonts/linux/NotoSerifMyanmar-Regular.ttf
deleted file mode 100644
index bd4d81964..000000000
Binary files a/bundle/fonts/linux/NotoSerifMyanmar-Regular.ttf and /dev/null differ
diff --git a/bundle/fonts/linux/NotoSerifNPHmong-Regular.ttf b/bundle/fonts/linux/NotoSerifNPHmong-Regular.ttf
deleted file mode 100644
index 16994b757..000000000
Binary files a/bundle/fonts/linux/NotoSerifNPHmong-Regular.ttf and /dev/null differ
diff --git a/bundle/fonts/linux/NotoSerifSinhala-Regular.ttf b/bundle/fonts/linux/NotoSerifSinhala-Regular.ttf
deleted file mode 100644
index db675087e..000000000
Binary files a/bundle/fonts/linux/NotoSerifSinhala-Regular.ttf and /dev/null differ
diff --git a/bundle/fonts/linux/NotoSerifTamil-Regular.ttf b/bundle/fonts/linux/NotoSerifTamil-Regular.ttf
deleted file mode 100644
index 09e96a565..000000000
Binary files a/bundle/fonts/linux/NotoSerifTamil-Regular.ttf and /dev/null differ
diff --git a/bundle/fonts/linux/NotoSerifTelugu-Regular.ttf b/bundle/fonts/linux/NotoSerifTelugu-Regular.ttf
deleted file mode 100644
index c3ece482b..000000000
Binary files a/bundle/fonts/linux/NotoSerifTelugu-Regular.ttf and /dev/null differ
diff --git a/bundle/fonts/linux/NotoSerifThai-Regular.ttf b/bundle/fonts/linux/NotoSerifThai-Regular.ttf
deleted file mode 100644
index 35d02ecc9..000000000
Binary files a/bundle/fonts/linux/NotoSerifThai-Regular.ttf and /dev/null differ
diff --git a/bundle/fonts/linux/NotoSerifTibetan-Regular.ttf b/bundle/fonts/linux/NotoSerifTibetan-Regular.ttf
deleted file mode 100644
index e4015f1c3..000000000
Binary files a/bundle/fonts/linux/NotoSerifTibetan-Regular.ttf and /dev/null differ
diff --git a/bundle/fonts/linux/NotoSerifYezidi-Regular.ttf b/bundle/fonts/linux/NotoSerifYezidi-Regular.ttf
deleted file mode 100644
index 31a88d0a4..000000000
Binary files a/bundle/fonts/linux/NotoSerifYezidi-Regular.ttf and /dev/null differ
diff --git a/bundle/fonts/linux/STIXTwoMath-Regular.otf b/bundle/fonts/linux/STIXTwoMath-Regular.otf
deleted file mode 100644
index 29aa3b941..000000000
Binary files a/bundle/fonts/linux/STIXTwoMath-Regular.otf and /dev/null differ
diff --git a/bundle/fonts/linux/Tinos-Bold.ttf b/bundle/fonts/linux/Tinos-Bold.ttf
deleted file mode 100644
index 1dee73112..000000000
Binary files a/bundle/fonts/linux/Tinos-Bold.ttf and /dev/null differ
diff --git a/bundle/fonts/linux/Tinos-BoldItalic.ttf b/bundle/fonts/linux/Tinos-BoldItalic.ttf
deleted file mode 100644
index 6073badcf..000000000
Binary files a/bundle/fonts/linux/Tinos-BoldItalic.ttf and /dev/null differ
diff --git a/bundle/fonts/linux/Tinos-Italic.ttf b/bundle/fonts/linux/Tinos-Italic.ttf
deleted file mode 100644
index a91435616..000000000
Binary files a/bundle/fonts/linux/Tinos-Italic.ttf and /dev/null differ
diff --git a/bundle/fonts/linux/Tinos-Regular.ttf b/bundle/fonts/linux/Tinos-Regular.ttf
deleted file mode 100644
index 0cdaaca91..000000000
Binary files a/bundle/fonts/linux/Tinos-Regular.ttf and /dev/null differ
diff --git a/bundle/fonts/linux/TwemojiMozilla.ttf b/bundle/fonts/linux/TwemojiMozilla.ttf
deleted file mode 100644
index 9f45178e9..000000000
Binary files a/bundle/fonts/linux/TwemojiMozilla.ttf and /dev/null differ
diff --git a/bundle/fonts/macos/Apple Braille Outline 6 Dot.ttf b/bundle/fonts/macos/Apple Braille Outline 6 Dot.ttf
deleted file mode 100644
index 0781ff062..000000000
Binary files a/bundle/fonts/macos/Apple Braille Outline 6 Dot.ttf and /dev/null differ
diff --git a/bundle/fonts/macos/Apple Braille Outline 8 Dot.ttf b/bundle/fonts/macos/Apple Braille Outline 8 Dot.ttf
deleted file mode 100644
index 76eb1b942..000000000
Binary files a/bundle/fonts/macos/Apple Braille Outline 8 Dot.ttf and /dev/null differ
diff --git a/bundle/fonts/macos/Apple Braille Pinpoint 6 Dot.ttf b/bundle/fonts/macos/Apple Braille Pinpoint 6 Dot.ttf
deleted file mode 100644
index ea2d7e770..000000000
Binary files a/bundle/fonts/macos/Apple Braille Pinpoint 6 Dot.ttf and /dev/null differ
diff --git a/bundle/fonts/macos/Apple Braille Pinpoint 8 Dot.ttf b/bundle/fonts/macos/Apple Braille Pinpoint 8 Dot.ttf
deleted file mode 100644
index 7fb892702..000000000
Binary files a/bundle/fonts/macos/Apple Braille Pinpoint 8 Dot.ttf and /dev/null differ
diff --git a/bundle/fonts/macos/Apple Braille.ttf b/bundle/fonts/macos/Apple Braille.ttf
deleted file mode 100644
index b2e7a65e4..000000000
Binary files a/bundle/fonts/macos/Apple Braille.ttf and /dev/null differ
diff --git a/bundle/fonts/macos/Apple Symbols.ttf b/bundle/fonts/macos/Apple Symbols.ttf
deleted file mode 100644
index d5f099fb7..000000000
Binary files a/bundle/fonts/macos/Apple Symbols.ttf and /dev/null differ
diff --git a/bundle/fonts/macos/AppleColorEmoji.ttf b/bundle/fonts/macos/AppleColorEmoji.ttf
deleted file mode 100644
index f1378fa56..000000000
Binary files a/bundle/fonts/macos/AppleColorEmoji.ttf and /dev/null differ
diff --git a/bundle/fonts/macos/AppleSDGothicNeo.ttc b/bundle/fonts/macos/AppleSDGothicNeo.ttc
deleted file mode 100644
index 9de6dff98..000000000
Binary files a/bundle/fonts/macos/AppleSDGothicNeo.ttc and /dev/null differ
diff --git a/bundle/fonts/macos/AquaKana.ttc b/bundle/fonts/macos/AquaKana.ttc
deleted file mode 100644
index ffa148a8b..000000000
Binary files a/bundle/fonts/macos/AquaKana.ttc and /dev/null differ
diff --git a/bundle/fonts/macos/ArialHB.ttc b/bundle/fonts/macos/ArialHB.ttc
deleted file mode 100644
index b91e564e0..000000000
Binary files a/bundle/fonts/macos/ArialHB.ttc and /dev/null differ
diff --git a/bundle/fonts/macos/Avenir Next Condensed.ttc b/bundle/fonts/macos/Avenir Next Condensed.ttc
deleted file mode 100644
index de834a8a5..000000000
Binary files a/bundle/fonts/macos/Avenir Next Condensed.ttc and /dev/null differ
diff --git a/bundle/fonts/macos/Avenir Next.ttc b/bundle/fonts/macos/Avenir Next.ttc
deleted file mode 100644
index d2e05c14c..000000000
Binary files a/bundle/fonts/macos/Avenir Next.ttc and /dev/null differ
diff --git a/bundle/fonts/macos/Avenir.ttc b/bundle/fonts/macos/Avenir.ttc
deleted file mode 100644
index 5861625e6..000000000
Binary files a/bundle/fonts/macos/Avenir.ttc and /dev/null differ
diff --git a/bundle/fonts/macos/Courier.ttc b/bundle/fonts/macos/Courier.ttc
deleted file mode 100644
index 4723cfc12..000000000
Binary files a/bundle/fonts/macos/Courier.ttc and /dev/null differ
diff --git a/bundle/fonts/macos/GeezaPro.ttc b/bundle/fonts/macos/GeezaPro.ttc
deleted file mode 100644
index 29007fdfc..000000000
Binary files a/bundle/fonts/macos/GeezaPro.ttc and /dev/null differ
diff --git a/bundle/fonts/macos/Geneva.ttf b/bundle/fonts/macos/Geneva.ttf
deleted file mode 100644
index f3f82a6c0..000000000
Binary files a/bundle/fonts/macos/Geneva.ttf and /dev/null differ
diff --git a/bundle/fonts/macos/HelveLTMM b/bundle/fonts/macos/HelveLTMM
deleted file mode 100644
index 50dda9bd3..000000000
Binary files a/bundle/fonts/macos/HelveLTMM and /dev/null differ
diff --git a/bundle/fonts/macos/Helvetica.ttc b/bundle/fonts/macos/Helvetica.ttc
deleted file mode 100644
index c2c74cbe7..000000000
Binary files a/bundle/fonts/macos/Helvetica.ttc and /dev/null differ
diff --git a/bundle/fonts/macos/HelveticaNeue.ttc b/bundle/fonts/macos/HelveticaNeue.ttc
deleted file mode 100644
index 8be1d2322..000000000
Binary files a/bundle/fonts/macos/HelveticaNeue.ttc and /dev/null differ
diff --git a/bundle/fonts/macos/Hiragino Sans GB.ttc b/bundle/fonts/macos/Hiragino Sans GB.ttc
deleted file mode 100644
index 0b0123aa2..000000000
Binary files a/bundle/fonts/macos/Hiragino Sans GB.ttc and /dev/null differ
diff --git a/bundle/fonts/macos/Keyboard.ttf b/bundle/fonts/macos/Keyboard.ttf
deleted file mode 100644
index 2445049a8..000000000
Binary files a/bundle/fonts/macos/Keyboard.ttf and /dev/null differ
diff --git a/bundle/fonts/macos/Kohinoor.ttc b/bundle/fonts/macos/Kohinoor.ttc
deleted file mode 100644
index cd2385b1d..000000000
Binary files a/bundle/fonts/macos/Kohinoor.ttc and /dev/null differ
diff --git a/bundle/fonts/macos/KohinoorBangla.ttc b/bundle/fonts/macos/KohinoorBangla.ttc
deleted file mode 100644
index c3d17bbb4..000000000
Binary files a/bundle/fonts/macos/KohinoorBangla.ttc and /dev/null differ
diff --git a/bundle/fonts/macos/KohinoorGujarati.ttc b/bundle/fonts/macos/KohinoorGujarati.ttc
deleted file mode 100644
index 911de9fd9..000000000
Binary files a/bundle/fonts/macos/KohinoorGujarati.ttc and /dev/null differ
diff --git a/bundle/fonts/macos/KohinoorTelugu.ttc b/bundle/fonts/macos/KohinoorTelugu.ttc
deleted file mode 100644
index 1973b51a0..000000000
Binary files a/bundle/fonts/macos/KohinoorTelugu.ttc and /dev/null differ
diff --git a/bundle/fonts/macos/LastResort.otf b/bundle/fonts/macos/LastResort.otf
deleted file mode 100644
index d99d550ac..000000000
Binary files a/bundle/fonts/macos/LastResort.otf and /dev/null differ
diff --git a/bundle/fonts/macos/LucidaGrande.ttc b/bundle/fonts/macos/LucidaGrande.ttc
deleted file mode 100644
index 693f79a28..000000000
Binary files a/bundle/fonts/macos/LucidaGrande.ttc and /dev/null differ
diff --git a/bundle/fonts/macos/MarkerFelt.ttc b/bundle/fonts/macos/MarkerFelt.ttc
deleted file mode 100644
index de6a9f058..000000000
Binary files a/bundle/fonts/macos/MarkerFelt.ttc and /dev/null differ
diff --git a/bundle/fonts/macos/Menlo.ttc b/bundle/fonts/macos/Menlo.ttc
deleted file mode 100644
index 1f7a3ee27..000000000
Binary files a/bundle/fonts/macos/Menlo.ttc and /dev/null differ
diff --git a/bundle/fonts/macos/Monaco.ttf b/bundle/fonts/macos/Monaco.ttf
deleted file mode 100644
index d9a500cf9..000000000
Binary files a/bundle/fonts/macos/Monaco.ttf and /dev/null differ
diff --git a/bundle/fonts/macos/MuktaMahee.ttc b/bundle/fonts/macos/MuktaMahee.ttc
deleted file mode 100644
index 7496b9542..000000000
Binary files a/bundle/fonts/macos/MuktaMahee.ttc and /dev/null differ
diff --git a/bundle/fonts/macos/NewYork.ttf b/bundle/fonts/macos/NewYork.ttf
deleted file mode 100644
index 8df9780d6..000000000
Binary files a/bundle/fonts/macos/NewYork.ttf and /dev/null differ
diff --git a/bundle/fonts/macos/NewYorkItalic.ttf b/bundle/fonts/macos/NewYorkItalic.ttf
deleted file mode 100644
index 2645098c1..000000000
Binary files a/bundle/fonts/macos/NewYorkItalic.ttf and /dev/null differ
diff --git a/bundle/fonts/macos/Noteworthy.ttc b/bundle/fonts/macos/Noteworthy.ttc
deleted file mode 100644
index 1c3ada8ec..000000000
Binary files a/bundle/fonts/macos/Noteworthy.ttc and /dev/null differ
diff --git a/bundle/fonts/macos/NotoNastaliq.ttc b/bundle/fonts/macos/NotoNastaliq.ttc
deleted file mode 100644
index 12b7993a7..000000000
Binary files a/bundle/fonts/macos/NotoNastaliq.ttc and /dev/null differ
diff --git a/bundle/fonts/macos/NotoSansArmenian.ttc b/bundle/fonts/macos/NotoSansArmenian.ttc
deleted file mode 100644
index 982c693eb..000000000
Binary files a/bundle/fonts/macos/NotoSansArmenian.ttc and /dev/null differ
diff --git a/bundle/fonts/macos/NotoSansKannada.ttc b/bundle/fonts/macos/NotoSansKannada.ttc
deleted file mode 100644
index b9f813f06..000000000
Binary files a/bundle/fonts/macos/NotoSansKannada.ttc and /dev/null differ
diff --git a/bundle/fonts/macos/NotoSansMyanmar.ttc b/bundle/fonts/macos/NotoSansMyanmar.ttc
deleted file mode 100644
index f4e487a6b..000000000
Binary files a/bundle/fonts/macos/NotoSansMyanmar.ttc and /dev/null differ
diff --git a/bundle/fonts/macos/NotoSansOriya.ttc b/bundle/fonts/macos/NotoSansOriya.ttc
deleted file mode 100644
index ede23893a..000000000
Binary files a/bundle/fonts/macos/NotoSansOriya.ttc and /dev/null differ
diff --git a/bundle/fonts/macos/NotoSerifMyanmar.ttc b/bundle/fonts/macos/NotoSerifMyanmar.ttc
deleted file mode 100644
index 772d58a5d..000000000
Binary files a/bundle/fonts/macos/NotoSerifMyanmar.ttc and /dev/null differ
diff --git a/bundle/fonts/macos/Optima.ttc b/bundle/fonts/macos/Optima.ttc
deleted file mode 100644
index e45acd7e8..000000000
Binary files a/bundle/fonts/macos/Optima.ttc and /dev/null differ
diff --git a/bundle/fonts/macos/Palatino.ttc b/bundle/fonts/macos/Palatino.ttc
deleted file mode 100644
index f8f59f5a2..000000000
Binary files a/bundle/fonts/macos/Palatino.ttc and /dev/null differ
diff --git a/bundle/fonts/macos/PingFang.ttc b/bundle/fonts/macos/PingFang.ttc
deleted file mode 100644
index 0e56d9106..000000000
Binary files a/bundle/fonts/macos/PingFang.ttc and /dev/null differ
diff --git a/bundle/fonts/macos/SFArabic.ttf b/bundle/fonts/macos/SFArabic.ttf
deleted file mode 100644
index 98dc093f2..000000000
Binary files a/bundle/fonts/macos/SFArabic.ttf and /dev/null differ
diff --git a/bundle/fonts/macos/SFArabicRounded.ttf b/bundle/fonts/macos/SFArabicRounded.ttf
deleted file mode 100644
index c3adea068..000000000
Binary files a/bundle/fonts/macos/SFArabicRounded.ttf and /dev/null differ
diff --git a/bundle/fonts/macos/SFCompact.ttf b/bundle/fonts/macos/SFCompact.ttf
deleted file mode 100644
index 88382f74d..000000000
Binary files a/bundle/fonts/macos/SFCompact.ttf and /dev/null differ
diff --git a/bundle/fonts/macos/SFCompactItalic.ttf b/bundle/fonts/macos/SFCompactItalic.ttf
deleted file mode 100644
index cb646ad53..000000000
Binary files a/bundle/fonts/macos/SFCompactItalic.ttf and /dev/null differ
diff --git a/bundle/fonts/macos/SFCompactRounded.ttf b/bundle/fonts/macos/SFCompactRounded.ttf
deleted file mode 100644
index 68f553be5..000000000
Binary files a/bundle/fonts/macos/SFCompactRounded.ttf and /dev/null differ
diff --git a/bundle/fonts/macos/SFNS.ttf b/bundle/fonts/macos/SFNS.ttf
deleted file mode 100644
index c570346c3..000000000
Binary files a/bundle/fonts/macos/SFNS.ttf and /dev/null differ
diff --git a/bundle/fonts/macos/SFNSItalic.ttf b/bundle/fonts/macos/SFNSItalic.ttf
deleted file mode 100644
index 2461808fd..000000000
Binary files a/bundle/fonts/macos/SFNSItalic.ttf and /dev/null differ
diff --git a/bundle/fonts/macos/SFNSMono.ttf b/bundle/fonts/macos/SFNSMono.ttf
deleted file mode 100644
index b35d2e19c..000000000
Binary files a/bundle/fonts/macos/SFNSMono.ttf and /dev/null differ
diff --git a/bundle/fonts/macos/SFNSMonoItalic.ttf b/bundle/fonts/macos/SFNSMonoItalic.ttf
deleted file mode 100644
index 41ee30e3e..000000000
Binary files a/bundle/fonts/macos/SFNSMonoItalic.ttf and /dev/null differ
diff --git a/bundle/fonts/macos/SFNSRounded.ttf b/bundle/fonts/macos/SFNSRounded.ttf
deleted file mode 100644
index b1b296840..000000000
Binary files a/bundle/fonts/macos/SFNSRounded.ttf and /dev/null differ
diff --git a/bundle/fonts/macos/STHeiti Light.ttc b/bundle/fonts/macos/STHeiti Light.ttc
deleted file mode 100644
index e53030774..000000000
Binary files a/bundle/fonts/macos/STHeiti Light.ttc and /dev/null differ
diff --git a/bundle/fonts/macos/STHeiti Medium.ttc b/bundle/fonts/macos/STHeiti Medium.ttc
deleted file mode 100644
index 24df0826c..000000000
Binary files a/bundle/fonts/macos/STHeiti Medium.ttc and /dev/null differ
diff --git a/bundle/fonts/macos/Supplemental/Academy Engraved LET Fonts.ttf b/bundle/fonts/macos/Supplemental/Academy Engraved LET Fonts.ttf
deleted file mode 100644
index 5dd4d3cc8..000000000
Binary files a/bundle/fonts/macos/Supplemental/Academy Engraved LET Fonts.ttf and /dev/null differ
diff --git a/bundle/fonts/macos/Supplemental/Al Nile.ttc b/bundle/fonts/macos/Supplemental/Al Nile.ttc
deleted file mode 100644
index 6dca9ddc0..000000000
Binary files a/bundle/fonts/macos/Supplemental/Al Nile.ttc and /dev/null differ
diff --git a/bundle/fonts/macos/Supplemental/Al Tarikh.ttc b/bundle/fonts/macos/Supplemental/Al Tarikh.ttc
deleted file mode 100644
index 710b5abb7..000000000
Binary files a/bundle/fonts/macos/Supplemental/Al Tarikh.ttc and /dev/null differ
diff --git a/bundle/fonts/macos/Supplemental/AlBayan.ttc b/bundle/fonts/macos/Supplemental/AlBayan.ttc
deleted file mode 100644
index 3d2bf363b..000000000
Binary files a/bundle/fonts/macos/Supplemental/AlBayan.ttc and /dev/null differ
diff --git a/bundle/fonts/macos/Supplemental/AmericanTypewriter.ttc b/bundle/fonts/macos/Supplemental/AmericanTypewriter.ttc
deleted file mode 100644
index 6b70d6088..000000000
Binary files a/bundle/fonts/macos/Supplemental/AmericanTypewriter.ttc and /dev/null differ
diff --git a/bundle/fonts/macos/Supplemental/Andale Mono.ttf b/bundle/fonts/macos/Supplemental/Andale Mono.ttf
deleted file mode 100644
index e766a6e18..000000000
Binary files a/bundle/fonts/macos/Supplemental/Andale Mono.ttf and /dev/null differ
diff --git a/bundle/fonts/macos/Supplemental/Apple Chancery.ttf b/bundle/fonts/macos/Supplemental/Apple Chancery.ttf
deleted file mode 100644
index 8d85f7fa4..000000000
Binary files a/bundle/fonts/macos/Supplemental/Apple Chancery.ttf and /dev/null differ
diff --git a/bundle/fonts/macos/Supplemental/AppleGothic.ttf b/bundle/fonts/macos/Supplemental/AppleGothic.ttf
deleted file mode 100644
index 76a585c92..000000000
Binary files a/bundle/fonts/macos/Supplemental/AppleGothic.ttf and /dev/null differ
diff --git a/bundle/fonts/macos/Supplemental/AppleMyungjo.ttf b/bundle/fonts/macos/Supplemental/AppleMyungjo.ttf
deleted file mode 100644
index 75e629bd1..000000000
Binary files a/bundle/fonts/macos/Supplemental/AppleMyungjo.ttf and /dev/null differ
diff --git a/bundle/fonts/macos/Supplemental/Arial Black.ttf b/bundle/fonts/macos/Supplemental/Arial Black.ttf
deleted file mode 100644
index 88772774d..000000000
Binary files a/bundle/fonts/macos/Supplemental/Arial Black.ttf and /dev/null differ
diff --git a/bundle/fonts/macos/Supplemental/Arial Bold Italic.ttf b/bundle/fonts/macos/Supplemental/Arial Bold Italic.ttf
deleted file mode 100644
index 52fd17700..000000000
Binary files a/bundle/fonts/macos/Supplemental/Arial Bold Italic.ttf and /dev/null differ
diff --git a/bundle/fonts/macos/Supplemental/Arial Bold.ttf b/bundle/fonts/macos/Supplemental/Arial Bold.ttf
deleted file mode 100644
index 940e255d0..000000000
Binary files a/bundle/fonts/macos/Supplemental/Arial Bold.ttf and /dev/null differ
diff --git a/bundle/fonts/macos/Supplemental/Arial Italic.ttf b/bundle/fonts/macos/Supplemental/Arial Italic.ttf
deleted file mode 100644
index eac8b3545..000000000
Binary files a/bundle/fonts/macos/Supplemental/Arial Italic.ttf and /dev/null differ
diff --git a/bundle/fonts/macos/Supplemental/Arial Narrow Bold Italic.ttf b/bundle/fonts/macos/Supplemental/Arial Narrow Bold Italic.ttf
deleted file mode 100644
index 8ed85ae76..000000000
Binary files a/bundle/fonts/macos/Supplemental/Arial Narrow Bold Italic.ttf and /dev/null differ
diff --git a/bundle/fonts/macos/Supplemental/Arial Narrow Bold.ttf b/bundle/fonts/macos/Supplemental/Arial Narrow Bold.ttf
deleted file mode 100644
index 88e1d4334..000000000
Binary files a/bundle/fonts/macos/Supplemental/Arial Narrow Bold.ttf and /dev/null differ
diff --git a/bundle/fonts/macos/Supplemental/Arial Narrow Italic.ttf b/bundle/fonts/macos/Supplemental/Arial Narrow Italic.ttf
deleted file mode 100644
index fc78fe7cc..000000000
Binary files a/bundle/fonts/macos/Supplemental/Arial Narrow Italic.ttf and /dev/null differ
diff --git a/bundle/fonts/macos/Supplemental/Arial Narrow.ttf b/bundle/fonts/macos/Supplemental/Arial Narrow.ttf
deleted file mode 100644
index 9d92f4f54..000000000
Binary files a/bundle/fonts/macos/Supplemental/Arial Narrow.ttf and /dev/null differ
diff --git a/bundle/fonts/macos/Supplemental/Arial Rounded Bold.ttf b/bundle/fonts/macos/Supplemental/Arial Rounded Bold.ttf
deleted file mode 100644
index fb8ad5b4b..000000000
Binary files a/bundle/fonts/macos/Supplemental/Arial Rounded Bold.ttf and /dev/null differ
diff --git a/bundle/fonts/macos/Supplemental/Arial Unicode.ttf b/bundle/fonts/macos/Supplemental/Arial Unicode.ttf
deleted file mode 100644
index 1537c5b8c..000000000
Binary files a/bundle/fonts/macos/Supplemental/Arial Unicode.ttf and /dev/null differ
diff --git a/bundle/fonts/macos/Supplemental/Arial.ttf b/bundle/fonts/macos/Supplemental/Arial.ttf
deleted file mode 100644
index ab68fb197..000000000
Binary files a/bundle/fonts/macos/Supplemental/Arial.ttf and /dev/null differ
diff --git a/bundle/fonts/macos/Supplemental/Athelas.ttc b/bundle/fonts/macos/Supplemental/Athelas.ttc
deleted file mode 100644
index 76793a216..000000000
Binary files a/bundle/fonts/macos/Supplemental/Athelas.ttc and /dev/null differ
diff --git a/bundle/fonts/macos/Supplemental/Ayuthaya.ttf b/bundle/fonts/macos/Supplemental/Ayuthaya.ttf
deleted file mode 100644
index cdf1d8411..000000000
Binary files a/bundle/fonts/macos/Supplemental/Ayuthaya.ttf and /dev/null differ
diff --git a/bundle/fonts/macos/Supplemental/Baghdad.ttc b/bundle/fonts/macos/Supplemental/Baghdad.ttc
deleted file mode 100644
index 006fcc9dc..000000000
Binary files a/bundle/fonts/macos/Supplemental/Baghdad.ttc and /dev/null differ
diff --git a/bundle/fonts/macos/Supplemental/Bangla MN.ttc b/bundle/fonts/macos/Supplemental/Bangla MN.ttc
deleted file mode 100644
index 24a449682..000000000
Binary files a/bundle/fonts/macos/Supplemental/Bangla MN.ttc and /dev/null differ
diff --git a/bundle/fonts/macos/Supplemental/Bangla Sangam MN.ttc b/bundle/fonts/macos/Supplemental/Bangla Sangam MN.ttc
deleted file mode 100644
index e456176f1..000000000
Binary files a/bundle/fonts/macos/Supplemental/Bangla Sangam MN.ttc and /dev/null differ
diff --git a/bundle/fonts/macos/Supplemental/Baskerville.ttc b/bundle/fonts/macos/Supplemental/Baskerville.ttc
deleted file mode 100644
index de73a9aaa..000000000
Binary files a/bundle/fonts/macos/Supplemental/Baskerville.ttc and /dev/null differ
diff --git a/bundle/fonts/macos/Supplemental/Beirut.ttc b/bundle/fonts/macos/Supplemental/Beirut.ttc
deleted file mode 100644
index 64039b627..000000000
Binary files a/bundle/fonts/macos/Supplemental/Beirut.ttc and /dev/null differ
diff --git a/bundle/fonts/macos/Supplemental/BigCaslon.ttf b/bundle/fonts/macos/Supplemental/BigCaslon.ttf
deleted file mode 100644
index db4331bf5..000000000
Binary files a/bundle/fonts/macos/Supplemental/BigCaslon.ttf and /dev/null differ
diff --git a/bundle/fonts/macos/Supplemental/Bodoni 72 OS.ttc b/bundle/fonts/macos/Supplemental/Bodoni 72 OS.ttc
deleted file mode 100644
index 5b8f9cd09..000000000
Binary files a/bundle/fonts/macos/Supplemental/Bodoni 72 OS.ttc and /dev/null differ
diff --git a/bundle/fonts/macos/Supplemental/Bodoni 72 Smallcaps Book.ttf b/bundle/fonts/macos/Supplemental/Bodoni 72 Smallcaps Book.ttf
deleted file mode 100644
index a5657e914..000000000
Binary files a/bundle/fonts/macos/Supplemental/Bodoni 72 Smallcaps Book.ttf and /dev/null differ
diff --git a/bundle/fonts/macos/Supplemental/Bodoni 72.ttc b/bundle/fonts/macos/Supplemental/Bodoni 72.ttc
deleted file mode 100644
index fb601e74a..000000000
Binary files a/bundle/fonts/macos/Supplemental/Bodoni 72.ttc and /dev/null differ
diff --git a/bundle/fonts/macos/Supplemental/Bodoni Ornaments.ttf b/bundle/fonts/macos/Supplemental/Bodoni Ornaments.ttf
deleted file mode 100644
index 27ffa289b..000000000
Binary files a/bundle/fonts/macos/Supplemental/Bodoni Ornaments.ttf and /dev/null differ
diff --git a/bundle/fonts/macos/Supplemental/Bradley Hand Bold.ttf b/bundle/fonts/macos/Supplemental/Bradley Hand Bold.ttf
deleted file mode 100644
index 67f87cca6..000000000
Binary files a/bundle/fonts/macos/Supplemental/Bradley Hand Bold.ttf and /dev/null differ
diff --git a/bundle/fonts/macos/Supplemental/Brush Script.ttf b/bundle/fonts/macos/Supplemental/Brush Script.ttf
deleted file mode 100644
index 9f7bd8cc5..000000000
Binary files a/bundle/fonts/macos/Supplemental/Brush Script.ttf and /dev/null differ
diff --git a/bundle/fonts/macos/Supplemental/ChakraPetch-Bold.ttf b/bundle/fonts/macos/Supplemental/ChakraPetch-Bold.ttf
deleted file mode 100644
index 7b63c6beb..000000000
Binary files a/bundle/fonts/macos/Supplemental/ChakraPetch-Bold.ttf and /dev/null differ
diff --git a/bundle/fonts/macos/Supplemental/ChakraPetch-Italic.ttf b/bundle/fonts/macos/Supplemental/ChakraPetch-Italic.ttf
deleted file mode 100644
index dfd35bad3..000000000
Binary files a/bundle/fonts/macos/Supplemental/ChakraPetch-Italic.ttf and /dev/null differ
diff --git a/bundle/fonts/macos/Supplemental/ChakraPetch-Light.ttf b/bundle/fonts/macos/Supplemental/ChakraPetch-Light.ttf
deleted file mode 100644
index ac3be4141..000000000
Binary files a/bundle/fonts/macos/Supplemental/ChakraPetch-Light.ttf and /dev/null differ
diff --git a/bundle/fonts/macos/Supplemental/ChakraPetch-Medium.ttf b/bundle/fonts/macos/Supplemental/ChakraPetch-Medium.ttf
deleted file mode 100644
index 05ded64d0..000000000
Binary files a/bundle/fonts/macos/Supplemental/ChakraPetch-Medium.ttf and /dev/null differ
diff --git a/bundle/fonts/macos/Supplemental/ChakraPetch-Regular.ttf b/bundle/fonts/macos/Supplemental/ChakraPetch-Regular.ttf
deleted file mode 100644
index 245df022c..000000000
Binary files a/bundle/fonts/macos/Supplemental/ChakraPetch-Regular.ttf and /dev/null differ
diff --git a/bundle/fonts/macos/Supplemental/ChakraPetch-SemiBold.ttf b/bundle/fonts/macos/Supplemental/ChakraPetch-SemiBold.ttf
deleted file mode 100644
index 20181b5ac..000000000
Binary files a/bundle/fonts/macos/Supplemental/ChakraPetch-SemiBold.ttf and /dev/null differ
diff --git a/bundle/fonts/macos/Supplemental/Chalkboard.ttc b/bundle/fonts/macos/Supplemental/Chalkboard.ttc
deleted file mode 100644
index c1cdd1272..000000000
Binary files a/bundle/fonts/macos/Supplemental/Chalkboard.ttc and /dev/null differ
diff --git a/bundle/fonts/macos/Supplemental/ChalkboardSE.ttc b/bundle/fonts/macos/Supplemental/ChalkboardSE.ttc
deleted file mode 100644
index bb937a697..000000000
Binary files a/bundle/fonts/macos/Supplemental/ChalkboardSE.ttc and /dev/null differ
diff --git a/bundle/fonts/macos/Supplemental/Chalkduster.ttf b/bundle/fonts/macos/Supplemental/Chalkduster.ttf
deleted file mode 100644
index dcfaea943..000000000
Binary files a/bundle/fonts/macos/Supplemental/Chalkduster.ttf and /dev/null differ
diff --git a/bundle/fonts/macos/Supplemental/Charter.ttc b/bundle/fonts/macos/Supplemental/Charter.ttc
deleted file mode 100644
index f735a0801..000000000
Binary files a/bundle/fonts/macos/Supplemental/Charter.ttc and /dev/null differ
diff --git a/bundle/fonts/macos/Supplemental/Cochin.ttc b/bundle/fonts/macos/Supplemental/Cochin.ttc
deleted file mode 100644
index 0a8fe100f..000000000
Binary files a/bundle/fonts/macos/Supplemental/Cochin.ttc and /dev/null differ
diff --git a/bundle/fonts/macos/Supplemental/Comic Sans MS Bold.ttf b/bundle/fonts/macos/Supplemental/Comic Sans MS Bold.ttf
deleted file mode 100644
index e68979ca3..000000000
Binary files a/bundle/fonts/macos/Supplemental/Comic Sans MS Bold.ttf and /dev/null differ
diff --git a/bundle/fonts/macos/Supplemental/Comic Sans MS.ttf b/bundle/fonts/macos/Supplemental/Comic Sans MS.ttf
deleted file mode 100644
index 831e3d867..000000000
Binary files a/bundle/fonts/macos/Supplemental/Comic Sans MS.ttf and /dev/null differ
diff --git a/bundle/fonts/macos/Supplemental/Copperplate.ttc b/bundle/fonts/macos/Supplemental/Copperplate.ttc
deleted file mode 100644
index 66afb04c4..000000000
Binary files a/bundle/fonts/macos/Supplemental/Copperplate.ttc and /dev/null differ
diff --git a/bundle/fonts/macos/Supplemental/Corsiva.ttc b/bundle/fonts/macos/Supplemental/Corsiva.ttc
deleted file mode 100644
index 176240ee5..000000000
Binary files a/bundle/fonts/macos/Supplemental/Corsiva.ttc and /dev/null differ
diff --git a/bundle/fonts/macos/Supplemental/Courier New Bold Italic.ttf b/bundle/fonts/macos/Supplemental/Courier New Bold Italic.ttf
deleted file mode 100644
index b8dcd6c73..000000000
Binary files a/bundle/fonts/macos/Supplemental/Courier New Bold Italic.ttf and /dev/null differ
diff --git a/bundle/fonts/macos/Supplemental/Courier New Bold.ttf b/bundle/fonts/macos/Supplemental/Courier New Bold.ttf
deleted file mode 100644
index 894c4550c..000000000
Binary files a/bundle/fonts/macos/Supplemental/Courier New Bold.ttf and /dev/null differ
diff --git a/bundle/fonts/macos/Supplemental/Courier New Italic.ttf b/bundle/fonts/macos/Supplemental/Courier New Italic.ttf
deleted file mode 100644
index 326d62260..000000000
Binary files a/bundle/fonts/macos/Supplemental/Courier New Italic.ttf and /dev/null differ
diff --git a/bundle/fonts/macos/Supplemental/Courier New.ttf b/bundle/fonts/macos/Supplemental/Courier New.ttf
deleted file mode 100644
index 633899d82..000000000
Binary files a/bundle/fonts/macos/Supplemental/Courier New.ttf and /dev/null differ
diff --git a/bundle/fonts/macos/Supplemental/DIN Alternate Bold.ttf b/bundle/fonts/macos/Supplemental/DIN Alternate Bold.ttf
deleted file mode 100644
index 81f2f7a84..000000000
Binary files a/bundle/fonts/macos/Supplemental/DIN Alternate Bold.ttf and /dev/null differ
diff --git a/bundle/fonts/macos/Supplemental/DIN Condensed Bold.ttf b/bundle/fonts/macos/Supplemental/DIN Condensed Bold.ttf
deleted file mode 100644
index a3f1ba913..000000000
Binary files a/bundle/fonts/macos/Supplemental/DIN Condensed Bold.ttf and /dev/null differ
diff --git a/bundle/fonts/macos/Supplemental/Damascus.ttc b/bundle/fonts/macos/Supplemental/Damascus.ttc
deleted file mode 100644
index 16b8865c8..000000000
Binary files a/bundle/fonts/macos/Supplemental/Damascus.ttc and /dev/null differ
diff --git a/bundle/fonts/macos/Supplemental/DecoTypeNaskh.ttc b/bundle/fonts/macos/Supplemental/DecoTypeNaskh.ttc
deleted file mode 100644
index 52a9f9556..000000000
Binary files a/bundle/fonts/macos/Supplemental/DecoTypeNaskh.ttc and /dev/null differ
diff --git a/bundle/fonts/macos/Supplemental/Devanagari Sangam MN.ttc b/bundle/fonts/macos/Supplemental/Devanagari Sangam MN.ttc
deleted file mode 100644
index 1879f7bf6..000000000
Binary files a/bundle/fonts/macos/Supplemental/Devanagari Sangam MN.ttc and /dev/null differ
diff --git a/bundle/fonts/macos/Supplemental/DevanagariMT.ttc b/bundle/fonts/macos/Supplemental/DevanagariMT.ttc
deleted file mode 100644
index 9b56c7eed..000000000
Binary files a/bundle/fonts/macos/Supplemental/DevanagariMT.ttc and /dev/null differ
diff --git a/bundle/fonts/macos/Supplemental/Didot.ttc b/bundle/fonts/macos/Supplemental/Didot.ttc
deleted file mode 100644
index e3688e97c..000000000
Binary files a/bundle/fonts/macos/Supplemental/Didot.ttc and /dev/null differ
diff --git a/bundle/fonts/macos/Supplemental/Diwan Kufi.ttc b/bundle/fonts/macos/Supplemental/Diwan Kufi.ttc
deleted file mode 100644
index cf587b8b2..000000000
Binary files a/bundle/fonts/macos/Supplemental/Diwan Kufi.ttc and /dev/null differ
diff --git a/bundle/fonts/macos/Supplemental/Diwan Thuluth.ttf b/bundle/fonts/macos/Supplemental/Diwan Thuluth.ttf
deleted file mode 100644
index 683d1772c..000000000
Binary files a/bundle/fonts/macos/Supplemental/Diwan Thuluth.ttf and /dev/null differ
diff --git a/bundle/fonts/macos/Supplemental/EuphemiaCAS.ttc b/bundle/fonts/macos/Supplemental/EuphemiaCAS.ttc
deleted file mode 100644
index 0d043d7d0..000000000
Binary files a/bundle/fonts/macos/Supplemental/EuphemiaCAS.ttc and /dev/null differ
diff --git a/bundle/fonts/macos/Supplemental/Farah.ttc b/bundle/fonts/macos/Supplemental/Farah.ttc
deleted file mode 100644
index d4ffcbe57..000000000
Binary files a/bundle/fonts/macos/Supplemental/Farah.ttc and /dev/null differ
diff --git a/bundle/fonts/macos/Supplemental/Farisi.ttf b/bundle/fonts/macos/Supplemental/Farisi.ttf
deleted file mode 100644
index 99b815fe8..000000000
Binary files a/bundle/fonts/macos/Supplemental/Farisi.ttf and /dev/null differ
diff --git a/bundle/fonts/macos/Supplemental/Futura.ttc b/bundle/fonts/macos/Supplemental/Futura.ttc
deleted file mode 100644
index 909ea0977..000000000
Binary files a/bundle/fonts/macos/Supplemental/Futura.ttc and /dev/null differ
diff --git a/bundle/fonts/macos/Supplemental/Galvji.ttc b/bundle/fonts/macos/Supplemental/Galvji.ttc
deleted file mode 100644
index 44179dfee..000000000
Binary files a/bundle/fonts/macos/Supplemental/Galvji.ttc and /dev/null differ
diff --git a/bundle/fonts/macos/Supplemental/Georgia Bold Italic.ttf b/bundle/fonts/macos/Supplemental/Georgia Bold Italic.ttf
deleted file mode 100644
index e027d68b8..000000000
Binary files a/bundle/fonts/macos/Supplemental/Georgia Bold Italic.ttf and /dev/null differ
diff --git a/bundle/fonts/macos/Supplemental/Georgia Bold.ttf b/bundle/fonts/macos/Supplemental/Georgia Bold.ttf
deleted file mode 100644
index f5862638a..000000000
Binary files a/bundle/fonts/macos/Supplemental/Georgia Bold.ttf and /dev/null differ
diff --git a/bundle/fonts/macos/Supplemental/Georgia Italic.ttf b/bundle/fonts/macos/Supplemental/Georgia Italic.ttf
deleted file mode 100644
index 9f49b8392..000000000
Binary files a/bundle/fonts/macos/Supplemental/Georgia Italic.ttf and /dev/null differ
diff --git a/bundle/fonts/macos/Supplemental/Georgia.ttf b/bundle/fonts/macos/Supplemental/Georgia.ttf
deleted file mode 100644
index d15700612..000000000
Binary files a/bundle/fonts/macos/Supplemental/Georgia.ttf and /dev/null differ
diff --git a/bundle/fonts/macos/Supplemental/GillSans.ttc b/bundle/fonts/macos/Supplemental/GillSans.ttc
deleted file mode 100644
index bc45edece..000000000
Binary files a/bundle/fonts/macos/Supplemental/GillSans.ttc and /dev/null differ
diff --git a/bundle/fonts/macos/Supplemental/Gujarati Sangam MN.ttc b/bundle/fonts/macos/Supplemental/Gujarati Sangam MN.ttc
deleted file mode 100644
index d3b9c6b2d..000000000
Binary files a/bundle/fonts/macos/Supplemental/Gujarati Sangam MN.ttc and /dev/null differ
diff --git a/bundle/fonts/macos/Supplemental/GujaratiMT.ttc b/bundle/fonts/macos/Supplemental/GujaratiMT.ttc
deleted file mode 100644
index 273635baa..000000000
Binary files a/bundle/fonts/macos/Supplemental/GujaratiMT.ttc and /dev/null differ
diff --git a/bundle/fonts/macos/Supplemental/Gurmukhi MN.ttc b/bundle/fonts/macos/Supplemental/Gurmukhi MN.ttc
deleted file mode 100644
index 6ee311c07..000000000
Binary files a/bundle/fonts/macos/Supplemental/Gurmukhi MN.ttc and /dev/null differ
diff --git a/bundle/fonts/macos/Supplemental/Gurmukhi Sangam MN.ttc b/bundle/fonts/macos/Supplemental/Gurmukhi Sangam MN.ttc
deleted file mode 100644
index ce6efc4fd..000000000
Binary files a/bundle/fonts/macos/Supplemental/Gurmukhi Sangam MN.ttc and /dev/null differ
diff --git a/bundle/fonts/macos/Supplemental/Gurmukhi.ttf b/bundle/fonts/macos/Supplemental/Gurmukhi.ttf
deleted file mode 100644
index f939dc7d9..000000000
Binary files a/bundle/fonts/macos/Supplemental/Gurmukhi.ttf and /dev/null differ
diff --git a/bundle/fonts/macos/Supplemental/Herculanum.ttf b/bundle/fonts/macos/Supplemental/Herculanum.ttf
deleted file mode 100644
index f86e7dda7..000000000
Binary files a/bundle/fonts/macos/Supplemental/Herculanum.ttf and /dev/null differ
diff --git a/bundle/fonts/macos/Supplemental/Hoefler Text Ornaments.ttf b/bundle/fonts/macos/Supplemental/Hoefler Text Ornaments.ttf
deleted file mode 100644
index eac2ed4be..000000000
Binary files a/bundle/fonts/macos/Supplemental/Hoefler Text Ornaments.ttf and /dev/null differ
diff --git a/bundle/fonts/macos/Supplemental/Hoefler Text.ttc b/bundle/fonts/macos/Supplemental/Hoefler Text.ttc
deleted file mode 100644
index 728f57585..000000000
Binary files a/bundle/fonts/macos/Supplemental/Hoefler Text.ttc and /dev/null differ
diff --git a/bundle/fonts/macos/Supplemental/ITFDevanagari.ttc b/bundle/fonts/macos/Supplemental/ITFDevanagari.ttc
deleted file mode 100644
index 6e97be297..000000000
Binary files a/bundle/fonts/macos/Supplemental/ITFDevanagari.ttc and /dev/null differ
diff --git a/bundle/fonts/macos/Supplemental/Impact.ttf b/bundle/fonts/macos/Supplemental/Impact.ttf
deleted file mode 100644
index 7b7956fd5..000000000
Binary files a/bundle/fonts/macos/Supplemental/Impact.ttf and /dev/null differ
diff --git a/bundle/fonts/macos/Supplemental/InaiMathi-MN.ttc b/bundle/fonts/macos/Supplemental/InaiMathi-MN.ttc
deleted file mode 100644
index 7785fdf9b..000000000
Binary files a/bundle/fonts/macos/Supplemental/InaiMathi-MN.ttc and /dev/null differ
diff --git a/bundle/fonts/macos/Supplemental/Iowan Old Style.ttc b/bundle/fonts/macos/Supplemental/Iowan Old Style.ttc
deleted file mode 100644
index 6ced581fe..000000000
Binary files a/bundle/fonts/macos/Supplemental/Iowan Old Style.ttc and /dev/null differ
diff --git a/bundle/fonts/macos/Supplemental/Kailasa.ttc b/bundle/fonts/macos/Supplemental/Kailasa.ttc
deleted file mode 100644
index 1a1e0eea7..000000000
Binary files a/bundle/fonts/macos/Supplemental/Kailasa.ttc and /dev/null differ
diff --git a/bundle/fonts/macos/Supplemental/Kannada MN.ttc b/bundle/fonts/macos/Supplemental/Kannada MN.ttc
deleted file mode 100644
index 06315cee4..000000000
Binary files a/bundle/fonts/macos/Supplemental/Kannada MN.ttc and /dev/null differ
diff --git a/bundle/fonts/macos/Supplemental/Kannada Sangam MN.ttc b/bundle/fonts/macos/Supplemental/Kannada Sangam MN.ttc
deleted file mode 100644
index 9c045f88a..000000000
Binary files a/bundle/fonts/macos/Supplemental/Kannada Sangam MN.ttc and /dev/null differ
diff --git a/bundle/fonts/macos/Supplemental/Kefa.ttc b/bundle/fonts/macos/Supplemental/Kefa.ttc
deleted file mode 100644
index c30273988..000000000
Binary files a/bundle/fonts/macos/Supplemental/Kefa.ttc and /dev/null differ
diff --git a/bundle/fonts/macos/Supplemental/Khmer MN.ttc b/bundle/fonts/macos/Supplemental/Khmer MN.ttc
deleted file mode 100644
index 55fa042ca..000000000
Binary files a/bundle/fonts/macos/Supplemental/Khmer MN.ttc and /dev/null differ
diff --git a/bundle/fonts/macos/Supplemental/Khmer Sangam MN.ttf b/bundle/fonts/macos/Supplemental/Khmer Sangam MN.ttf
deleted file mode 100644
index f511a6074..000000000
Binary files a/bundle/fonts/macos/Supplemental/Khmer Sangam MN.ttf and /dev/null differ
diff --git a/bundle/fonts/macos/Supplemental/Kokonor.ttf b/bundle/fonts/macos/Supplemental/Kokonor.ttf
deleted file mode 100644
index 4dfdf98f4..000000000
Binary files a/bundle/fonts/macos/Supplemental/Kokonor.ttf and /dev/null differ
diff --git a/bundle/fonts/macos/Supplemental/Krungthep.ttf b/bundle/fonts/macos/Supplemental/Krungthep.ttf
deleted file mode 100644
index 9415853ce..000000000
Binary files a/bundle/fonts/macos/Supplemental/Krungthep.ttf and /dev/null differ
diff --git a/bundle/fonts/macos/Supplemental/KufiStandardGK.ttc b/bundle/fonts/macos/Supplemental/KufiStandardGK.ttc
deleted file mode 100644
index 506535683..000000000
Binary files a/bundle/fonts/macos/Supplemental/KufiStandardGK.ttc and /dev/null differ
diff --git a/bundle/fonts/macos/Supplemental/Lao MN.ttc b/bundle/fonts/macos/Supplemental/Lao MN.ttc
deleted file mode 100644
index 1a8fb4ccd..000000000
Binary files a/bundle/fonts/macos/Supplemental/Lao MN.ttc and /dev/null differ
diff --git a/bundle/fonts/macos/Supplemental/Lao Sangam MN.ttf b/bundle/fonts/macos/Supplemental/Lao Sangam MN.ttf
deleted file mode 100644
index d15abddd4..000000000
Binary files a/bundle/fonts/macos/Supplemental/Lao Sangam MN.ttf and /dev/null differ
diff --git a/bundle/fonts/macos/Supplemental/Luminari.ttf b/bundle/fonts/macos/Supplemental/Luminari.ttf
deleted file mode 100644
index 61657980a..000000000
Binary files a/bundle/fonts/macos/Supplemental/Luminari.ttf and /dev/null differ
diff --git a/bundle/fonts/macos/Supplemental/Malayalam MN.ttc b/bundle/fonts/macos/Supplemental/Malayalam MN.ttc
deleted file mode 100644
index 02b611127..000000000
Binary files a/bundle/fonts/macos/Supplemental/Malayalam MN.ttc and /dev/null differ
diff --git a/bundle/fonts/macos/Supplemental/Malayalam Sangam MN.ttc b/bundle/fonts/macos/Supplemental/Malayalam Sangam MN.ttc
deleted file mode 100644
index dd90e6996..000000000
Binary files a/bundle/fonts/macos/Supplemental/Malayalam Sangam MN.ttc and /dev/null differ
diff --git a/bundle/fonts/macos/Supplemental/Marion.ttc b/bundle/fonts/macos/Supplemental/Marion.ttc
deleted file mode 100644
index 817b04876..000000000
Binary files a/bundle/fonts/macos/Supplemental/Marion.ttc and /dev/null differ
diff --git a/bundle/fonts/macos/Supplemental/Microsoft Sans Serif.ttf b/bundle/fonts/macos/Supplemental/Microsoft Sans Serif.ttf
deleted file mode 100644
index 8cb1d92f0..000000000
Binary files a/bundle/fonts/macos/Supplemental/Microsoft Sans Serif.ttf and /dev/null differ
diff --git a/bundle/fonts/macos/Supplemental/Mishafi Gold.ttf b/bundle/fonts/macos/Supplemental/Mishafi Gold.ttf
deleted file mode 100644
index af572e600..000000000
Binary files a/bundle/fonts/macos/Supplemental/Mishafi Gold.ttf and /dev/null differ
diff --git a/bundle/fonts/macos/Supplemental/Mishafi.ttf b/bundle/fonts/macos/Supplemental/Mishafi.ttf
deleted file mode 100644
index 0385fdf02..000000000
Binary files a/bundle/fonts/macos/Supplemental/Mishafi.ttf and /dev/null differ
diff --git a/bundle/fonts/macos/Supplemental/Mshtakan.ttc b/bundle/fonts/macos/Supplemental/Mshtakan.ttc
deleted file mode 100644
index 3a663a9d0..000000000
Binary files a/bundle/fonts/macos/Supplemental/Mshtakan.ttc and /dev/null differ
diff --git a/bundle/fonts/macos/Supplemental/Muna.ttc b/bundle/fonts/macos/Supplemental/Muna.ttc
deleted file mode 100644
index ac849608a..000000000
Binary files a/bundle/fonts/macos/Supplemental/Muna.ttc and /dev/null differ
diff --git a/bundle/fonts/macos/Supplemental/Myanmar MN.ttc b/bundle/fonts/macos/Supplemental/Myanmar MN.ttc
deleted file mode 100644
index baf4fc25d..000000000
Binary files a/bundle/fonts/macos/Supplemental/Myanmar MN.ttc and /dev/null differ
diff --git a/bundle/fonts/macos/Supplemental/Myanmar Sangam MN.ttc b/bundle/fonts/macos/Supplemental/Myanmar Sangam MN.ttc
deleted file mode 100644
index 107f12342..000000000
Binary files a/bundle/fonts/macos/Supplemental/Myanmar Sangam MN.ttc and /dev/null differ
diff --git a/bundle/fonts/macos/Supplemental/NISC18030.ttf b/bundle/fonts/macos/Supplemental/NISC18030.ttf
deleted file mode 100644
index 59d997cb9..000000000
Binary files a/bundle/fonts/macos/Supplemental/NISC18030.ttf and /dev/null differ
diff --git a/bundle/fonts/macos/Supplemental/Nadeem.ttc b/bundle/fonts/macos/Supplemental/Nadeem.ttc
deleted file mode 100644
index 507a6ec93..000000000
Binary files a/bundle/fonts/macos/Supplemental/Nadeem.ttc and /dev/null differ
diff --git a/bundle/fonts/macos/Supplemental/NewPeninimMT.ttc b/bundle/fonts/macos/Supplemental/NewPeninimMT.ttc
deleted file mode 100644
index c5467b66b..000000000
Binary files a/bundle/fonts/macos/Supplemental/NewPeninimMT.ttc and /dev/null differ
diff --git a/bundle/fonts/macos/Supplemental/NotoSansAdlam-Regular.ttf b/bundle/fonts/macos/Supplemental/NotoSansAdlam-Regular.ttf
deleted file mode 100644
index d6b29e5c1..000000000
Binary files a/bundle/fonts/macos/Supplemental/NotoSansAdlam-Regular.ttf and /dev/null differ
diff --git a/bundle/fonts/macos/Supplemental/NotoSansAvestan-Regular.ttf b/bundle/fonts/macos/Supplemental/NotoSansAvestan-Regular.ttf
deleted file mode 100644
index e35868854..000000000
Binary files a/bundle/fonts/macos/Supplemental/NotoSansAvestan-Regular.ttf and /dev/null differ
diff --git a/bundle/fonts/macos/Supplemental/NotoSansBamum-Regular.ttf b/bundle/fonts/macos/Supplemental/NotoSansBamum-Regular.ttf
deleted file mode 100644
index f58fdd3f9..000000000
Binary files a/bundle/fonts/macos/Supplemental/NotoSansBamum-Regular.ttf and /dev/null differ
diff --git a/bundle/fonts/macos/Supplemental/NotoSansBassaVah-Regular.ttf b/bundle/fonts/macos/Supplemental/NotoSansBassaVah-Regular.ttf
deleted file mode 100644
index 76cc458ff..000000000
Binary files a/bundle/fonts/macos/Supplemental/NotoSansBassaVah-Regular.ttf and /dev/null differ
diff --git a/bundle/fonts/macos/Supplemental/NotoSansBatak-Regular.ttf b/bundle/fonts/macos/Supplemental/NotoSansBatak-Regular.ttf
deleted file mode 100644
index e76559751..000000000
Binary files a/bundle/fonts/macos/Supplemental/NotoSansBatak-Regular.ttf and /dev/null differ
diff --git a/bundle/fonts/macos/Supplemental/NotoSansBhaiksuki-Regular.ttf b/bundle/fonts/macos/Supplemental/NotoSansBhaiksuki-Regular.ttf
deleted file mode 100644
index 732df26d7..000000000
Binary files a/bundle/fonts/macos/Supplemental/NotoSansBhaiksuki-Regular.ttf and /dev/null differ
diff --git a/bundle/fonts/macos/Supplemental/NotoSansBrahmi-Regular.ttf b/bundle/fonts/macos/Supplemental/NotoSansBrahmi-Regular.ttf
deleted file mode 100644
index f62918a0b..000000000
Binary files a/bundle/fonts/macos/Supplemental/NotoSansBrahmi-Regular.ttf and /dev/null differ
diff --git a/bundle/fonts/macos/Supplemental/NotoSansBuginese-Regular.ttf b/bundle/fonts/macos/Supplemental/NotoSansBuginese-Regular.ttf
deleted file mode 100644
index fd10862b4..000000000
Binary files a/bundle/fonts/macos/Supplemental/NotoSansBuginese-Regular.ttf and /dev/null differ
diff --git a/bundle/fonts/macos/Supplemental/NotoSansBuhid-Regular.ttf b/bundle/fonts/macos/Supplemental/NotoSansBuhid-Regular.ttf
deleted file mode 100644
index 551c14070..000000000
Binary files a/bundle/fonts/macos/Supplemental/NotoSansBuhid-Regular.ttf and /dev/null differ
diff --git a/bundle/fonts/macos/Supplemental/NotoSansCanadianAboriginal-Regular.otf b/bundle/fonts/macos/Supplemental/NotoSansCanadianAboriginal-Regular.otf
deleted file mode 100644
index acf26835b..000000000
Binary files a/bundle/fonts/macos/Supplemental/NotoSansCanadianAboriginal-Regular.otf and /dev/null differ
diff --git a/bundle/fonts/macos/Supplemental/NotoSansCarian-Regular.ttf b/bundle/fonts/macos/Supplemental/NotoSansCarian-Regular.ttf
deleted file mode 100644
index 387ab92ff..000000000
Binary files a/bundle/fonts/macos/Supplemental/NotoSansCarian-Regular.ttf and /dev/null differ
diff --git a/bundle/fonts/macos/Supplemental/NotoSansCaucasianAlbanian-Regular.ttf b/bundle/fonts/macos/Supplemental/NotoSansCaucasianAlbanian-Regular.ttf
deleted file mode 100644
index 666075248..000000000
Binary files a/bundle/fonts/macos/Supplemental/NotoSansCaucasianAlbanian-Regular.ttf and /dev/null differ
diff --git a/bundle/fonts/macos/Supplemental/NotoSansChakma-Regular.ttf b/bundle/fonts/macos/Supplemental/NotoSansChakma-Regular.ttf
deleted file mode 100644
index 510db06b8..000000000
Binary files a/bundle/fonts/macos/Supplemental/NotoSansChakma-Regular.ttf and /dev/null differ
diff --git a/bundle/fonts/macos/Supplemental/NotoSansCham-Regular.ttf b/bundle/fonts/macos/Supplemental/NotoSansCham-Regular.ttf
deleted file mode 100644
index d49374d9b..000000000
Binary files a/bundle/fonts/macos/Supplemental/NotoSansCham-Regular.ttf and /dev/null differ
diff --git a/bundle/fonts/macos/Supplemental/NotoSansCoptic-Regular.ttf b/bundle/fonts/macos/Supplemental/NotoSansCoptic-Regular.ttf
deleted file mode 100644
index 0bfae4beb..000000000
Binary files a/bundle/fonts/macos/Supplemental/NotoSansCoptic-Regular.ttf and /dev/null differ
diff --git a/bundle/fonts/macos/Supplemental/NotoSansCuneiform-Regular.ttf b/bundle/fonts/macos/Supplemental/NotoSansCuneiform-Regular.ttf
deleted file mode 100644
index 4050e66c2..000000000
Binary files a/bundle/fonts/macos/Supplemental/NotoSansCuneiform-Regular.ttf and /dev/null differ
diff --git a/bundle/fonts/macos/Supplemental/NotoSansCypriot-Regular.ttf b/bundle/fonts/macos/Supplemental/NotoSansCypriot-Regular.ttf
deleted file mode 100644
index ed3109318..000000000
Binary files a/bundle/fonts/macos/Supplemental/NotoSansCypriot-Regular.ttf and /dev/null differ
diff --git a/bundle/fonts/macos/Supplemental/NotoSansDuployan-Regular.ttf b/bundle/fonts/macos/Supplemental/NotoSansDuployan-Regular.ttf
deleted file mode 100644
index b652d414c..000000000
Binary files a/bundle/fonts/macos/Supplemental/NotoSansDuployan-Regular.ttf and /dev/null differ
diff --git a/bundle/fonts/macos/Supplemental/NotoSansEgyptianHieroglyphs-Regular.ttf b/bundle/fonts/macos/Supplemental/NotoSansEgyptianHieroglyphs-Regular.ttf
deleted file mode 100644
index 2ab86a6c7..000000000
Binary files a/bundle/fonts/macos/Supplemental/NotoSansEgyptianHieroglyphs-Regular.ttf and /dev/null differ
diff --git a/bundle/fonts/macos/Supplemental/NotoSansElbasan-Regular.ttf b/bundle/fonts/macos/Supplemental/NotoSansElbasan-Regular.ttf
deleted file mode 100644
index c6a5779e8..000000000
Binary files a/bundle/fonts/macos/Supplemental/NotoSansElbasan-Regular.ttf and /dev/null differ
diff --git a/bundle/fonts/macos/Supplemental/NotoSansGlagolitic-Regular.ttf b/bundle/fonts/macos/Supplemental/NotoSansGlagolitic-Regular.ttf
deleted file mode 100644
index 6c4dd75c9..000000000
Binary files a/bundle/fonts/macos/Supplemental/NotoSansGlagolitic-Regular.ttf and /dev/null differ
diff --git a/bundle/fonts/macos/Supplemental/NotoSansGothic-Regular.ttf b/bundle/fonts/macos/Supplemental/NotoSansGothic-Regular.ttf
deleted file mode 100644
index a9df7741f..000000000
Binary files a/bundle/fonts/macos/Supplemental/NotoSansGothic-Regular.ttf and /dev/null differ
diff --git a/bundle/fonts/macos/Supplemental/NotoSansGunjalaGondi-Regular.otf b/bundle/fonts/macos/Supplemental/NotoSansGunjalaGondi-Regular.otf
deleted file mode 100644
index 8ca0c4fee..000000000
Binary files a/bundle/fonts/macos/Supplemental/NotoSansGunjalaGondi-Regular.otf and /dev/null differ
diff --git a/bundle/fonts/macos/Supplemental/NotoSansHanifiRohingya-Regular.ttf b/bundle/fonts/macos/Supplemental/NotoSansHanifiRohingya-Regular.ttf
deleted file mode 100644
index bba3274ab..000000000
Binary files a/bundle/fonts/macos/Supplemental/NotoSansHanifiRohingya-Regular.ttf and /dev/null differ
diff --git a/bundle/fonts/macos/Supplemental/NotoSansHanunoo-Regular.ttf b/bundle/fonts/macos/Supplemental/NotoSansHanunoo-Regular.ttf
deleted file mode 100644
index 784cdc2bb..000000000
Binary files a/bundle/fonts/macos/Supplemental/NotoSansHanunoo-Regular.ttf and /dev/null differ
diff --git a/bundle/fonts/macos/Supplemental/NotoSansHatran-Regular.ttf b/bundle/fonts/macos/Supplemental/NotoSansHatran-Regular.ttf
deleted file mode 100644
index 904d521a5..000000000
Binary files a/bundle/fonts/macos/Supplemental/NotoSansHatran-Regular.ttf and /dev/null differ
diff --git a/bundle/fonts/macos/Supplemental/NotoSansImperialAramaic-Regular.ttf b/bundle/fonts/macos/Supplemental/NotoSansImperialAramaic-Regular.ttf
deleted file mode 100644
index 05502ba53..000000000
Binary files a/bundle/fonts/macos/Supplemental/NotoSansImperialAramaic-Regular.ttf and /dev/null differ
diff --git a/bundle/fonts/macos/Supplemental/NotoSansInscriptionalPahlavi-Regular.ttf b/bundle/fonts/macos/Supplemental/NotoSansInscriptionalPahlavi-Regular.ttf
deleted file mode 100644
index 082b5949f..000000000
Binary files a/bundle/fonts/macos/Supplemental/NotoSansInscriptionalPahlavi-Regular.ttf and /dev/null differ
diff --git a/bundle/fonts/macos/Supplemental/NotoSansInscriptionalParthian-Regular.ttf b/bundle/fonts/macos/Supplemental/NotoSansInscriptionalParthian-Regular.ttf
deleted file mode 100644
index e06e3324a..000000000
Binary files a/bundle/fonts/macos/Supplemental/NotoSansInscriptionalParthian-Regular.ttf and /dev/null differ
diff --git a/bundle/fonts/macos/Supplemental/NotoSansJavanese-Regular.otf b/bundle/fonts/macos/Supplemental/NotoSansJavanese-Regular.otf
deleted file mode 100644
index 28a730414..000000000
Binary files a/bundle/fonts/macos/Supplemental/NotoSansJavanese-Regular.otf and /dev/null differ
diff --git a/bundle/fonts/macos/Supplemental/NotoSansKaithi-Regular.ttf b/bundle/fonts/macos/Supplemental/NotoSansKaithi-Regular.ttf
deleted file mode 100644
index 6dc5ecaf0..000000000
Binary files a/bundle/fonts/macos/Supplemental/NotoSansKaithi-Regular.ttf and /dev/null differ
diff --git a/bundle/fonts/macos/Supplemental/NotoSansKayahLi-Regular.ttf b/bundle/fonts/macos/Supplemental/NotoSansKayahLi-Regular.ttf
deleted file mode 100644
index 9d3ef825b..000000000
Binary files a/bundle/fonts/macos/Supplemental/NotoSansKayahLi-Regular.ttf and /dev/null differ
diff --git a/bundle/fonts/macos/Supplemental/NotoSansKharoshthi-Regular.ttf b/bundle/fonts/macos/Supplemental/NotoSansKharoshthi-Regular.ttf
deleted file mode 100644
index 8189aba48..000000000
Binary files a/bundle/fonts/macos/Supplemental/NotoSansKharoshthi-Regular.ttf and /dev/null differ
diff --git a/bundle/fonts/macos/Supplemental/NotoSansKhojki-Regular.ttf b/bundle/fonts/macos/Supplemental/NotoSansKhojki-Regular.ttf
deleted file mode 100644
index 485232624..000000000
Binary files a/bundle/fonts/macos/Supplemental/NotoSansKhojki-Regular.ttf and /dev/null differ
diff --git a/bundle/fonts/macos/Supplemental/NotoSansKhudawadi-Regular.ttf b/bundle/fonts/macos/Supplemental/NotoSansKhudawadi-Regular.ttf
deleted file mode 100644
index 86afb2d73..000000000
Binary files a/bundle/fonts/macos/Supplemental/NotoSansKhudawadi-Regular.ttf and /dev/null differ
diff --git a/bundle/fonts/macos/Supplemental/NotoSansLepcha-Regular.ttf b/bundle/fonts/macos/Supplemental/NotoSansLepcha-Regular.ttf
deleted file mode 100644
index 81507d963..000000000
Binary files a/bundle/fonts/macos/Supplemental/NotoSansLepcha-Regular.ttf and /dev/null differ
diff --git a/bundle/fonts/macos/Supplemental/NotoSansLimbu-Regular.ttf b/bundle/fonts/macos/Supplemental/NotoSansLimbu-Regular.ttf
deleted file mode 100644
index 2efb2f5a0..000000000
Binary files a/bundle/fonts/macos/Supplemental/NotoSansLimbu-Regular.ttf and /dev/null differ
diff --git a/bundle/fonts/macos/Supplemental/NotoSansLinearA-Regular.ttf b/bundle/fonts/macos/Supplemental/NotoSansLinearA-Regular.ttf
deleted file mode 100644
index f79630913..000000000
Binary files a/bundle/fonts/macos/Supplemental/NotoSansLinearA-Regular.ttf and /dev/null differ
diff --git a/bundle/fonts/macos/Supplemental/NotoSansLinearB-Regular.ttf b/bundle/fonts/macos/Supplemental/NotoSansLinearB-Regular.ttf
deleted file mode 100644
index 00b3f08be..000000000
Binary files a/bundle/fonts/macos/Supplemental/NotoSansLinearB-Regular.ttf and /dev/null differ
diff --git a/bundle/fonts/macos/Supplemental/NotoSansLisu-Regular.ttf b/bundle/fonts/macos/Supplemental/NotoSansLisu-Regular.ttf
deleted file mode 100644
index 7ff088c04..000000000
Binary files a/bundle/fonts/macos/Supplemental/NotoSansLisu-Regular.ttf and /dev/null differ
diff --git a/bundle/fonts/macos/Supplemental/NotoSansLycian-Regular.ttf b/bundle/fonts/macos/Supplemental/NotoSansLycian-Regular.ttf
deleted file mode 100644
index 8eb8cc679..000000000
Binary files a/bundle/fonts/macos/Supplemental/NotoSansLycian-Regular.ttf and /dev/null differ
diff --git a/bundle/fonts/macos/Supplemental/NotoSansLydian-Regular.ttf b/bundle/fonts/macos/Supplemental/NotoSansLydian-Regular.ttf
deleted file mode 100644
index 63d1eb2fc..000000000
Binary files a/bundle/fonts/macos/Supplemental/NotoSansLydian-Regular.ttf and /dev/null differ
diff --git a/bundle/fonts/macos/Supplemental/NotoSansMahajani-Regular.ttf b/bundle/fonts/macos/Supplemental/NotoSansMahajani-Regular.ttf
deleted file mode 100644
index 2258d23b1..000000000
Binary files a/bundle/fonts/macos/Supplemental/NotoSansMahajani-Regular.ttf and /dev/null differ
diff --git a/bundle/fonts/macos/Supplemental/NotoSansMandaic-Regular.ttf b/bundle/fonts/macos/Supplemental/NotoSansMandaic-Regular.ttf
deleted file mode 100644
index cf45c9d6a..000000000
Binary files a/bundle/fonts/macos/Supplemental/NotoSansMandaic-Regular.ttf and /dev/null differ
diff --git a/bundle/fonts/macos/Supplemental/NotoSansManichaean-Regular.ttf b/bundle/fonts/macos/Supplemental/NotoSansManichaean-Regular.ttf
deleted file mode 100644
index 7a4a23f24..000000000
Binary files a/bundle/fonts/macos/Supplemental/NotoSansManichaean-Regular.ttf and /dev/null differ
diff --git a/bundle/fonts/macos/Supplemental/NotoSansMarchen-Regular.ttf b/bundle/fonts/macos/Supplemental/NotoSansMarchen-Regular.ttf
deleted file mode 100644
index 0b5d37cb9..000000000
Binary files a/bundle/fonts/macos/Supplemental/NotoSansMarchen-Regular.ttf and /dev/null differ
diff --git a/bundle/fonts/macos/Supplemental/NotoSansMasaramGondi-Regular.otf b/bundle/fonts/macos/Supplemental/NotoSansMasaramGondi-Regular.otf
deleted file mode 100644
index e73cf1398..000000000
Binary files a/bundle/fonts/macos/Supplemental/NotoSansMasaramGondi-Regular.otf and /dev/null differ
diff --git a/bundle/fonts/macos/Supplemental/NotoSansMeeteiMayek-Regular.ttf b/bundle/fonts/macos/Supplemental/NotoSansMeeteiMayek-Regular.ttf
deleted file mode 100644
index 43ff17e68..000000000
Binary files a/bundle/fonts/macos/Supplemental/NotoSansMeeteiMayek-Regular.ttf and /dev/null differ
diff --git a/bundle/fonts/macos/Supplemental/NotoSansMendeKikakui-Regular.ttf b/bundle/fonts/macos/Supplemental/NotoSansMendeKikakui-Regular.ttf
deleted file mode 100644
index 48ff3a25c..000000000
Binary files a/bundle/fonts/macos/Supplemental/NotoSansMendeKikakui-Regular.ttf and /dev/null differ
diff --git a/bundle/fonts/macos/Supplemental/NotoSansMeroitic-Regular.ttf b/bundle/fonts/macos/Supplemental/NotoSansMeroitic-Regular.ttf
deleted file mode 100644
index f71c1a42a..000000000
Binary files a/bundle/fonts/macos/Supplemental/NotoSansMeroitic-Regular.ttf and /dev/null differ
diff --git a/bundle/fonts/macos/Supplemental/NotoSansMiao-Regular.ttf b/bundle/fonts/macos/Supplemental/NotoSansMiao-Regular.ttf
deleted file mode 100644
index d01f01c1e..000000000
Binary files a/bundle/fonts/macos/Supplemental/NotoSansMiao-Regular.ttf and /dev/null differ
diff --git a/bundle/fonts/macos/Supplemental/NotoSansModi-Regular.ttf b/bundle/fonts/macos/Supplemental/NotoSansModi-Regular.ttf
deleted file mode 100644
index 73a1119d4..000000000
Binary files a/bundle/fonts/macos/Supplemental/NotoSansModi-Regular.ttf and /dev/null differ
diff --git a/bundle/fonts/macos/Supplemental/NotoSansMongolian-Regular.ttf b/bundle/fonts/macos/Supplemental/NotoSansMongolian-Regular.ttf
deleted file mode 100644
index 29fbdadef..000000000
Binary files a/bundle/fonts/macos/Supplemental/NotoSansMongolian-Regular.ttf and /dev/null differ
diff --git a/bundle/fonts/macos/Supplemental/NotoSansMro-Regular.ttf b/bundle/fonts/macos/Supplemental/NotoSansMro-Regular.ttf
deleted file mode 100644
index c6506837c..000000000
Binary files a/bundle/fonts/macos/Supplemental/NotoSansMro-Regular.ttf and /dev/null differ
diff --git a/bundle/fonts/macos/Supplemental/NotoSansMultani-Regular.ttf b/bundle/fonts/macos/Supplemental/NotoSansMultani-Regular.ttf
deleted file mode 100644
index bf465e0e6..000000000
Binary files a/bundle/fonts/macos/Supplemental/NotoSansMultani-Regular.ttf and /dev/null differ
diff --git a/bundle/fonts/macos/Supplemental/NotoSansNKo-Regular.ttf b/bundle/fonts/macos/Supplemental/NotoSansNKo-Regular.ttf
deleted file mode 100644
index 10bc9b5de..000000000
Binary files a/bundle/fonts/macos/Supplemental/NotoSansNKo-Regular.ttf and /dev/null differ
diff --git a/bundle/fonts/macos/Supplemental/NotoSansNabataean-Regular.ttf b/bundle/fonts/macos/Supplemental/NotoSansNabataean-Regular.ttf
deleted file mode 100644
index 19a5e572a..000000000
Binary files a/bundle/fonts/macos/Supplemental/NotoSansNabataean-Regular.ttf and /dev/null differ
diff --git a/bundle/fonts/macos/Supplemental/NotoSansNewTaiLue-Regular.ttf b/bundle/fonts/macos/Supplemental/NotoSansNewTaiLue-Regular.ttf
deleted file mode 100644
index 26ccdf482..000000000
Binary files a/bundle/fonts/macos/Supplemental/NotoSansNewTaiLue-Regular.ttf and /dev/null differ
diff --git a/bundle/fonts/macos/Supplemental/NotoSansNewa-Regular.ttf b/bundle/fonts/macos/Supplemental/NotoSansNewa-Regular.ttf
deleted file mode 100644
index 664a709db..000000000
Binary files a/bundle/fonts/macos/Supplemental/NotoSansNewa-Regular.ttf and /dev/null differ
diff --git a/bundle/fonts/macos/Supplemental/NotoSansOlChiki-Regular.ttf b/bundle/fonts/macos/Supplemental/NotoSansOlChiki-Regular.ttf
deleted file mode 100644
index 15b73837f..000000000
Binary files a/bundle/fonts/macos/Supplemental/NotoSansOlChiki-Regular.ttf and /dev/null differ
diff --git a/bundle/fonts/macos/Supplemental/NotoSansOldHungarian-Regular.ttf b/bundle/fonts/macos/Supplemental/NotoSansOldHungarian-Regular.ttf
deleted file mode 100644
index e784d556a..000000000
Binary files a/bundle/fonts/macos/Supplemental/NotoSansOldHungarian-Regular.ttf and /dev/null differ
diff --git a/bundle/fonts/macos/Supplemental/NotoSansOldItalic-Regular.ttf b/bundle/fonts/macos/Supplemental/NotoSansOldItalic-Regular.ttf
deleted file mode 100644
index f0b157371..000000000
Binary files a/bundle/fonts/macos/Supplemental/NotoSansOldItalic-Regular.ttf and /dev/null differ
diff --git a/bundle/fonts/macos/Supplemental/NotoSansOldNorthArabian-Regular.ttf b/bundle/fonts/macos/Supplemental/NotoSansOldNorthArabian-Regular.ttf
deleted file mode 100644
index bd13908b9..000000000
Binary files a/bundle/fonts/macos/Supplemental/NotoSansOldNorthArabian-Regular.ttf and /dev/null differ
diff --git a/bundle/fonts/macos/Supplemental/NotoSansOldPermic-Regular.ttf b/bundle/fonts/macos/Supplemental/NotoSansOldPermic-Regular.ttf
deleted file mode 100644
index cf689a1c1..000000000
Binary files a/bundle/fonts/macos/Supplemental/NotoSansOldPermic-Regular.ttf and /dev/null differ
diff --git a/bundle/fonts/macos/Supplemental/NotoSansOldPersian-Regular.ttf b/bundle/fonts/macos/Supplemental/NotoSansOldPersian-Regular.ttf
deleted file mode 100644
index 5cea0352d..000000000
Binary files a/bundle/fonts/macos/Supplemental/NotoSansOldPersian-Regular.ttf and /dev/null differ
diff --git a/bundle/fonts/macos/Supplemental/NotoSansOldSouthArabian-Regular.ttf b/bundle/fonts/macos/Supplemental/NotoSansOldSouthArabian-Regular.ttf
deleted file mode 100644
index 0cc6f3f72..000000000
Binary files a/bundle/fonts/macos/Supplemental/NotoSansOldSouthArabian-Regular.ttf and /dev/null differ
diff --git a/bundle/fonts/macos/Supplemental/NotoSansOldTurkic-Regular.ttf b/bundle/fonts/macos/Supplemental/NotoSansOldTurkic-Regular.ttf
deleted file mode 100644
index b6e9d395d..000000000
Binary files a/bundle/fonts/macos/Supplemental/NotoSansOldTurkic-Regular.ttf and /dev/null differ
diff --git a/bundle/fonts/macos/Supplemental/NotoSansOsage-Regular.ttf b/bundle/fonts/macos/Supplemental/NotoSansOsage-Regular.ttf
deleted file mode 100644
index 0e4117a00..000000000
Binary files a/bundle/fonts/macos/Supplemental/NotoSansOsage-Regular.ttf and /dev/null differ
diff --git a/bundle/fonts/macos/Supplemental/NotoSansOsmanya-Regular.ttf b/bundle/fonts/macos/Supplemental/NotoSansOsmanya-Regular.ttf
deleted file mode 100644
index b04eb4b2e..000000000
Binary files a/bundle/fonts/macos/Supplemental/NotoSansOsmanya-Regular.ttf and /dev/null differ
diff --git a/bundle/fonts/macos/Supplemental/NotoSansPahawhHmong-Regular.ttf b/bundle/fonts/macos/Supplemental/NotoSansPahawhHmong-Regular.ttf
deleted file mode 100644
index 6445e1d5d..000000000
Binary files a/bundle/fonts/macos/Supplemental/NotoSansPahawhHmong-Regular.ttf and /dev/null differ
diff --git a/bundle/fonts/macos/Supplemental/NotoSansPalmyrene-Regular.ttf b/bundle/fonts/macos/Supplemental/NotoSansPalmyrene-Regular.ttf
deleted file mode 100644
index 8479eaa0e..000000000
Binary files a/bundle/fonts/macos/Supplemental/NotoSansPalmyrene-Regular.ttf and /dev/null differ
diff --git a/bundle/fonts/macos/Supplemental/NotoSansPauCinHau-Regular.ttf b/bundle/fonts/macos/Supplemental/NotoSansPauCinHau-Regular.ttf
deleted file mode 100644
index fd1b9d486..000000000
Binary files a/bundle/fonts/macos/Supplemental/NotoSansPauCinHau-Regular.ttf and /dev/null differ
diff --git a/bundle/fonts/macos/Supplemental/NotoSansPhagsPa-Regular.ttf b/bundle/fonts/macos/Supplemental/NotoSansPhagsPa-Regular.ttf
deleted file mode 100644
index 9919d421f..000000000
Binary files a/bundle/fonts/macos/Supplemental/NotoSansPhagsPa-Regular.ttf and /dev/null differ
diff --git a/bundle/fonts/macos/Supplemental/NotoSansPhoenician-Regular.ttf b/bundle/fonts/macos/Supplemental/NotoSansPhoenician-Regular.ttf
deleted file mode 100644
index d7555ef73..000000000
Binary files a/bundle/fonts/macos/Supplemental/NotoSansPhoenician-Regular.ttf and /dev/null differ
diff --git a/bundle/fonts/macos/Supplemental/NotoSansPsalterPahlavi-Regular.ttf b/bundle/fonts/macos/Supplemental/NotoSansPsalterPahlavi-Regular.ttf
deleted file mode 100644
index 8704a6643..000000000
Binary files a/bundle/fonts/macos/Supplemental/NotoSansPsalterPahlavi-Regular.ttf and /dev/null differ
diff --git a/bundle/fonts/macos/Supplemental/NotoSansRejang-Regular.ttf b/bundle/fonts/macos/Supplemental/NotoSansRejang-Regular.ttf
deleted file mode 100644
index ab9a490c7..000000000
Binary files a/bundle/fonts/macos/Supplemental/NotoSansRejang-Regular.ttf and /dev/null differ
diff --git a/bundle/fonts/macos/Supplemental/NotoSansSamaritan-Regular.ttf b/bundle/fonts/macos/Supplemental/NotoSansSamaritan-Regular.ttf
deleted file mode 100644
index cc5c9f942..000000000
Binary files a/bundle/fonts/macos/Supplemental/NotoSansSamaritan-Regular.ttf and /dev/null differ
diff --git a/bundle/fonts/macos/Supplemental/NotoSansSaurashtra-Regular.ttf b/bundle/fonts/macos/Supplemental/NotoSansSaurashtra-Regular.ttf
deleted file mode 100644
index 8a49d0b1e..000000000
Binary files a/bundle/fonts/macos/Supplemental/NotoSansSaurashtra-Regular.ttf and /dev/null differ
diff --git a/bundle/fonts/macos/Supplemental/NotoSansSharada-Regular.ttf b/bundle/fonts/macos/Supplemental/NotoSansSharada-Regular.ttf
deleted file mode 100644
index 268ab3d48..000000000
Binary files a/bundle/fonts/macos/Supplemental/NotoSansSharada-Regular.ttf and /dev/null differ
diff --git a/bundle/fonts/macos/Supplemental/NotoSansSiddham-Regular.ttf b/bundle/fonts/macos/Supplemental/NotoSansSiddham-Regular.ttf
deleted file mode 100644
index 321c78c51..000000000
Binary files a/bundle/fonts/macos/Supplemental/NotoSansSiddham-Regular.ttf and /dev/null differ
diff --git a/bundle/fonts/macos/Supplemental/NotoSansSoraSompeng-Regular.ttf b/bundle/fonts/macos/Supplemental/NotoSansSoraSompeng-Regular.ttf
deleted file mode 100644
index 97415d07b..000000000
Binary files a/bundle/fonts/macos/Supplemental/NotoSansSoraSompeng-Regular.ttf and /dev/null differ
diff --git a/bundle/fonts/macos/Supplemental/NotoSansSundanese-Regular.ttf b/bundle/fonts/macos/Supplemental/NotoSansSundanese-Regular.ttf
deleted file mode 100644
index 53065e027..000000000
Binary files a/bundle/fonts/macos/Supplemental/NotoSansSundanese-Regular.ttf and /dev/null differ
diff --git a/bundle/fonts/macos/Supplemental/NotoSansSylotiNagri-Regular.ttf b/bundle/fonts/macos/Supplemental/NotoSansSylotiNagri-Regular.ttf
deleted file mode 100644
index fc1c247f9..000000000
Binary files a/bundle/fonts/macos/Supplemental/NotoSansSylotiNagri-Regular.ttf and /dev/null differ
diff --git a/bundle/fonts/macos/Supplemental/NotoSansSyriac-Regular.ttf b/bundle/fonts/macos/Supplemental/NotoSansSyriac-Regular.ttf
deleted file mode 100644
index 7865a95bc..000000000
Binary files a/bundle/fonts/macos/Supplemental/NotoSansSyriac-Regular.ttf and /dev/null differ
diff --git a/bundle/fonts/macos/Supplemental/NotoSansTagalog-Regular.ttf b/bundle/fonts/macos/Supplemental/NotoSansTagalog-Regular.ttf
deleted file mode 100644
index 9ed0fe00d..000000000
Binary files a/bundle/fonts/macos/Supplemental/NotoSansTagalog-Regular.ttf and /dev/null differ
diff --git a/bundle/fonts/macos/Supplemental/NotoSansTagbanwa-Regular.ttf b/bundle/fonts/macos/Supplemental/NotoSansTagbanwa-Regular.ttf
deleted file mode 100644
index 3b0b81a64..000000000
Binary files a/bundle/fonts/macos/Supplemental/NotoSansTagbanwa-Regular.ttf and /dev/null differ
diff --git a/bundle/fonts/macos/Supplemental/NotoSansTaiLe-Regular.ttf b/bundle/fonts/macos/Supplemental/NotoSansTaiLe-Regular.ttf
deleted file mode 100644
index 74f2fd299..000000000
Binary files a/bundle/fonts/macos/Supplemental/NotoSansTaiLe-Regular.ttf and /dev/null differ
diff --git a/bundle/fonts/macos/Supplemental/NotoSansTaiTham-Regular.ttf b/bundle/fonts/macos/Supplemental/NotoSansTaiTham-Regular.ttf
deleted file mode 100644
index f965b7cb5..000000000
Binary files a/bundle/fonts/macos/Supplemental/NotoSansTaiTham-Regular.ttf and /dev/null differ
diff --git a/bundle/fonts/macos/Supplemental/NotoSansTaiViet-Regular.ttf b/bundle/fonts/macos/Supplemental/NotoSansTaiViet-Regular.ttf
deleted file mode 100644
index 33720e1c5..000000000
Binary files a/bundle/fonts/macos/Supplemental/NotoSansTaiViet-Regular.ttf and /dev/null differ
diff --git a/bundle/fonts/macos/Supplemental/NotoSansTakri-Regular.ttf b/bundle/fonts/macos/Supplemental/NotoSansTakri-Regular.ttf
deleted file mode 100644
index 4ca9facbc..000000000
Binary files a/bundle/fonts/macos/Supplemental/NotoSansTakri-Regular.ttf and /dev/null differ
diff --git a/bundle/fonts/macos/Supplemental/NotoSansThaana-Regular.ttf b/bundle/fonts/macos/Supplemental/NotoSansThaana-Regular.ttf
deleted file mode 100644
index 13a3a5fd5..000000000
Binary files a/bundle/fonts/macos/Supplemental/NotoSansThaana-Regular.ttf and /dev/null differ
diff --git a/bundle/fonts/macos/Supplemental/NotoSansTifinagh-Regular.ttf b/bundle/fonts/macos/Supplemental/NotoSansTifinagh-Regular.ttf
deleted file mode 100644
index 45540c81e..000000000
Binary files a/bundle/fonts/macos/Supplemental/NotoSansTifinagh-Regular.ttf and /dev/null differ
diff --git a/bundle/fonts/macos/Supplemental/NotoSansTirhuta-Regular.ttf b/bundle/fonts/macos/Supplemental/NotoSansTirhuta-Regular.ttf
deleted file mode 100644
index a9b5dfc8a..000000000
Binary files a/bundle/fonts/macos/Supplemental/NotoSansTirhuta-Regular.ttf and /dev/null differ
diff --git a/bundle/fonts/macos/Supplemental/NotoSansUgaritic-Regular.ttf b/bundle/fonts/macos/Supplemental/NotoSansUgaritic-Regular.ttf
deleted file mode 100644
index ebdb0c6c2..000000000
Binary files a/bundle/fonts/macos/Supplemental/NotoSansUgaritic-Regular.ttf and /dev/null differ
diff --git a/bundle/fonts/macos/Supplemental/NotoSansVai-Regular.ttf b/bundle/fonts/macos/Supplemental/NotoSansVai-Regular.ttf
deleted file mode 100644
index f76ddd9ed..000000000
Binary files a/bundle/fonts/macos/Supplemental/NotoSansVai-Regular.ttf and /dev/null differ
diff --git a/bundle/fonts/macos/Supplemental/NotoSansWancho-Regular.ttf b/bundle/fonts/macos/Supplemental/NotoSansWancho-Regular.ttf
deleted file mode 100644
index 1e4c7e2ee..000000000
Binary files a/bundle/fonts/macos/Supplemental/NotoSansWancho-Regular.ttf and /dev/null differ
diff --git a/bundle/fonts/macos/Supplemental/NotoSansWarangCiti-Regular.ttf b/bundle/fonts/macos/Supplemental/NotoSansWarangCiti-Regular.ttf
deleted file mode 100644
index 03e8af148..000000000
Binary files a/bundle/fonts/macos/Supplemental/NotoSansWarangCiti-Regular.ttf and /dev/null differ
diff --git a/bundle/fonts/macos/Supplemental/NotoSansYi-Regular.ttf b/bundle/fonts/macos/Supplemental/NotoSansYi-Regular.ttf
deleted file mode 100644
index 08191f44a..000000000
Binary files a/bundle/fonts/macos/Supplemental/NotoSansYi-Regular.ttf and /dev/null differ
diff --git a/bundle/fonts/macos/Supplemental/NotoSerifAhom-Regular.ttf b/bundle/fonts/macos/Supplemental/NotoSerifAhom-Regular.ttf
deleted file mode 100644
index 2b3471346..000000000
Binary files a/bundle/fonts/macos/Supplemental/NotoSerifAhom-Regular.ttf and /dev/null differ
diff --git a/bundle/fonts/macos/Supplemental/NotoSerifBalinese-Regular.ttf b/bundle/fonts/macos/Supplemental/NotoSerifBalinese-Regular.ttf
deleted file mode 100644
index c69492261..000000000
Binary files a/bundle/fonts/macos/Supplemental/NotoSerifBalinese-Regular.ttf and /dev/null differ
diff --git a/bundle/fonts/macos/Supplemental/NotoSerifNyiakengPuachueHmong-Regular.ttf b/bundle/fonts/macos/Supplemental/NotoSerifNyiakengPuachueHmong-Regular.ttf
deleted file mode 100644
index 654d45e9b..000000000
Binary files a/bundle/fonts/macos/Supplemental/NotoSerifNyiakengPuachueHmong-Regular.ttf and /dev/null differ
diff --git a/bundle/fonts/macos/Supplemental/NotoSerifYezidi-Regular.otf b/bundle/fonts/macos/Supplemental/NotoSerifYezidi-Regular.otf
deleted file mode 100644
index ff9186ed9..000000000
Binary files a/bundle/fonts/macos/Supplemental/NotoSerifYezidi-Regular.otf and /dev/null differ
diff --git a/bundle/fonts/macos/Supplemental/Oriya MN.ttc b/bundle/fonts/macos/Supplemental/Oriya MN.ttc
deleted file mode 100644
index bab917d9e..000000000
Binary files a/bundle/fonts/macos/Supplemental/Oriya MN.ttc and /dev/null differ
diff --git a/bundle/fonts/macos/Supplemental/Oriya Sangam MN.ttc b/bundle/fonts/macos/Supplemental/Oriya Sangam MN.ttc
deleted file mode 100644
index 7c21b5511..000000000
Binary files a/bundle/fonts/macos/Supplemental/Oriya Sangam MN.ttc and /dev/null differ
diff --git a/bundle/fonts/macos/Supplemental/PTMono.ttc b/bundle/fonts/macos/Supplemental/PTMono.ttc
deleted file mode 100644
index e82e41f15..000000000
Binary files a/bundle/fonts/macos/Supplemental/PTMono.ttc and /dev/null differ
diff --git a/bundle/fonts/macos/Supplemental/PTSans.ttc b/bundle/fonts/macos/Supplemental/PTSans.ttc
deleted file mode 100644
index 57054b84f..000000000
Binary files a/bundle/fonts/macos/Supplemental/PTSans.ttc and /dev/null differ
diff --git a/bundle/fonts/macos/Supplemental/PTSerif.ttc b/bundle/fonts/macos/Supplemental/PTSerif.ttc
deleted file mode 100644
index f83689dca..000000000
Binary files a/bundle/fonts/macos/Supplemental/PTSerif.ttc and /dev/null differ
diff --git a/bundle/fonts/macos/Supplemental/PTSerifCaption.ttc b/bundle/fonts/macos/Supplemental/PTSerifCaption.ttc
deleted file mode 100644
index 07a2d57e4..000000000
Binary files a/bundle/fonts/macos/Supplemental/PTSerifCaption.ttc and /dev/null differ
diff --git a/bundle/fonts/macos/Supplemental/Papyrus.ttc b/bundle/fonts/macos/Supplemental/Papyrus.ttc
deleted file mode 100644
index cf4b6f517..000000000
Binary files a/bundle/fonts/macos/Supplemental/Papyrus.ttc and /dev/null differ
diff --git a/bundle/fonts/macos/Supplemental/PartyLET-plain.ttf b/bundle/fonts/macos/Supplemental/PartyLET-plain.ttf
deleted file mode 100644
index 8f038acb3..000000000
Binary files a/bundle/fonts/macos/Supplemental/PartyLET-plain.ttf and /dev/null differ
diff --git a/bundle/fonts/macos/Supplemental/Phosphate.ttc b/bundle/fonts/macos/Supplemental/Phosphate.ttc
deleted file mode 100644
index cbdd0b555..000000000
Binary files a/bundle/fonts/macos/Supplemental/Phosphate.ttc and /dev/null differ
diff --git a/bundle/fonts/macos/Supplemental/PlantagenetCherokee.ttf b/bundle/fonts/macos/Supplemental/PlantagenetCherokee.ttf
deleted file mode 100644
index 2af53b0db..000000000
Binary files a/bundle/fonts/macos/Supplemental/PlantagenetCherokee.ttf and /dev/null differ
diff --git a/bundle/fonts/macos/Supplemental/Raanana.ttc b/bundle/fonts/macos/Supplemental/Raanana.ttc
deleted file mode 100644
index 325192414..000000000
Binary files a/bundle/fonts/macos/Supplemental/Raanana.ttc and /dev/null differ
diff --git a/bundle/fonts/macos/Supplemental/Rockwell.ttc b/bundle/fonts/macos/Supplemental/Rockwell.ttc
deleted file mode 100644
index ae9638613..000000000
Binary files a/bundle/fonts/macos/Supplemental/Rockwell.ttc and /dev/null differ
diff --git a/bundle/fonts/macos/Supplemental/STIXGeneral.otf b/bundle/fonts/macos/Supplemental/STIXGeneral.otf
deleted file mode 100644
index ef6bc2798..000000000
Binary files a/bundle/fonts/macos/Supplemental/STIXGeneral.otf and /dev/null differ
diff --git a/bundle/fonts/macos/Supplemental/STIXGeneralBol.otf b/bundle/fonts/macos/Supplemental/STIXGeneralBol.otf
deleted file mode 100644
index 421db4bfa..000000000
Binary files a/bundle/fonts/macos/Supplemental/STIXGeneralBol.otf and /dev/null differ
diff --git a/bundle/fonts/macos/Supplemental/STIXGeneralBolIta.otf b/bundle/fonts/macos/Supplemental/STIXGeneralBolIta.otf
deleted file mode 100644
index 35cb79016..000000000
Binary files a/bundle/fonts/macos/Supplemental/STIXGeneralBolIta.otf and /dev/null differ
diff --git a/bundle/fonts/macos/Supplemental/STIXGeneralItalic.otf b/bundle/fonts/macos/Supplemental/STIXGeneralItalic.otf
deleted file mode 100644
index e67b25369..000000000
Binary files a/bundle/fonts/macos/Supplemental/STIXGeneralItalic.otf and /dev/null differ
diff --git a/bundle/fonts/macos/Supplemental/STIXIntDBol.otf b/bundle/fonts/macos/Supplemental/STIXIntDBol.otf
deleted file mode 100644
index aa81bcfaa..000000000
Binary files a/bundle/fonts/macos/Supplemental/STIXIntDBol.otf and /dev/null differ
diff --git a/bundle/fonts/macos/Supplemental/STIXIntDReg.otf b/bundle/fonts/macos/Supplemental/STIXIntDReg.otf
deleted file mode 100644
index d50a5c3a0..000000000
Binary files a/bundle/fonts/macos/Supplemental/STIXIntDReg.otf and /dev/null differ
diff --git a/bundle/fonts/macos/Supplemental/STIXIntSmBol.otf b/bundle/fonts/macos/Supplemental/STIXIntSmBol.otf
deleted file mode 100644
index cc411f7df..000000000
Binary files a/bundle/fonts/macos/Supplemental/STIXIntSmBol.otf and /dev/null differ
diff --git a/bundle/fonts/macos/Supplemental/STIXIntSmReg.otf b/bundle/fonts/macos/Supplemental/STIXIntSmReg.otf
deleted file mode 100644
index 1cc141294..000000000
Binary files a/bundle/fonts/macos/Supplemental/STIXIntSmReg.otf and /dev/null differ
diff --git a/bundle/fonts/macos/Supplemental/STIXIntUpBol.otf b/bundle/fonts/macos/Supplemental/STIXIntUpBol.otf
deleted file mode 100644
index 5e8d71fb1..000000000
Binary files a/bundle/fonts/macos/Supplemental/STIXIntUpBol.otf and /dev/null differ
diff --git a/bundle/fonts/macos/Supplemental/STIXIntUpDBol.otf b/bundle/fonts/macos/Supplemental/STIXIntUpDBol.otf
deleted file mode 100644
index b341f4fe1..000000000
Binary files a/bundle/fonts/macos/Supplemental/STIXIntUpDBol.otf and /dev/null differ
diff --git a/bundle/fonts/macos/Supplemental/STIXIntUpDReg.otf b/bundle/fonts/macos/Supplemental/STIXIntUpDReg.otf
deleted file mode 100644
index f310a0e50..000000000
Binary files a/bundle/fonts/macos/Supplemental/STIXIntUpDReg.otf and /dev/null differ
diff --git a/bundle/fonts/macos/Supplemental/STIXIntUpReg.otf b/bundle/fonts/macos/Supplemental/STIXIntUpReg.otf
deleted file mode 100644
index 2690501e2..000000000
Binary files a/bundle/fonts/macos/Supplemental/STIXIntUpReg.otf and /dev/null differ
diff --git a/bundle/fonts/macos/Supplemental/STIXIntUpSmBol.otf b/bundle/fonts/macos/Supplemental/STIXIntUpSmBol.otf
deleted file mode 100644
index 1128af0cd..000000000
Binary files a/bundle/fonts/macos/Supplemental/STIXIntUpSmBol.otf and /dev/null differ
diff --git a/bundle/fonts/macos/Supplemental/STIXIntUpSmReg.otf b/bundle/fonts/macos/Supplemental/STIXIntUpSmReg.otf
deleted file mode 100644
index a72cfb72f..000000000
Binary files a/bundle/fonts/macos/Supplemental/STIXIntUpSmReg.otf and /dev/null differ
diff --git a/bundle/fonts/macos/Supplemental/STIXNonUni.otf b/bundle/fonts/macos/Supplemental/STIXNonUni.otf
deleted file mode 100644
index 47e7eba68..000000000
Binary files a/bundle/fonts/macos/Supplemental/STIXNonUni.otf and /dev/null differ
diff --git a/bundle/fonts/macos/Supplemental/STIXNonUniBol.otf b/bundle/fonts/macos/Supplemental/STIXNonUniBol.otf
deleted file mode 100644
index 51814244c..000000000
Binary files a/bundle/fonts/macos/Supplemental/STIXNonUniBol.otf and /dev/null differ
diff --git a/bundle/fonts/macos/Supplemental/STIXNonUniBolIta.otf b/bundle/fonts/macos/Supplemental/STIXNonUniBolIta.otf
deleted file mode 100644
index b70572922..000000000
Binary files a/bundle/fonts/macos/Supplemental/STIXNonUniBolIta.otf and /dev/null differ
diff --git a/bundle/fonts/macos/Supplemental/STIXNonUniIta.otf b/bundle/fonts/macos/Supplemental/STIXNonUniIta.otf
deleted file mode 100644
index 971d1e2af..000000000
Binary files a/bundle/fonts/macos/Supplemental/STIXNonUniIta.otf and /dev/null differ
diff --git a/bundle/fonts/macos/Supplemental/STIXSizFiveSymReg.otf b/bundle/fonts/macos/Supplemental/STIXSizFiveSymReg.otf
deleted file mode 100644
index cf9e27394..000000000
Binary files a/bundle/fonts/macos/Supplemental/STIXSizFiveSymReg.otf and /dev/null differ
diff --git a/bundle/fonts/macos/Supplemental/STIXSizFourSymBol.otf b/bundle/fonts/macos/Supplemental/STIXSizFourSymBol.otf
deleted file mode 100644
index 69e5bcac3..000000000
Binary files a/bundle/fonts/macos/Supplemental/STIXSizFourSymBol.otf and /dev/null differ
diff --git a/bundle/fonts/macos/Supplemental/STIXSizFourSymReg.otf b/bundle/fonts/macos/Supplemental/STIXSizFourSymReg.otf
deleted file mode 100644
index 178712381..000000000
Binary files a/bundle/fonts/macos/Supplemental/STIXSizFourSymReg.otf and /dev/null differ
diff --git a/bundle/fonts/macos/Supplemental/STIXSizOneSymBol.otf b/bundle/fonts/macos/Supplemental/STIXSizOneSymBol.otf
deleted file mode 100644
index 9a3c46f27..000000000
Binary files a/bundle/fonts/macos/Supplemental/STIXSizOneSymBol.otf and /dev/null differ
diff --git a/bundle/fonts/macos/Supplemental/STIXSizOneSymReg.otf b/bundle/fonts/macos/Supplemental/STIXSizOneSymReg.otf
deleted file mode 100644
index 1815a9c45..000000000
Binary files a/bundle/fonts/macos/Supplemental/STIXSizOneSymReg.otf and /dev/null differ
diff --git a/bundle/fonts/macos/Supplemental/STIXSizThreeSymBol.otf b/bundle/fonts/macos/Supplemental/STIXSizThreeSymBol.otf
deleted file mode 100644
index b0424e1ca..000000000
Binary files a/bundle/fonts/macos/Supplemental/STIXSizThreeSymBol.otf and /dev/null differ
diff --git a/bundle/fonts/macos/Supplemental/STIXSizThreeSymReg.otf b/bundle/fonts/macos/Supplemental/STIXSizThreeSymReg.otf
deleted file mode 100644
index f38086c91..000000000
Binary files a/bundle/fonts/macos/Supplemental/STIXSizThreeSymReg.otf and /dev/null differ
diff --git a/bundle/fonts/macos/Supplemental/STIXSizTwoSymBol.otf b/bundle/fonts/macos/Supplemental/STIXSizTwoSymBol.otf
deleted file mode 100644
index bb37b8f75..000000000
Binary files a/bundle/fonts/macos/Supplemental/STIXSizTwoSymBol.otf and /dev/null differ
diff --git a/bundle/fonts/macos/Supplemental/STIXSizTwoSymReg.otf b/bundle/fonts/macos/Supplemental/STIXSizTwoSymReg.otf
deleted file mode 100644
index 661e592ab..000000000
Binary files a/bundle/fonts/macos/Supplemental/STIXSizTwoSymReg.otf and /dev/null differ
diff --git a/bundle/fonts/macos/Supplemental/STIXTwoMath.otf b/bundle/fonts/macos/Supplemental/STIXTwoMath.otf
deleted file mode 100644
index 29aa3b941..000000000
Binary files a/bundle/fonts/macos/Supplemental/STIXTwoMath.otf and /dev/null differ
diff --git a/bundle/fonts/macos/Supplemental/STIXTwoText-Italic.ttf b/bundle/fonts/macos/Supplemental/STIXTwoText-Italic.ttf
deleted file mode 100644
index f7b444d11..000000000
Binary files a/bundle/fonts/macos/Supplemental/STIXTwoText-Italic.ttf and /dev/null differ
diff --git a/bundle/fonts/macos/Supplemental/STIXTwoText.ttf b/bundle/fonts/macos/Supplemental/STIXTwoText.ttf
deleted file mode 100644
index 65db14294..000000000
Binary files a/bundle/fonts/macos/Supplemental/STIXTwoText.ttf and /dev/null differ
diff --git a/bundle/fonts/macos/Supplemental/STIXVar.otf b/bundle/fonts/macos/Supplemental/STIXVar.otf
deleted file mode 100644
index 68a45bcf7..000000000
Binary files a/bundle/fonts/macos/Supplemental/STIXVar.otf and /dev/null differ
diff --git a/bundle/fonts/macos/Supplemental/STIXVarBol.otf b/bundle/fonts/macos/Supplemental/STIXVarBol.otf
deleted file mode 100644
index f1f0f2baf..000000000
Binary files a/bundle/fonts/macos/Supplemental/STIXVarBol.otf and /dev/null differ
diff --git a/bundle/fonts/macos/Supplemental/Sana.ttc b/bundle/fonts/macos/Supplemental/Sana.ttc
deleted file mode 100644
index dd832c320..000000000
Binary files a/bundle/fonts/macos/Supplemental/Sana.ttc and /dev/null differ
diff --git a/bundle/fonts/macos/Supplemental/Sathu.ttf b/bundle/fonts/macos/Supplemental/Sathu.ttf
deleted file mode 100644
index 888ba085a..000000000
Binary files a/bundle/fonts/macos/Supplemental/Sathu.ttf and /dev/null differ
diff --git a/bundle/fonts/macos/Supplemental/Savoye LET.ttc b/bundle/fonts/macos/Supplemental/Savoye LET.ttc
deleted file mode 100644
index c62d427d5..000000000
Binary files a/bundle/fonts/macos/Supplemental/Savoye LET.ttc and /dev/null differ
diff --git a/bundle/fonts/macos/Supplemental/Seravek.ttc b/bundle/fonts/macos/Supplemental/Seravek.ttc
deleted file mode 100644
index d92afc5f7..000000000
Binary files a/bundle/fonts/macos/Supplemental/Seravek.ttc and /dev/null differ
diff --git a/bundle/fonts/macos/Supplemental/Shree714.ttc b/bundle/fonts/macos/Supplemental/Shree714.ttc
deleted file mode 100644
index f2afdfe04..000000000
Binary files a/bundle/fonts/macos/Supplemental/Shree714.ttc and /dev/null differ
diff --git a/bundle/fonts/macos/Supplemental/SignPainter.ttc b/bundle/fonts/macos/Supplemental/SignPainter.ttc
deleted file mode 100644
index 46289e16b..000000000
Binary files a/bundle/fonts/macos/Supplemental/SignPainter.ttc and /dev/null differ
diff --git a/bundle/fonts/macos/Supplemental/Silom.ttf b/bundle/fonts/macos/Supplemental/Silom.ttf
deleted file mode 100644
index f007ca220..000000000
Binary files a/bundle/fonts/macos/Supplemental/Silom.ttf and /dev/null differ
diff --git a/bundle/fonts/macos/Supplemental/Sinhala MN.ttc b/bundle/fonts/macos/Supplemental/Sinhala MN.ttc
deleted file mode 100644
index 71183ebdc..000000000
Binary files a/bundle/fonts/macos/Supplemental/Sinhala MN.ttc and /dev/null differ
diff --git a/bundle/fonts/macos/Supplemental/Sinhala Sangam MN.ttc b/bundle/fonts/macos/Supplemental/Sinhala Sangam MN.ttc
deleted file mode 100644
index 09332f9bf..000000000
Binary files a/bundle/fonts/macos/Supplemental/Sinhala Sangam MN.ttc and /dev/null differ
diff --git a/bundle/fonts/macos/Supplemental/Skia.ttf b/bundle/fonts/macos/Supplemental/Skia.ttf
deleted file mode 100644
index f6cd168ae..000000000
Binary files a/bundle/fonts/macos/Supplemental/Skia.ttf and /dev/null differ
diff --git a/bundle/fonts/macos/Supplemental/SnellRoundhand.ttc b/bundle/fonts/macos/Supplemental/SnellRoundhand.ttc
deleted file mode 100644
index 6960020e6..000000000
Binary files a/bundle/fonts/macos/Supplemental/SnellRoundhand.ttc and /dev/null differ
diff --git a/bundle/fonts/macos/Supplemental/Songti.ttc b/bundle/fonts/macos/Supplemental/Songti.ttc
deleted file mode 100644
index 21cafae22..000000000
Binary files a/bundle/fonts/macos/Supplemental/Songti.ttc and /dev/null differ
diff --git a/bundle/fonts/macos/Supplemental/SukhumvitSet.ttc b/bundle/fonts/macos/Supplemental/SukhumvitSet.ttc
deleted file mode 100644
index 0f197e997..000000000
Binary files a/bundle/fonts/macos/Supplemental/SukhumvitSet.ttc and /dev/null differ
diff --git a/bundle/fonts/macos/Supplemental/SuperClarendon.ttc b/bundle/fonts/macos/Supplemental/SuperClarendon.ttc
deleted file mode 100644
index 2566e5539..000000000
Binary files a/bundle/fonts/macos/Supplemental/SuperClarendon.ttc and /dev/null differ
diff --git a/bundle/fonts/macos/Supplemental/Tahoma Bold.ttf b/bundle/fonts/macos/Supplemental/Tahoma Bold.ttf
deleted file mode 100644
index e4024e2f3..000000000
Binary files a/bundle/fonts/macos/Supplemental/Tahoma Bold.ttf and /dev/null differ
diff --git a/bundle/fonts/macos/Supplemental/Tahoma.ttf b/bundle/fonts/macos/Supplemental/Tahoma.ttf
deleted file mode 100644
index d204f958d..000000000
Binary files a/bundle/fonts/macos/Supplemental/Tahoma.ttf and /dev/null differ
diff --git a/bundle/fonts/macos/Supplemental/Tamil MN.ttc b/bundle/fonts/macos/Supplemental/Tamil MN.ttc
deleted file mode 100644
index b08c72f82..000000000
Binary files a/bundle/fonts/macos/Supplemental/Tamil MN.ttc and /dev/null differ
diff --git a/bundle/fonts/macos/Supplemental/Tamil Sangam MN.ttc b/bundle/fonts/macos/Supplemental/Tamil Sangam MN.ttc
deleted file mode 100644
index 071c27d76..000000000
Binary files a/bundle/fonts/macos/Supplemental/Tamil Sangam MN.ttc and /dev/null differ
diff --git a/bundle/fonts/macos/Supplemental/Telugu MN.ttc b/bundle/fonts/macos/Supplemental/Telugu MN.ttc
deleted file mode 100644
index 293921cdd..000000000
Binary files a/bundle/fonts/macos/Supplemental/Telugu MN.ttc and /dev/null differ
diff --git a/bundle/fonts/macos/Supplemental/Telugu Sangam MN.ttc b/bundle/fonts/macos/Supplemental/Telugu Sangam MN.ttc
deleted file mode 100644
index 94926ce0e..000000000
Binary files a/bundle/fonts/macos/Supplemental/Telugu Sangam MN.ttc and /dev/null differ
diff --git a/bundle/fonts/macos/Supplemental/Thonburi.ttc b/bundle/fonts/macos/Supplemental/Thonburi.ttc
deleted file mode 100644
index 7f8200d11..000000000
Binary files a/bundle/fonts/macos/Supplemental/Thonburi.ttc and /dev/null differ
diff --git a/bundle/fonts/macos/Supplemental/Times New Roman Bold Italic.ttf b/bundle/fonts/macos/Supplemental/Times New Roman Bold Italic.ttf
deleted file mode 100644
index 47e85803d..000000000
Binary files a/bundle/fonts/macos/Supplemental/Times New Roman Bold Italic.ttf and /dev/null differ
diff --git a/bundle/fonts/macos/Supplemental/Times New Roman Bold.ttf b/bundle/fonts/macos/Supplemental/Times New Roman Bold.ttf
deleted file mode 100644
index 8e69d1a9d..000000000
Binary files a/bundle/fonts/macos/Supplemental/Times New Roman Bold.ttf and /dev/null differ
diff --git a/bundle/fonts/macos/Supplemental/Times New Roman Italic.ttf b/bundle/fonts/macos/Supplemental/Times New Roman Italic.ttf
deleted file mode 100644
index eff3616d6..000000000
Binary files a/bundle/fonts/macos/Supplemental/Times New Roman Italic.ttf and /dev/null differ
diff --git a/bundle/fonts/macos/Supplemental/Times New Roman.ttf b/bundle/fonts/macos/Supplemental/Times New Roman.ttf
deleted file mode 100644
index fd01cc639..000000000
Binary files a/bundle/fonts/macos/Supplemental/Times New Roman.ttf and /dev/null differ
diff --git a/bundle/fonts/macos/Supplemental/Trattatello.ttf b/bundle/fonts/macos/Supplemental/Trattatello.ttf
deleted file mode 100644
index dcf97fb42..000000000
Binary files a/bundle/fonts/macos/Supplemental/Trattatello.ttf and /dev/null differ
diff --git a/bundle/fonts/macos/Supplemental/Trebuchet MS Bold Italic.ttf b/bundle/fonts/macos/Supplemental/Trebuchet MS Bold Italic.ttf
deleted file mode 100644
index e9cc425f6..000000000
Binary files a/bundle/fonts/macos/Supplemental/Trebuchet MS Bold Italic.ttf and /dev/null differ
diff --git a/bundle/fonts/macos/Supplemental/Trebuchet MS Bold.ttf b/bundle/fonts/macos/Supplemental/Trebuchet MS Bold.ttf
deleted file mode 100644
index 53d38e030..000000000
Binary files a/bundle/fonts/macos/Supplemental/Trebuchet MS Bold.ttf and /dev/null differ
diff --git a/bundle/fonts/macos/Supplemental/Trebuchet MS Italic.ttf b/bundle/fonts/macos/Supplemental/Trebuchet MS Italic.ttf
deleted file mode 100644
index 004382a4c..000000000
Binary files a/bundle/fonts/macos/Supplemental/Trebuchet MS Italic.ttf and /dev/null differ
diff --git a/bundle/fonts/macos/Supplemental/Trebuchet MS.ttf b/bundle/fonts/macos/Supplemental/Trebuchet MS.ttf
deleted file mode 100644
index 10248aff9..000000000
Binary files a/bundle/fonts/macos/Supplemental/Trebuchet MS.ttf and /dev/null differ
diff --git a/bundle/fonts/macos/Supplemental/Verdana Bold Italic.ttf b/bundle/fonts/macos/Supplemental/Verdana Bold Italic.ttf
deleted file mode 100644
index 067ab6408..000000000
Binary files a/bundle/fonts/macos/Supplemental/Verdana Bold Italic.ttf and /dev/null differ
diff --git a/bundle/fonts/macos/Supplemental/Verdana Bold.ttf b/bundle/fonts/macos/Supplemental/Verdana Bold.ttf
deleted file mode 100644
index 3f603b740..000000000
Binary files a/bundle/fonts/macos/Supplemental/Verdana Bold.ttf and /dev/null differ
diff --git a/bundle/fonts/macos/Supplemental/Verdana Italic.ttf b/bundle/fonts/macos/Supplemental/Verdana Italic.ttf
deleted file mode 100644
index 96f10c6c6..000000000
Binary files a/bundle/fonts/macos/Supplemental/Verdana Italic.ttf and /dev/null differ
diff --git a/bundle/fonts/macos/Supplemental/Verdana.ttf b/bundle/fonts/macos/Supplemental/Verdana.ttf
deleted file mode 100644
index 44725dbcc..000000000
Binary files a/bundle/fonts/macos/Supplemental/Verdana.ttf and /dev/null differ
diff --git a/bundle/fonts/macos/Supplemental/Waseem.ttc b/bundle/fonts/macos/Supplemental/Waseem.ttc
deleted file mode 100644
index bbed38a76..000000000
Binary files a/bundle/fonts/macos/Supplemental/Waseem.ttc and /dev/null differ
diff --git a/bundle/fonts/macos/Supplemental/Webdings.ttf b/bundle/fonts/macos/Supplemental/Webdings.ttf
deleted file mode 100644
index 54d6c97e5..000000000
Binary files a/bundle/fonts/macos/Supplemental/Webdings.ttf and /dev/null differ
diff --git a/bundle/fonts/macos/Supplemental/Wingdings 2.ttf b/bundle/fonts/macos/Supplemental/Wingdings 2.ttf
deleted file mode 100644
index 1cc94aa1f..000000000
Binary files a/bundle/fonts/macos/Supplemental/Wingdings 2.ttf and /dev/null differ
diff --git a/bundle/fonts/macos/Supplemental/Wingdings 3.ttf b/bundle/fonts/macos/Supplemental/Wingdings 3.ttf
deleted file mode 100644
index 30e5be949..000000000
Binary files a/bundle/fonts/macos/Supplemental/Wingdings 3.ttf and /dev/null differ
diff --git a/bundle/fonts/macos/Supplemental/Wingdings.ttf b/bundle/fonts/macos/Supplemental/Wingdings.ttf
deleted file mode 100644
index 226381e08..000000000
Binary files a/bundle/fonts/macos/Supplemental/Wingdings.ttf and /dev/null differ
diff --git a/bundle/fonts/macos/Supplemental/Zapfino.ttf b/bundle/fonts/macos/Supplemental/Zapfino.ttf
deleted file mode 100644
index 225a193b6..000000000
Binary files a/bundle/fonts/macos/Supplemental/Zapfino.ttf and /dev/null differ
diff --git a/bundle/fonts/macos/Symbol.ttf b/bundle/fonts/macos/Symbol.ttf
deleted file mode 100644
index 2f4343a2e..000000000
Binary files a/bundle/fonts/macos/Symbol.ttf and /dev/null differ
diff --git a/bundle/fonts/macos/ThonburiUI.ttc b/bundle/fonts/macos/ThonburiUI.ttc
deleted file mode 100644
index 585c4e6ce..000000000
Binary files a/bundle/fonts/macos/ThonburiUI.ttc and /dev/null differ
diff --git a/bundle/fonts/macos/Times.ttc b/bundle/fonts/macos/Times.ttc
deleted file mode 100644
index ee73afbc4..000000000
Binary files a/bundle/fonts/macos/Times.ttc and /dev/null differ
diff --git a/bundle/fonts/macos/TimesLTMM b/bundle/fonts/macos/TimesLTMM
deleted file mode 100644
index 631dd9c9b..000000000
Binary files a/bundle/fonts/macos/TimesLTMM and /dev/null differ
diff --git a/bundle/fonts/macos/ZapfDingbats.ttf b/bundle/fonts/macos/ZapfDingbats.ttf
deleted file mode 100644
index 66f58eb97..000000000
Binary files a/bundle/fonts/macos/ZapfDingbats.ttf and /dev/null differ
diff --git a/bundle/fonts/windows/Candara.ttf b/bundle/fonts/windows/Candara.ttf
deleted file mode 100644
index b9817e26e..000000000
Binary files a/bundle/fonts/windows/Candara.ttf and /dev/null differ
diff --git a/bundle/fonts/windows/Candarab.ttf b/bundle/fonts/windows/Candarab.ttf
deleted file mode 100644
index d9ab172c7..000000000
Binary files a/bundle/fonts/windows/Candarab.ttf and /dev/null differ
diff --git a/bundle/fonts/windows/Candarai.ttf b/bundle/fonts/windows/Candarai.ttf
deleted file mode 100644
index 4f4e2397c..000000000
Binary files a/bundle/fonts/windows/Candarai.ttf and /dev/null differ
diff --git a/bundle/fonts/windows/Candaral.ttf b/bundle/fonts/windows/Candaral.ttf
deleted file mode 100644
index a7b9c8093..000000000
Binary files a/bundle/fonts/windows/Candaral.ttf and /dev/null differ
diff --git a/bundle/fonts/windows/Candarali.ttf b/bundle/fonts/windows/Candarali.ttf
deleted file mode 100644
index 190cc8975..000000000
Binary files a/bundle/fonts/windows/Candarali.ttf and /dev/null differ
diff --git a/bundle/fonts/windows/Candaraz.ttf b/bundle/fonts/windows/Candaraz.ttf
deleted file mode 100644
index 124b59f55..000000000
Binary files a/bundle/fonts/windows/Candaraz.ttf and /dev/null differ
diff --git a/bundle/fonts/windows/Gabriola.ttf b/bundle/fonts/windows/Gabriola.ttf
deleted file mode 100644
index ceaaaf6f2..000000000
Binary files a/bundle/fonts/windows/Gabriola.ttf and /dev/null differ
diff --git a/bundle/fonts/windows/Inkfree.ttf b/bundle/fonts/windows/Inkfree.ttf
deleted file mode 100644
index 6f52c0495..000000000
Binary files a/bundle/fonts/windows/Inkfree.ttf and /dev/null differ
diff --git a/bundle/fonts/windows/LeelUIsl.ttf b/bundle/fonts/windows/LeelUIsl.ttf
deleted file mode 100644
index 2314cec7c..000000000
Binary files a/bundle/fonts/windows/LeelUIsl.ttf and /dev/null differ
diff --git a/bundle/fonts/windows/LeelaUIb.ttf b/bundle/fonts/windows/LeelaUIb.ttf
deleted file mode 100644
index 4e404099e..000000000
Binary files a/bundle/fonts/windows/LeelaUIb.ttf and /dev/null differ
diff --git a/bundle/fonts/windows/LeelawUI.ttf b/bundle/fonts/windows/LeelawUI.ttf
deleted file mode 100644
index dac7cb44e..000000000
Binary files a/bundle/fonts/windows/LeelawUI.ttf and /dev/null differ
diff --git a/bundle/fonts/windows/Nirmala.ttf b/bundle/fonts/windows/Nirmala.ttf
deleted file mode 100644
index 620652b5e..000000000
Binary files a/bundle/fonts/windows/Nirmala.ttf and /dev/null differ
diff --git a/bundle/fonts/windows/NirmalaB.ttf b/bundle/fonts/windows/NirmalaB.ttf
deleted file mode 100644
index b64bf45d5..000000000
Binary files a/bundle/fonts/windows/NirmalaB.ttf and /dev/null differ
diff --git a/bundle/fonts/windows/NirmalaS.ttf b/bundle/fonts/windows/NirmalaS.ttf
deleted file mode 100644
index d998adcd7..000000000
Binary files a/bundle/fonts/windows/NirmalaS.ttf and /dev/null differ
diff --git a/bundle/fonts/windows/SegUIVar.ttf b/bundle/fonts/windows/SegUIVar.ttf
deleted file mode 100644
index dd8c26432..000000000
Binary files a/bundle/fonts/windows/SegUIVar.ttf and /dev/null differ
diff --git a/bundle/fonts/windows/SegoeIcons.ttf b/bundle/fonts/windows/SegoeIcons.ttf
deleted file mode 100644
index 8f05a4bbc..000000000
Binary files a/bundle/fonts/windows/SegoeIcons.ttf and /dev/null differ
diff --git a/bundle/fonts/windows/SitkaVF-Italic.ttf b/bundle/fonts/windows/SitkaVF-Italic.ttf
deleted file mode 100644
index 28d0c33e1..000000000
Binary files a/bundle/fonts/windows/SitkaVF-Italic.ttf and /dev/null differ
diff --git a/bundle/fonts/windows/SitkaVF.ttf b/bundle/fonts/windows/SitkaVF.ttf
deleted file mode 100644
index 9137264f6..000000000
Binary files a/bundle/fonts/windows/SitkaVF.ttf and /dev/null differ
diff --git a/bundle/fonts/windows/YuGothB.ttc b/bundle/fonts/windows/YuGothB.ttc
deleted file mode 100644
index 58cd5f61b..000000000
Binary files a/bundle/fonts/windows/YuGothB.ttc and /dev/null differ
diff --git a/bundle/fonts/windows/YuGothL.ttc b/bundle/fonts/windows/YuGothL.ttc
deleted file mode 100644
index d9304281b..000000000
Binary files a/bundle/fonts/windows/YuGothL.ttc and /dev/null differ
diff --git a/bundle/fonts/windows/YuGothM.ttc b/bundle/fonts/windows/YuGothM.ttc
deleted file mode 100644
index 6f397baef..000000000
Binary files a/bundle/fonts/windows/YuGothM.ttc and /dev/null differ
diff --git a/bundle/fonts/windows/YuGothR.ttc b/bundle/fonts/windows/YuGothR.ttc
deleted file mode 100644
index 65e2f5d9e..000000000
Binary files a/bundle/fonts/windows/YuGothR.ttc and /dev/null differ
diff --git a/bundle/fonts/windows/arial.ttf b/bundle/fonts/windows/arial.ttf
deleted file mode 100644
index 8682d9462..000000000
Binary files a/bundle/fonts/windows/arial.ttf and /dev/null differ
diff --git a/bundle/fonts/windows/arialbd.ttf b/bundle/fonts/windows/arialbd.ttf
deleted file mode 100644
index a6037e686..000000000
Binary files a/bundle/fonts/windows/arialbd.ttf and /dev/null differ
diff --git a/bundle/fonts/windows/arialbi.ttf b/bundle/fonts/windows/arialbi.ttf
deleted file mode 100644
index 6a1fa0fa0..000000000
Binary files a/bundle/fonts/windows/arialbi.ttf and /dev/null differ
diff --git a/bundle/fonts/windows/ariali.ttf b/bundle/fonts/windows/ariali.ttf
deleted file mode 100644
index 380199780..000000000
Binary files a/bundle/fonts/windows/ariali.ttf and /dev/null differ
diff --git a/bundle/fonts/windows/ariblk.ttf b/bundle/fonts/windows/ariblk.ttf
deleted file mode 100644
index e7ae345aa..000000000
Binary files a/bundle/fonts/windows/ariblk.ttf and /dev/null differ
diff --git a/bundle/fonts/windows/bahnschrift.ttf b/bundle/fonts/windows/bahnschrift.ttf
deleted file mode 100644
index 2c121b3d2..000000000
Binary files a/bundle/fonts/windows/bahnschrift.ttf and /dev/null differ
diff --git a/bundle/fonts/windows/calibri.ttf b/bundle/fonts/windows/calibri.ttf
deleted file mode 100644
index aac472615..000000000
Binary files a/bundle/fonts/windows/calibri.ttf and /dev/null differ
diff --git a/bundle/fonts/windows/calibrib.ttf b/bundle/fonts/windows/calibrib.ttf
deleted file mode 100644
index 326893d55..000000000
Binary files a/bundle/fonts/windows/calibrib.ttf and /dev/null differ
diff --git a/bundle/fonts/windows/calibrii.ttf b/bundle/fonts/windows/calibrii.ttf
deleted file mode 100644
index 3543c4cc9..000000000
Binary files a/bundle/fonts/windows/calibrii.ttf and /dev/null differ
diff --git a/bundle/fonts/windows/calibril.ttf b/bundle/fonts/windows/calibril.ttf
deleted file mode 100644
index 1ac666907..000000000
Binary files a/bundle/fonts/windows/calibril.ttf and /dev/null differ
diff --git a/bundle/fonts/windows/calibrili.ttf b/bundle/fonts/windows/calibrili.ttf
deleted file mode 100644
index fac9ae2d2..000000000
Binary files a/bundle/fonts/windows/calibrili.ttf and /dev/null differ
diff --git a/bundle/fonts/windows/calibriz.ttf b/bundle/fonts/windows/calibriz.ttf
deleted file mode 100644
index 58afcd162..000000000
Binary files a/bundle/fonts/windows/calibriz.ttf and /dev/null differ
diff --git a/bundle/fonts/windows/cambria.ttc b/bundle/fonts/windows/cambria.ttc
deleted file mode 100644
index b971a3fc8..000000000
Binary files a/bundle/fonts/windows/cambria.ttc and /dev/null differ
diff --git a/bundle/fonts/windows/cambriab.ttf b/bundle/fonts/windows/cambriab.ttf
deleted file mode 100644
index c70283cb5..000000000
Binary files a/bundle/fonts/windows/cambriab.ttf and /dev/null differ
diff --git a/bundle/fonts/windows/cambriai.ttf b/bundle/fonts/windows/cambriai.ttf
deleted file mode 100644
index 299dccdda..000000000
Binary files a/bundle/fonts/windows/cambriai.ttf and /dev/null differ
diff --git a/bundle/fonts/windows/cambriaz.ttf b/bundle/fonts/windows/cambriaz.ttf
deleted file mode 100644
index 4912bcbdf..000000000
Binary files a/bundle/fonts/windows/cambriaz.ttf and /dev/null differ
diff --git a/bundle/fonts/windows/comic.ttf b/bundle/fonts/windows/comic.ttf
deleted file mode 100644
index 2d8e9ca9c..000000000
Binary files a/bundle/fonts/windows/comic.ttf and /dev/null differ
diff --git a/bundle/fonts/windows/comicbd.ttf b/bundle/fonts/windows/comicbd.ttf
deleted file mode 100644
index 59f77d571..000000000
Binary files a/bundle/fonts/windows/comicbd.ttf and /dev/null differ
diff --git a/bundle/fonts/windows/comici.ttf b/bundle/fonts/windows/comici.ttf
deleted file mode 100644
index 49a40696d..000000000
Binary files a/bundle/fonts/windows/comici.ttf and /dev/null differ
diff --git a/bundle/fonts/windows/comicz.ttf b/bundle/fonts/windows/comicz.ttf
deleted file mode 100644
index f45196133..000000000
Binary files a/bundle/fonts/windows/comicz.ttf and /dev/null differ
diff --git a/bundle/fonts/windows/consola.ttf b/bundle/fonts/windows/consola.ttf
deleted file mode 100644
index e881ca4b5..000000000
Binary files a/bundle/fonts/windows/consola.ttf and /dev/null differ
diff --git a/bundle/fonts/windows/consolab.ttf b/bundle/fonts/windows/consolab.ttf
deleted file mode 100644
index 77f5d6052..000000000
Binary files a/bundle/fonts/windows/consolab.ttf and /dev/null differ
diff --git a/bundle/fonts/windows/consolai.ttf b/bundle/fonts/windows/consolai.ttf
deleted file mode 100644
index 2de4de8a9..000000000
Binary files a/bundle/fonts/windows/consolai.ttf and /dev/null differ
diff --git a/bundle/fonts/windows/consolaz.ttf b/bundle/fonts/windows/consolaz.ttf
deleted file mode 100644
index d9df2110f..000000000
Binary files a/bundle/fonts/windows/consolaz.ttf and /dev/null differ
diff --git a/bundle/fonts/windows/constan.ttf b/bundle/fonts/windows/constan.ttf
deleted file mode 100644
index 0ef9d178b..000000000
Binary files a/bundle/fonts/windows/constan.ttf and /dev/null differ
diff --git a/bundle/fonts/windows/constanb.ttf b/bundle/fonts/windows/constanb.ttf
deleted file mode 100644
index 540b1d76c..000000000
Binary files a/bundle/fonts/windows/constanb.ttf and /dev/null differ
diff --git a/bundle/fonts/windows/constani.ttf b/bundle/fonts/windows/constani.ttf
deleted file mode 100644
index a5aa7ac43..000000000
Binary files a/bundle/fonts/windows/constani.ttf and /dev/null differ
diff --git a/bundle/fonts/windows/constanz.ttf b/bundle/fonts/windows/constanz.ttf
deleted file mode 100644
index 0b7ea48b6..000000000
Binary files a/bundle/fonts/windows/constanz.ttf and /dev/null differ
diff --git a/bundle/fonts/windows/corbel.ttf b/bundle/fonts/windows/corbel.ttf
deleted file mode 100644
index 34fd5aa9e..000000000
Binary files a/bundle/fonts/windows/corbel.ttf and /dev/null differ
diff --git a/bundle/fonts/windows/corbelb.ttf b/bundle/fonts/windows/corbelb.ttf
deleted file mode 100644
index 551afa392..000000000
Binary files a/bundle/fonts/windows/corbelb.ttf and /dev/null differ
diff --git a/bundle/fonts/windows/corbeli.ttf b/bundle/fonts/windows/corbeli.ttf
deleted file mode 100644
index 91b076b9a..000000000
Binary files a/bundle/fonts/windows/corbeli.ttf and /dev/null differ
diff --git a/bundle/fonts/windows/corbell.ttf b/bundle/fonts/windows/corbell.ttf
deleted file mode 100644
index 501eeef0f..000000000
Binary files a/bundle/fonts/windows/corbell.ttf and /dev/null differ
diff --git a/bundle/fonts/windows/corbelli.ttf b/bundle/fonts/windows/corbelli.ttf
deleted file mode 100644
index 6173fd78f..000000000
Binary files a/bundle/fonts/windows/corbelli.ttf and /dev/null differ
diff --git a/bundle/fonts/windows/corbelz.ttf b/bundle/fonts/windows/corbelz.ttf
deleted file mode 100644
index 1afab6529..000000000
Binary files a/bundle/fonts/windows/corbelz.ttf and /dev/null differ
diff --git a/bundle/fonts/windows/cour.ttf b/bundle/fonts/windows/cour.ttf
deleted file mode 100644
index 46a0712ae..000000000
Binary files a/bundle/fonts/windows/cour.ttf and /dev/null differ
diff --git a/bundle/fonts/windows/courbd.ttf b/bundle/fonts/windows/courbd.ttf
deleted file mode 100644
index 145b73651..000000000
Binary files a/bundle/fonts/windows/courbd.ttf and /dev/null differ
diff --git a/bundle/fonts/windows/courbi.ttf b/bundle/fonts/windows/courbi.ttf
deleted file mode 100644
index 430fced85..000000000
Binary files a/bundle/fonts/windows/courbi.ttf and /dev/null differ
diff --git a/bundle/fonts/windows/couri.ttf b/bundle/fonts/windows/couri.ttf
deleted file mode 100644
index 22b73d4a0..000000000
Binary files a/bundle/fonts/windows/couri.ttf and /dev/null differ
diff --git a/bundle/fonts/windows/ebrima.ttf b/bundle/fonts/windows/ebrima.ttf
deleted file mode 100644
index 26e214518..000000000
Binary files a/bundle/fonts/windows/ebrima.ttf and /dev/null differ
diff --git a/bundle/fonts/windows/ebrimabd.ttf b/bundle/fonts/windows/ebrimabd.ttf
deleted file mode 100644
index c12efac44..000000000
Binary files a/bundle/fonts/windows/ebrimabd.ttf and /dev/null differ
diff --git a/bundle/fonts/windows/framd.ttf b/bundle/fonts/windows/framd.ttf
deleted file mode 100644
index ca7e2aeec..000000000
Binary files a/bundle/fonts/windows/framd.ttf and /dev/null differ
diff --git a/bundle/fonts/windows/framdit.ttf b/bundle/fonts/windows/framdit.ttf
deleted file mode 100644
index 44993d776..000000000
Binary files a/bundle/fonts/windows/framdit.ttf and /dev/null differ
diff --git a/bundle/fonts/windows/gadugi.ttf b/bundle/fonts/windows/gadugi.ttf
deleted file mode 100644
index cd0c85b8e..000000000
Binary files a/bundle/fonts/windows/gadugi.ttf and /dev/null differ
diff --git a/bundle/fonts/windows/gadugib.ttf b/bundle/fonts/windows/gadugib.ttf
deleted file mode 100644
index 3361b93fb..000000000
Binary files a/bundle/fonts/windows/gadugib.ttf and /dev/null differ
diff --git a/bundle/fonts/windows/georgia.ttf b/bundle/fonts/windows/georgia.ttf
deleted file mode 100644
index 43672d864..000000000
Binary files a/bundle/fonts/windows/georgia.ttf and /dev/null differ
diff --git a/bundle/fonts/windows/georgiab.ttf b/bundle/fonts/windows/georgiab.ttf
deleted file mode 100644
index f46097015..000000000
Binary files a/bundle/fonts/windows/georgiab.ttf and /dev/null differ
diff --git a/bundle/fonts/windows/georgiai.ttf b/bundle/fonts/windows/georgiai.ttf
deleted file mode 100644
index c9f60e706..000000000
Binary files a/bundle/fonts/windows/georgiai.ttf and /dev/null differ
diff --git a/bundle/fonts/windows/georgiaz.ttf b/bundle/fonts/windows/georgiaz.ttf
deleted file mode 100644
index 124d291a5..000000000
Binary files a/bundle/fonts/windows/georgiaz.ttf and /dev/null differ
diff --git a/bundle/fonts/windows/himalaya.ttf b/bundle/fonts/windows/himalaya.ttf
deleted file mode 100644
index 7d687a1e6..000000000
Binary files a/bundle/fonts/windows/himalaya.ttf and /dev/null differ
diff --git a/bundle/fonts/windows/holomdl2.ttf b/bundle/fonts/windows/holomdl2.ttf
deleted file mode 100644
index 8a289580e..000000000
Binary files a/bundle/fonts/windows/holomdl2.ttf and /dev/null differ
diff --git a/bundle/fonts/windows/impact.ttf b/bundle/fonts/windows/impact.ttf
deleted file mode 100644
index 2675688cd..000000000
Binary files a/bundle/fonts/windows/impact.ttf and /dev/null differ
diff --git a/bundle/fonts/windows/javatext.ttf b/bundle/fonts/windows/javatext.ttf
deleted file mode 100644
index cd51dd85a..000000000
Binary files a/bundle/fonts/windows/javatext.ttf and /dev/null differ
diff --git a/bundle/fonts/windows/l_10646.ttf b/bundle/fonts/windows/l_10646.ttf
deleted file mode 100644
index afb1c608b..000000000
Binary files a/bundle/fonts/windows/l_10646.ttf and /dev/null differ
diff --git a/bundle/fonts/windows/lucon.ttf b/bundle/fonts/windows/lucon.ttf
deleted file mode 100644
index db9fb00d2..000000000
Binary files a/bundle/fonts/windows/lucon.ttf and /dev/null differ
diff --git a/bundle/fonts/windows/malgun.ttf b/bundle/fonts/windows/malgun.ttf
deleted file mode 100644
index f6d5902bb..000000000
Binary files a/bundle/fonts/windows/malgun.ttf and /dev/null differ
diff --git a/bundle/fonts/windows/malgunbd.ttf b/bundle/fonts/windows/malgunbd.ttf
deleted file mode 100644
index 047cded7e..000000000
Binary files a/bundle/fonts/windows/malgunbd.ttf and /dev/null differ
diff --git a/bundle/fonts/windows/malgunsl.ttf b/bundle/fonts/windows/malgunsl.ttf
deleted file mode 100644
index b88df0a78..000000000
Binary files a/bundle/fonts/windows/malgunsl.ttf and /dev/null differ
diff --git a/bundle/fonts/windows/marlett.ttf b/bundle/fonts/windows/marlett.ttf
deleted file mode 100644
index bd326d5e9..000000000
Binary files a/bundle/fonts/windows/marlett.ttf and /dev/null differ
diff --git a/bundle/fonts/windows/micross.ttf b/bundle/fonts/windows/micross.ttf
deleted file mode 100644
index 250ae5c38..000000000
Binary files a/bundle/fonts/windows/micross.ttf and /dev/null differ
diff --git a/bundle/fonts/windows/mingliub.ttc b/bundle/fonts/windows/mingliub.ttc
deleted file mode 100644
index 7bc1324e5..000000000
Binary files a/bundle/fonts/windows/mingliub.ttc and /dev/null differ
diff --git a/bundle/fonts/windows/mmrtext.ttf b/bundle/fonts/windows/mmrtext.ttf
deleted file mode 100644
index 664808662..000000000
Binary files a/bundle/fonts/windows/mmrtext.ttf and /dev/null differ
diff --git a/bundle/fonts/windows/mmrtextb.ttf b/bundle/fonts/windows/mmrtextb.ttf
deleted file mode 100644
index e45e92a40..000000000
Binary files a/bundle/fonts/windows/mmrtextb.ttf and /dev/null differ
diff --git a/bundle/fonts/windows/monbaiti.ttf b/bundle/fonts/windows/monbaiti.ttf
deleted file mode 100644
index 96a59f722..000000000
Binary files a/bundle/fonts/windows/monbaiti.ttf and /dev/null differ
diff --git a/bundle/fonts/windows/msgothic.ttc b/bundle/fonts/windows/msgothic.ttc
deleted file mode 100644
index 7bfcdf779..000000000
Binary files a/bundle/fonts/windows/msgothic.ttc and /dev/null differ
diff --git a/bundle/fonts/windows/msjh.ttc b/bundle/fonts/windows/msjh.ttc
deleted file mode 100644
index ee3108933..000000000
Binary files a/bundle/fonts/windows/msjh.ttc and /dev/null differ
diff --git a/bundle/fonts/windows/msjhbd.ttc b/bundle/fonts/windows/msjhbd.ttc
deleted file mode 100644
index 03caafb4b..000000000
Binary files a/bundle/fonts/windows/msjhbd.ttc and /dev/null differ
diff --git a/bundle/fonts/windows/msjhl.ttc b/bundle/fonts/windows/msjhl.ttc
deleted file mode 100644
index fc31ca2c2..000000000
Binary files a/bundle/fonts/windows/msjhl.ttc and /dev/null differ
diff --git a/bundle/fonts/windows/msyh.ttc b/bundle/fonts/windows/msyh.ttc
deleted file mode 100644
index 37c28de01..000000000
Binary files a/bundle/fonts/windows/msyh.ttc and /dev/null differ
diff --git a/bundle/fonts/windows/msyhbd.ttc b/bundle/fonts/windows/msyhbd.ttc
deleted file mode 100644
index 7949a5f15..000000000
Binary files a/bundle/fonts/windows/msyhbd.ttc and /dev/null differ
diff --git a/bundle/fonts/windows/msyhl.ttc b/bundle/fonts/windows/msyhl.ttc
deleted file mode 100644
index 448e2ed24..000000000
Binary files a/bundle/fonts/windows/msyhl.ttc and /dev/null differ
diff --git a/bundle/fonts/windows/msyi.ttf b/bundle/fonts/windows/msyi.ttf
deleted file mode 100644
index b3f22ee4a..000000000
Binary files a/bundle/fonts/windows/msyi.ttf and /dev/null differ
diff --git a/bundle/fonts/windows/mvboli.ttf b/bundle/fonts/windows/mvboli.ttf
deleted file mode 100644
index ab87475d3..000000000
Binary files a/bundle/fonts/windows/mvboli.ttf and /dev/null differ
diff --git a/bundle/fonts/windows/ntailu.ttf b/bundle/fonts/windows/ntailu.ttf
deleted file mode 100644
index f4a1c07c2..000000000
Binary files a/bundle/fonts/windows/ntailu.ttf and /dev/null differ
diff --git a/bundle/fonts/windows/ntailub.ttf b/bundle/fonts/windows/ntailub.ttf
deleted file mode 100644
index 8ad63a9e6..000000000
Binary files a/bundle/fonts/windows/ntailub.ttf and /dev/null differ
diff --git a/bundle/fonts/windows/pala.ttf b/bundle/fonts/windows/pala.ttf
deleted file mode 100644
index 47e58eea7..000000000
Binary files a/bundle/fonts/windows/pala.ttf and /dev/null differ
diff --git a/bundle/fonts/windows/palab.ttf b/bundle/fonts/windows/palab.ttf
deleted file mode 100644
index 6e04caf60..000000000
Binary files a/bundle/fonts/windows/palab.ttf and /dev/null differ
diff --git a/bundle/fonts/windows/palabi.ttf b/bundle/fonts/windows/palabi.ttf
deleted file mode 100644
index 5fe062f82..000000000
Binary files a/bundle/fonts/windows/palabi.ttf and /dev/null differ
diff --git a/bundle/fonts/windows/palai.ttf b/bundle/fonts/windows/palai.ttf
deleted file mode 100644
index e98755018..000000000
Binary files a/bundle/fonts/windows/palai.ttf and /dev/null differ
diff --git a/bundle/fonts/windows/phagspa.ttf b/bundle/fonts/windows/phagspa.ttf
deleted file mode 100644
index 33043428e..000000000
Binary files a/bundle/fonts/windows/phagspa.ttf and /dev/null differ
diff --git a/bundle/fonts/windows/phagspab.ttf b/bundle/fonts/windows/phagspab.ttf
deleted file mode 100644
index 173e9972b..000000000
Binary files a/bundle/fonts/windows/phagspab.ttf and /dev/null differ
diff --git a/bundle/fonts/windows/segmdl2.ttf b/bundle/fonts/windows/segmdl2.ttf
deleted file mode 100644
index 066f1083f..000000000
Binary files a/bundle/fonts/windows/segmdl2.ttf and /dev/null differ
diff --git a/bundle/fonts/windows/segoepr.ttf b/bundle/fonts/windows/segoepr.ttf
deleted file mode 100644
index f72ba5c7c..000000000
Binary files a/bundle/fonts/windows/segoepr.ttf and /dev/null differ
diff --git a/bundle/fonts/windows/segoeprb.ttf b/bundle/fonts/windows/segoeprb.ttf
deleted file mode 100644
index 8111e18b5..000000000
Binary files a/bundle/fonts/windows/segoeprb.ttf and /dev/null differ
diff --git a/bundle/fonts/windows/segoesc.ttf b/bundle/fonts/windows/segoesc.ttf
deleted file mode 100644
index 6511a431e..000000000
Binary files a/bundle/fonts/windows/segoesc.ttf and /dev/null differ
diff --git a/bundle/fonts/windows/segoescb.ttf b/bundle/fonts/windows/segoescb.ttf
deleted file mode 100644
index 8240a7e11..000000000
Binary files a/bundle/fonts/windows/segoescb.ttf and /dev/null differ
diff --git a/bundle/fonts/windows/segoeui.ttf b/bundle/fonts/windows/segoeui.ttf
deleted file mode 100644
index 0f52cbd9c..000000000
Binary files a/bundle/fonts/windows/segoeui.ttf and /dev/null differ
diff --git a/bundle/fonts/windows/segoeuib.ttf b/bundle/fonts/windows/segoeuib.ttf
deleted file mode 100644
index ff196d601..000000000
Binary files a/bundle/fonts/windows/segoeuib.ttf and /dev/null differ
diff --git a/bundle/fonts/windows/segoeuii.ttf b/bundle/fonts/windows/segoeuii.ttf
deleted file mode 100644
index 5dd3c3282..000000000
Binary files a/bundle/fonts/windows/segoeuii.ttf and /dev/null differ
diff --git a/bundle/fonts/windows/segoeuil.ttf b/bundle/fonts/windows/segoeuil.ttf
deleted file mode 100644
index 23fb04db8..000000000
Binary files a/bundle/fonts/windows/segoeuil.ttf and /dev/null differ
diff --git a/bundle/fonts/windows/segoeuisl.ttf b/bundle/fonts/windows/segoeuisl.ttf
deleted file mode 100644
index a276476a7..000000000
Binary files a/bundle/fonts/windows/segoeuisl.ttf and /dev/null differ
diff --git a/bundle/fonts/windows/segoeuiz.ttf b/bundle/fonts/windows/segoeuiz.ttf
deleted file mode 100644
index c39304063..000000000
Binary files a/bundle/fonts/windows/segoeuiz.ttf and /dev/null differ
diff --git a/bundle/fonts/windows/seguibl.ttf b/bundle/fonts/windows/seguibl.ttf
deleted file mode 100644
index b2966570e..000000000
Binary files a/bundle/fonts/windows/seguibl.ttf and /dev/null differ
diff --git a/bundle/fonts/windows/seguibli.ttf b/bundle/fonts/windows/seguibli.ttf
deleted file mode 100644
index d38c82c88..000000000
Binary files a/bundle/fonts/windows/seguibli.ttf and /dev/null differ
diff --git a/bundle/fonts/windows/seguiemj.ttf b/bundle/fonts/windows/seguiemj.ttf
deleted file mode 100644
index 531700821..000000000
Binary files a/bundle/fonts/windows/seguiemj.ttf and /dev/null differ
diff --git a/bundle/fonts/windows/seguihis.ttf b/bundle/fonts/windows/seguihis.ttf
deleted file mode 100644
index b09deca45..000000000
Binary files a/bundle/fonts/windows/seguihis.ttf and /dev/null differ
diff --git a/bundle/fonts/windows/seguili.ttf b/bundle/fonts/windows/seguili.ttf
deleted file mode 100644
index 73bfeddff..000000000
Binary files a/bundle/fonts/windows/seguili.ttf and /dev/null differ
diff --git a/bundle/fonts/windows/seguisb.ttf b/bundle/fonts/windows/seguisb.ttf
deleted file mode 100644
index 90b39f72f..000000000
Binary files a/bundle/fonts/windows/seguisb.ttf and /dev/null differ
diff --git a/bundle/fonts/windows/seguisbi.ttf b/bundle/fonts/windows/seguisbi.ttf
deleted file mode 100644
index 4d57335f2..000000000
Binary files a/bundle/fonts/windows/seguisbi.ttf and /dev/null differ
diff --git a/bundle/fonts/windows/seguisli.ttf b/bundle/fonts/windows/seguisli.ttf
deleted file mode 100644
index dbd8664d5..000000000
Binary files a/bundle/fonts/windows/seguisli.ttf and /dev/null differ
diff --git a/bundle/fonts/windows/seguisym.ttf b/bundle/fonts/windows/seguisym.ttf
deleted file mode 100644
index d987ce500..000000000
Binary files a/bundle/fonts/windows/seguisym.ttf and /dev/null differ
diff --git a/bundle/fonts/windows/simsun.ttc b/bundle/fonts/windows/simsun.ttc
deleted file mode 100644
index e360db744..000000000
Binary files a/bundle/fonts/windows/simsun.ttc and /dev/null differ
diff --git a/bundle/fonts/windows/simsunb.ttf b/bundle/fonts/windows/simsunb.ttf
deleted file mode 100644
index 82161c874..000000000
Binary files a/bundle/fonts/windows/simsunb.ttf and /dev/null differ
diff --git a/bundle/fonts/windows/sylfaen.ttf b/bundle/fonts/windows/sylfaen.ttf
deleted file mode 100644
index 556ef56ae..000000000
Binary files a/bundle/fonts/windows/sylfaen.ttf and /dev/null differ
diff --git a/bundle/fonts/windows/symbol.ttf b/bundle/fonts/windows/symbol.ttf
deleted file mode 100644
index 897384ab5..000000000
Binary files a/bundle/fonts/windows/symbol.ttf and /dev/null differ
diff --git a/bundle/fonts/windows/tahoma.ttf b/bundle/fonts/windows/tahoma.ttf
deleted file mode 100644
index b7b708633..000000000
Binary files a/bundle/fonts/windows/tahoma.ttf and /dev/null differ
diff --git a/bundle/fonts/windows/tahomabd.ttf b/bundle/fonts/windows/tahomabd.ttf
deleted file mode 100644
index 2b694bf1f..000000000
Binary files a/bundle/fonts/windows/tahomabd.ttf and /dev/null differ
diff --git a/bundle/fonts/windows/taile.ttf b/bundle/fonts/windows/taile.ttf
deleted file mode 100644
index c0305bd2e..000000000
Binary files a/bundle/fonts/windows/taile.ttf and /dev/null differ
diff --git a/bundle/fonts/windows/taileb.ttf b/bundle/fonts/windows/taileb.ttf
deleted file mode 100644
index 28fc39687..000000000
Binary files a/bundle/fonts/windows/taileb.ttf and /dev/null differ
diff --git a/bundle/fonts/windows/times.ttf b/bundle/fonts/windows/times.ttf
deleted file mode 100644
index fb113bad2..000000000
Binary files a/bundle/fonts/windows/times.ttf and /dev/null differ
diff --git a/bundle/fonts/windows/timesbd.ttf b/bundle/fonts/windows/timesbd.ttf
deleted file mode 100644
index 6d81387e4..000000000
Binary files a/bundle/fonts/windows/timesbd.ttf and /dev/null differ
diff --git a/bundle/fonts/windows/timesbi.ttf b/bundle/fonts/windows/timesbi.ttf
deleted file mode 100644
index 31ed20f7e..000000000
Binary files a/bundle/fonts/windows/timesbi.ttf and /dev/null differ
diff --git a/bundle/fonts/windows/timesi.ttf b/bundle/fonts/windows/timesi.ttf
deleted file mode 100644
index a6e84c10b..000000000
Binary files a/bundle/fonts/windows/timesi.ttf and /dev/null differ
diff --git a/bundle/fonts/windows/trebuc.ttf b/bundle/fonts/windows/trebuc.ttf
deleted file mode 100644
index 549a507c0..000000000
Binary files a/bundle/fonts/windows/trebuc.ttf and /dev/null differ
diff --git a/bundle/fonts/windows/trebucbd.ttf b/bundle/fonts/windows/trebucbd.ttf
deleted file mode 100644
index 45891debe..000000000
Binary files a/bundle/fonts/windows/trebucbd.ttf and /dev/null differ
diff --git a/bundle/fonts/windows/trebucbi.ttf b/bundle/fonts/windows/trebucbi.ttf
deleted file mode 100644
index 23e4b8b02..000000000
Binary files a/bundle/fonts/windows/trebucbi.ttf and /dev/null differ
diff --git a/bundle/fonts/windows/trebucit.ttf b/bundle/fonts/windows/trebucit.ttf
deleted file mode 100644
index 41edbfa3a..000000000
Binary files a/bundle/fonts/windows/trebucit.ttf and /dev/null differ
diff --git a/bundle/fonts/windows/verdana.ttf b/bundle/fonts/windows/verdana.ttf
deleted file mode 100644
index 9a3499751..000000000
Binary files a/bundle/fonts/windows/verdana.ttf and /dev/null differ
diff --git a/bundle/fonts/windows/verdanab.ttf b/bundle/fonts/windows/verdanab.ttf
deleted file mode 100644
index fe8e6879b..000000000
Binary files a/bundle/fonts/windows/verdanab.ttf and /dev/null differ
diff --git a/bundle/fonts/windows/verdanai.ttf b/bundle/fonts/windows/verdanai.ttf
deleted file mode 100644
index 23a6a03b4..000000000
Binary files a/bundle/fonts/windows/verdanai.ttf and /dev/null differ
diff --git a/bundle/fonts/windows/verdanaz.ttf b/bundle/fonts/windows/verdanaz.ttf
deleted file mode 100644
index ff3b38506..000000000
Binary files a/bundle/fonts/windows/verdanaz.ttf and /dev/null differ
diff --git a/bundle/fonts/windows/webdings.ttf b/bundle/fonts/windows/webdings.ttf
deleted file mode 100644
index 73ae1a578..000000000
Binary files a/bundle/fonts/windows/webdings.ttf and /dev/null differ
diff --git a/bundle/fonts/windows/wingding.ttf b/bundle/fonts/windows/wingding.ttf
deleted file mode 100644
index 6e38f7fdd..000000000
Binary files a/bundle/fonts/windows/wingding.ttf and /dev/null differ
diff --git a/ci/browser_inputs.py b/ci/browser_inputs.py
index 08badbff6..1ee10087d 100644
--- a/ci/browser_inputs.py
+++ b/ci/browser_inputs.py
@@ -64,6 +64,37 @@
BROWSER_DIRS = ("patches", "additions", "settings", "assets", "scripts")
BROWSER_FILES = ("upstream.sh", "Makefile")
+# Scripts under scripts/ that cannot change compiled output, and so must not
+# invalidate a 665 MB cached browser.
+#
+# scripts/ holds the build machinery -- patch.py, copy-additions.sh, package.py
+# -- so hashing the directory wholesale is the right default. It also holds
+# tools that operate on the PYTHON package's data files and are never invoked
+# by a build, and those cost an hour each time they are touched: editing
+# clean-fingerprint-data.py, which rewrites pythonlib JSON, forced a full
+# rebuild of a browser whose sources had not moved (measured 2026-09-17).
+#
+# Nothing is excluded on the grounds that it "looks unrelated". An entry here
+# is checked by ci/tests/test_ci.py against the build's own entry points, so a
+# script that IS reachable from a build cannot sit in this list: getting that
+# wrong serves a stale binary to every suite downstream, which is far worse
+# than an unnecessary rebuild.
+NON_NATIVE_SCRIPTS = frozenset(
+ {
+ "scripts/clean-fingerprint-data.py",
+ }
+)
+
+# Where a build can reach a script from. Used by the test above, not here.
+BUILD_ENTRY_POINTS = (
+ "Makefile",
+ "multibuild.py",
+ "scripts/patch.py",
+ "scripts/package.py",
+ "scripts/copy-additions.sh",
+ "scripts/_mixin.py",
+)
+
JUGGLER = Path("additions") / "juggler"
JAR_MN = JUGGLER / "jar.mn"
@@ -124,7 +155,7 @@ def native_inputs(root: Optional[Path] = None) -> List[str]:
if not path.is_file():
continue
rel = str(path.relative_to(root))
- if rel not in resources:
+ if rel not in resources and rel not in NON_NATIVE_SCRIPTS:
found.append(rel)
for name in BROWSER_FILES:
if (root / name).is_file():
diff --git a/ci/run_sundial.py b/ci/run_sundial.py
index 8d2c3625c..63f613e03 100644
--- a/ci/run_sundial.py
+++ b/ci/run_sundial.py
@@ -740,6 +740,7 @@ async def scan(
page = await context.new_page()
log(f"opening sundial (auto scan) as {os_name}")
await page.goto(target, wait_until="load", timeout=120_000)
+ await _exercise_input(page)
payload = await asyncio.get_running_loop().run_in_executor(
None, collector.wait, timeout
@@ -757,6 +758,38 @@ async def scan(
return payload
+async def _exercise_input(page) -> None:
+ """Move and click the mouse so sundial's input-pipeline vectors have data.
+
+ The pointer vectors (pointerType, pressure, screen/client offset, down->up
+ latency, move cadence) record trusted events for a few seconds after load
+ and report "--" (pending) if nothing arrives. This is the same input path a
+ user's script takes -- page.mouse through juggler -- so a defect there
+ (e.g. an empty pointerType) fails the gate exactly the way it would fail on
+ a site. Best-effort: input errors must not abort the scan.
+ """
+ try:
+ vw = await page.evaluate("() => [innerWidth, innerHeight]")
+ w, h = (vw or [1280, 720])[:2]
+ cx, cy = max(40, w // 3), max(40, h // 3)
+ await page.mouse.move(cx - 30, cy - 20)
+ for i in range(1, 13):
+ await page.mouse.move(cx - 30 + i * 5, cy - 20 + (i % 3) * 2)
+ await asyncio.sleep(0.016)
+ await page.mouse.down()
+ await asyncio.sleep(0.09)
+ await page.mouse.up()
+ await page.keyboard.press("Shift")
+ # Then a burst with no pause between moves. Paced moves look the same
+ # on every browser; only a pointer that outruns the compositor shows
+ # whether the events are being queued and coalesced the way real input
+ # is, which is what ls-pointer-move-rate judges.
+ for i in range(1, 61):
+ await page.mouse.move(cx + i, cy + (i % 4))
+ except Exception as exc: # noqa: BLE001 - never fail the scan on input
+ log(f"input exercise skipped: {exc}", level="WARN")
+
+
def seal(report: dict, out: Path) -> Optional[Path]:
"""Optionally keep an encrypted copy of the *full* report for debugging.
diff --git a/ci/skiplist.yml b/ci/skiplist.yml
index b19cf8354..e919c7e13 100644
--- a/ci/skiplist.yml
+++ b/ci/skiplist.yml
@@ -64,6 +64,22 @@ skip:
expects a timeout error when the element never settles, and Camoufox does
not raise one.
+ - test: tests/async/test_keyboard.py::test_should_send_proper_codes_while_typing
+ reason: >-
+ Typing "!" on a US layout takes Shift, and upstream asserts the three events
+ it dispatches for the character alone, with shiftKey false throughout. A
+ page listening to keydown therefore sees a character no keyboard could have
+ produced. Camoufox presses Shift around the shifted character, so the page
+ sees "Keydown: Shift ShiftLeft 16 [Shift]" before it and shiftKey true on
+ the character's own events. The character's own key/code/keyCode are
+ unchanged (! Digit1 49); what upstream asserts is the absence of the Shift.
+
+ - test: tests/async/test_keyboard.py::test_should_press_plus
+ reason: >-
+ The same auto-Shift, reached through keyboard.press("+") rather than
+ type(). Listed separately because dropping auto-Shift would have to unskip
+ both.
+
# --- client certificates the BROWSER has to present ------------------------
#
# Not the whole module. Playwright offers client certs two ways, and only one
@@ -139,3 +155,35 @@ skip:
drives the bare binary through plain Playwright. The replacement asserts
what this layer can actually promise -- a Gecko UA carrying one of the two
tokens, and the same one in the header as in the DOM.
+
+ # --- the popup blocker -----------------------------------------------------
+ #
+ # Firefox blocks window.open() that is not called while handling user input.
+ # Playwright and geckodriver both ship that blocker OFF, and the difference is
+ # one bit of page JS with no permission and nothing to wait for, so Camoufox
+ # keeps Firefox's default and lifts it only for the driver's own evaluate
+ # (nsIDocShell.driverPopupsAllowed; patches/popup-blocker-parity.patch,
+ # tests/patches/popup-blocker-parity.py, sundial ls-popup-blocker).
+ #
+ # page.evaluate(() => window.open(...)) therefore still works, which is what
+ # nearly every popup test in the suite does. This one is the exception.
+
+ - test: tests/async/test_browsercontext.py::test_page_event_should_have_an_opener
+ reason: >-
+ The fixture it navigates to, /popup/window-open.html, calls window.open()
+ from the PAGE's own script at load, with no user gesture. Stock Firefox
+ returns null there and opens nothing, so no page event arrives and
+ popup.opener() has nothing to assert. Upstream can rely on it only because
+ Playwright's Firefox ships dom.disable_open_during_load=false. Every other
+ popup test in the suite goes through page.evaluate and still passes.
+
+ - test: tests/async/test_popup.py::test_should_work_with_fake_clicking_target__blank_and_rel_noopener
+ reason: >-
+ A scripted `a.click()` on a link, which carries no user
+ activation, so stock Firefox blocks the popup and upstream can only assert
+ one because Playwright's Firefox ships the blocker off. Camoufox's driver
+ door does not reach this case either: it is a content-process docShell
+ flag and link retargeting is decided in the parent (see
+ patches/popup-blocker-parity.patch). page.click() still works -- it
+ synthesizes a real click, which grants a real activation -- and so does
+ page.evaluate(() => window.open(...)).
diff --git a/ci/tests/test_ci.py b/ci/tests/test_ci.py
index 7cb88236a..b6a56e6e1 100644
--- a/ci/tests/test_ci.py
+++ b/ci/tests/test_ci.py
@@ -2278,6 +2278,41 @@ def test_the_native_inputs_cover_everything_that_can_change_the_binary():
)
+def test_nothing_the_build_runs_is_excluded_from_the_native_hash():
+ """The exclusion list must not contain a script a build can reach.
+
+ NON_NATIVE_SCRIPTS exists so a tool that rewrites pythonlib's data files
+ does not invalidate a 665 MB cached browser and buy an hour of compiling
+ (measured: editing scripts/clean-fingerprint-data.py did exactly that).
+ Excluding a script the build DOES run is the dangerous direction -- the
+ cache would then serve a browser built from different sources, and every
+ suite downstream would pass against it. So each entry is checked against
+ the files a build enters through, rather than trusted.
+ """
+ from ci.browser_inputs import BUILD_ENTRY_POINTS, NON_NATIVE_SCRIPTS, REPO_ROOT
+
+ reachable = ""
+ for entry in BUILD_ENTRY_POINTS:
+ path = REPO_ROOT / entry
+ assert path.is_file(), f"{entry} is gone; the check below proves nothing"
+ reachable += path.read_text(encoding="utf-8", errors="ignore")
+
+ for script in sorted(NON_NATIVE_SCRIPTS):
+ name = pathlib.Path(script).name
+ assert name not in reachable, (
+ f"{script} is referenced from a build entry point but is excluded "
+ "from the native hash -- a change to it would be served a stale browser"
+ )
+
+
+def test_excluded_scripts_exist():
+ """A stale exclusion silently stops excluding anything; say so instead."""
+ from ci.browser_inputs import NON_NATIVE_SCRIPTS, REPO_ROOT
+
+ for script in sorted(NON_NATIVE_SCRIPTS):
+ assert (REPO_ROOT / script).is_file(), f"{script} no longer exists"
+
+
def test_jar_mn_is_read_not_guessed():
"""Two files in one source directory land at different depths.
diff --git a/docs/FONTS.md b/docs/FONTS.md
new file mode 100644
index 000000000..dbb65ded7
--- /dev/null
+++ b/docs/FONTS.md
@@ -0,0 +1,265 @@
+# Bundled fonts: what ships, what is reported, how to verify
+
+Camoufox ships its own fonts so that font enumeration and text rendering are a
+property of the *claimed* OS rather than of the host. There are two halves: a
+font bundle (`bundle/fonts/`) and one fontconfig per OS
+(`bundle/fontconfig//fonts.conf`). The data the launcher draws from
+(`pythonlib/camoufox/fonts.json`, `font-bases.json`, `font-groups.json` and the
+`_ESSENTIAL_FONTS_*` / `_BASE_VARIANT_FONTS_*` / `_*_MARKER_FONTS` constants in
+`fingerprints.py`) is generated against that bundle and must be regenerated with
+it.
+
+## Getting the bundle
+
+The bundle is **a release asset, not repo content** — 1513 faces, 2.16 GB
+extracted, 843 MB as `.tar.xz`. It cannot live in git: GitHub caps a tracked
+file at 100 MiB (`Apple Color Emoji.ttc` alone is 183 MiB) and an `.xz` archive
+cannot be delta-compressed, so every font update would append another ~843 MB
+blob to history forever. Release assets allow 2 GB per file, which fits the
+whole bundle with no splitting and no LFS. It is the same trust model the build
+already uses for the Firefox source itself.
+
+```
+make fetch-fonts # download + verify the archive (bundle/fonts-bundle-*.tar.xz)
+make fonts-extract # ...and unpack it to bundle/fonts/ (gitignored)
+make fonts-check # verify the archive against the pin; non-zero if absent
+make fonts-clean # drop the extracted tree
+```
+
+`scripts/data/font-bundle.json` pins the tag, asset name, size and **sha256**,
+so a given commit expects one exact bundle and a truncated or substituted
+download fails loudly instead of silently producing a browser that reports fonts
+it cannot draw. `make fonts-extract` stamps the unpacked tree with that sha256
+(`bundle/fonts/.bundle-sha256`), so re-running it is free — which is what lets
+`package-*` and `stage-fonts` depend on it unconditionally.
+
+The asset is hosted by this repository, never by a fork: a build input that
+lives in someone's personal account breaks the moment that account renames the
+repo or deletes the release.
+
+Publishing a new bundle: rebuild the archive, `python3 scripts/fetch-fonts.py
+--write-spec --tag font-bundle-vN`, then upload it under that tag.
+Font-bundle tags are excluded from `build.yml`, so they do not trigger a browser
+build or appear among the browser downloads.
+
+## Layout: each face stored once
+
+A face used by several OSes is stored **once**, in a directory named for the set
+of OSes that use it. `bundle/fonts/groups.json` records which groups each OS
+reads.
+
+| group | faces | read by |
+|-------|------:|---------|
+| `LMW` | 328 | all three |
+| `LM` | 92 | Linux + macOS |
+| `LW` | 71 | Linux + Windows |
+| `MW` | 48 | macOS + Windows |
+| `L` | 301 | Linux only |
+| `M` | 311 | macOS only |
+| `W` | 362 | Windows only |
+
+An OS reads the four groups its letter appears in: Linux `L+LM+LMW+LW` (792
+faces), macOS `LM+LMW+M+MW` (779), Windows `LMW+LW+MW+W` (809). Storing a full
+copy per OS instead made 41% of the bundle byte-identical duplicates (2955 files
+/ 3.96 GB became 1513 / 2.16 GB) while leaving every OS's set unchanged.
+
+Every package ships **all seven groups**, so the fingerprint is built from the
+fonts actually available. What differs is how they are gated:
+
+- **Linux packages** keep the group subdirectories and `groups.json`.
+ `utils._generate_fontconfig` reads it at launch and hands fontconfig one
+ `` per group the claimed OS reads. The parent is never named, because
+ fontconfig scans `` **recursively** — naming it would put every other
+ OS's faces on the search path.
+- **macOS and Windows packages** flatten the groups into one directory: CoreText
+ and DirectWrite activate a single directory and cannot read subfolders. There
+ is no directory gate on those hosts; the allowlist in
+ `patches/font-hijacker.patch` is what restricts a lookup. Basenames therefore
+ must not collide within a package's group set, which `verify-fonts.py` checks.
+
+This replaced the 455 `` duplicate-face rejects the Windows fontconfig used
+to carry. They were redundant under grouping and also unsound: 114 bundled
+filenames contain `[ ]` (e.g. `ReemKufi[wght].ttf`), which fontconfig parses as a
+character class, so those rejects silently matched nothing.
+
+## The two invariants
+
+**1. Everything reported must be renderable.** Every family the launcher may
+report for an OS must be one the packaged browser can draw under that OS's
+bundled fontconfig. `font-hijacker.patch` prunes lookups by family name *after*
+fontconfig substitution, so a reported name fontconfig cannot resolve measures
+as the fallback — a **reverse leak**. The old `fonts.json[mac]` carried 70 such
+names (Hiragino etc.); the current lists carry none.
+
+**2. Nothing outside an OS's groups may be reachable.** The converse, and the
+one the group layout exists to enforce: a Windows identity must not be able to
+render a macOS-only face, or an emoji/CJK glyph can fall back to Segoe UI Emoji
+or PingFang on a machine claiming Linux. No reported name reveals this, and no
+draw test can see it — it is checked directly, by asking fontconfig for every
+file it can reach under each OS's conf and requiring all of them to sit inside
+that OS's own groups (810 / 780 / 793 faces, including browser-shipped
+`TwemojiMozilla.ttf`).
+
+The reverse direction of invariant 1 is deliberately loose: an OS renders more
+families than it ever reports (529 published vs 335 reported on Windows, 872 vs
+567 on macOS, 583 vs 358 on Linux; `gen-fonts-json.py --dump-union` lists the
+gap). Those are names a real OS never presents as a family — weight-variant
+subfamilies DirectWrite folds into their parent ("Barlow Black"), the bare
+`Sitka` / `Segoe UI Variable` umbrella names, and CJK families a stock install
+does not report. They stay renderable but unreported.
+
+## How `fonts.json` is derived (`scripts/gen-fonts-json.py`)
+
+```
+reportable[os] = fc-scan(the groups reads) families fontconfig publishes
+ + SCAN_FAMILIES Sitka * / Segoe UI Variable * (scan-time matches)
+ + ALIASES names fonts.conf rewrites to a bundled target
+ + SHIPPED_BY_BROWSER Twemoji Mozilla (from the Firefox build)
+ ∩ names(scripts/data/font-manifests.json) bases + additions + marker fonts for that OS
+ + ALIASES, REPORTABLE_EXTRA forced in
+```
+
+Namespace matters here and is easy to get wrong: Windows and macOS enumerate the
+**legacy family** (nameID 1), while Linux enumerates through **fontconfig**.
+`system_profiler` and WPF report *typographic* families (nameID 16), a different
+namespace — a list gathered that way will disagree with what a browser sees.
+
+`--print-bases` prints the OS base lists intersected with the result, which is
+what the `_ESSENTIAL_FONTS_*` constants are pasted from. Those constants are the
+**intersection** of an OS's bases, never a superset: a name present in only one
+version's base must not be forced onto every identity, or that version's base
+becomes a no-op.
+
+Regenerate together whenever the bundle changes:
+
+```
+python3 scripts/gen-font-groups.py # font-groups.json + font-bases.json
+python3 scripts/gen-fonts-json.py # fonts.json
+python3 scripts/gen-fonts-json.py --print-bases # paste into fingerprints.py
+python3 scripts/verify-fonts.py # must pass before committing
+```
+
+Deliberate choices:
+
+- **Windows aliases are unconditional and always reported.** The 13
+ GDI-substitution / Light-Semilight rules (`Courier -> Courier New`,
+ `Helvetica -> Arial`, `Calibri Light -> Calibri`, ...) are unconditional in
+ `bundle/fontconfig/windows/fonts.conf` because there is no per-launch
+ fontconfig hook, and the names are in `_ESSENTIAL_FONTS_WINDOWS`. That matches
+ reality: every Windows install resolves all of them.
+- **macOS TTC weight names are reported.** The confs rewrite `American
+ Typewriter Semibold`, `Futura Bold`, `STIX Two Math Regular`, ... to their base
+ family. A real Mac registers those as families but `fc-scan` cannot see them,
+ so the ones whose target is bundled are forced in.
+- **`Twemoji Mozilla` is reportable on Linux** (a CreepJS Linux marker, and
+ Firefox exposes its bundled font to content). Not reported on macOS.
+- One name renders for every Linux identity but is not always reported
+ (`Noto Sans Canadian Aboriginal Regular`) because a real Ubuntu does not report
+ it. `verify-fonts.py` warns rather than fails.
+
+## The per-launch draw (`fingerprints._generate_random_font_subset`)
+
+Modelled on how real machines actually differ: one OS-version base, always whole,
+plus independent per-unit draws. Not a uniform percentage of a pool.
+
+1. **One base, drawn by weight, always complete.** A real machine has all of its
+ OS defaults, so a base is never sampled.
+
+ | OS | bases (weight / families) |
+ |----|---------------------------|
+ | Windows | `win11` 1.00 / 125 |
+ | macOS | `sonoma` 0.20 / 499 · `tahoe26` 0.65 / 364 · `macos27` 0.15 / 361 |
+ | Linux | `ubuntu2404` 0.45 / 257 · `ubuntu2604` 0.55 / 266 |
+
+ Windows 10 was dropped entirely. macOS 27 differs from 26.6.2 by only three
+ families and is identified by the *absence* of `Noto Sans Brahmi` /
+ `Noto Sans CanAborig`.
+
+2. **The essential floor** (`_ESSENTIAL_FONTS_*`: 125 / 369 / 274) — the
+ intersection of that OS's bases, so it holds whichever base was drawn.
+
+3. **Per-unit Bernoulli draws, per OS.** Each addition is one independent
+ decision at its own measured probability. `kind: bundle` is atomic — it
+ installs whole or not at all. `kind: alacarte` is piecemeal: on a hit, a
+ size is drawn from its `sizes` distribution and that many families are taken.
+ `requiresLocale` gates a unit on the identity's locale (e.g. `cjk-tc` on
+ `zh-TW`).
+
+ | unit | kind | Windows | macOS | Linux |
+ |------|------|--------:|------:|------:|
+ | `office` | bundle | 0.602 | — | — |
+ | `apple-optional` | bundle | — | 0.818 | — |
+ | `hololens` | bundle | 0.592 | — | — |
+ | `distro-i18n` | bundle | — | — | 0.372 |
+ | `libreoffice` | bundle | 0.066 | — | 0.112 |
+ | `pan-euro` | bundle | 0.028 | — | — |
+ | `cascadia` | bundle | 0.100 | 0.060 | 0.080 |
+ | `meslo` | bundle | 0.040 | 0.040 | 0.060 |
+ | `cjk-tc` | bundle (`zh-TW`) | 0.900 | — | — |
+ | `dev` | à la carte | 0.038 | 0.070 | 0.174 |
+ | `web` | à la carte | 0.088 | 0.270 | 0.195 |
+
+ `apple-optional` is one atomic unit rather than base because Apple ships those
+ 57 faces as optional Font Book downloads, and the fpgen corpus puts all of
+ them on exactly 81.8% of Macs.
+
+4. **Marker fonts** appended if missing (`_ensure_marker_fonts`).
+
+Resulting list sizes over 20 draws: 125–281 of 335 (Windows), 369–526 of 567
+(macOS), 278–319 of 358 (Linux).
+
+For a **native** identity — the host's own OS — on macOS and Windows the draw
+claims the OS base only, because the real system fonts are the right ones there
+and `font-hijacker.patch` does not activate the bundle. On a Windows host the
+Win11 marker families are *subtracted* when the host cannot render them, rather
+than added when it can; claiming a marker the host lacks is the leak.
+
+`pythonlib/tests/test_font_distribution.py` (29 tests) covers this: base
+completeness and weights, per-unit probability, bundle atomicity, à-la-carte
+sizing, locale gating, determinism, renderable-only, and that the draw actually
+varies (distinct lists, no single list dominating). Tolerances are binomial, at
+5σ, so they fail on a real shift rather than on noise.
+
+## fontconfig parity
+
+Linux: generics resolve as a stock Ubuntu does (`sans-serif` → Noto Sans,
+`serif` → Noto Serif, `monospace` → DejaVu Sans Mono, `cursive` → Z003),
+`hintstyle` is `hintslight`, and the stock metric aliases (30-metric-aliases),
+49-sansserif, urw-base35 and the non-Latin rule files are merged in stock
+`conf.d` order. Windows: `sans-serif` → Arial, `serif` → Times New Roman,
+`monospace` → Consolas, `cursive` → Comic Sans MS, plus `MS Shell Dlg 2 ->
+Tahoma`, the `Sitka` / `Segoe UI Variable` scan-time instance families and the
+alias block above. macOS: Helvetica / Times / Menlo / Apple Chancery / Zapfino.
+`system-ui` is left to Gecko, which resolves it itself. The
+`fonts` line that `utils.py` rewrites is kept in all
+three — `verify-fonts.py` fails if it is missing.
+
+## Verifying
+
+```
+python3 scripts/verify-fonts.py # full: builds a fontconfig cache over the bundle, minutes on first run
+python3 scripts/verify-fonts.py --quick # constants, draws and layout only
+cd pythonlib && python3 -m pytest -q -k "font or humanize or launch_environment"
+```
+
+The full run checks, per OS: `fonts.json[os]` ⊆ what `fc-list` publishes (aliases
+resolved via `fc-match`), no file reachable outside that OS's groups, generics
+resolve to a reportable family, essential / variant / marker ⊆ `fonts.json`,
+20 draws stay inside `fonts.json`, each face stored exactly once, no subfolders,
+and no basename collisions within a package's group set.
+
+## Known residue
+
+- **The Linux base over-claims against the recorded corpus.** A draw reports a
+ median ~287 families where real Linux machines in the corpus report ~100. The
+ cause is that the bundle ships fontconfig's `30-metric-aliases`, so
+ Arial/Times/Courier always resolve and must therefore always be reported.
+ Closing it needs either distro base variants or a change to which aliases ship.
+- **The macOS base weights (0.20 / 0.65 / 0.15) are estimates.** There is no
+ version-share data source behind them, unlike the addition probabilities,
+ which are measured. Sonoma's base is inherited and not re-verifiable on
+ current hardware.
+- **Nothing has been checked in a running browser.** Both invariants above are
+ verified at the fontconfig layer, which is the gate on Linux packages. On
+ macOS and Windows hosts the gate is the allowlist patch instead, and that has
+ not been exercised against the flattened group layout.
diff --git a/docs/MEDIA-DEVICES.md b/docs/MEDIA-DEVICES.md
new file mode 100644
index 000000000..e82bd3284
--- /dev/null
+++ b/docs/MEDIA-DEVICES.md
@@ -0,0 +1,51 @@
+# Media devices
+
+How Camoufox presents `navigator.mediaDevices` (`media-device-spoofing.patch`,
+`pythonlib/camoufox/media-devices.json`, `draw_media_devices()`).
+
+## What a page can see
+
+Stock Firefox exposes, **before** any `getUserMedia` grant, at most one device
+per input kind with empty `label`/`deviceId`/`groupId` and no `audiooutput`.
+**After** a grant (or while capturing) it lists every device with the OS's own
+names, per-origin hashed ids, and shared `groupId`s for devices of the same
+hardware. The captured track's `label` and `getSettings().deviceId/groupId`
+are those of one listed device.
+
+Camoufox reproduces exactly that for a spoofed machine:
+
+- The fake media engine (`MediaEngineFake::EnumerateDevices`) emits the
+ identity's microphones, cameras and speakers, with labels, raw ids and
+ groups from the config, and `MediaManager` uses it for mics/cams and for the
+ outputs whenever `mediaDevices:enabled` is set. `MediaDevices.cpp` is stock,
+ so the pre-/post-grant rules, feature policy, permission prompts, the
+ capture indicator and the camera/microphone `groupId` correlation all run
+ unchanged.
+- `getUserMedia()` therefore succeeds iff the identity has the requested
+ device kind (a claimed camera captures the fake engine's test pattern; a
+ camera-less identity gets `NotFoundError`, like a real machine without one).
+- `media.navigator.permission.fake = true` (camoufox.cfg) makes the fake
+ devices count as capturing, which is what exposes labels after a grant.
+
+## Config keys
+
+| key | meaning |
+| --- | --- |
+| `mediaDevices:enabled` | use the identity's devices instead of the host's |
+| `mediaDevices:micros` / `webcams` / `speakers` | counts |
+| `mediaDevices:microphoneLabels` / `webcamLabels` / `speakerLabels` | labels, aligned with the counts |
+| `mediaDevices:microphoneGroups` / `webcamGroups` / `speakerGroups` | raw group ids (same string = same `groupId`) |
+
+The Python package draws all of them from `media-devices.json`, seeded by the
+identity, unless the caller set any `mediaDevices:` key. Label styles follow
+the OS: Windows WASAPI friendly names (`Microphone Array (Realtek(R) Audio)`),
+macOS CoreAudio names (`MacBook Pro Microphone`, `FaceTime HD Camera`), Linux
+PulseAudio/PipeWire descriptions plus v4l2 card names with the USB id, and a
+`Monitor of …` source per output as PulseAudio exposes.
+
+## Guard
+
+`tests/patches/media-devices-coherence.py` checks the pre-grant shape, that
+capture succeeds exactly for listed kinds, that captured tracks match listed
+devices, that labels are never the fake engine's, and that a camera-only
+identity does not crash the content process (it did, before build12).
diff --git a/docs/input-dispatch.md b/docs/input-dispatch.md
index ad63e9496..e31ac007d 100644
--- a/docs/input-dispatch.md
+++ b/docs/input-dispatch.md
@@ -48,13 +48,28 @@ reintroducing a fixed deadlock one day before it was re-fixed.
the boundary snap), the in-viewport predicate, and the ack wait. Callers pass
relative coordinates and never see a bounding box.
+**A fresh rect.** The browser rect is measured *after* the last `await` before
+the dispatch (`apz-repaints-flushed`), never before it. The chrome can change
+height during that wait — measured 2026-09-14: the nav-bar grew from 40 to
+41 px about a second after startup when the (then forced) built-in theme was
+applied — and a rect taken before it put a relative `y == 0` one row above the
+content: the event reached the renderer as an exit event at client `y == -1`,
+produced no ack, and the page saw no mousemove (~1 in 25 runs of
+`near-edge-mouse-deadlock.py`). Both dispatch sites (`Page.dispatchMouseEvent`,
+`Page.dispatchWheelEvent`) measure synchronously before dispatching.
+
**Bounded waits.** `sendAcked()` waits at most `kAckDeadlineMs` (5s) and then
drops the event with a warning naming the type, coordinate and browser rect. The
deadline is sized above the slowest *legitimate* ack, not near the typical one:
acks are p99 1ms on an idle page, but they are delivered from the content main
thread and inherit any block on it — a 3s synchronous script delayed one by
2849ms. `sendTrajectoryAcked()` abandons the rest of a curve after the first
-undelivered point, so ~110 bounded waits cannot add up to an unbounded slot.
+undelivered point, so the ~90 bounded waits a curve can hold — the 1.5s default
+humanize ceiling at 60Hz — cannot add up to an unbounded slot. It also refuses
+to dispatch a point on the pixel the previous dispatch left the cursor on: a
+zero-displacement move produces no `eMouseMove`, so it is never acked, and
+that is the same deadlock reached from inside a curve rather than from
+`Page.dispatchMouseEvent`.
`activateAndRun()` carries a 30s backstop for the other unbounded waits
reachable from the same slot (`apz-repaints-flushed`, `TabSwitchDone`, the drag
path's waits), none of which has failed yet.
diff --git a/docs/per-context-patches.md b/docs/per-context-patches.md
index 0585b7c60..27bef41fc 100644
--- a/docs/per-context-patches.md
+++ b/docs/per-context-patches.md
@@ -592,21 +592,26 @@ Camoufox bundles OS-specific fontconfig configurations and font files so that fo
bundle/
├── fontconfig/
│ ├── macos/fonts.conf ← sans-serif→Helvetica, monospace→Menlo, cursive→Apple Chancery
-│ ├── linux/fonts.conf ← sans-serif→Arimo, monospace→Cousine
+│ ├── linux/fonts.conf ← sans-serif→Noto Sans, monospace→DejaVu Sans Mono
│ └── windows/fonts.conf ← sans-serif→Arial, monospace→Consolas
-└── fonts/
- ├── macos/ ← 355 font files (Helvetica, Menlo, PingFang, SF Pro, etc.)
- ├── linux/ ← 143 font files (Noto Sans, Arimo, Cousine, Tinos, etc.)
- └── windows/ ← 144 font files (Segoe UI, Tahoma, Cambria, etc.)
+└── fonts/ ← a RELEASE ASSET, not tracked: `make fonts-extract`
+ ├── groups.json ← which groups each OS reads
+ ├── LMW/ ← 328 faces all three OSes have
+ ├── LM/ LW/ MW/ ← 92 / 71 / 48 faces shared by exactly two
+ └── L/ M/ W/ ← 301 / 311 / 362 faces unique to one
```
+Each face is stored **once**, under the set of OSes that use it, rather than
+copied per OS — see [FONTS.md](FONTS.md). Every package ships all seven groups;
+what differs per identity is which of them are on the search path.
+
**What each `fonts.conf` defines:**
- **Generic family defaults** — `sans-serif`, `serif`, `monospace`, `cursive`, `fantasy`, `system-ui` mapped to OS-appropriate fonts
- **TTC weight-variant aliases** — macOS TrueType Collections register with weight suffixes ("PingFang HK Light") but Linux fontconfig only sees the base name. Aliases rewrite queries so CreepJS marker font detection works cross-platform.
- **MONO redirect** — "MONO" is a Linux-only font. Redirected to the OS-appropriate monospace (Menlo on macOS, Cousine on Linux) to prevent host OS leakage.
- **Rendering settings** — Standardized antialias, hinting, and lcdfilter across all configs.
-**Runtime path rewriting:** At launch time, `createRuntimeFontconfig()` reads the bundled `fonts.conf` and rewrites font directory paths to absolute paths pointing at the correct OS-specific font subdirectory (e.g. `fonts/macos/` for macOS profiles). This prevents cross-OS font leakage (e.g. Linux font Arimo appearing in a macOS profile) and avoids CWD-dependent path issues.
+**Runtime path rewriting:** At launch time, `utils._generate_fontconfig()` reads the bundled `fonts.conf` and replaces its single `fonts` with one absolute `` per group the claimed OS reads (from `fonts/groups.json`). This is what prevents cross-OS font leakage — a face the claimed OS must not see is simply not on the search path — and it also avoids CWD-dependent path issues. The parent `fonts/` directory is never named: fontconfig scans `` **recursively**, so naming it would make every other OS's faces reachable for glyph fallback even though the allowlist hides them from direct lookup. `scripts/verify-fonts.py` asserts that no file outside an OS's own groups is reachable under its conf.
**`FONTCONFIG_PATH` environment variable:** Must be set when launching Camoufox on Linux. Points to the correct OS-specific fontconfig directory (e.g. `camoufox/fontconfig/macos/`). The Go launcher sets this dynamically based on the target OS.
@@ -614,14 +619,14 @@ bundle/
## Python Library Changes
-The Camoufox Python package (`pythonlib/`) generates fingerprints for both `NewBrowser` (global CAMOU_CONFIG) and `NewContext` (per-context init script). **BrowserForge is the default for both paths.** Real fingerprint presets are available as an opt-in alternative.
+The Camoufox Python package (`pythonlib/`) generates fingerprints for both `NewBrowser` (global CAMOU_CONFIG) and `NewContext` (per-context init script). **fpgen is the default for both paths.** Real fingerprint presets are available as an opt-in alternative.
### Fingerprint Source Priority
| Path | Default | Opt-in Alternative |
|------|---------|-------------------|
-| **NewBrowser** (`launch_options()` in `utils.py`) | BrowserForge synthetic | Pass `fingerprint_preset=True` or a preset dict |
-| **NewContext** (`generate_context_fingerprint()` in `fingerprints.py`) | BrowserForge synthetic | Pass `preset=dict` explicitly |
+| **NewBrowser** (`launch_options()` in `utils.py`) | fpgen synthetic | Pass `fingerprint_preset=True` or a preset dict |
+| **NewContext** (`generate_context_fingerprint()` in `fingerprints.py`) | fpgen synthetic | Pass `preset=dict` explicitly |
**Recommended for v149+ binaries:** opt into bundled real fingerprints via
`fingerprint_preset=True`. The library auto-selects the v150 preset bundle
@@ -652,9 +657,9 @@ bundles are shipped in the wheel.
| Property | Source | Notes |
|----------|--------|-------|
-| UA, platform, HWC, oscpu | BrowserForge or preset | UA version patched to match Camoufox Firefox version |
-| Screen dims, colorDepth | BrowserForge or preset | Viewport adjusted by -28px for browser chrome |
-| WebGL vendor/renderer | `sample_webgl()` from `webgl_data.db` | OS-weighted probability sampling. BrowserForge does NOT generate WebGL (commented out in `browserforge.yml`). Both paths call `sample_webgl()` when WebGL values are missing. |
+| UA, platform, HWC, oscpu | fpgen or preset | UA version patched to match Camoufox Firefox version |
+| Screen dims, colorDepth | fpgen or preset | Viewport adjusted by -28px for browser chrome |
+| WebGL vendor/renderer | `sample_webgl()` from `webgl_data.db` | OS-weighted probability sampling. The generator's own GPU fields are not mapped in `fpgen.yml` yet, so both paths call `sample_webgl()` for WebGL. fpgen does carry a full WebGL set (999 renderers against webgl_data.db's 33) -- wiring it through is the follow-up. |
| Font list | `_generate_random_font_subset()` | Random 30-78% of OS fonts. Essential + marker fonts always included. NOT from presets — generated fresh per call. |
| Font spacing seed | `randint(1, 2^32-1)` | Excludes 0 (0 = no-op in C++) |
| Audio seed | `randint(1, 2^32-1)` | Excludes 0 |
@@ -669,7 +674,7 @@ bundles are shipped in the wheel.
**`fingerprints.py`** — Per-context fingerprint generation:
- `generate_context_fingerprint()` — main API. Returns `{init_script, context_options, config, preset}`
- `from_preset()` — converts real preset to CAMOU_CONFIG format
-- `from_browserforge()` — converts BrowserForge Fingerprint to CAMOU_CONFIG using `browserforge.yml` mappings
+- `from_fpgen()` — converts an fpgen fingerprint dict to CAMOU_CONFIG using `fpgen.yml` mappings
- `_build_init_script()` — generates JavaScript IIFE calling 15 `window.setXxx()` functions with `typeof` guards (`setWebRTCIPv6` is not included — IPv6 is optional and rarely set)
- `_generate_random_font_subset()` — unique random font subset per call (Fisher-Yates, essential + marker fonts always included)
- `_generate_random_voice_subset()` — unique random voice subset per call (essential voices always included, OS-aware)
diff --git a/patches/anti-font-fingerprinting.patch b/patches/anti-font-fingerprinting.patch
index a30c48ab0..a276c9671 100644
--- a/patches/anti-font-fingerprinting.patch
+++ b/patches/anti-font-fingerprinting.patch
@@ -176,10 +176,10 @@ index 0000000000..63d43f3b86
\ No newline at end of file
diff --git a/dom/base/RoverfoxStorageManager.cpp b/dom/base/RoverfoxStorageManager.cpp
new file mode 100644
-index 0000000000..1f8b3a08f6
+index 0000000000..dcb359d25a
--- /dev/null
+++ b/dom/base/RoverfoxStorageManager.cpp
-@@ -0,0 +1,184 @@
+@@ -0,0 +1,194 @@
+#include "RoverfoxStorageManager.h"
+#include "mozilla/Preferences.h"
+#include "nsXULAppAPI.h"
@@ -189,12 +189,25 @@ index 0000000000..1f8b3a08f6
+namespace mozilla {
+namespace dom {
+
++// Values live on the DEFAULT pref branch. They are session state (per-context
++// values a launch sets up), and default prefs are never written to prefs.js:
++// as user prefs a persistent profile kept them, so a relaunch with a different
++// config still reported the previous session's timezone and navigator values.
++// Reading the default branch alone also ignores user values an older build
++// left in a profile's prefs.js.
++static constexpr auto kKind = PrefValueKind::Default;
++
+/* static */ nsTHashMap&
+RoverfoxStorageManager::GetLocalCache() {
+ static nsTHashMap sCache;
+ return sCache;
+}
+
++/* static */ nsTHashSet& RoverfoxStorageManager::GetMissCache() {
++ static nsTHashSet sMisses;
++ return sMisses;
++}
++
+/* static */ mozilla::Mutex&
+RoverfoxStorageManager::GetLocalCacheMutex() {
+ static mozilla::Mutex sMutex("RoverfoxStorageCache");
@@ -208,6 +221,15 @@ index 0000000000..1f8b3a08f6
+ return nsCString(prefName);
+}
+
++static void OnStoragePrefChanged(const char* aPrefName, void*) {
++ RoverfoxStorageManager::ForgetMiss(nsDependentCString(aPrefName));
++}
++
++/* static */ void RoverfoxStorageManager::ForgetMiss(const nsACString& aPrefName) {
++ MutexAutoLock lock(GetLocalCacheMutex());
++ GetMissCache().Remove(aPrefName);
++}
++
+/* static */ void
+RoverfoxStorageManager::SetPrefValue(const nsCString& prefName,
+ const nsCString& value) {
@@ -215,10 +237,11 @@ index 0000000000..1f8b3a08f6
+ {
+ MutexAutoLock lock(GetLocalCacheMutex());
+ GetLocalCache().InsertOrUpdate(prefName, nsCString(value));
++ GetMissCache().Remove(prefName);
+ }
+ // Sync to parent for cross-process availability
+ if (XRE_IsParentProcess()) {
-+ Preferences::SetCString(prefName.get(), value);
++ Preferences::SetCString(prefName.get(), value, kKind);
+ } else {
+ ContentChild* cc = ContentChild::GetSingleton();
+ if (cc) {
@@ -227,6 +250,54 @@ index 0000000000..1f8b3a08f6
+ }
+}
+
++/* static */ void RoverfoxStorageManager::ReadValue(const nsCString& prefName,
++ nsACString& outValue) {
++ // Local cache first (values set in this process)
++ {
++ MutexAutoLock lock(GetLocalCacheMutex());
++ if (auto entry = GetLocalCache().Lookup(prefName)) {
++ outValue = entry.Data();
++ }
++ }
++ // Then Preferences (values synced from other processes)
++ if (outValue.IsEmpty()) {
++ Preferences::GetCString(prefName.get(), outValue, kKind);
++ }
++ if (!outValue.IsEmpty() || XRE_IsParentProcess() || !NS_IsMainThread()) {
++ return;
++ }
++ // Sync IPC read from the parent covers a value another process put that has
++ // not reached this process's prefs yet. Once per key: a sync IPC on every
++ // read of an unset key (every read in a launch without per-context values)
++ // made navigator.hardwareConcurrency, screen.* and (color) queries ~20x
++ // slower than stock, a timing a page can measure. A later put anywhere
++ // clears the miss (pref callback / SetPrefValue).
++ {
++ MutexAutoLock lock(GetLocalCacheMutex());
++ if (GetMissCache().Contains(prefName)) {
++ return;
++ }
++ }
++ static bool sObserving = false;
++ if (!sObserving) {
++ sObserving = true;
++ Preferences::RegisterPrefixCallback(OnStoragePrefChanged, "roverfox.s."_ns);
++ }
++ ContentChild* cc = ContentChild::GetSingleton();
++ if (!cc) {
++ return;
++ }
++ nsCString fromParent;
++ cc->SendRoverfoxStorageGet(prefName, &fromParent);
++ outValue = fromParent;
++ MutexAutoLock lock(GetLocalCacheMutex());
++ if (fromParent.IsEmpty()) {
++ GetMissCache().Insert(prefName);
++ } else {
++ GetLocalCache().InsertOrUpdate(prefName, fromParent);
++ }
++}
++
+/* static */ void
+RoverfoxStorageManager::PutUint(const nsAString& key, uint32_t value) {
+ nsCString prefName = MakePrefName(key);
@@ -237,30 +308,8 @@ index 0000000000..1f8b3a08f6
+
+/* static */ bool
+RoverfoxStorageManager::GetUint(const nsAString& key, uint32_t& outValue) {
-+ nsCString prefName = MakePrefName(key);
+ nsAutoCString strValue;
-+ // Check local cache first (immediate reads for values set in this process)
-+ {
-+ MutexAutoLock lock(GetLocalCacheMutex());
-+ if (auto entry = GetLocalCache().Lookup(prefName)) {
-+ strValue = entry.Data();
-+ }
-+ }
-+ // Fall back to Preferences (values synced from other processes)
-+ if (strValue.IsEmpty()) {
-+ Preferences::GetCString(prefName.get(), strValue);
-+ }
-+ // Sync IPC read from parent (cross-process fallback for workers)
-+ if (strValue.IsEmpty() && !XRE_IsParentProcess() && NS_IsMainThread()) {
-+ ContentChild* cc = ContentChild::GetSingleton();
-+ if (cc) {
-+ cc->SendRoverfoxStorageGet(prefName, &strValue);
-+ if (!strValue.IsEmpty()) {
-+ MutexAutoLock lock(GetLocalCacheMutex());
-+ GetLocalCache().InsertOrUpdate(prefName, nsCString(strValue));
-+ }
-+ }
-+ }
++ ReadValue(MakePrefName(key), strValue);
+ if (!strValue.IsEmpty()) {
+ nsresult parseRv;
+ int64_t parsed = strValue.ToInteger64(&parseRv);
@@ -281,28 +330,8 @@ index 0000000000..1f8b3a08f6
+
+/* static */ bool
+RoverfoxStorageManager::GetBool(const nsAString& key, bool& outValue) {
-+ nsCString prefName = MakePrefName(key);
+ nsAutoCString strValue;
-+ {
-+ MutexAutoLock lock(GetLocalCacheMutex());
-+ if (auto entry = GetLocalCache().Lookup(prefName)) {
-+ strValue = entry.Data();
-+ }
-+ }
-+ if (strValue.IsEmpty()) {
-+ Preferences::GetCString(prefName.get(), strValue);
-+ }
-+ // Sync IPC read from parent (cross-process fallback for workers)
-+ if (strValue.IsEmpty() && !XRE_IsParentProcess() && NS_IsMainThread()) {
-+ ContentChild* cc = ContentChild::GetSingleton();
-+ if (cc) {
-+ cc->SendRoverfoxStorageGet(prefName, &strValue);
-+ if (!strValue.IsEmpty()) {
-+ MutexAutoLock lock(GetLocalCacheMutex());
-+ GetLocalCache().InsertOrUpdate(prefName, nsCString(strValue));
-+ }
-+ }
-+ }
++ ReadValue(MakePrefName(key), strValue);
+ if (!strValue.IsEmpty()) {
+ outValue = strValue.EqualsLiteral("1");
+ return true;
@@ -321,28 +350,8 @@ index 0000000000..1f8b3a08f6
+
+/* static */ bool
+RoverfoxStorageManager::GetString(const nsAString& key, nsAString& outValue) {
-+ nsCString prefName = MakePrefName(key);
+ nsAutoCString utf8Value;
-+ {
-+ MutexAutoLock lock(GetLocalCacheMutex());
-+ if (auto entry = GetLocalCache().Lookup(prefName)) {
-+ utf8Value = entry.Data();
-+ }
-+ }
-+ if (utf8Value.IsEmpty()) {
-+ Preferences::GetCString(prefName.get(), utf8Value);
-+ }
-+ // Sync IPC read from parent (cross-process fallback for workers)
-+ if (utf8Value.IsEmpty() && !XRE_IsParentProcess() && NS_IsMainThread()) {
-+ ContentChild* cc = ContentChild::GetSingleton();
-+ if (cc) {
-+ cc->SendRoverfoxStorageGet(prefName, &utf8Value);
-+ if (!utf8Value.IsEmpty()) {
-+ MutexAutoLock lock(GetLocalCacheMutex());
-+ GetLocalCache().InsertOrUpdate(prefName, nsCString(utf8Value));
-+ }
-+ }
-+ }
++ ReadValue(MakePrefName(key), utf8Value);
+ if (!utf8Value.IsEmpty()) {
+ CopyUTF8toUTF16(utf8Value, outValue);
+ return true;
@@ -358,7 +367,8 @@ index 0000000000..1f8b3a08f6
+ GetLocalCache().Remove(prefName);
+ }
+ if (XRE_IsParentProcess()) {
-+ Preferences::ClearUser(prefName.get());
++ // A default pref cannot be deleted; empty reads as unset.
++ Preferences::SetCString(prefName.get(), ""_ns, kKind);
+ }
+}
+
@@ -366,15 +376,16 @@ index 0000000000..1f8b3a08f6
+} // namespace mozilla
diff --git a/dom/base/RoverfoxStorageManager.h b/dom/base/RoverfoxStorageManager.h
new file mode 100644
-index 0000000000..4a2dac8e8f
+index 0000000000..e6d64378e1
--- /dev/null
+++ b/dom/base/RoverfoxStorageManager.h
-@@ -0,0 +1,36 @@
+@@ -0,0 +1,41 @@
+#ifndef mozilla_dom_RoverfoxStorageManager_h
+#define mozilla_dom_RoverfoxStorageManager_h
+
+#include "nsString.h"
+#include "nsTHashMap.h"
++#include "nsTHashSet.h"
+#include "nsHashKeys.h"
+#include "mozilla/Mutex.h"
+
@@ -394,10 +405,14 @@ index 0000000000..4a2dac8e8f
+ static void PutString(const nsAString& key, const nsAString& value);
+ static bool GetString(const nsAString& key, nsAString& outValue);
+ static void Remove(const nsAString& key);
++ // A put reached this process's prefs: the key is no longer a known miss.
++ static void ForgetMiss(const nsACString& aPrefName);
+
+ private:
+ static nsCString MakePrefName(const nsAString& key);
+ static void SetPrefValue(const nsCString& prefName, const nsCString& value);
++ static void ReadValue(const nsCString& prefName, nsACString& outValue);
++ static nsTHashSet& GetMissCache();
+ static nsTHashMap& GetLocalCache();
+ static mozilla::Mutex& GetLocalCacheMutex();
+};
@@ -837,7 +852,7 @@ index 25022d4b5b..fe65662b77 100644
// We can NOT assert that TEXT_IS_8BIT is false in aFlags here,
// because this might be an 8bit-only word from a 16-bit textrun,
diff --git a/gfx/thebes/gfxHarfBuzzShaper.cpp b/gfx/thebes/gfxHarfBuzzShaper.cpp
-index e41408f51c..ffa0bd4caf 100644
+index e41408f51c..448fcd58fd 100644
--- a/gfx/thebes/gfxHarfBuzzShaper.cpp
+++ b/gfx/thebes/gfxHarfBuzzShaper.cpp
@@ -16,6 +16,10 @@
@@ -902,7 +917,7 @@ index e41408f51c..ffa0bd4caf 100644
if (isRightToLeft) {
hb_buffer_reverse(mBuffer);
}
-@@ -1770,3 +1804,4 @@ nsresult gfxHarfBuzzShaper::SetGlyphsFromRun(gfxShapedText* aShapedText,
+@@ -1770,3 +1818,4 @@ nsresult gfxHarfBuzzShaper::SetGlyphsFromRun(gfxShapedText* aShapedText,
return NS_OK;
}
diff --git a/patches/browser-init.patch b/patches/browser-init.patch
index bc2c54e5f..63ef3a84b 100644
--- a/patches/browser-init.patch
+++ b/patches/browser-init.patch
@@ -51,11 +51,13 @@ index 1cfa4b8497..bdf8d7202e 100644
// If we are given a tab to swap in, take care of it before first paint to
// avoid an about:blank flash.
let tabToAdopt = this.getTabToAdopt();
-@@ -345,6 +371,31 @@ var gBrowserInit = {
+@@ -345,6 +371,33 @@ var gBrowserInit = {
}
}
-+ if (ChromeUtils.camouGetBool("showcursor", true)) {
++ // Camoufox: debugging aid only -- a red dot following the mouse is a visible
++ // automation cue no real Firefox draws. Opt in with config showcursor=true.
++ if (ChromeUtils.camouGetBool("showcursor", false)) {
+ let cursorFollower = document.createElement("div");
+ cursorFollower.id = "cursor-highlighter";
+ cursorFollower.style.cssText = `
@@ -83,7 +85,7 @@ index 1cfa4b8497..bdf8d7202e 100644
// Wait until chrome is painted before executing code not critical to making the window visible
this._boundDelayedStartup = this._delayedStartup.bind(this);
window.addEventListener("MozAfterPaint", this._boundDelayedStartup);
-@@ -366,9 +417,156 @@ var gBrowserInit = {
+@@ -366,9 +417,177 @@ var gBrowserInit = {
)?.removeAttribute("key");
}
@@ -92,10 +94,11 @@ index 1cfa4b8497..bdf8d7202e 100644
+
+ // Hijack the outer window size.
+ //
-+ // window.outerWidth/outerHeight are already spoofed unconditionally in C++
-+ // (nsGlobalWindowInner::GetOuterWidth/GetOuterHeight consult MaskConfig, see
-+ // fingerprint-injection.patch), so the chrome window only has to be *resized*
-+ // here -- it must not be pinned. Pinning documentElement to the spoofed size
++ // window.outerWidth/outerHeight report the REAL window (they are not read
++ // from MaskConfig; see nsGlobalWindowInner::GetOuterWidth in
++ // fingerprint-injection.patch), so resizing the real window here is what
++ // makes them match the drawn identity. It must not be pinned: pinning
++ // documentElement to the spoofed size
+ // caps .browserStack, which caps the content viewport, which makes Juggler's
+ // awaitViewportDimensions handshake unsatisfiable for any larger viewport.
+ // That await has no timeout, so it hangs forever (daijro/camoufox#666).
@@ -106,6 +109,26 @@ index 1cfa4b8497..bdf8d7202e 100644
+ if ((outerHeight = ChromeUtils.camouGetInt("window.outerHeight"))) {
+ window.resizeTo(window.outerWidth, outerHeight);
+ }
++ // The window manager can override that size when it maps the window: GNOME
++ // mutter auto-maximizes a new window covering >= 80% of the work area
++ // (org.gnome.mutter auto-maximize). The page would then get the host's
++ // work area instead of the drawn window, which can exceed the drawn
++ // screen.width. Undo a maximize that lands during startup and re-assert
++ // the drawn size; after the deadline a maximize is the user's own.
++ if (outerWidth || outerHeight) {
++ const deadline = Date.now() + 5000;
++ const undoStartupMaximize = () => {
++ if (Date.now() > deadline) {
++ window.removeEventListener("sizemodechange", undoStartupMaximize);
++ return;
++ }
++ if (window.windowState === window.STATE_MAXIMIZED) {
++ window.restore();
++ window.resizeTo(outerWidth || window.outerWidth, outerHeight || window.outerHeight);
++ }
++ };
++ window.addEventListener("sizemodechange", undoStartupMaximize);
++ }
+ browser.style.setProperty('box-sizing', 'content-box');
+
+ // Hijack the inner window size
diff --git a/patches/chromeutil.patch b/patches/chromeutil.patch
index 7bbdae5f1..56bd9d198 100644
--- a/patches/chromeutil.patch
+++ b/patches/chromeutil.patch
@@ -2,12 +2,11 @@ diff --git a/dom/base/ChromeUtils.cpp b/dom/base/ChromeUtils.cpp
index 52f0af76ec..2a7a9ae4fc 100644
--- a/dom/base/ChromeUtils.cpp
+++ b/dom/base/ChromeUtils.cpp
-@@ -5,6 +5,8 @@
+@@ -5,6 +5,7 @@
* file, You can obtain one at http://mozilla.org/MPL/2.0/. */
#include "ChromeUtils.h"
+#include "MaskConfig.hpp"
-+#include "MouseTrajectories.hpp"
#include "JSOracleParent.h"
#include "ThirdPartyUtil.h"
@@ -36,7 +35,7 @@ index 52f0af76ec..2a7a9ae4fc 100644
double ChromeUtils::DateNow(GlobalObject&) { return JS_Now() / 1000.0; }
/* static */
-@@ -2141,6 +2161,77 @@ void ChromeUtils::GetAllPossibleUtilityActorNames(GlobalObject& aGlobal,
+@@ -2141,6 +2161,65 @@ void ChromeUtils::GetAllPossibleUtilityActorNames(GlobalObject& aGlobal,
}
}
@@ -98,18 +97,6 @@ index 52f0af76ec..2a7a9ae4fc 100644
+ }
+ aRetVal.Clear();
+}
-+
-+/* static */
-+void ChromeUtils::CamouGetMouseTrajectory(GlobalObject& aGlobal, long aFromX,
-+ long aFromY, long aToX, long aToY,
-+ nsTArray& aPoints) {
-+ HumanizeMouseTrajectory trajectory(std::make_pair(aFromX, aFromY),
-+ std::make_pair(aToX, aToY));
-+ std::vector flattenedPoints = trajectory.getPoints();
-+
-+ aPoints.Clear();
-+ aPoints.AppendElements(flattenedPoints.data(), flattenedPoints.size());
-+}
+
/* static */
bool ChromeUtils::ShouldResistFingerprinting(
@@ -129,7 +116,7 @@ index 138b9c3f80..c7c7ce74bf 100644
static double DateNow(GlobalObject&);
static void EnsureJSOracleStarted(GlobalObject&);
-@@ -314,6 +318,24 @@ class ChromeUtils {
+@@ -314,6 +318,20 @@ class ChromeUtils {
static void GetAllPossibleUtilityActorNames(GlobalObject& aGlobal,
nsTArray& aNames);
@@ -146,10 +133,6 @@ index 138b9c3f80..c7c7ce74bf 100644
+
+ static void CamouGetStringList(GlobalObject& aGlobal, const nsAString& aVarName,
+ nsTArray& aRetVal);
-+
-+ static void CamouGetMouseTrajectory(GlobalObject& aGlobal, long aFromX,
-+ long aFromY, long aToX, long aToY,
-+ nsTArray& aPoints);
+
static bool ShouldResistFingerprinting(
GlobalObject& aGlobal, JSRFPTarget aTarget,
@@ -172,7 +155,7 @@ index 6a99703db1..82415eba19 100644
/**
* Starts the JSOracle process for ORB JavaScript validation, if it hasn't started already.
*/
-@@ -761,6 +768,36 @@ partial namespace ChromeUtils {
+@@ -761,6 +768,31 @@ partial namespace ChromeUtils {
[ChromeOnly]
readonly attribute unsigned long aliveUtilityProcesses;
@@ -200,11 +183,6 @@ index 6a99703db1..82415eba19 100644
+ * Get a list of strings from Camoufox MaskConfig.
+ */
+ sequence camouGetStringList(DOMString varName);
-+
-+ /**
-+ * Calculate a human-like mouse trajectory between two points.
-+ */
-+ sequence camouGetMouseTrajectory(long fromX, long fromY, long toX, long toY);
+
/**
* Get a list of all possible Utility process Actor Names ; mostly useful to
diff --git a/patches/contentaccessible-parity.patch b/patches/contentaccessible-parity.patch
new file mode 100644
index 000000000..5bbe305c1
--- /dev/null
+++ b/patches/contentaccessible-parity.patch
@@ -0,0 +1,86 @@
+Camoufox: the content-reachable file set must match a stock Firefox release.
+
+Twelve chrome/resource packages are flagged contentaccessible=yes, so any page
+can load their files as subresources and a file Camoufox adds or drops there is
+a one-line build tell. Two diverged from stock 152.0.4, both measured from a
+content page:
+
+ chrome://global/content/crashes.{html,js,css} were absent, because
+ --disable-crashreporter strips them in toolkit/crashreporter/jar.mn. The
+ JAR_MANIFESTS entry is outside that moz.build guard, so shipping the three
+ content files does not build or enable the crash reporter.
+
+ chrome://browser/content/browser-development-helpers.js was present, because
+ it is gated #ifndef MOZILLA_OFFICIAL and Camoufox is not an official build.
+ Its presence is a positive "built from source" tell. Two RUNTIME
+ AppConstants.MOZILLA_OFFICIAL checks reach it -- browser-main.js loads the
+ script and browser-init.js calls DevelopmentHelpers.init() from
+ _delayedStartup -- so dropping the file from the package alone throws
+ `ReferenceError: DevelopmentHelpers is not defined` there. That is not just a
+ console error: _delayedStartup never reaches its
+ "browser-delayed-startup-finished" notification, and juggler's newPage awaits
+ exactly that, so every Playwright launch hangs on its first page. Both call
+ sites go with the file.
+
+Setting MOZILLA_OFFICIAL=1 would fix the second one at the source, but it also
+moves telemetry, update-channel and branding defaults that Camoufox sets
+deliberately, so the narrower change is here.
+
+Guard: tests/patches/contentaccessible-parity.py.
+
+diff --git a/browser/base/content/browser-init.js b/browser/base/content/browser-init.js
+index cc1fe4b27b..d8a76b601d 100644
+--- a/browser/base/content/browser-init.js
++++ b/browser/base/content/browser-init.js
+@@ -841,10 +841,6 @@ var gBrowserInit = {
+ gDataNotificationInfoBar.init();
+ }
+
+- if (!AppConstants.MOZILLA_OFFICIAL) {
+- DevelopmentHelpers.init();
+- }
+-
+ gExtensionsNotifications.init();
+
+ let wasMinimized = window.windowState == window.STATE_MINIMIZED;
+diff --git a/browser/base/content/browser-main.js b/browser/base/content/browser-main.js
+index 1af1dd9d56..f3fd55631b 100644
+--- a/browser/base/content/browser-main.js
++++ b/browser/base/content/browser-main.js
+@@ -11,9 +11,6 @@
+ if (AppConstants.MOZ_DATA_REPORTING) {
+ Services.scriptloader.loadSubScript("chrome://browser/content/browser-data-submission-info-bar.js", this);
+ }
+- if (!AppConstants.MOZILLA_OFFICIAL) {
+- Services.scriptloader.loadSubScript("chrome://browser/content/browser-development-helpers.js", this);
+- }
+ Services.scriptloader.loadSubScript("chrome://browser/content/browser-pageActions.js", this);
+ Services.scriptloader.loadSubScript("chrome://browser/content/sidebar/browser-sidebar.js", this);
+ Services.scriptloader.loadSubScript("chrome://browser/content/browser-customtitlebar.js", this);
+diff --git a/browser/base/jar.mn b/browser/base/jar.mn
+index dd0f873535..aa102d3ba3 100644
+--- a/browser/base/jar.mn
++++ b/browser/base/jar.mn
+@@ -45,9 +45,6 @@ browser.jar:
+ content/browser/browser-context.js (content/browser-context.js)
+ content/browser/browser-customization.js (content/browser-customization.js)
+ content/browser/browser-data-submission-info-bar.js (content/browser-data-submission-info-bar.js)
+-#ifndef MOZILLA_OFFICIAL
+- content/browser/browser-development-helpers.js (content/browser-development-helpers.js)
+-#endif
+ content/browser/browser-fullScreenAndPointerLock.js (content/browser-fullScreenAndPointerLock.js)
+ content/browser/browser-gestureSupport.js (content/browser-gestureSupport.js)
+ content/browser/browser-init.js (content/browser-init.js)
+diff --git a/toolkit/crashreporter/jar.mn b/toolkit/crashreporter/jar.mn
+index 641fcaa2fe..0d9f215fd2 100644
+--- a/toolkit/crashreporter/jar.mn
++++ b/toolkit/crashreporter/jar.mn
+@@ -3,8 +3,6 @@
+ # file, You can obtain one at http://mozilla.org/MPL/2.0/.
+
+ toolkit.jar:
+-#ifdef MOZ_CRASHREPORTER
+ content/global/crashes.html (content/crashes.html)
+ content/global/crashes.js (content/crashes.js)
+ content/global/crashes.css (content/crashes.css)
+-#endif
diff --git a/patches/cross-process-storage.patch b/patches/cross-process-storage.patch
index 7a0ab3992..e9940d064 100644
--- a/patches/cross-process-storage.patch
+++ b/patches/cross-process-storage.patch
@@ -1,8 +1,8 @@
diff --git a/dom/ipc/ContentParent.cpp b/dom/ipc/ContentParent.cpp
-index 1ff3195235..795cb05bc3 100644
+index a63cb68d9f..2a96a949e3 100644
--- a/dom/ipc/ContentParent.cpp
+++ b/dom/ipc/ContentParent.cpp
-@@ -1231,6 +1231,26 @@ mozilla::ipc::IPCResult ContentParent::RecvCreateGMPService() {
+@@ -1265,6 +1265,28 @@ mozilla::ipc::IPCResult ContentParent::RecvCreateGMPService() {
return IPC_OK();
}
@@ -12,7 +12,9 @@ index 1ff3195235..795cb05bc3 100644
+ if (!StringBeginsWith(aPrefName, "roverfox.s."_ns)) {
+ return IPC_OK();
+ }
-+ Preferences::SetCString(aPrefName.get(), aValue);
++ // Default branch: session state, never written to prefs.js (see
++ // RoverfoxStorageManager.cpp).
++ Preferences::SetCString(aPrefName.get(), aValue, PrefValueKind::Default);
+ return IPC_OK();
+}
+
@@ -22,7 +24,7 @@ index 1ff3195235..795cb05bc3 100644
+ *aOutValue = ""_ns;
+ return IPC_OK();
+ }
-+ Preferences::GetCString(aPrefName.get(), *aOutValue);
++ Preferences::GetCString(aPrefName.get(), *aOutValue, PrefValueKind::Default);
+ return IPC_OK();
+}
+
@@ -30,10 +32,10 @@ index 1ff3195235..795cb05bc3 100644
const nsACString& aHost, PrivateAttributionImpressionType aType,
uint32_t aIndex, const nsAString& aAd, const nsACString& aTargetHost) {
diff --git a/dom/ipc/ContentParent.h b/dom/ipc/ContentParent.h
-index 4a478a5a4d..161a1f993e 100644
+index 4c84f11137..a090082892 100644
--- a/dom/ipc/ContentParent.h
+++ b/dom/ipc/ContentParent.h
-@@ -362,6 +362,11 @@ class ContentParent final : public PContentParent,
+@@ -363,6 +363,11 @@ class ContentParent final : public PContentParent,
Endpoint&& aParentEndpoint);
mozilla::ipc::IPCResult RecvCreateGMPService();
@@ -46,10 +48,10 @@ index 4a478a5a4d..161a1f993e 100644
NS_DECL_CYCLE_COLLECTING_ISUPPORTS
diff --git a/dom/ipc/PContent.ipdl b/dom/ipc/PContent.ipdl
-index 39b01c305d..882bd54b8f 100644
+index edb1259e51..10a0bea039 100644
--- a/dom/ipc/PContent.ipdl
+++ b/dom/ipc/PContent.ipdl
-@@ -1113,6 +1113,13 @@ parent:
+@@ -1136,6 +1136,13 @@ parent:
async CreateGMPService();
@@ -64,10 +66,10 @@ index 39b01c305d..882bd54b8f 100644
async InitStreamFilter(uint64_t channelId, nsString addonId)
diff --git a/ipc/ipdl/sync-messages.ini b/ipc/ipdl/sync-messages.ini
-index abcdef1234..1234abcdef 100644
+index d562255670..6ea4f999b0 100644
--- a/ipc/ipdl/sync-messages.ini
+++ b/ipc/ipdl/sync-messages.ini
-@@ -369,5 +369,11 @@ description = This must be synchronous until quota file streams become non-blocki
+@@ -371,6 +371,12 @@ description = Finds certificates and private keys in the parent process. As this
[PIPCClientCerts::Sign]
description = Performs a signature on given data with a key corresponding to the given identifier. This is called from PKCS#11, so there is no way to make this asynchronous.
# -
@@ -79,11 +81,12 @@ index abcdef1234..1234abcdef 100644
+# -
[PRemoteQuotaObject::MaybeUpdateSize]
description = This must be synchronous until quota file streams become non-blocking. The synchronous message is never used on the main thread or the PBackground thread or a DOM worker threed.
+
diff --git a/modules/libpref/Preferences.cpp b/modules/libpref/Preferences.cpp
-index c307035819..4402775905 100644
+index 6e2b95ff7f..c13dd1eb5b 100644
--- a/modules/libpref/Preferences.cpp
+++ b/modules/libpref/Preferences.cpp
-@@ -6519,6 +6519,8 @@ static const PrefListEntry sDynamicPrefOverrideList[]{
+@@ -6517,6 +6517,8 @@ static const PrefListEntry sDynamicPrefOverrideList[]{
PREF_LIST_ENTRY("toolkit.mozprotocol.url"),
PREF_LIST_ENTRY("toolkit.telemetry.log.level"),
PREF_LIST_ENTRY("ui."),
diff --git a/patches/fingerprint-injection.patch b/patches/fingerprint-injection.patch
index daf3d8bf1..406a70dad 100644
--- a/patches/fingerprint-injection.patch
+++ b/patches/fingerprint-injection.patch
@@ -86,24 +86,26 @@ index 330a707789..241f87780b 100644
// We ignore aCallerType; we only have that argument because some other things
// called by GetReplaceableWindowCoord need it. If this ever changes, fix
// nsresult nsGlobalWindowInner::GetInnerHeight(double* aInnerWidth)
-@@ -3466,12 +3471,16 @@ nsresult nsGlobalWindowInner::GetInnerHeight(double* aHeight) {
+@@ -3466,12 +3471,18 @@ nsresult nsGlobalWindowInner::GetInnerHeight(double* aHeight) {
int32_t nsGlobalWindowInner::GetOuterWidth(CallerType aCallerType,
ErrorResult& aError) {
-+ if (auto value = MaskConfig::GetInt32("window.outerWidth"))
-+ return value.value();
++ // Camoufox: window.outerWidth/outerHeight are deliberately NOT read from
++ // MaskConfig. browser-init.js resizes the real window to the drawn size, and
++ // innerWidth/innerHeight report the real content area, so a fixed outer size
++ // contradicted inner whenever the window ended up a different size: the WM
++ // clamped or auto-maximized it, or Juggler resized it for a viewport. Pages
++ // then saw innerWidth > outerWidth (measured 1853 > 1680 on GNOME).
FORWARD_TO_OUTER_OR_THROW(GetOuterWidthOuter, (aCallerType, aError), aError,
0);
}
int32_t nsGlobalWindowInner::GetOuterHeight(CallerType aCallerType,
ErrorResult& aError) {
-+ if (auto value = MaskConfig::GetInt32("window.outerHeight"))
-+ return value.value();
FORWARD_TO_OUTER_OR_THROW(GetOuterHeightOuter, (aCallerType, aError), aError,
0);
}
-@@ -3486,11 +3495,13 @@ double nsGlobalWindowInner::ScreenEdgeSlopY() const {
+@@ -3486,11 +3497,13 @@ double nsGlobalWindowInner::ScreenEdgeSlopY() const {
int32_t nsGlobalWindowInner::GetScreenX(CallerType aCallerType,
ErrorResult& aError) {
@@ -117,7 +119,7 @@ index 330a707789..241f87780b 100644
FORWARD_TO_OUTER_OR_THROW(GetScreenYOuter, (aCallerType, aError), aError, 0);
}
-@@ -3524,6 +3535,8 @@ static nsPresContext* GetPresContextForRatio(Document* aDoc) {
+@@ -3524,6 +3537,8 @@ static nsPresContext* GetPresContextForRatio(Document* aDoc) {
double nsGlobalWindowInner::GetDevicePixelRatio(CallerType aCallerType,
ErrorResult& aError) {
ENSURE_ACTIVE_DOCUMENT(aError, 0.0);
@@ -126,7 +128,7 @@ index 330a707789..241f87780b 100644
RefPtr presContext = GetPresContextForRatio(mDoc);
if (NS_WARN_IF(!presContext)) {
-@@ -3594,26 +3607,38 @@ already_AddRefed nsGlobalWindowInner::MatchMedia(
+@@ -3594,26 +3609,38 @@ already_AddRefed nsGlobalWindowInner::MatchMedia(
}
int32_t nsGlobalWindowInner::GetScrollMinX(ErrorResult& aError) {
diff --git a/patches/font-hijacker.patch b/patches/font-hijacker.patch
index 56f23c016..bc5aa2dad 100644
--- a/patches/font-hijacker.patch
+++ b/patches/font-hijacker.patch
@@ -1,42 +1,133 @@
-Camoufox: restrict font family resolution to the spoofed "fonts" allowlist.
-
-The allowlist is applied when a family is looked up, NOT by handing the list to
-Firefox's `font.system.whitelist` pref (which is what this patch used to do).
-That pref drives gfxPlatformFontList::ApplyWhitelist(), which physically
-removes every non-listed family from the process-wide font list -- and, when
-the shared font list is enabled (the default on all three platforms), from the
-read-only list the parent process builds and shares with every content
-process.
-
-The parent process is also the process that paints the browser chrome, so
-pruning the list there strips the UI of the fonts it needs. On Windows that
-leaves the titlebar buttons drawing tofu boxes instead of their Segoe Fluent
-Icons / Segoe MDL2 Assets glyphs (U+E921 / U+E922 / U+E8BB) and the toolbar
-falling back to serif: the icon fonts are not in any of the generated masks,
-and "Segoe UI" only survives when the spoofed OS is Windows. Linux hosts were
-insulated by the bundled FONTCONFIG_FILE, which is why this only shows up on
-Windows and macOS builds.
-
-Filtering at lookup time instead keys off FontVisibilityProvider::IsChrome(),
-so chrome documents (browser UI, devtools, about: pages) keep the host's real
-font list while web content still only ever resolves families from the mask.
-The three content-reachable paths are covered:
-
- - FindAndAddFamiliesLocked -- font-family / CSS generic resolution, which is
- what document.fonts.check() and text-metric
- probing go through.
- - GlobalFontFallback -- per-character system fallback; also keeps the
- cmap path forced, as the whitelist did, so the
- platform fallback APIs can't pick a family
- behind our back.
- - gfxUserFontSet local() -- upstream already refuses local() sources while
- a whitelist is active; keep that behaviour for
- content under the mask, so a page can't probe
- for hidden families via src: local().
-
-Bug: daijro/camoufox#695
-
+diff --git a/gfx/thebes/CoreTextFontList.cpp b/gfx/thebes/CoreTextFontList.cpp
+index 09cc159cad..d999473501 100644
+--- a/gfx/thebes/CoreTextFontList.cpp
++++ b/gfx/thebes/CoreTextFontList.cpp
+@@ -4,6 +4,7 @@
+
+ #include "AppleUtils.h"
+ #include "CoreTextFontList.h"
++#include "MaskConfig.hpp"
+ #include "gfxFontConstants.h"
+ #include "gfxMacFont.h"
+ #include "gfxUserFontSet.h"
+@@ -1007,7 +1008,12 @@ CoreTextFontList::CoreTextFontList()
+ #ifdef MOZ_BUNDLED_FONTS
+ // We activate bundled fonts if the pref is > 0 (on) or < 0 (auto), only an
+ // explicit value of 0 (off) will disable them.
+- if (StaticPrefs::gfx_bundled_fonts_activate_AtStartup() != 0) {
++ // Camoufox: a native macOS identity uses the real system fonts only; the
++ // bundle is for identities of other OSes (see font-hijacker.patch).
++ const bool camouNativeIdentity =
++ MaskConfig::GetString("navigator.platform").value_or("") == "MacIntel";
++ if (StaticPrefs::gfx_bundled_fonts_activate_AtStartup() != 0 &&
++ !camouNativeIdentity) {
+ auto timerId = glean::fontlist::bundledfonts_activate.Start();
+ ActivateBundledFonts();
+ glean::fontlist::bundledfonts_activate.StopAndAccumulate(
+@@ -1475,6 +1481,11 @@ gfxFontEntry* CoreTextFontList::LookupLocalFont(
+ // Reset our string length to match the actual C string we got, which will
+ // usually be much shorter than the maximal buffer we allocated.
+ key.Truncate(strlen(key.get()));
++ // Camoufox: keep the family name for the caller. A CTFontEntry built here
++ // carries none, and gfxUserFontSet holds a local() source to the spoofed font
++ // list by the RESOLVED family: with an empty name every local() face failed
++ // with NetworkError on macOS, installed and allowed or not.
++ nsAutoCString familyName(key);
+ ToLowerCase(key);
+ // If the family can't be looked up, this font is not available for use.
+ FontFamily family = FindFamily(aFontVisibilityProvider, key);
+@@ -1482,8 +1493,10 @@ gfxFontEntry* CoreTextFontList::LookupLocalFont(
+ return nullptr;
+ }
+
+- return new CTFontEntry(aFontName, fontRef, aWeightForEntry, aStretchForEntry,
+- aStyleForEntry, false, true);
++ auto* fe = new CTFontEntry(aFontName, fontRef, aWeightForEntry,
++ aStretchForEntry, aStyleForEntry, false, true);
++ fe->mFamilyName = familyName;
++ return fe;
+ }
+
+ static void ReleaseData(void* info, const void* data, size_t size) {
+diff --git a/gfx/thebes/gfxDWriteFontList.cpp b/gfx/thebes/gfxDWriteFontList.cpp
+index 9c81c07a44..b2941ca5d7 100644
+--- a/gfx/thebes/gfxDWriteFontList.cpp
++++ b/gfx/thebes/gfxDWriteFontList.cpp
+@@ -7,6 +7,7 @@
+ #include "mozilla/intl/OSPreferences.h"
+
+ #include "gfxDWriteFontList.h"
++#include "MaskConfig.hpp"
+ #include "gfxDWriteFonts.h"
+ #include "gfxDWriteCommon.h"
+ #include "nsUnicharUtils.h"
+@@ -1629,6 +1630,8 @@ void gfxDWriteFontList::InitSharedFontListForPlatform() {
+ // We activate bundled fonts if the pref is > 0 (on) or < 0 (auto), only an
+ // explicit value of 0 (off) will disable them.
+ TimeStamp start1 = TimeStamp::Now();
++ // Camoufox: a native Windows identity keeps only the fonts stock Firefox
++ // bundles (BundledFontFileEnumerator filters the directory).
+ if (StaticPrefs::gfx_bundled_fonts_activate_AtStartup() != 0) {
+ mBundledFonts = CreateBundledFontsCollection(factory);
+ }
+@@ -2622,22 +2625,49 @@ class BundledFontFileEnumerator : public IDWriteFontFileEnumerator {
+ nsCOMPtr mFontDir;
+ nsCOMPtr mEntries;
+ nsCOMPtr mCurrent;
++ // Camoufox: see the constructor.
++ bool mStockFilesOnly = false;
+ };
+
++// Camoufox: the fonts/ directory holds Firefox's own bundled font AND the font
++// sets camoufox ships for identities of other OSes. A native Windows identity
++// must use the real system fonts, so those sets stay inactive -- but skipping
++// the whole directory (as this patch once did) also dropped Twemoji Mozilla,
++// the emoji font stock Firefox bundles and names first in font.name-list.emoji:
++// emoji rendered through Segoe UI Emoji and flag sequences drew nothing (stock
++// Win11: colour flag, 54 colours; camoufox: ink 0). Keep exactly what a stock
++// Windows build ships in fonts/.
++static bool IsStockBundledFontFile(nsISupports* aEntry) {
++ nsCOMPtr file = do_QueryInterface(aEntry);
++ nsAutoString leaf;
++ return file && NS_SUCCEEDED(file->GetLeafName(leaf)) &&
++ leaf.LowerCaseEqualsLiteral("twemojimozilla.ttf");
++}
++
+ BundledFontFileEnumerator::BundledFontFileEnumerator(IDWriteFactory* aFactory,
+ nsIFile* aFontDir)
+- : mFactory(aFactory), mFontDir(aFontDir) {
++ : mFactory(aFactory),
++ mFontDir(aFontDir),
++ mStockFilesOnly(
++ MaskConfig::GetString("navigator.platform").value_or("") ==
++ "Win32") {
+ mFontDir->GetDirectoryEntries(getter_AddRefs(mEntries));
+ }
+
+ IFACEMETHODIMP
+ BundledFontFileEnumerator::MoveNext(BOOL* aHasCurrentFile) {
+ bool hasMore = false;
+- if (mEntries) {
+- if (NS_SUCCEEDED(mEntries->HasMoreElements(&hasMore)) && hasMore) {
+- if (NS_SUCCEEDED(mEntries->GetNext(getter_AddRefs(mCurrent)))) {
+- hasMore = true;
+- }
++ while (mEntries) {
++ hasMore = false;
++ if (NS_FAILED(mEntries->HasMoreElements(&hasMore)) || !hasMore) {
++ break;
++ }
++ if (NS_FAILED(mEntries->GetNext(getter_AddRefs(mCurrent)))) {
++ hasMore = false;
++ break;
++ }
++ if (!mStockFilesOnly || IsStockBundledFontFile(mCurrent)) {
++ break;
+ }
+ }
+ *aHasCurrentFile = hasMore;
diff --git a/gfx/thebes/gfxPlatformFontList.cpp b/gfx/thebes/gfxPlatformFontList.cpp
+index 6bdcd2a57c..327e485555 100644
--- a/gfx/thebes/gfxPlatformFontList.cpp
+++ b/gfx/thebes/gfxPlatformFontList.cpp
@@ -13,6 +13,7 @@
@@ -47,7 +138,7 @@ diff --git a/gfx/thebes/gfxPlatformFontList.cpp b/gfx/thebes/gfxPlatformFontList
#include "FontVisibilityProvider.h"
-@@ -890,6 +891,29 @@
+@@ -891,6 +892,29 @@ void gfxPlatformFontList::GenerateFontListKey(nsACString& aKeyName) {
ToLowerCase(aKeyName);
}
@@ -77,20 +168,49 @@ diff --git a/gfx/thebes/gfxPlatformFontList.cpp b/gfx/thebes/gfxPlatformFontList
// Used if a stylo thread wants to trigger InitOtherFamilyNames in the main
// process: we can't do IPC from the stylo thread so we post this to the main
// thread instead.
-@@ -1418,7 +1442,11 @@
+@@ -1419,6 +1443,17 @@ already_AddRefed gfxPlatformFontList::GlobalFontFallback(
uint32_t aNextCh, Script aRunScript, FontPresentation aPresentation,
const gfxFontStyle* aMatchStyle, uint32_t& aCmapCount,
FontFamily& aMatchedFamily) {
-- bool useCmaps = IsFontFamilyWhitelistActive() ||
-+ // Camoufox: under the spoofed font list, force the cmap path for the same
-+ // reason a whitelist does -- the platform fallback APIs choose a family for
-+ // us, which would bypass the filtering in the loops below.
++ // Camoufox: the spoofed font list must NOT force the cmap path. Forcing it
++ // skips every family whose charmap is not loaded yet (in a content process
++ // the async branch below only schedules a load and continues), so a character
++ // that Gecko's script-based CommonFontFallback table does not cover gets no
++ // fallback at all and renders as the primary family's .notdef, while stock
++ // Firefox resolves it through the platform API. Measured on macOS: U+1E9E
++ // fell back to .notdef here and to Tamil Sangam MN in stock.
++ // Let the platform choose, then hold its choice to the mask below; a blocked
++ // family still drops through to the cmap scan, which is what the forced path
++ // used to do for every character.
+ const bool maskedFontList = MaskedFontListAppliesTo(aFontVisibilityProvider);
-+ bool useCmaps = IsFontFamilyWhitelistActive() || maskedFontList ||
+ bool useCmaps = IsFontFamilyWhitelistActive() ||
gfxPlatform::GetPlatform()->UseCmapsDuringSystemFallback();
FontVisibility level = aFontVisibilityProvider
- ? aFontVisibilityProvider->GetFontVisibility()
-@@ -1468,6 +1496,11 @@
+@@ -1428,7 +1463,22 @@ already_AddRefed gfxPlatformFontList::GlobalFontFallback(
+ // Allow platform-specific fallback code to try and find a usable font
+ gfxFontEntry* fe = PlatformGlobalFontFallback(
+ aFontVisibilityProvider, aCh, aRunScript, aMatchStyle, aMatchedFamily);
+- if (fe) {
++ // Camoufox: the platform picked this family for us, so it has to pass the
++ // same mask the cmap loops below apply. If it does not, fall through to
++ // those loops rather than rendering a hidden family.
++ bool fallbackBlocked = false;
++ if (fe && maskedFontList) {
++ nsAutoCString fallbackKey;
++ if (aMatchedFamily.mShared) {
++ fallbackKey = aMatchedFamily.mShared->Key().AsString(SharedFontList());
++ } else if (aMatchedFamily.mUnshared) {
++ GenerateFontListKey(aMatchedFamily.mUnshared->Name(), fallbackKey);
++ }
++ fallbackBlocked =
++ !fallbackKey.IsEmpty() &&
++ MaskedFontListBlocks(aFontVisibilityProvider, fallbackKey);
++ }
++ if (fe && !fallbackBlocked) {
+ if (aMatchedFamily.mShared) {
+ if (IsVisibleToCSS(*aMatchedFamily.mShared, level)) {
+ RefPtr font = fe->FindOrMakeFont(aMatchStyle);
+@@ -1469,6 +1519,11 @@ already_AddRefed gfxPlatformFontList::GlobalFontFallback(
if (!IsVisibleToCSS(family, level)) {
continue;
}
@@ -102,7 +222,7 @@ diff --git a/gfx/thebes/gfxPlatformFontList.cpp b/gfx/thebes/gfxPlatformFontList
if (!family.IsFullyInitialized() &&
StaticPrefs::gfx_font_rendering_fallback_async() &&
!XRE_IsParentProcess()) {
-@@ -1494,6 +1527,13 @@
+@@ -1495,6 +1550,13 @@ already_AddRefed gfxPlatformFontList::GlobalFontFallback(
if (!IsVisibleToCSS(*family, level)) {
continue;
}
@@ -116,7 +236,7 @@ diff --git a/gfx/thebes/gfxPlatformFontList.cpp b/gfx/thebes/gfxPlatformFontList
// evaluate all fonts in this family for a match
family->FindFontForChar(&data);
if (data.mMatchDistance == 0.0) {
-@@ -1754,6 +1794,11 @@
+@@ -1755,6 +1817,11 @@ bool gfxPlatformFontList::FindAndAddFamiliesLocked(
aFontVisibilityProvider ? aFontVisibilityProvider->GetFontVisibility()
: FontVisibility::User;
@@ -129,9 +249,10 @@ diff --git a/gfx/thebes/gfxPlatformFontList.cpp b/gfx/thebes/gfxPlatformFontList
// font-family request by the page), and RFP settings allow generics to be
// unrestricted, bump the effective visibility level applied here so as to
diff --git a/gfx/thebes/gfxPlatformFontList.h b/gfx/thebes/gfxPlatformFontList.h
+index 50964eff36..7e98560f36 100644
--- a/gfx/thebes/gfxPlatformFontList.h
+++ b/gfx/thebes/gfxPlatformFontList.h
-@@ -652,6 +652,19 @@
+@@ -652,6 +652,19 @@ class gfxPlatformFontList : public gfxFontInfoLoader {
return mFontFamilyWhitelistActive;
};
@@ -152,133 +273,52 @@ diff --git a/gfx/thebes/gfxPlatformFontList.h b/gfx/thebes/gfxPlatformFontList.h
bool AddWithLegacyFamilyName(const nsACString& aLegacyName,
diff --git a/gfx/thebes/gfxUserFontSet.cpp b/gfx/thebes/gfxUserFontSet.cpp
+index 6ae5b3c04d..724e04364e 100644
--- a/gfx/thebes/gfxUserFontSet.cpp
+++ b/gfx/thebes/gfxUserFontSet.cpp
-@@ -461,8 +461,12 @@
- gfxPlatformFontList* pfl = gfxPlatformFontList::PlatformFontList();
- pfl->AddUserFontSet(fontSet);
- // Don't look up local fonts if the font whitelist is being used.
-+ // Camoufox: nor for content under the spoofed font list -- src: local()
-+ // would otherwise let a page probe for families the mask hides.
- gfxFontEntry* fe = nullptr;
-- if (!pfl->IsFontFamilyWhitelistActive()) {
-+ if (!pfl->IsFontFamilyWhitelistActive() &&
-+ !gfxPlatformFontList::MaskedFontListAppliesTo(
-+ fontSet->GetFontVisibilityProvider())) {
+@@ -466,6 +466,26 @@ void gfxUserFontEntry::DoLoadNextSrc(bool aIsContinue) {
fe = gfxPlatform::GetPlatform()->LookupLocalFont(
fontSet->GetFontVisibilityProvider(), currSrc.mLocalName, Weight(),
Stretch(), SlantStyle());
++ // Camoufox: a local() source that resolves to a family outside the
++ // spoofed font list must behave exactly like a font that is not
++ // installed -- the next src is tried and the face ends up in error
++ // with the same NetworkError a real miss produces. Filtering by the
++ // RESOLVED family (not the FontFace's own family name) keeps
++ // `new FontFace("anything", 'local("Allowed Font")')` working the way
++ // stock Firefox does, and keeps url() sources untouched.
++ if (fe && gfxPlatformFontList::MaskedFontListAppliesTo(
++ fontSet->GetFontVisibilityProvider())) {
++ // Same normalisation as GenerateFontListKey (protected): the
++ // allowlist is matched on the lowercased family name.
++ nsAutoCString familyKey(fe->FamilyName());
++ ToLowerCase(familyKey);
++ if (gfxPlatformFontList::MaskedFontListBlocks(
++ fontSet->GetFontVisibilityProvider(), familyKey)) {
++ // The lookup hands back a new, unowned entry: release it.
++ RefPtr discard(fe);
++ fe = nullptr;
++ }
++ }
+ // Note that we've attempted a local lookup, even if it failed,
+ // as this means we are dependent on any updates to the font list.
+ mSeenLocalSource = true;
diff --git a/gfx/thebes/moz.build b/gfx/thebes/moz.build
+index 2bb893d84f..0088f6cab7 100644
--- a/gfx/thebes/moz.build
+++ b/gfx/thebes/moz.build
-@@ -299,3 +299,6 @@
+@@ -299,3 +299,6 @@ DEFINES["GRAPHITE2_STATIC"] = True
COMPILE_FLAGS["WARNINGS_CXXFLAGS"] += ["-Werror=switch"]
include("/tools/fuzzing/libfuzzer-config.mozbuild")
+
+# DOM Mask
+LOCAL_INCLUDES += ["/camoucfg"]
-diff --git a/layout/style/FontFace.cpp b/layout/style/FontFace.cpp
---- a/layout/style/FontFace.cpp
-+++ b/layout/style/FontFace.cpp
-@@ -239,7 +239,16 @@
- mImpl->SetSizeAdjust(aValue, aRv);
- }
-
--FontFaceLoadStatus FontFace::Status() { return mImpl->Status(); }
-+FontFaceLoadStatus FontFace::Status() {
-+ nsAutoCString fontFamily;
-+ GetFamily(fontFamily);
-+
-+ if (mozilla::dom::IsFontAllowed(fontFamily)) {
-+ return FontFaceLoadStatus::Loaded;
-+ } else {
-+ return FontFaceLoadStatus::Error;
-+ }
-+}
-
- Promise* FontFace::Load(ErrorResult& aRv) {
- EnsurePromise();
-@@ -249,7 +258,17 @@
- return nullptr;
- }
-
-- mImpl->Load();
-+ nsAutoCString fontFamily;
-+ GetFamily(fontFamily);
-+
-+ if (mozilla::dom::IsFontAllowed(fontFamily)) {
-+ // For allowed fonts, always resolve the promise
-+ mLoaded->MaybeResolve(this);
-+ } else {
-+ // For non-allowed fonts, always reject the promise
-+ mLoaded->MaybeReject(NS_ERROR_FAILURE);
-+ }
-+
- mImpl->UpdateOwnerKeepAlive();
- return mLoaded;
- }
-diff --git a/layout/style/FontFaceImpl.cpp b/layout/style/FontFaceImpl.cpp
---- a/layout/style/FontFaceImpl.cpp
-+++ b/layout/style/FontFaceImpl.cpp
-@@ -354,21 +354,15 @@
- void FontFaceImpl::SetStatus(FontFaceLoadStatus aStatus) {
- gfxFontUtils::AssertSafeThreadOrServoFontMetricsLocked();
-
-- if (mStatus == aStatus) {
-- return;
-- }
-+ nsAutoCString fontFamily;
-+ GetFamily(fontFamily);
-
-- if (aStatus < mStatus) {
-- // We're being asked to go backwards in status! Normally, this shouldn't
-- // happen. But it can if the FontFace had a user font entry that had
-- // loaded, but then was given a new one by FontFaceSet::InsertRuleFontFace
-- // if we used a local() rule. For now, just ignore the request to
-- // go backwards in status.
-- return;
-+ if (IsFontAllowed(fontFamily)) {
-+ mStatus = FontFaceLoadStatus::Loaded;
-+ } else {
-+ mStatus = FontFaceLoadStatus::Error;
- }
-
-- mStatus = aStatus;
--
- if (mInFontFaceSet) {
- mFontFaceSet->OnFontFaceStatusChanged(this);
- }
-diff --git a/layout/style/FontFaceImpl.h b/layout/style/FontFaceImpl.h
---- a/layout/style/FontFaceImpl.h
-+++ b/layout/style/FontFaceImpl.h
-@@ -8,6 +8,7 @@
- #include "gfxUserFontSet.h"
- #include "mozilla/RWLock.h"
- #include "mozilla/dom/FontFaceBinding.h"
-+#include "MaskConfig.hpp"
- #include "nsTHashSet.h"
-
- class gfxFontFaceBufferSource;
-@@ -27,6 +28,14 @@
-
- namespace mozilla::dom {
-
-+// Helper function to check if a font is in the allowed list
-+inline bool IsFontAllowed(const nsACString& aFontName) {
-+ std::string fontName(aFontName.BeginReading(), aFontName.Length());
-+ std::transform(fontName.begin(), fontName.end(), fontName.begin(),
-+ [](unsigned char c) { return std::tolower(c); });
-+ return MaskConfig::IsFontAllowed(fontName);
-+}
-+
- class FontFaceImpl final {
- NS_INLINE_DECL_THREADSAFE_REFCOUNTING(FontFaceImpl)
-
diff --git a/layout/style/moz.build b/layout/style/moz.build
+index b3886e491f..9236483cec 100644
--- a/layout/style/moz.build
+++ b/layout/style/moz.build
-@@ -370,3 +370,6 @@
+@@ -370,3 +370,6 @@ if CONFIG["COMPILE_ENVIRONMENT"]:
"ServoStyleConsts.h",
inputs=["/servo/ports/geckolib", "/servo/components/style"],
)
diff --git a/patches/font-system-fonts-css2.patch b/patches/font-system-fonts-css2.patch
index 7d9dee741..177246557 100644
--- a/patches/font-system-fonts-css2.patch
+++ b/patches/font-system-fonts-css2.patch
@@ -59,9 +59,10 @@ changes, so a single classification per process is safe.
Bug: daijro/camoufox#598, daijro/camoufox#695
diff --git a/layout/base/moz.build b/layout/base/moz.build
+index 2ec366ca45..bcdc4301b9 100644
--- a/layout/base/moz.build
+++ b/layout/base/moz.build
-@@ -146,6 +146,7 @@
+@@ -146,6 +146,7 @@ LOCAL_INCLUDES += [
"../tables",
"../xul",
"../xul/tree/",
@@ -70,6 +71,7 @@ diff --git a/layout/base/moz.build b/layout/base/moz.build
"/dom/base",
"/dom/html",
diff --git a/layout/base/nsLayoutUtils.cpp b/layout/base/nsLayoutUtils.cpp
+index 1e76b87091..53a7006f01 100644
--- a/layout/base/nsLayoutUtils.cpp
+++ b/layout/base/nsLayoutUtils.cpp
@@ -4,6 +4,7 @@
@@ -80,7 +82,7 @@ diff --git a/layout/base/nsLayoutUtils.cpp b/layout/base/nsLayoutUtils.cpp
#include
#include
-@@ -9718,6 +9719,55 @@
+@@ -9748,6 +9749,113 @@ already_AddRefed nsLayoutUtils::GetMetricsFor(
static void GetSpoofedSystemFontForRFP(LookAndFeel::FontID aFontID,
gfxFontStyle& aStyle, nsAString& aName) {
@@ -103,7 +105,7 @@ diff --git a/layout/base/nsLayoutUtils.cpp b/layout/base/nsLayoutUtils.cpp
+ // and uses probe duration as a probabilistic headless signal.
+ // navigator.platform is set from CAMOU_CONFIG at process start and never
+ // changes, so a single lookup per process is safe.
-+ enum class SpoofedOS { Other, Mac, Win };
++ enum class SpoofedOS { Other, Mac, Win, Linux };
+ static const SpoofedOS sSpoofedOS = []() {
+ auto platform = MaskConfig::GetString("navigator.platform");
+ if (!platform) return SpoofedOS::Other;
@@ -119,24 +121,82 @@ diff --git a/layout/base/nsLayoutUtils.cpp b/layout/base/nsLayoutUtils.cpp
+ };
+ if (starts_with("mac")) return SpoofedOS::Mac;
+ if (starts_with("win")) return SpoofedOS::Win;
++ if (starts_with("linux")) return SpoofedOS::Linux;
+ return SpoofedOS::Other;
+ }();
++ // Every branch must mark the result as a system font, as the upstream path at
++ // the end of this function does: ComputeSystemFont copies the flag into
++ // FontFamilyList::is_system_font, and without it canvas's font setter
++ // overrides the size and cannot serialize the value, so
++ // `ctx.font = "caption"` was silently ignored ("10px sans-serif").
+ if (sSpoofedOS == SpoofedOS::Mac) {
++ // Same per-keyword table as a real macOS (see the XP_MACOSX branch below).
+ aName = u"-apple-system"_ns;
-+ aStyle.size = 13;
++ switch (aFontID) {
++ case LookAndFeel::FontID::Caption:
++ case LookAndFeel::FontID::Menu:
++ aStyle.size = 13;
++ break;
++ case LookAndFeel::FontID::SmallCaption:
++ aStyle.weight = gfxFontStyle::FontWeight::BOLD;
++ [[fallthrough]];
++ case LookAndFeel::FontID::MessageBox:
++ case LookAndFeel::FontID::StatusBar:
++ aStyle.size = 11;
++ break;
++ default:
++ aStyle.size = 12;
++ break;
++ }
++ aStyle.systemFont = true;
+ return;
+ }
+ if (sSpoofedOS == SpoofedOS::Win) {
-+ aName = u"Segoe UI"_ns;
-+ aStyle.size = 12;
++ // Windows reports the system font in device pixels, so every keyword is
++ // 12 px x the display scale (30 px at 250 %). Use the DPR the identity
++ // presents, which is the one the page cross-checks it against.
++ static const float sWinScale = []() {
++ if (auto dpr = MaskConfig::GetDouble("window.devicePixelRatio");
++ dpr && *dpr > 0) {
++ return static_cast(*dpr);
++ }
++ return 1.0f;
++ }();
++ // Form controls resolve -moz-button/-moz-field/-moz-list, which stock
++ // Windows maps to the dialog font "MS Shell Dlg 2" (nsLookAndFeel::
++ // GetLookAndFeelFont, aUseShellDlg); every other keyword is the
++ // NONCLIENTMETRICS face. Answering "Segoe UI" for all of them made
++ // getComputedStyle(button).fontFamily and form-control metrics differ from
++ // stock (Win11: 13.3333px "MS Shell Dlg 2" vs "Segoe UI", 22 vs 23 px).
++ switch (aFontID) {
++ case LookAndFeel::FontID::MozButton:
++ case LookAndFeel::FontID::MozField:
++ case LookAndFeel::FontID::MozList:
++ aName = u"MS Shell Dlg 2"_ns;
++ break;
++ default:
++ aName = u"Segoe UI"_ns;
++ break;
++ }
++ aStyle.size = 12.0f * sWinScale;
++ aStyle.systemFont = true;
+ return;
+ }
-+ // Linux / iPhone / unspoofed: fall through to upstream behavior.
++ if (sSpoofedOS == SpoofedOS::Linux) {
++ // A stock Ubuntu desktop: GTK interface font "Ubuntu 11" (11pt = 14.6667
++ // CSS px). Upstream's RFP value for Linux ("sans-serif" 15px) is what a
++ // resistFingerprinting user shows, not a regular desktop.
++ aName = u"Ubuntu"_ns;
++ aStyle.size = 14.6667f;
++ aStyle.systemFont = true;
++ return;
++ }
++ // iPhone / unspoofed: fall through to upstream behavior.
+
#if defined(XP_MACOSX) || defined(MOZ_WIDGET_UIKIT)
aName = u"-apple-system"_ns;
// Values taken from a macOS 10.15 system.
-@@ -9772,8 +9822,22 @@
+@@ -9802,8 +9910,22 @@ void nsLayoutUtils::ComputeSystemFont(nsFont* aSystemFont,
const Document* aDocument) {
gfxFontStyle fontStyle;
nsAutoString systemFontName;
diff --git a/patches/librewolf/ui-patches/hide-default-browser.patch b/patches/librewolf/ui-patches/hide-default-browser.patch
index 6e0407704..685ffd4f9 100644
--- a/patches/librewolf/ui-patches/hide-default-browser.patch
+++ b/patches/librewolf/ui-patches/hide-default-browser.patch
@@ -1,95 +1,37 @@
+LibreWolf: hide the "set as default browser" UI in preferences.
+
+Hides the settings rather than deleting them. chrome://browser/content/ is
+contentaccessible, so a page can load preferences/main.js and read the order of
+the globals it declares; removing the blocks outright changed that order away
+from stock Firefox's. Guard: tests/patches/contentaccessible-parity.py.
+
diff --git a/browser/components/preferences/main.js b/browser/components/preferences/main.js
-index c86e54bb6f..bdfcc7bb9f 100644
--- a/browser/components/preferences/main.js
+++ b/browser/components/preferences/main.js
-@@ -494,65 +494,6 @@ const DefaultBrowserHelper = {
- },
- };
-
--Preferences.addSetting({
-- id: "alwaysCheckDefault",
-- pref: "browser.shell.checkDefaultBrowser",
-- setup: emitChange => {
-- if (!DefaultBrowserHelper.canCheck) {
-- return;
-- }
-- DefaultBrowserHelper.pollForDefaultChanges(emitChange);
-- // eslint-disable-next-line consistent-return
-- return () => DefaultBrowserHelper.clearPollingForDefaultChanges();
-- },
-- /**
-- * Show button for setting browser as default browser or information that
-- * browser is already the default browser.
-- */
+@@ -509,7 +509,7 @@
+ * Show button for setting browser as default browser or information that
+ * browser is already the default browser.
+ */
- visible: () => DefaultBrowserHelper.canCheck,
-- disabled: (_, setting) =>
-- !DefaultBrowserHelper.canCheck ||
-- setting.locked ||
-- DefaultBrowserHelper.isBrowserDefault,
--});
--
--Preferences.addSetting({
-- id: "isDefaultPane",
-- deps: ["alwaysCheckDefault"],
++ visible: () => false,
+ disabled: (_, setting) =>
+ !DefaultBrowserHelper.canCheck ||
+ setting.locked ||
+@@ -519,15 +519,13 @@
+ Preferences.addSetting({
+ id: "isDefaultPane",
+ deps: ["alwaysCheckDefault"],
- visible: () =>
- DefaultBrowserHelper.canCheck && DefaultBrowserHelper.isBrowserDefault,
--});
--
--Preferences.addSetting({
-- id: "isNotDefaultPane",
-- deps: ["alwaysCheckDefault"],
++ visible: () => false,
+ });
+
+ Preferences.addSetting({
+ id: "isNotDefaultPane",
+ deps: ["alwaysCheckDefault"],
- visible: () =>
- DefaultBrowserHelper.canCheck && !DefaultBrowserHelper.isBrowserDefault,
-- onUserClick: (e, { alwaysCheckDefault }) => {
-- if (!DefaultBrowserHelper.canCheck) {
-- return;
-- }
-- const setDefaultButton = /** @type {MozButton} */ (e.target);
--
-- if (!setDefaultButton) {
-- return;
-- }
-- if (setDefaultButton.disabled) {
-- return;
-- }
--
-- /**
-- * Disable the set default button, so that the user
-- * doesn't try to hit it again while browser is being set to default.
-- */
-- setDefaultButton.disabled = true;
-- alwaysCheckDefault.value = true;
-- DefaultBrowserHelper.setDefaultBrowser().finally(() => {
-- setDefaultButton.disabled = false;
-- });
-- },
--});
--
- // AI Control pref settings
- Preferences.addSetting({
- id: "aiControlDefault",
-@@ -679,16 +620,11 @@ function createStartupConfig(hidden = false) {
- role: "status",
- },
- },
-- {
-- id: "alwaysCheckDefault",
-- l10nId: "always-check-default",
-- },
- ],
- };
- }
-
- SettingGroupManager.registerGroups({
-- defaultBrowser: createDefaultBrowserConfig(),
- startup: createStartupConfig(
- Services.prefs.getBoolPref("browser-settings-redesign.enabled", false)
- ),
-@@ -797,7 +733,6 @@ var gMainPane = {
- initSettingGroup("translations");
- initSettingGroup("spellCheck");
- initSettingGroup("performance");
-- initSettingGroup("defaultBrowser");
- initSettingGroup("startup");
- initSettingGroup("importBrowserData");
- initSettingGroup("tabs");
++ visible: () => false,
+ onUserClick: (e, { alwaysCheckDefault }) => {
+ if (!DefaultBrowserHelper.canCheck) {
+ return;
diff --git a/patches/locale-spoofing.patch b/patches/locale-spoofing.patch
index 7bcd26f43..4a576a413 100644
--- a/patches/locale-spoofing.patch
+++ b/patches/locale-spoofing.patch
@@ -36,10 +36,10 @@ index a3319c7a59..0a86aec7d2 100644
# License, v. 2.0. If a copy of the MPL was not distributed with this
# file, You can obtain one at http://mozilla.org/MPL/2.0/.
diff --git a/intl/components/src/Locale.cpp b/intl/components/src/Locale.cpp
-index 718d8814d8..068d042bc7 100644
+index 718d8814d8..7dc23ab003 100644
--- a/intl/components/src/Locale.cpp
+++ b/intl/components/src/Locale.cpp
-@@ -20,11 +20,56 @@
+@@ -20,11 +20,35 @@
#include "unicode/uloc.h"
#include "unicode/utypes.h"
@@ -49,28 +49,7 @@ index 718d8814d8..068d042bc7 100644
using namespace intl::LanguageTagLimits;
-+
-+// Helper methods for header file
-+
-+const char* Locale::GetCamouLanguage() {
-+ if (auto lang = MaskConfig::GetString("locale:language"))
-+ return lang.value().c_str();
-+ return nullptr;
-+}
-+
-+const char* Locale::GetCamouRegion() {
-+ if (auto region = MaskConfig::GetString("locale:region"))
-+ return region.value().c_str();
-+ return nullptr;
-+}
-+
-+const char* Locale::GetCamouScript() {
-+ if (auto script = MaskConfig::GetString("locale:script"))
-+ return script.value().c_str();
-+ return nullptr;
-+}
-+
-+// Publicly exposed methods
++// Camoufox: default-locale hooks (see Locale.h).
+
+const char* Locale::GetCamouLocale() {
+ static std::string locale;
@@ -97,67 +76,23 @@ index 718d8814d8..068d042bc7 100644
bool IsStructurallyValidLanguageTag(Span aLanguage) {
// unicode_language_subtag = alpha{2,3} | alpha{5,8};
diff --git a/intl/components/src/Locale.h b/intl/components/src/Locale.h
-index b7314ec5f6..a28ee88838 100644
+index b7314ec5f6..3a07b97cfa 100644
--- a/intl/components/src/Locale.h
+++ b/intl/components/src/Locale.h
-@@ -208,8 +208,11 @@ class MOZ_STACK_CLASS Locale final {
-
- private:
- LanguageSubtag mLanguage = {};
-+ mutable LanguageSubtag mCamouLanguage = {};
- ScriptSubtag mScript = {};
-+ mutable ScriptSubtag mCamouScript = {};
- RegionSubtag mRegion = {};
-+ mutable RegionSubtag mCamouRegion = {};
-
- VariantsVector mVariants;
- ExtensionsVector mExtensions;
-@@ -338,9 +341,28 @@ class MOZ_STACK_CLASS Locale final {
- }
- };
-
-- const LanguageSubtag& Language() const { return mLanguage; }
-- const ScriptSubtag& Script() const { return mScript; }
-- const RegionSubtag& Region() const { return mRegion; }
-+ const LanguageSubtag& Language() const {
-+ if (const char* lang = GetCamouLanguage()) {
-+ mCamouLanguage.Set(mozilla::Span(lang, strlen(lang)));
-+ return mCamouLanguage;
-+ }
-+ return mLanguage;
-+ }
-+ const ScriptSubtag& Script() const {
-+ if (const char* script = GetCamouScript()) {
-+ mCamouScript.Set(mozilla::Span(script, strlen(script)));
-+ return mCamouScript;
-+ }
-+ return mScript;
-+ }
-+ const RegionSubtag& Region() const {
-+ if (const char* region = GetCamouRegion()) {
-+ mCamouRegion.Set(mozilla::Span(region, strlen(region)));
-+ return mCamouRegion;
-+ }
-+ return mRegion;
-+ }
-+
- auto Variants() const { return SubtagEnumeration(mVariants); }
- auto Extensions() const { return SubtagEnumeration(mExtensions); }
- Maybe> PrivateUse() const {
-@@ -518,7 +540,15 @@ class MOZ_STACK_CLASS Locale final {
+@@ -518,7 +518,15 @@ class MOZ_STACK_CLASS Locale final {
*
* Also see .
*/
- static const char* GetDefaultLocale() { return uloc_getDefault(); }
++ // Camoufox: the spoofed locale stands in for the OS/ICU default locale (see
++ // OSPreferences). Only the DEFAULT is spoofed: overriding Language()/Script()/
++ // Region() on every Locale object (as this patch once did) rewrote locales a
++ // page names explicitly -- new Intl.DisplayNames(['en'], {type: 'region'})
++ // .of('DE') returned "France" and new Intl.Locale('ja-Jpan-JP').minimize()
++ // returned the spoofed tag.
+ static const char* GetDefaultLocale();
+
+ static const char* GetCamouLocale();
-+
-+ static const char* GetCamouLanguage();
-+
-+ static const char* GetCamouRegion();
-+
-+ static const char* GetCamouScript();
/**
* Returns an iterator over all supported locales.
diff --git a/patches/media-device-spoofing.patch b/patches/media-device-spoofing.patch
index 7cf66ad11..a95050e1f 100644
--- a/patches/media-device-spoofing.patch
+++ b/patches/media-device-spoofing.patch
@@ -1,109 +1,252 @@
-diff --git a/dom/media/MediaDevices.cpp b/dom/media/MediaDevices.cpp
-index 067094cb6b..9088f71793 100644
---- a/dom/media/MediaDevices.cpp
-+++ b/dom/media/MediaDevices.cpp
-@@ -26,6 +26,7 @@
- #include "nsPIDOMWindow.h"
- #include "nsGlobalWindowInner.h"
- #include "nsQueryObject.h"
+diff --git a/dom/media/MediaManager.cpp b/dom/media/MediaManager.cpp
+index cc38a8f750..b5e80a22d2 100644
+--- a/dom/media/MediaManager.cpp
++++ b/dom/media/MediaManager.cpp
+@@ -44,6 +44,7 @@
+ #include "mozilla/ipc/PBackgroundChild.h"
+ #include "mozilla/media/CamerasTypes.h"
+ #include "mozilla/media/MediaChild.h"
+#include "MaskConfig.hpp"
+ #include "mozilla/media/MediaTaskUtils.h"
+ #include "nsAppDirectoryServiceDefs.h"
+ #include "nsArray.h"
+@@ -1205,6 +1206,12 @@ LocalMediaDevice::GetMediaSource(nsAString& aMediaSource) {
+ return NS_OK;
+ }
- namespace mozilla::dom {
++bool LocalMediaDevice::IsIdentityDevice() const {
++ // Only MediaEngineFake reports IsFake().
++ return IsFake() && static_cast(mRawDevice->mEngine.get())
++ ->ServesIdentityDevices();
++}
++
+ nsresult LocalMediaDevice::Allocate(const MediaTrackConstraints& aConstraints,
+ const MediaEnginePrefs& aPrefs,
+ uint64_t aWindowID,
+@@ -2138,7 +2145,11 @@ MediaManager::CreateEnumerationParams(dom::MediaSourceEnum aVideoInputType,
+ MOZ_ASSERT_IF(!MediaEngineSource::IsAudio(aAudioInputType),
+ aAudioInputType == dom::MediaSourceEnum::Other);
+ const bool forceFakes = aFlags.contains(EnumerationFlag::ForceFakes);
+- const bool fakeByPref = Preferences::GetBool("media.navigator.streams.fake");
++ // Camoufox: a spoofed device list is served by the fake engine so that
++ // enumerateDevices(), getUserMedia() tracks and their settings all agree.
++ const bool fakeByPref =
++ Preferences::GetBool("media.navigator.streams.fake") ||
++ MaskConfig::GetBool("mediaDevices:enabled").value_or(false);
+ Maybe videoParams;
+ Maybe audioParams;
+ nsAutoCString audioDev;
+@@ -2335,7 +2346,10 @@ MediaManager::EnumerateRawDevices(EnumerationParams aParams) {
+ // Only enumerate what's asked for, and only fake cams and mics.
+ RefPtr fakeBackend, realBackend;
+ if (aParams.HasFakeCams() || aParams.HasFakeMics()) {
+- fakeBackend = new MediaEngineFake();
++ // Camoufox: a page's own getUserMedia({fake: true}) gets stock's generic
++ // fake devices, never the identity's.
++ fakeBackend = new MediaEngineFake(
++ !aParams.mFlags.contains(EnumerationFlag::ForceFakes));
+ }
+ if (aParams.RealDeviceRequested()) {
+ MediaManager* manager = MediaManager::GetIfExists();
+@@ -2376,9 +2390,17 @@ MediaManager::EnumerateRawDevices(EnumerationParams aParams) {
+ }
+ if (aParams.mFlags.contains(EnumerationFlag::EnumerateAudioOutputs)) {
+ MediaDeviceSet outputs;
+- MOZ_ASSERT(realBackend);
+- realBackend->EnumerateDevices(MediaSourceEnum::Other,
+- MediaSinkEnum::Speaker, &outputs);
++ // Camoufox: the identity's speakers come from the fake engine too.
++ RefPtr speakerBackend = realBackend;
++ if (MaskConfig::GetBool("mediaDevices:enabled").value_or(false)) {
++ if (!fakeBackend) {
++ fakeBackend = new MediaEngineFake();
++ }
++ speakerBackend = fakeBackend;
++ }
++ MOZ_ASSERT(speakerBackend);
++ speakerBackend->EnumerateDevices(MediaSourceEnum::Other,
++ MediaSinkEnum::Speaker, &outputs);
+ speakers = Some(MediaDeviceSet());
+ speakers->AppendElements(outputs);
+ devices->AppendElements(std::move(outputs));
+@@ -4885,7 +4907,7 @@ bool DeviceListener::CapturingVideo() const {
+ MOZ_ASSERT(NS_IsMainThread());
+ return Activated() && mDeviceState && !mDeviceState->mStopped &&
+ MediaEngineSource::IsVideo(GetDevice()->GetMediaSource()) &&
+- (!GetDevice()->IsFake() ||
++ (!GetDevice()->IsFake() || GetDevice()->IsIdentityDevice() ||
+ Preferences::GetBool("media.navigator.permission.fake"));
+ }
+
+@@ -4893,7 +4915,7 @@ bool DeviceListener::CapturingAudio() const {
+ MOZ_ASSERT(NS_IsMainThread());
+ return Activated() && mDeviceState && !mDeviceState->mStopped &&
+ MediaEngineSource::IsAudio(GetDevice()->GetMediaSource()) &&
+- (!GetDevice()->IsFake() ||
++ (!GetDevice()->IsFake() || GetDevice()->IsIdentityDevice() ||
+ Preferences::GetBool("media.navigator.permission.fake"));
+ }
+
+@@ -4911,7 +4933,7 @@ CaptureState DeviceListener::CapturingSource(MediaSourceEnum aSource) const {
-@@ -329,52 +330,52 @@ RefPtr MediaDevices::FilterExposedDevices(
- exposed->AppendElement(device);
+ if ((aSource == MediaSourceEnum::Camera ||
+ aSource == MediaSourceEnum::Microphone) &&
+- GetDevice()->IsFake() &&
++ GetDevice()->IsFake() && !GetDevice()->IsIdentityDevice() &&
+ !Preferences::GetBool("media.navigator.permission.fake")) {
+ // Fake Camera and Microphone only count if there is no fake permission
+ return CaptureState::Off;
+diff --git a/dom/media/MediaManager.h b/dom/media/MediaManager.h
+index 3dac2943b3..8f6b3f363d 100644
+--- a/dom/media/MediaManager.h
++++ b/dom/media/MediaManager.h
+@@ -166,6 +166,8 @@ class LocalMediaDevice final : public nsIMediaDevice {
}
+ dom::MediaDeviceKind Kind() const { return mRawDevice->mKind; }
+ bool IsFake() const { return mRawDevice->mIsFake; }
++ // Camoufox: a fake device that stands in for the identity's real hardware.
++ bool IsIdentityDevice() const;
+ const nsString& RawID() { return mRawDevice->mRawID; }
+ const dom::MediaTrackConstraints& Constraints() const;
-- if (doc->ShouldResistFingerprinting(RFPTarget::MediaDevices)) {
-- // We expose a single device of each kind.
-- // Legacy mode also achieves the same thing, except for speakers.
-- nsTHashSet seenKinds;
-+ // Replaces the RFP-based device count spoofing with one that controls the
-+ // number of devices exposed.
+diff --git a/dom/media/webrtc/MediaEngineFake.cpp b/dom/media/webrtc/MediaEngineFake.cpp
+index 8123aa05e5..f45136a27c 100644
+--- a/dom/media/webrtc/MediaEngineFake.cpp
++++ b/dom/media/webrtc/MediaEngineFake.cpp
+@@ -4,6 +4,9 @@
-- for (uint32_t i = 0; i < exposed->Length(); i++) {
-- RefPtr device = exposed->ElementAt(i);
-- if (seenKinds.Contains(device->mKind)) {
-- exposed->RemoveElementAt(i);
-- i--;
-- continue;
-- }
-- seenKinds.Insert(device->mKind);
-- }
-+ if (!MaskConfig::GetBool("mediaDevices:enabled")) {
-+ return exposed;
-+ }
+ #include "MediaEngineFake.h"
-- // We haven't seen at least one of each kind of device.
-- // Audioinput, Videoinput, Audiooutput.
-- // Insert fake devices.
-- if (seenKinds.Count() != 3) {
-- RefPtr fakeEngine = new MediaEngineFake();
-- RefPtr fakeDevices = new MediaDeviceSetRefCnt();
-- // The order in which we insert the fake devices is important.
-- // Microphone is inserted first, then camera, then speaker.
-- // If we haven't seen a microphone, insert a fake one.
-- if (!seenKinds.Contains(MediaDeviceKind::Audioinput)) {
-- fakeEngine->EnumerateDevices(MediaSourceEnum::Microphone,
-- MediaSinkEnum::Other, fakeDevices);
-- exposed->InsertElementAt(0, fakeDevices->LastElement());
-- }
-- // If we haven't seen a camera, insert a fake one.
-- if (!seenKinds.Contains(MediaDeviceKind::Videoinput)) {
-- fakeEngine->EnumerateDevices(MediaSourceEnum::Camera,
-- MediaSinkEnum::Other, fakeDevices);
-- exposed->InsertElementAt(1, fakeDevices->LastElement());
-- }
-- // If we haven't seen a speaker, insert a fake one.
-- if (!seenKinds.Contains(MediaDeviceKind::Audiooutput) &&
-- mCanExposeMicrophoneInfo) {
-- RefPtr info = new AudioDeviceInfo(
-- nullptr, u""_ns, u""_ns, u""_ns, CUBEB_DEVICE_TYPE_OUTPUT,
-- CUBEB_DEVICE_STATE_ENABLED, CUBEB_DEVICE_PREF_ALL,
-- CUBEB_DEVICE_FMT_ALL, CUBEB_DEVICE_FMT_S16NE, 2, 44100, 44100,
-- 44100, 128, 128);
-- exposed->AppendElement(
-- new MediaDevice(new MediaEngineFake(), info, u""_ns));
-- }
-+ uint32_t numMics = MaskConfig::GetUint32("mediaDevices:micros").value_or(3);
-+ uint32_t numWebcams =
-+ MaskConfig::GetUint32("mediaDevices:webcams").value_or(1);
-+ uint32_t numSpeakers =
-+ MaskConfig::GetUint32("mediaDevices:speakers").value_or(1);
-+
-+ // Clear existing devices. We'll add our own
-+ exposed->Clear();
++#include "MaskConfig.hpp"
++#include "AudioDeviceInfo.h"
+
-+ // We haven't seen at least one of each kind of device.
-+ // Audioinput, Videoinput, Audiooutput.
-+ // Insert fake devices.
-+ RefPtr fakeEngine = new MediaEngineFake();
-+ RefPtr fakeDevices = new MediaDeviceSetRefCnt();
-+ // The order in which we insert the fake devices is important.
-+ // Microphone is inserted first, then camera, then speaker
+ #include "AudioSegment.h"
+ #include "FakeVideoSource.h"
+ #include "ImageContainer.h"
+@@ -577,7 +580,15 @@ void AudioSourcePullListener::NotifyPull(MediaTrackGraph* aGraph,
+ mTrack->AppendData(&segment);
+ }
+
+-MediaEngineFake::MediaEngineFake() = default;
++MediaEngineFake::MediaEngineFake(bool aIdentityDevices)
++ : mIdentityDevices(aIdentityDevices) {}
+
-+ // Insert fake microphones
-+ for (uint32_t i = 0; i < numMics; ++i) {
-+ fakeEngine->EnumerateDevices(MediaSourceEnum::Microphone,
-+ MediaSinkEnum::Other, fakeDevices);
-+ exposed->InsertElementAt(0, fakeDevices->LastElement());
-+ }
-+ // Insert fake cameras
-+ for (uint32_t i = 0; i < numWebcams; ++i) {
-+ fakeEngine->EnumerateDevices(MediaSourceEnum::Camera, MediaSinkEnum::Other,
-+ fakeDevices);
-+ exposed->InsertElementAt(1, fakeDevices->LastElement());
++bool MediaEngineFake::ServesIdentityDevices() const {
++ // GetBool returns std::optional: test the value, not its presence
++ // ("mediaDevices:enabled": false must disable them).
++ return mIdentityDevices &&
++ MaskConfig::GetBool("mediaDevices:enabled").value_or(false);
++}
+ MediaEngineFake::~MediaEngineFake() = default;
+
+ void MediaEngineFake::EnumerateDevices(
+@@ -587,6 +598,70 @@ void MediaEngineFake::EnumerateDevices(
+ using IsScary = MediaDevice::IsScary;
+ using OsPromptable = MediaDevice::OsPromptable;
+
++ // Camoufox: the identity's devices. Counts from mediaDevices:{micros,
++ // webcams,speakers}; labels and groups from the aligned *Labels / *Groups
++ // lists (a sound card's microphone and speakers share a group, a webcam
++ // and its microphone share one, as their groupId does on a real machine).
++ // Raw ids are anonymised per origin by MediaManager exactly like real ones.
++ if (ServesIdentityDevices()) {
++ auto pick = [](const std::vector& list, uint32_t i,
++ const nsString& fallback) -> nsString {
++ if (i < list.size()) {
++ return NS_ConvertUTF8toUTF16(list[i].c_str());
++ }
++ return fallback;
++ };
++ auto rawId = [](const char* kind, uint32_t i) -> nsString {
++ nsString id;
++ id.AppendPrintf("camou-%s-%u", kind, i);
++ return id;
++ };
++ if (aMediaSink == MediaSinkEnum::Speaker) {
++ const uint32_t n =
++ MaskConfig::GetUint32("mediaDevices:speakers").value_or(1);
++ const auto labels = MaskConfig::GetStringList("mediaDevices:speakerLabels");
++ const auto groups = MaskConfig::GetStringList("mediaDevices:speakerGroups");
++ for (uint32_t i = 0; i < n; ++i) {
++ RefPtr info = new AudioDeviceInfo(
++ nullptr, pick(labels, i, u""_ns),
++ pick(groups, i, rawId("audio-group", i)), u""_ns,
++ CUBEB_DEVICE_TYPE_OUTPUT, CUBEB_DEVICE_STATE_ENABLED,
++ CUBEB_DEVICE_PREF_ALL, CUBEB_DEVICE_FMT_ALL, CUBEB_DEVICE_FMT_S16NE,
++ 2, 44100, 44100, 44100, 128, 128);
++ aDevices->EmplaceBack(new MediaDevice(this, info, rawId("spk", i)));
++ }
++ return;
++ }
++ if (aMediaSource == MediaSourceEnum::Camera) {
++ const uint32_t n =
++ MaskConfig::GetUint32("mediaDevices:webcams").value_or(1);
++ const auto labels = MaskConfig::GetStringList("mediaDevices:webcamLabels");
++ const auto groups = MaskConfig::GetStringList("mediaDevices:webcamGroups");
++ for (uint32_t i = 0; i < n; ++i) {
++ aDevices->EmplaceBack(new MediaDevice(
++ this, aMediaSource, pick(labels, i, FakeVideoName()),
++ rawId("cam", i), pick(groups, i, rawId("video-group", i)),
++ IsScary::No, OsPromptable::No));
++ }
++ return;
++ }
++ if (aMediaSource == MediaSourceEnum::Microphone) {
++ const uint32_t n =
++ MaskConfig::GetUint32("mediaDevices:micros").value_or(1);
++ const auto labels =
++ MaskConfig::GetStringList("mediaDevices:microphoneLabels");
++ const auto groups =
++ MaskConfig::GetStringList("mediaDevices:microphoneGroups");
++ for (uint32_t i = 0; i < n; ++i) {
++ aDevices->EmplaceBack(new MediaDevice(
++ this, aMediaSource, pick(labels, i, u"Default Audio Device"_ns),
++ rawId("mic", i), pick(groups, i, rawId("audio-group", i)),
++ IsScary::No, OsPromptable::No));
++ }
++ return;
++ }
+ }
-+ // Insert fake speakers (this is only accessed if the site has permission)
-+ if (mCanExposeMicrophoneInfo) {
-+ for (uint32_t i = 0; i < numSpeakers; ++i) {
-+ RefPtr info = new AudioDeviceInfo(
-+ nullptr, u""_ns, u""_ns, u""_ns, CUBEB_DEVICE_TYPE_OUTPUT,
-+ CUBEB_DEVICE_STATE_ENABLED, CUBEB_DEVICE_PREF_ALL,
-+ CUBEB_DEVICE_FMT_ALL, CUBEB_DEVICE_FMT_S16NE, 2, 44100, 44100, 44100,
-+ 128, 128);
-+ exposed->AppendElement(
-+ new MediaDevice(new MediaEngineFake(), info, u""_ns));
- }
++
+ if (aMediaSink == MediaSinkEnum::Speaker) {
+ NS_WARNING("No default implementation for MediaSinkEnum::Speaker");
}
+diff --git a/dom/media/webrtc/MediaEngineFake.h b/dom/media/webrtc/MediaEngineFake.h
+index 256a26a279..ab0c3ecd48 100644
+--- a/dom/media/webrtc/MediaEngineFake.h
++++ b/dom/media/webrtc/MediaEngineFake.h
+@@ -16,7 +16,14 @@ namespace mozilla {
+ */
+ class MediaEngineFake : public MediaEngine {
+ public:
+- MediaEngineFake();
++ // Camoufox: aIdentityDevices -- enumerate the identity's devices
++ // (mediaDevices:*) when they are enabled. False for a page's own
++ // getUserMedia({fake: true}), which gets stock's generic fake devices.
++ explicit MediaEngineFake(bool aIdentityDevices = true);
++
++ // Camoufox: whether this engine serves the identity's devices, which stand in
++ // for real hardware (they prompt, count as capturing and expose labels).
++ bool ServesIdentityDevices() const;
+
+ void EnumerateDevices(dom::MediaSourceEnum, MediaSinkEnum,
+ nsTArray>*) override;
+@@ -33,6 +40,7 @@ class MediaEngineFake : public MediaEngine {
+ private:
+ ~MediaEngineFake();
+ MediaEventProducer mDeviceListChangeEvent;
++ const bool mIdentityDevices;
+ };
+ } // namespace mozilla
+diff --git a/dom/media/webrtc/moz.build b/dom/media/webrtc/moz.build
+index 63466ef7f7..08f2e035a1 100644
+--- a/dom/media/webrtc/moz.build
++++ b/dom/media/webrtc/moz.build
+@@ -134,3 +134,6 @@ FINAL_LIBRARY = "xul"
+
+ # Add libFuzzer configuration directives
+ include("/tools/fuzzing/libfuzzer-config.mozbuild")
++
++# DOM Mask
++LOCAL_INCLUDES += ["/camoucfg"]
diff --git a/patches/navigator-spoofing.patch b/patches/navigator-spoofing.patch
index 736731c32..fd371055d 100644
--- a/patches/navigator-spoofing.patch
+++ b/patches/navigator-spoofing.patch
@@ -1,3 +1,156 @@
+diff --git a/dom/base/Navigator.cpp b/dom/base/Navigator.cpp
+index bf535cf22d..dc16916ef2 100644
+--- a/dom/base/Navigator.cpp
++++ b/dom/base/Navigator.cpp
+@@ -4,6 +4,10 @@
+
+ // Needs to be first.
+ #include "Navigator.h"
++// Camoufox: per-context + global navigator spoofing
++#include "NavigatorManager.h"
++#include "MaskConfig.hpp"
++#include "nsJSUtils.h"
+
+ #include "Geolocation.h"
+ #include "base/basictypes.h"
+@@ -114,6 +118,18 @@
+ #include "mozilla/intl/LocaleService.h"
+ #include "mozilla/webgpu/Instance.h"
+
++
++// Camoufox: Lazy initialization for global timezone config.
++// Cannot use static init because SpiderMonkey may not be ready yet.
++static void EnsureGlobalTimezoneInitialized() {
++ static bool sInitialized = false;
++ if (sInitialized) return;
++ sInitialized = true;
++ if (auto tz = MaskConfig::GetString("timezone")) {
++ nsJSUtils::SetTimeZoneOverride(tz.value().c_str());
++ }
++}
++
+ namespace mozilla::dom {
+
+ static const nsLiteralCString kVibrationPermissionType = "vibration"_ns;
+@@ -270,6 +286,18 @@ void Navigator::Invalidate() {
+
+ void Navigator::GetUserAgent(nsAString& aUserAgent, CallerType aCallerType,
+ ErrorResult& aRv) const {
++ // Camoufox: per-context user agent
++ if (mWindow) {
++ uint32_t userContextId = 0;
++ if (BrowsingContext* bc = mWindow->GetBrowsingContext()) {
++ userContextId = bc->OriginAttributesRef().mUserContextId;
++ }
++ nsAutoString stored;
++ if (NavigatorManager::GetUserAgent(userContextId, stored)) {
++ aUserAgent = stored;
++ return;
++ }
++ }
+ nsCOMPtr window;
+
+ if (mWindow) {
+@@ -317,6 +345,11 @@ void Navigator::GetAppCodeName(nsAString& aAppCodeName, ErrorResult& aRv) {
+
+ void Navigator::GetAppVersion(nsAString& aAppVersion, CallerType aCallerType,
+ ErrorResult& aRv) const {
++ // Camoufox: global config fallback for appVersion
++ if (auto value = MaskConfig::GetString("navigator.appVersion")) {
++ aAppVersion.Assign(NS_ConvertUTF8toUTF16(value.value()));
++ return;
++ }
+ nsCOMPtr doc = mWindow->GetExtantDoc();
+
+ nsresult rv = GetAppVersion(
+@@ -432,6 +465,24 @@ void Navigator::GetLanguages(nsTArray& aLanguages) {
+
+ void Navigator::GetPlatform(nsAString& aPlatform, CallerType aCallerType,
+ ErrorResult& aRv) const {
++ EnsureGlobalTimezoneInitialized();
++ // Camoufox: per-context navigator platform
++ if (mWindow) {
++ uint32_t userContextId = 0;
++ if (BrowsingContext* bc = mWindow->GetBrowsingContext()) {
++ userContextId = bc->OriginAttributesRef().mUserContextId;
++ }
++ nsAutoString stored;
++ if (NavigatorManager::GetPlatform(userContextId, stored)) {
++ aPlatform = stored;
++ return;
++ }
++ }
++ // Camoufox: global config fallback
++ if (auto value = MaskConfig::GetString("navigator.platform")) {
++ aPlatform.Assign(NS_ConvertUTF8toUTF16(value.value()));
++ return;
++ }
+ if (mWindow) {
+ BrowsingContext* bc = mWindow->GetBrowsingContext();
+ nsString customPlatform;
+@@ -457,6 +508,23 @@ void Navigator::GetPlatform(nsAString& aPlatform, CallerType aCallerType,
+
+ void Navigator::GetOscpu(nsAString& aOSCPU, CallerType aCallerType,
+ ErrorResult& aRv) const {
++ // Camoufox: per-context navigator oscpu
++ if (mWindow) {
++ uint32_t userContextId = 0;
++ if (BrowsingContext* bc = mWindow->GetBrowsingContext()) {
++ userContextId = bc->OriginAttributesRef().mUserContextId;
++ }
++ nsAutoString stored;
++ if (NavigatorManager::GetOscpu(userContextId, stored)) {
++ aOSCPU = stored;
++ return;
++ }
++ }
++ // Camoufox: global config fallback
++ if (auto value = MaskConfig::GetString("navigator.oscpu")) {
++ aOSCPU.Assign(NS_ConvertUTF8toUTF16(value.value()));
++ return;
++ }
+ if (aCallerType != CallerType::System) {
+ // If fingerprinting resistance is on, we will spoof this value. See
+ // nsRFPService.h for details about spoofed values.
+@@ -685,6 +753,15 @@ void Navigator::GetDoNotTrack(nsAString& aResult) {
+ }
+
+ bool Navigator::GlobalPrivacyControl() {
++ // Camoufox: honour the config key on the main thread exactly as
++ // WorkerNavigator::GlobalPrivacyControl does, so a page cannot observe the
++ // window and a worker disagreeing (daijro/camoufox#760). The launcher also
++ // mirrors the key into privacy.globalprivacycontrol.enabled so the Sec-GPC
++ // request header agrees with both.
++ if (auto value = MaskConfig::GetBool("navigator.globalPrivacyControl");
++ value.has_value()) {
++ return value.value();
++ }
+ bool gpcStatus = StaticPrefs::privacy_globalprivacycontrol_enabled();
+ if (!gpcStatus) {
+ nsCOMPtr loadContext = do_GetInterface(mWindow);
+@@ -696,6 +773,22 @@ bool Navigator::GlobalPrivacyControl() {
+ }
+
+ uint64_t Navigator::HardwareConcurrency() {
++ EnsureGlobalTimezoneInitialized();
++ // Camoufox: per-context hardware concurrency
++ if (mWindow) {
++ uint32_t userContextId = 0;
++ if (BrowsingContext* bc = mWindow->GetBrowsingContext()) {
++ userContextId = bc->OriginAttributesRef().mUserContextId;
++ }
++ uint32_t stored = NavigatorManager::GetHardwareConcurrency(userContextId);
++ if (stored > 0) {
++ return static_cast(stored);
++ }
++ }
++ // Camoufox: global config fallback
++ if (auto value = MaskConfig::GetUint64("navigator.hardwareConcurrency")) {
++ return value.value();
++ }
+ workerinternals::RuntimeService* rts =
+ workerinternals::RuntimeService::GetOrCreateService();
+ if (!rts) {
diff --git a/dom/base/NavigatorManager.cpp b/dom/base/NavigatorManager.cpp
new file mode 100644
index 0000000000..37a1713159
@@ -185,147 +338,11 @@ index 0000000000..918d94be04
+} // namespace mozilla
+
+#endif // mozilla_dom_NavigatorManager_h
-diff --git a/dom/base/Navigator.cpp b/dom/base/Navigator.cpp
-index 318d2edba8..12feb91573 100644
---- a/dom/base/Navigator.cpp
-+++ b/dom/base/Navigator.cpp
-@@ -6,6 +6,10 @@
-
- // Needs to be first.
- #include "Navigator.h"
-+// Camoufox: per-context + global navigator spoofing
-+#include "NavigatorManager.h"
-+#include "MaskConfig.hpp"
-+#include "nsJSUtils.h"
-
- #include "Geolocation.h"
- #include "base/basictypes.h"
-@@ -114,6 +118,18 @@
- #include "mozilla/intl/LocaleService.h"
- #include "mozilla/webgpu/Instance.h"
-
-+
-+// Camoufox: Lazy initialization for global timezone config.
-+// Cannot use static init because SpiderMonkey may not be ready yet.
-+static void EnsureGlobalTimezoneInitialized() {
-+ static bool sInitialized = false;
-+ if (sInitialized) return;
-+ sInitialized = true;
-+ if (auto tz = MaskConfig::GetString("timezone")) {
-+ nsJSUtils::SetTimeZoneOverride(tz.value().c_str());
-+ }
-+}
-+
- namespace mozilla::dom {
-
- static const nsLiteralCString kVibrationPermissionType = "vibration"_ns;
-@@ -262,5 +278,17 @@ void Navigator::Invalidate() {
- void Navigator::GetUserAgent(nsAString& aUserAgent, CallerType aCallerType,
- ErrorResult& aRv) const {
-+ // Camoufox: per-context user agent
-+ if (mWindow) {
-+ uint32_t userContextId = 0;
-+ if (BrowsingContext* bc = mWindow->GetBrowsingContext()) {
-+ userContextId = bc->OriginAttributesRef().mUserContextId;
-+ }
-+ nsAutoString stored;
-+ if (NavigatorManager::GetUserAgent(userContextId, stored)) {
-+ aUserAgent = stored;
-+ return;
-+ }
-+ }
- nsCOMPtr window;
-
- if (mWindow) {
-@@ -308,6 +336,11 @@ void Navigator::GetAppCodeName(nsAString& aAppCodeName, ErrorResult& aRv) {
-
- void Navigator::GetAppVersion(nsAString& aAppVersion, CallerType aCallerType,
- ErrorResult& aRv) const {
-+ // Camoufox: global config fallback for appVersion
-+ if (auto value = MaskConfig::GetString("navigator.appVersion")) {
-+ aAppVersion.Assign(NS_ConvertUTF8toUTF16(value.value()));
-+ return;
-+ }
- nsCOMPtr doc = mWindow->GetExtantDoc();
-
- nsresult rv = GetAppVersion(
-@@ -423,6 +456,24 @@
-
- void Navigator::GetPlatform(nsAString& aPlatform, CallerType aCallerType,
- ErrorResult& aRv) const {
-+ EnsureGlobalTimezoneInitialized();
-+ // Camoufox: per-context navigator platform
-+ if (mWindow) {
-+ uint32_t userContextId = 0;
-+ if (BrowsingContext* bc = mWindow->GetBrowsingContext()) {
-+ userContextId = bc->OriginAttributesRef().mUserContextId;
-+ }
-+ nsAutoString stored;
-+ if (NavigatorManager::GetPlatform(userContextId, stored)) {
-+ aPlatform = stored;
-+ return;
-+ }
-+ }
-+ // Camoufox: global config fallback
-+ if (auto value = MaskConfig::GetString("navigator.platform")) {
-+ aPlatform.Assign(NS_ConvertUTF8toUTF16(value.value()));
-+ return;
-+ }
- if (mWindow) {
- BrowsingContext* bc = mWindow->GetBrowsingContext();
- nsString customPlatform;
-@@ -448,6 +482,23 @@ void Navigator::GetPlatform(nsAString& aPlatform, CallerType aCallerType,
-
- void Navigator::GetOscpu(nsAString& aOSCPU, CallerType aCallerType,
- ErrorResult& aRv) const {
-+ // Camoufox: per-context navigator oscpu
-+ if (mWindow) {
-+ uint32_t userContextId = 0;
-+ if (BrowsingContext* bc = mWindow->GetBrowsingContext()) {
-+ userContextId = bc->OriginAttributesRef().mUserContextId;
-+ }
-+ nsAutoString stored;
-+ if (NavigatorManager::GetOscpu(userContextId, stored)) {
-+ aOSCPU = stored;
-+ return;
-+ }
-+ }
-+ // Camoufox: global config fallback
-+ if (auto value = MaskConfig::GetString("navigator.oscpu")) {
-+ aOSCPU.Assign(NS_ConvertUTF8toUTF16(value.value()));
-+ return;
-+ }
- if (aCallerType != CallerType::System) {
- // If fingerprinting resistance is on, we will spoof this value. See
- // nsRFPService.h for details about spoofed values.
-@@ -683,6 +729,22 @@ bool Navigator::GlobalPrivacyControl() {
- }
-
- uint64_t Navigator::HardwareConcurrency() {
-+ EnsureGlobalTimezoneInitialized();
-+ // Camoufox: per-context hardware concurrency
-+ if (mWindow) {
-+ uint32_t userContextId = 0;
-+ if (BrowsingContext* bc = mWindow->GetBrowsingContext()) {
-+ userContextId = bc->OriginAttributesRef().mUserContextId;
-+ }
-+ uint32_t stored = NavigatorManager::GetHardwareConcurrency(userContextId);
-+ if (stored > 0) {
-+ return static_cast(stored);
-+ }
-+ }
-+ // Camoufox: global config fallback
-+ if (auto value = MaskConfig::GetUint64("navigator.hardwareConcurrency")) {
-+ return value.value();
-+ }
- workerinternals::RuntimeService* rts =
- workerinternals::RuntimeService::GetOrCreateService();
- if (!rts) {
diff --git a/dom/base/moz.build b/dom/base/moz.build
-index f0854f7ca6..6a1438dbac 100644
+index 979dc62755..8e94c6bd70 100644
--- a/dom/base/moz.build
+++ b/dom/base/moz.build
-@@ -222,6 +222,7 @@ EXPORTS.mozilla.dom += [
+@@ -223,6 +223,7 @@ EXPORTS.mozilla.dom += [
"MutationObservers.h",
"NameSpaceConstants.h",
"Navigator.h",
@@ -333,21 +350,22 @@ index f0854f7ca6..6a1438dbac 100644
"NodeInfo.h",
"NodeInfoInlines.h",
"NodeIterator.h",
-@@ -553,5 +554,9 @@ SOURCES += [
+@@ -546,6 +547,10 @@ SOURCES += [
"nsPluginArray.cpp",
]
-
+
+# NavigatorManager compiled separately to avoid unified build scope issues
+# (includes RoverfoxStorageManager.h which can affect compilation units)
+SOURCES += ["NavigatorManager.cpp"]
+
# FontListManager compiled separately (includes RoverfoxStorageManager.h)
SOURCES += ["FontListManager.cpp"]
+
diff --git a/dom/base/nsGlobalWindowInner.cpp b/dom/base/nsGlobalWindowInner.cpp
-index cdd544a14d..230ded31c0 100644
+index 74070680c7..5c3d639da9 100644
--- a/dom/base/nsGlobalWindowInner.cpp
+++ b/dom/base/nsGlobalWindowInner.cpp
-@@ -6,6 +6,7 @@
+@@ -4,6 +4,7 @@
#include "nsGlobalWindowInner.h"
#include "MaskConfig.hpp"
@@ -355,7 +373,7 @@ index cdd544a14d..230ded31c0 100644
#include
#include
-@@ -7793,6 +7794,92 @@ void nsGlobalWindowInner::SetWebGLRenderer(const nsAString& renderer,
+@@ -7834,6 +7835,92 @@ void nsGlobalWindowInner::SetFontList(const nsAString& aFontList,
}
}
@@ -449,13 +467,13 @@ index cdd544a14d..230ded31c0 100644
bool aGranted) {
// Invalidate cached StorageAllowed field so that calls to GetLocalStorage
diff --git a/dom/base/nsGlobalWindowInner.h b/dom/base/nsGlobalWindowInner.h
-index 87f1e92cec..4991123b64 100644
+index 6db3b36b98..54b50f7bb1 100644
--- a/dom/base/nsGlobalWindowInner.h
+++ b/dom/base/nsGlobalWindowInner.h
-@@ -700,5 +700,13 @@ class nsGlobalWindowInner final : public mozilla::dom::EventTarget,
-
- void ForgetSharedWorker(mozilla::dom::SharedWorker* aSharedWorker);
-
+@@ -693,6 +693,14 @@ class nsGlobalWindowInner final : public mozilla::dom::EventTarget,
+ // Per-context font list spoofing
+ void SetFontList(const nsAString& aFontList, mozilla::ErrorResult& aRv);
+
+ // Per-context navigator property spoofing
+ void SetNavigatorPlatform(const nsAString& platform,
+ mozilla::ErrorResult& aRv);
@@ -466,13 +484,13 @@ index 87f1e92cec..4991123b64 100644
+
public:
void Alert(nsIPrincipal& aSubjectPrincipal, mozilla::ErrorResult& aError);
-
+ void Alert(const nsAString& aMessage, nsIPrincipal& aSubjectPrincipal,
diff --git a/dom/webidl/Window.webidl b/dom/webidl/Window.webidl
-index 6a0570cdf7..cf69daa15d 100644
+index fa276b0969..1aa2baa931 100644
--- a/dom/webidl/Window.webidl
+++ b/dom/webidl/Window.webidl
-@@ -976,6 +976,30 @@ partial interface Window {
- undefined setWebGLRenderer(DOMString renderer);
+@@ -961,6 +961,30 @@ partial interface Window {
+ optional boolean onHorizontalScrollbar = false);
};
+// Per-context navigator platform spoofing
@@ -503,19 +521,19 @@ index 6a0570cdf7..cf69daa15d 100644
USVString targetOrigin = "/";
};
diff --git a/dom/workers/WorkerNavigator.cpp b/dom/workers/WorkerNavigator.cpp
-index c9a65ff013..d8268dd9ce 100644
+index c6f64371f2..b64b00c2fb 100644
--- a/dom/workers/WorkerNavigator.cpp
+++ b/dom/workers/WorkerNavigator.cpp
-@@ -6,6 +6,8 @@
+@@ -4,6 +4,8 @@
#include "mozilla/dom/WorkerNavigator.h"
#include "MaskConfig.hpp"
+#include "mozilla/dom/NavigatorManager.h"
+#include "mozilla/dom/WorkerPrivate.h"
- #include
-
-@@ -153,6 +155,18 @@ void WorkerNavigator::GetAppVersion(nsString& aAppVersion,
+ #include "ErrorList.h"
+ #include "MainThreadUtils.h"
+@@ -156,6 +158,18 @@ void WorkerNavigator::GetAppVersion(nsString& aAppVersion,
void WorkerNavigator::GetPlatform(nsString& aPlatform, CallerType aCallerType,
ErrorResult& aRv) const {
@@ -534,7 +552,7 @@ index c9a65ff013..d8268dd9ce 100644
if (auto value = MaskConfig::GetString("navigator.platform"))
return aPlatform.Assign(NS_ConvertUTF8toUTF16(value.value()));
WorkerPrivate* workerPrivate = GetCurrentThreadWorkerPrivate();
-@@ -215,6 +229,18 @@ class GetUserAgentRunnable final : public WorkerMainThreadRunnable {
+@@ -218,6 +232,18 @@ class GetUserAgentRunnable final : public WorkerMainThreadRunnable {
void WorkerNavigator::GetUserAgent(nsString& aUserAgent, CallerType aCallerType,
ErrorResult& aRv) const {
@@ -553,7 +571,7 @@ index c9a65ff013..d8268dd9ce 100644
if (auto value = MaskConfig::GetString("navigator.userAgent"))
return aUserAgent.Assign(NS_ConvertUTF8toUTF16(value.value()));
WorkerPrivate* workerPrivate = GetCurrentThreadWorkerPrivate();
-@@ -228,6 +254,17 @@ void WorkerNavigator::GetUserAgent(nsString& aUserAgent, CallerType aCallerType,
+@@ -231,6 +257,17 @@ void WorkerNavigator::GetUserAgent(nsString& aUserAgent, CallerType aCallerType,
}
uint64_t WorkerNavigator::HardwareConcurrency() const {
diff --git a/patches/popup-blocker-parity.patch b/patches/popup-blocker-parity.patch
new file mode 100644
index 000000000..c3cfa1192
--- /dev/null
+++ b/patches/popup-blocker-parity.patch
@@ -0,0 +1,143 @@
+Camoufox: the popup blocker stays on, and the driver gets its own door.
+
+Firefox blocks window.open() that is not called while handling user input
+(dom.disable_open_during_load, default true). Playwright and geckodriver both
+turn that off, and a page reads the difference in one line with no permission
+and nothing to wait for:
+
+ const w = window.open('', '_blank'); // null on stock Firefox
+ if (w) { w.close(); /* not a stock browser */ }
+
+Camoufox used to ship the blocker off for one reason: with it on,
+page.evaluate(() => window.open(...)) returns null, which breaks ~35 tests of
+the upstream Playwright suite and every caller who scripts a popup.
+
+So lift the blocker for the driver instead of for everyone.
+nsIDocShell.driverPopupsAllowed makes this docShell's window.open behave as if
+it were handling user input, and juggler sets it only while an explicit
+Runtime.evaluate / Runtime.callFunction is on the stack (see
+additions/juggler/content/Runtime.js::withDriverPopups). Unlike upstream's
+nsIDOMWindowUtils.setHandlingUserInput(), it grants NO user-gesture activation:
+navigator.userActivation, getAutoplayPolicy() and everything else a page can
+read are untouched, which is the leak that made evaluate() stop doing that in
+the first place.
+
+KNOWN LIMIT, measured 2026-09-18: the flag is a content-process docShell member,
+so it only reaches decisions the content process makes. window.open() is one of
+them (nsGlobalWindowOuter::OpenInternal runs in content and consults
+BrowsingContext::IsPopupAllowed there). A click is NOT: the
+retargeting happens in the parent, which sees only the pref, so
+page.eval_on_selector("a", "a => a.click()") on such a link no longer opens a
+popup -- exactly as on stock, where a scripted click carries no activation
+either. Reaching that case would mean making this a synced BrowsingContext field
+instead of a docShell member. page.click() is unaffected: it synthesizes a real
+click, which grants a real activation.
+
+Guards: tests/patches/popup-blocker-parity.py (both directions, plus that no
+user activation is granted), sundial ls-popup-blocker (a gesture-less
+window.open must be blocked), and the upstream suite's popup tests
+(page.evaluate(window.open) must keep working).
+
+diff --git a/docshell/base/nsIDocShell.idl b/docshell/base/nsIDocShell.idl
+--- a/docshell/base/nsIDocShell.idl
++++ b/docshell/base/nsIDocShell.idl
+@@ -703,6 +703,23 @@
+
+ attribute boolean disallowBFCache;
+
++ /**
++ * Camoufox: while true, window.open() from this docShell is not subject to
++ * the popup blocker, exactly as if it had been called while handling user
++ * input -- and ONLY that: no user-gesture activation is granted, so
++ * navigator.userActivation, the autoplay policy and everything else a page
++ * can read are untouched.
++ *
++ * Juggler sets it around the SYNCHRONOUS part of an explicit
++ * Runtime.evaluate / Runtime.callFunction, so page.evaluate(() =>
++ * window.open(...)) keeps working while dom.disable_open_during_load stays at
++ * Firefox's default. Turning the blocker off globally instead is a one-bit
++ * tell any page can read: a gesture-less window.open() returns null on stock
++ * Firefox. Holding it across an async evaluate would reopen that hole for as
++ * long as the evaluate runs, so it is not held there.
++ */
++ attribute boolean driverPopupsAllowed;
++
+ attribute AString languageOverride;
+
+ boolean overrideTimezone(in AString timezoneId);
+diff --git a/docshell/base/nsDocShell.h b/docshell/base/nsDocShell.h
+--- a/docshell/base/nsDocShell.h
++++ b/docshell/base/nsDocShell.h
+@@ -404,6 +404,9 @@
+
+ bool ShouldOverrideHasFocus() const;
+
++ // Camoufox: see nsIDocShell::driverPopupsAllowed.
++ bool DriverPopupsAllowed() const;
++
+ bool IsBypassCSPEnabled();
+
+ RefPtr GetGeolocationServiceOverride();
+@@ -1316,6 +1319,7 @@
+ bool mBypassCSPEnabled : 1;
+ bool mForceActiveState : 1;
+ bool mDisallowBFCache : 1;
++ bool mDriverPopupsAllowed : 1;
+ nsString mLanguageOverride;
+ RefPtr mGeolocationServiceOverride;
+ ReducedMotionOverride mReducedMotionOverride;
+diff --git a/docshell/base/nsDocShell.cpp b/docshell/base/nsDocShell.cpp
+--- a/docshell/base/nsDocShell.cpp
++++ b/docshell/base/nsDocShell.cpp
+@@ -368,6 +368,7 @@
+ mBypassCSPEnabled(false),
+ mForceActiveState(false),
+ mDisallowBFCache(false),
++ mDriverPopupsAllowed(false),
+ mReducedMotionOverride(REDUCED_MOTION_OVERRIDE_NONE),
+ mForcedColorsOverride(FORCED_COLORS_OVERRIDE_NO_OVERRIDE),
+ mContrastOverride(CONTRAST_OVERRIDE_NONE),
+@@ -3024,6 +3025,21 @@
+ return NS_OK;
+ }
+
++NS_IMETHODIMP
++nsDocShell::GetDriverPopupsAllowed(bool* aEnabled) {
++ MOZ_ASSERT(aEnabled);
++ *aEnabled = mDriverPopupsAllowed;
++ return NS_OK;
++}
++
++NS_IMETHODIMP
++nsDocShell::SetDriverPopupsAllowed(bool aEnabled) {
++ mDriverPopupsAllowed = aEnabled;
++ return NS_OK;
++}
++
++bool nsDocShell::DriverPopupsAllowed() const { return mDriverPopupsAllowed; }
++
+ bool nsDocShell::IsBypassCSPEnabled() {
+ return GetRootDocShell()->mBypassCSPEnabled;
+ }
+diff --git a/docshell/base/BrowsingContext.cpp b/docshell/base/BrowsingContext.cpp
+--- a/docshell/base/BrowsingContext.cpp
++++ b/docshell/base/BrowsingContext.cpp
+@@ -4376,6 +4376,18 @@
+ if (context->CanShowPopup()) {
+ return true;
+ }
++ // Camoufox: an explicit driver evaluate opens popups the way handling user
++ // input does, without granting the document a user-gesture activation.
++ // See nsIDocShell::driverPopupsAllowed; the flag is only ever set around a
++ // juggler Runtime.evaluate / Runtime.callFunction, so page scripts never
++ // see it and the popup blocker stays at Firefox's default for them.
++ if (BrowsingContext* bc = context->GetBrowsingContext()) {
++ if (nsIDocShell* shell = bc->GetDocShell()) {
++ if (nsDocShell::Cast(shell)->DriverPopupsAllowed()) {
++ return true;
++ }
++ }
++ }
+ }
+
+ return false;
diff --git a/patches/screen-spoofing.patch b/patches/screen-spoofing.patch
index 24524ce60..49ab278c7 100644
--- a/patches/screen-spoofing.patch
+++ b/patches/screen-spoofing.patch
@@ -393,7 +393,7 @@ index 06b86c6c75..9641c8457c 100644
}
diff --git a/layout/style/nsMediaFeatures.cpp b/layout/style/nsMediaFeatures.cpp
-index 5e39014539..341c6fc853 100644
+index 1587fcffd8..53c079bc55 100644
--- a/layout/style/nsMediaFeatures.cpp
+++ b/layout/style/nsMediaFeatures.cpp
@@ -4,6 +4,7 @@
@@ -450,3 +450,36 @@ index 5e39014539..341c6fc853 100644
if (aDocument.ShouldResistFingerprinting(RFPTarget::CSSDeviceSize)) {
return GetSize(aDocument);
}
+@@ -171,6 +200,32 @@ int32_t Gecko_MediaFeatures_GetColorDepth(const Document* aDocument) {
+ return 0;
+ }
+
++ // Camoufox: report the spoofed colour depth, for the same
++ // internal-consistency reason as GetDeviceSize above -- the CSS `color`
++ // feature has to agree with screen.colorDepth (nsScreen::PixelDepth) or the
++ // disagreement is itself the fingerprint. `color` is bits per COMPONENT, so
++ // 24 pairs with 8 and 30 with 10. Measured on a 10-bit macOS display
++ // (2026-09-15): screen.colorDepth was pinned to 24 while `(color: 10)` still
++ // matched the real panel, a pair no real Firefox produces. Per-context
++ // override wins over the global config, then colorDepth, then pixelDepth --
++ // the order nsScreen::PixelDepth uses. Runs before the RFP early-return
++ // below, since Camoufox runs with ResistFingerprinting enabled.
++ if (nsPIDOMWindowInner* win = aDocument->GetInnerWindow()) {
++ uint32_t id = 0;
++ if (BrowsingContext* bc = win->GetBrowsingContext()) {
++ id = bc->OriginAttributesRef().mUserContextId;
++ }
++ if (uint32_t d = 0; ScreenDimensionManager::GetColorDepth(id, d)) {
++ return static_cast(d) / 3;
++ }
++ }
++ if (auto value = MaskConfig::GetUint32("screen.colorDepth")) {
++ return static_cast(value.value()) / 3;
++ }
++ if (auto value = MaskConfig::GetUint32("screen.pixelDepth")) {
++ return static_cast(value.value()) / 3;
++ }
++
+ // Use depth of 24 when resisting fingerprinting, or when we're not being
+ // rendered.
+ int32_t depth = 24;
diff --git a/patches/system-ui-font-spoofing.patch b/patches/system-ui-font-spoofing.patch
index 657c9d72e..e7074cea2 100644
--- a/patches/system-ui-font-spoofing.patch
+++ b/patches/system-ui-font-spoofing.patch
@@ -1,20 +1,8 @@
-Camoufox: spoof the `system-ui` CSS generic to match the spoofed OS.
-
-Sibling to font-system-fonts-css2.patch, which covers the older CSS2
-system-font shorthand keywords (caption / icon / menu / message-box /
-small-caption / status-bar) via nsLayoutUtils::ComputeSystemFont().
-
-Chrome documents are excluded. The browser's own UI is not reachable by the
-page, and resolving its `system-ui` to a family from another OS ("Helvetica"
-or "Segoe UI" on a host that has neither) leaves the toolbar and menus falling
-back to the default serif font.
-
-Bug: daijro/camoufox#695 (chrome exemption), daijro/camoufox#599 (spoof)
-
diff --git a/gfx/thebes/gfxPlatformFontList.cpp b/gfx/thebes/gfxPlatformFontList.cpp
+index b93a691f75..004110d862 100644
--- a/gfx/thebes/gfxPlatformFontList.cpp
+++ b/gfx/thebes/gfxPlatformFontList.cpp
-@@ -2245,6 +2245,24 @@
+@@ -2302,6 +2302,43 @@ void gfxPlatformFontList::MaybeRemoveCmap(gfxCharacterMap* aCharMap,
static void GetSystemUIFontFamilies(
FontVisibilityProvider* aFontVisibilityProvider,
[[maybe_unused]] nsAtom* aLangGroup, nsTArray& aFamilies) {
@@ -25,14 +13,33 @@ diff --git a/gfx/thebes/gfxPlatformFontList.cpp b/gfx/thebes/gfxPlatformFontList
+ // document behind the lookup, where spoofing is the safe default.
+ if (!(aFontVisibilityProvider && aFontVisibilityProvider->IsChrome())) {
+ if (auto platform = MaskConfig::GetString("navigator.platform"); platform) {
++ // A native identity (the host's own OS) keeps the real system font:
++ // on macOS that is -apple-system (SF Pro), which Helvetica does not
++ // match (measured 2026-09-14: ascent 16 vs 13, 537.6 vs 526.6 px).
++#ifdef XP_MACOSX
++ if (*platform == "MacIntel") {
++ // fall through to the platform's own system-ui resolution
++ } else
++#endif
+ if (*platform == "MacIntel") {
+ *aFamilies.AppendElement() = "Helvetica"_ns;
+ return;
+ }
++#ifdef XP_WIN
++ if (*platform == "Win32") {
++ // the real Segoe UI
++ } else
++#endif
+ if (*platform == "Win32") {
+ *aFamilies.AppendElement() = "Segoe UI"_ns;
+ return;
+ }
++ if (platform->rfind("Linux", 0) == 0) {
++ // The GTK interface font of a stock Ubuntu desktop; see
++ // font-system-fonts-css2.patch for the CSS2 keywords.
++ *aFamilies.AppendElement() = "Ubuntu"_ns;
++ return;
++ }
+ }
+ }
+
diff --git a/patches/timezone-spoofing.patch b/patches/timezone-spoofing.patch
index 74026deb0..9fdf1486e 100644
--- a/patches/timezone-spoofing.patch
+++ b/patches/timezone-spoofing.patch
@@ -1,9 +1,9 @@
diff --git a/dom/base/TimezoneManager.cpp b/dom/base/TimezoneManager.cpp
new file mode 100644
-index 0000000000..ffbc624040
+index 0000000000..206a027918
--- /dev/null
+++ b/dom/base/TimezoneManager.cpp
-@@ -0,0 +1,71 @@
+@@ -0,0 +1,90 @@
+#include "TimezoneManager.h"
+#include "RoverfoxStorageManager.h"
+#include "MaskConfig.hpp"
@@ -12,6 +12,7 @@ index 0000000000..ffbc624040
+#include "mozilla/dom/BrowsingContext.h"
+#include "mozilla/dom/Document.h"
+#include "nsDocShell.h"
++#include "mozilla/StaticMutex.h"
+
+namespace mozilla {
+namespace dom {
@@ -43,6 +44,24 @@ index 0000000000..ffbc624040
+ return false;
+}
+
++static StaticMutex sProcessTimezoneMutex;
++static nsCString* sProcessTimezone MOZ_GUARDED_BY(sProcessTimezoneMutex);
++
++/* static */ void TimezoneManager::NoteProcessTimezone(
++ const nsACString& timezone) {
++ StaticMutexAutoLock lock(sProcessTimezoneMutex);
++ if (!sProcessTimezone) {
++ sProcessTimezone = new nsCString();
++ }
++ sProcessTimezone->Assign(timezone);
++}
++
++/* static */ bool TimezoneManager::IsProcessTimezone(const nsAString& timezone) {
++ StaticMutexAutoLock lock(sProcessTimezoneMutex);
++ return sProcessTimezone && !sProcessTimezone->IsEmpty() &&
++ NS_ConvertUTF16toUTF8(timezone).Equals(*sProcessTimezone);
++}
++
+/* static */ nsString
+TimezoneManager::DisabledKeyForUserContext(uint32_t userContextId) {
+ nsString key;
@@ -77,10 +96,10 @@ index 0000000000..ffbc624040
+} // namespace mozilla
diff --git a/dom/base/TimezoneManager.h b/dom/base/TimezoneManager.h
new file mode 100644
-index 0000000000..7cc942e7c9
+index 0000000000..888303c315
--- /dev/null
+++ b/dom/base/TimezoneManager.h
-@@ -0,0 +1,27 @@
+@@ -0,0 +1,33 @@
+#ifndef mozilla_dom_TimezoneManager_h
+#define mozilla_dom_TimezoneManager_h
+
@@ -97,6 +116,12 @@ index 0000000000..7cc942e7c9
+ static void SetTimezone(uint32_t userContextId, const nsAString& timezone);
+ static bool GetTimezone(uint32_t userContextId, nsAString& outTimezone);
+
++ // The zone JS::SetTimeZoneOverride last applied process-wide. A realm already
++ // reports it without a per-realm override, which is not free: setting one
++ // releases all JIT code in the runtime.
++ static void NoteProcessTimezone(const nsACString& timezone);
++ static bool IsProcessTimezone(const nsAString& timezone);
++
+ static void DisableFunction(uint32_t userContextId);
+ static bool IsFunctionEnabledForWebIDL(JSContext* aCx, JSObject* aObj);
+
@@ -109,10 +134,10 @@ index 0000000000..7cc942e7c9
+
+#endif // mozilla_dom_TimezoneManager_h
diff --git a/dom/base/moz.build b/dom/base/moz.build
-index 66b3509602..2b5e125904 100644
+index 743be1950f..922a79af86 100644
--- a/dom/base/moz.build
+++ b/dom/base/moz.build
-@@ -280,6 +280,7 @@ EXPORTS.mozilla.dom += [
+@@ -285,6 +285,7 @@ EXPORTS.mozilla.dom += [
"TimeoutBudgetManager.h",
"TimeoutHandler.h",
"TimeoutManager.h",
@@ -120,7 +145,7 @@ index 66b3509602..2b5e125904 100644
"TreeIterator.h",
"TreeOrderedArray.h",
"TreeOrderedArrayInlines.h",
-@@ -493,6 +494,7 @@ UNIFIED_SOURCES += [
+@@ -503,6 +504,7 @@ UNIFIED_SOURCES += [
"TimeoutExecutor.cpp",
"TimeoutHandler.cpp",
"TimeoutManager.cpp",
@@ -129,10 +154,10 @@ index 66b3509602..2b5e125904 100644
"UIDirectionManager.cpp",
"UserActivation.cpp",
diff --git a/dom/base/nsGlobalWindowInner.cpp b/dom/base/nsGlobalWindowInner.cpp
-index 5432f702ed..10568ed4f7 100644
+index 6444fccd9c..c0b2671d5b 100644
--- a/dom/base/nsGlobalWindowInner.cpp
+++ b/dom/base/nsGlobalWindowInner.cpp
-@@ -244,6 +244,8 @@
+@@ -249,6 +249,8 @@
#include "nsID.h"
#include "nsIDOMStorageManager.h"
#include "FontSpacingSeedManager.h"
@@ -141,7 +166,7 @@ index 5432f702ed..10568ed4f7 100644
#include "nsDocShell.h"
#include "mozilla/OriginAttributes.h"
#include "nsIDOMXULControlElement.h"
-@@ -7730,6 +7732,48 @@ void nsGlobalWindowInner::SetFontSpacingSeed(uint32_t seed, ErrorResult& aRv) {
+@@ -7781,6 +7783,50 @@ void nsGlobalWindowInner::SetFontSpacingSeed(uint32_t seed, ErrorResult& aRv) {
}
}
@@ -171,7 +196,9 @@ index 5432f702ed..10568ed4f7 100644
+ // Set global process-wide timezone as ultimate fallback.
+ // Per-realm overrides (windows + dedicated workers) take priority.
+ // Shared/service workers without per-realm override fall back to this.
-+ JS::SetTimeZoneOverride(timezoneASCII.get());
++ if (JS::SetTimeZoneOverride(timezoneASCII.get())) {
++ TimezoneManager::NoteProcessTimezone(timezoneASCII);
++ }
+
+ // Self-destruct: remove this function from the window object after first use.
+ // Set to undefined first to bust IC/shape caches on ARM64 (macOS Apple Silicon),
@@ -191,10 +218,10 @@ index 5432f702ed..10568ed4f7 100644
MOZ_ASSERT(aSharedWorker);
MOZ_ASSERT(!mSharedWorkers.Contains(aSharedWorker));
diff --git a/dom/base/nsGlobalWindowInner.h b/dom/base/nsGlobalWindowInner.h
-index b26388188c..e7c3c14a3f 100644
+index bb70b2b8fe..bfde19786c 100644
--- a/dom/base/nsGlobalWindowInner.h
+++ b/dom/base/nsGlobalWindowInner.h
-@@ -680,6 +680,7 @@ class nsGlobalWindowInner final : public mozilla::dom::EventTarget,
+@@ -685,6 +685,7 @@ class nsGlobalWindowInner final : public mozilla::dom::EventTarget,
// Font spacing seed for privacy-preserving font fingerprinting
void SetFontSpacingSeed(uint32_t seed, mozilla::ErrorResult& aRv);
@@ -203,7 +230,7 @@ index b26388188c..e7c3c14a3f 100644
void StoreSharedWorker(mozilla::dom::SharedWorker* aSharedWorker);
diff --git a/dom/base/nsGlobalWindowOuter.cpp b/dom/base/nsGlobalWindowOuter.cpp
-index 7aab4d6f92..81caaa8f31 100644
+index dd0124f7e9..549e0869d0 100644
--- a/dom/base/nsGlobalWindowOuter.cpp
+++ b/dom/base/nsGlobalWindowOuter.cpp
@@ -87,6 +87,8 @@
@@ -215,7 +242,7 @@ index 7aab4d6f92..81caaa8f31 100644
#include "mozilla/Likely.h"
#include "mozilla/Preferences.h"
#include "mozilla/SchedulerGroup.h"
-@@ -2507,6 +2509,22 @@ nsresult nsGlobalWindowOuter::SetNewDocument(Document* aDocument,
+@@ -2506,6 +2508,31 @@ nsresult nsGlobalWindowOuter::SetNewDocument(Document* aDocument,
MOZ_ALWAYS_SUCCEEDS(bc->SetCurrentInnerWindowId(mInnerWindow->WindowID()));
}
@@ -227,10 +254,19 @@ index 7aab4d6f92..81caaa8f31 100644
+ userContextId = bc->OriginAttributesRef().mUserContextId;
+ }
+ nsAutoString storedTimezone;
-+ if (mozilla::dom::TimezoneManager::GetTimezone(userContextId, storedTimezone)) {
-+ if (JSContext* cx = nsContentUtils::GetCurrentJSContext()) {
++ // Only when the zone differs from the process-wide one: a per-realm
++ // override releases all JIT code and makes every Date call slower, both
++ // measurable from the page, for a value the realm already reports.
++ if (mInnerWindow &&
++ mozilla::dom::TimezoneManager::GetTimezone(userContextId, storedTimezone) &&
++ !mozilla::dom::TimezoneManager::IsProcessTimezone(storedTimezone)) {
++ // Enter the NEW inner window's realm: the override is per realm, and the
++ // JS context current at this point belongs to whoever triggered the
++ // navigation, not to the document being created.
++ mozilla::dom::AutoJSAPI jsapi;
++ if (jsapi.Init(mInnerWindow)) {
+ NS_LossyConvertUTF16toASCII timezoneASCII(storedTimezone);
-+ JS::SetRealmTimeZoneOverride(cx, timezoneASCII.get());
++ JS::SetRealmTimeZoneOverride(jsapi.cx(), timezoneASCII.get());
+ }
+ }
+ }
@@ -238,12 +274,43 @@ index 7aab4d6f92..81caaa8f31 100644
// We no longer need the old inner window. Start its destruction if
// its not being reused and clear our reference.
if (doomCurrentInner) {
+diff --git a/dom/base/nsJSEnvironment.cpp b/dom/base/nsJSEnvironment.cpp
+index 21d69bdfed..fa2a7e3be3 100644
+--- a/dom/base/nsJSEnvironment.cpp
++++ b/dom/base/nsJSEnvironment.cpp
+@@ -3,6 +3,9 @@
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
+
+ #include "nsJSEnvironment.h"
++#include "MaskConfig.hpp"
++#include "TimezoneManager.h"
++#include "js/Date.h"
+
+ #include "mozilla/EventDispatcher.h"
+ #include "mozilla/HoldDropJSObjects.h"
+@@ -1800,6 +1803,16 @@ void nsJSContext::EnsureStatics() {
+ return;
+ }
+
++ // Camoufox: apply the launch-level timezone eagerly, in every process, so
++ // Date and Intl report it from the very first read. The per-context
++ // window.setTimezone() path still takes precedence per realm.
++ if (auto tz = MaskConfig::GetString("timezone")) {
++ if (JS::SetTimeZoneOverride(tz.value().c_str())) {
++ mozilla::dom::TimezoneManager::NoteProcessTimezone(
++ nsDependentCString(tz.value().c_str()));
++ }
++ }
++
+ // Let's make sure that our main thread is the same as the xpcom main thread.
+ MOZ_ASSERT(NS_IsMainThread());
+
diff --git a/dom/webidl/Window.webidl b/dom/webidl/Window.webidl
-index 454ef6f4e7..b96e76edb7 100644
+index 6448765fb8..f01e8011cc 100644
--- a/dom/webidl/Window.webidl
+++ b/dom/webidl/Window.webidl
-@@ -940,6 +940,12 @@ partial interface Window {
- undefined setFontSpacingSeed(unsigned long seed);
+@@ -958,6 +958,12 @@ partial interface Window {
+ undefined setSpeechVoices(DOMString voices);
};
+// Timezone interface for per-context timezone spoofing
@@ -256,7 +323,7 @@ index 454ef6f4e7..b96e76edb7 100644
// finding on a page.
partial interface Window {
diff --git a/dom/workers/WorkerPrivate.cpp b/dom/workers/WorkerPrivate.cpp
-index 95e5ca1574..16ec178d9e 100644
+index 6f88f1f176..9f4fe197b2 100644
--- a/dom/workers/WorkerPrivate.cpp
+++ b/dom/workers/WorkerPrivate.cpp
@@ -21,6 +21,8 @@
@@ -268,7 +335,7 @@ index 95e5ca1574..16ec178d9e 100644
#include "js/Exception.h"
#include "js/LocaleSensitive.h"
#include "js/MemoryMetrics.h"
-@@ -6429,6 +6431,19 @@ WorkerGlobalScope* WorkerPrivate::GetOrCreateGlobalScope(JSContext* aCx) {
+@@ -6425,6 +6427,20 @@ WorkerGlobalScope* WorkerPrivate::GetOrCreateGlobalScope(JSContext* aCx) {
data->mScope->DisconnectGlobalTeardownObservers();
}
@@ -279,7 +346,8 @@ index 95e5ca1574..16ec178d9e 100644
+ {
+ uint32_t ucid = GetOriginAttributes().mUserContextId;
+ nsAutoString tz;
-+ if (mozilla::dom::TimezoneManager::GetTimezone(ucid, tz) && !tz.IsEmpty()) {
++ if (mozilla::dom::TimezoneManager::GetTimezone(ucid, tz) && !tz.IsEmpty() &&
++ !mozilla::dom::TimezoneManager::IsProcessTimezone(tz)) {
+ NS_LossyConvertUTF16toASCII tzASCII(tz);
+ JS::SetRealmTimeZoneOverride(aCx, tzASCII.get());
+ }
@@ -289,10 +357,10 @@ index 95e5ca1574..16ec178d9e 100644
return data->mScope;
diff --git a/js/public/Date.h b/js/public/Date.h
-index 98d5b1176e..89c2942a68 100644
+index 90d8708e2b..2a650570f6 100644
--- a/js/public/Date.h
+++ b/js/public/Date.h
-@@ -56,6 +56,9 @@ namespace JS {
+@@ -55,6 +55,9 @@ namespace JS {
extern JS_PUBLIC_API void ResetTimeZone();
extern JS_PUBLIC_API bool SetTimeZoneOverride(const char* timezoneId);
@@ -303,10 +371,10 @@ index 98d5b1176e..89c2942a68 100644
class ClippedTime;
inline ClippedTime TimeClip(double time);
diff --git a/js/src/vm/DateTime.cpp b/js/src/vm/DateTime.cpp
-index 96ed101921..aa78f0fe26 100644
+index f8a975acc3..05f26e45c8 100644
--- a/js/src/vm/DateTime.cpp
+++ b/js/src/vm/DateTime.cpp
-@@ -38,6 +38,7 @@
+@@ -36,6 +36,7 @@
#include "util/Text.h"
#include "vm/MutexIDs.h"
#include "vm/Realm.h"
@@ -314,7 +382,7 @@ index 96ed101921..aa78f0fe26 100644
static bool ComputeLocalTime(time_t local, struct tm* ptm) {
// Neither localtime_s nor localtime_r are required to act as if tzset has
-@@ -256,6 +257,20 @@ js::DateTimeInfo::DateTimeInfo() {
+@@ -254,6 +255,20 @@ js::DateTimeInfo::DateTimeInfo() {
js::DateTimeInfo::~DateTimeInfo() = default;
@@ -335,7 +403,7 @@ index 96ed101921..aa78f0fe26 100644
int64_t js::DateTimeInfo::toClampedSeconds(int64_t milliseconds) {
int64_t seconds = milliseconds / msPerSecond;
int64_t millis = milliseconds % msPerSecond;
-@@ -586,6 +601,18 @@ JS_PUBLIC_API bool JS::SetTimeZoneOverride(const char* timeZoneId) {
+@@ -582,6 +597,18 @@ JS_PUBLIC_API bool JS::SetTimeZoneOverride(const char* timeZoneId) {
return true;
}
@@ -355,10 +423,10 @@ index 96ed101921..aa78f0fe26 100644
# if defined(XP_WIN)
static bool IsOlsonCompatibleWindowsTimeZoneId(std::string_view tz) {
diff --git a/js/src/vm/DateTime.h b/js/src/vm/DateTime.h
-index 110824439c..dfc88898f5 100644
+index 41b0c5be27..eb11caadb2 100644
--- a/js/src/vm/DateTime.h
+++ b/js/src/vm/DateTime.h
-@@ -154,6 +154,7 @@ class DateTimeInfo {
+@@ -153,6 +153,7 @@ class DateTimeInfo {
public:
~DateTimeInfo();
@@ -367,10 +435,10 @@ index 110824439c..dfc88898f5 100644
// The spec implicitly assumes DST and time zone adjustment information
// never change in the course of a function -- sometimes even across
diff --git a/js/src/vm/Realm.cpp b/js/src/vm/Realm.cpp
-index 3ed5fc6e2d..6df86a6059 100644
+index 8d195ca7c8..62f67c0658 100644
--- a/js/src/vm/Realm.cpp
+++ b/js/src/vm/Realm.cpp
-@@ -568,10 +568,15 @@ void Realm::setLocaleOverride(const char* locale) {
+@@ -597,10 +597,19 @@ void Realm::setLocaleOverride(const char* locale) {
}
js::DateTimeInfo* Realm::getDateTimeInfo() {
@@ -382,11 +450,28 @@ index 3ed5fc6e2d..6df86a6059 100644
+#if JS_HAS_INTL_API
+ RefPtr tzOverride = behaviors_.timeZoneOverride();
+ if (tzOverride) {
-+ // Always create fresh to handle timezone changes correctly
-+ dateTimeInfo_ = js::MakeUnique(tzOverride->chars());
++ // Rebuilt only when the override changes: a fresh DateTimeInfo on every
++ // call made each Date/Intl time-zone lookup ~40x slower than stock.
++ if (!dateTimeInfo_ || dateTimeInfoZone_ != tzOverride) {
++ dateTimeInfo_ = js::MakeUnique(tzOverride->chars());
++ dateTimeInfoZone_ = tzOverride;
++ }
+ return dateTimeInfo_.get();
+ }
+#endif
return nullptr;
}
+diff --git a/js/src/vm/Realm.h b/js/src/vm/Realm.h
+index 7bbfc58948..ab0a588abd 100644
+--- a/js/src/vm/Realm.h
++++ b/js/src/vm/Realm.h
+@@ -353,6 +353,8 @@ class JS::Realm : public JS::shadow::Realm {
+ #if JS_HAS_INTL_API
+ // Date-time info for realms with non-default time zones.
+ js::UniquePtr dateTimeInfo_;
++ // Camoufox: the override dateTimeInfo_ was built for.
++ RefPtr dateTimeInfoZone_;
+ #endif
+
+ // There are two ways to enter a realm:
diff --git a/patches/webgl-spoofing.patch b/patches/webgl-spoofing.patch
index 355e36642..bb09186b7 100644
--- a/patches/webgl-spoofing.patch
+++ b/patches/webgl-spoofing.patch
@@ -125,10 +125,10 @@ index 0000000000..72df27b6e5
+
+#endif // mozilla_dom_WebGLParamsManager_h
diff --git a/dom/base/moz.build b/dom/base/moz.build
-index 470fcd8b5b..23e33db4da 100644
+index 922a79af86..b718f44036 100644
--- a/dom/base/moz.build
+++ b/dom/base/moz.build
-@@ -570,6 +570,14 @@ EXPORTS.mozilla.dom += [
+@@ -572,6 +572,14 @@ EXPORTS.mozilla.dom += [
"SpeechVoicesManager.h",
]
@@ -144,10 +144,10 @@ index 470fcd8b5b..23e33db4da 100644
# CharacterDataBuffer.cpp
if CONFIG["INTEL_ARCHITECTURE"]:
diff --git a/dom/base/nsGlobalWindowInner.cpp b/dom/base/nsGlobalWindowInner.cpp
-index d2f6fb36bd..d4a967ce53 100644
+index 3db3ef3003..007e8f5eae 100644
--- a/dom/base/nsGlobalWindowInner.cpp
+++ b/dom/base/nsGlobalWindowInner.cpp
-@@ -26,6 +26,7 @@
+@@ -27,6 +27,7 @@
#include "FontListManager.h"
#include "Units.h"
#include "VRManagerChild.h"
@@ -155,7 +155,7 @@ index d2f6fb36bd..d4a967ce53 100644
#include "WindowDestroyedEvent.h"
#include "WindowNamedPropertiesHandler.h"
#include "js/ComparisonOperators.h"
-@@ -8032,6 +8033,51 @@ void nsGlobalWindowInner::SetSpeechVoices(const nsAString& aVoices,
+@@ -8036,6 +8037,51 @@ void nsGlobalWindowInner::SetSpeechVoices(const nsAString& aVoices,
}
}
@@ -208,10 +208,10 @@ index d2f6fb36bd..d4a967ce53 100644
bool aGranted) {
// Invalidate cached StorageAllowed field so that calls to GetLocalStorage
diff --git a/dom/base/nsGlobalWindowInner.h b/dom/base/nsGlobalWindowInner.h
-index 0db8833f47..063843934e 100644
+index bfde19786c..17e00f408f 100644
--- a/dom/base/nsGlobalWindowInner.h
+++ b/dom/base/nsGlobalWindowInner.h
-@@ -709,6 +709,10 @@ class nsGlobalWindowInner final : public mozilla::dom::EventTarget,
+@@ -710,6 +710,10 @@ class nsGlobalWindowInner final : public mozilla::dom::EventTarget,
// Per-context speech voices
void SetSpeechVoices(const nsAString& aVoices, mozilla::ErrorResult& aRv);
@@ -223,7 +223,7 @@ index 0db8833f47..063843934e 100644
void Alert(nsIPrincipal& aSubjectPrincipal, mozilla::ErrorResult& aError);
void Alert(const nsAString& aMessage, nsIPrincipal& aSubjectPrincipal,
diff --git a/dom/canvas/ClientWebGLContext.cpp b/dom/canvas/ClientWebGLContext.cpp
-index aee042ab75..54b5638d19 100644
+index aee042ab75..383ab5a761 100644
--- a/dom/canvas/ClientWebGLContext.cpp
+++ b/dom/canvas/ClientWebGLContext.cpp
@@ -3,6 +3,14 @@
@@ -277,57 +277,17 @@ index aee042ab75..54b5638d19 100644
void ClientWebGLContext::GetContextAttributes(
dom::Nullable& retval) {
retval.SetNull();
-@@ -769,15 +806,40 @@ void ClientWebGLContext::GetContextAttributes(
+@@ -769,6 +806,9 @@ void ClientWebGLContext::GetContextAttributes(
const auto& options = mNotLost->info.options;
-- result.mAlpha.Construct(options.alpha);
-- result.mDepth = options.depth;
-- result.mStencil = options.stencil;
-- result.mAntialias.Construct(options.antialias);
-- result.mPremultipliedAlpha = options.premultipliedAlpha;
-- result.mPreserveDrawingBuffer = options.preserveDrawingBuffer;
-- result.mFailIfMajorPerformanceCaveat = options.failIfMajorPerformanceCaveat;
-- result.mPowerPreference = options.powerPreference;
-- result.mForceSoftwareRendering = options.forceSoftwareRendering;
-+ result.mAlpha.Construct(MBoolVal("alpha", options.alpha));
-+ result.mDepth = MBoolVal("depth", options.depth);
-+ result.mStencil = MBoolVal("stencil", options.stencil);
-+ result.mAntialias.Construct(MBoolVal("antialias", options.antialias));
-+ result.mPremultipliedAlpha = MBoolVal(
-+ "webGl:contextAttributes.premultipliedAlpha", options.premultipliedAlpha);
-+ result.mPreserveDrawingBuffer =
-+ MBoolVal("preserveDrawingBuffer", options.preserveDrawingBuffer);
-+ result.mFailIfMajorPerformanceCaveat = MBoolVal(
-+ "failIfMajorPerformanceCaveat", options.failIfMajorPerformanceCaveat);
-+ if (auto value =
-+ MaskConfig::GetAttribute("powerPreference", mIsWebGL2);
-+ value.has_value()) {
-+ // Convert to enum
-+ switch (value.value()[0]) {
-+ case 'd':
-+ result.mPowerPreference = dom::WebGLPowerPreference::Default;
-+ break;
-+ case 'l':
-+ result.mPowerPreference = dom::WebGLPowerPreference::Low_power;
-+ break;
-+ case 'h':
-+ result.mPowerPreference = dom::WebGLPowerPreference::High_performance;
-+ break;
-+ default:
-+ // Invalid value
-+ result.mPowerPreference = options.powerPreference;
-+ break;
-+ }
-+ } else {
-+ result.mPowerPreference = options.powerPreference;
-+ }
-+ result.mForceSoftwareRendering = MBoolVal(
-+ "forceSoftwareRendering", options.forceSoftwareRendering);
- }
-
- // -----------------------
-@@ -974,18 +1036,28 @@ bool ClientWebGLContext::CreateHostContext(const uvec2& requestedSize) {
++ // Camoufox: context attributes are what the page requested (resolved by the
++ // real context), never a spoofed table -- a page compares them with what it
++ // asked for, and stock Firefox always agrees with itself.
+ result.mAlpha.Construct(options.alpha);
+ result.mDepth = options.depth;
+ result.mStencil = options.stencil;
+@@ -974,18 +1014,28 @@ bool ClientWebGLContext::CreateHostContext(const uvec2& requestedSize) {
std::unordered_map webgl::MakeIsEnabledMap(const bool webgl2) {
auto ret = std::unordered_map{};
@@ -341,39 +301,113 @@ index aee042ab75..54b5638d19 100644
- ret[LOCAL_GL_SCISSOR_TEST] = false;
- ret[LOCAL_GL_STENCIL_TEST] = false;
+ ret[LOCAL_GL_BLEND] =
-+ MaskConfig::MParamGL(LOCAL_GL_BLEND, false, webgl2);
++ false;
+ ret[LOCAL_GL_CULL_FACE] =
-+ MaskConfig::MParamGL(LOCAL_GL_CULL_FACE, false, webgl2);
++ false;
+ ret[LOCAL_GL_DEPTH_TEST] =
-+ MaskConfig::MParamGL(LOCAL_GL_DEPTH_TEST, false, webgl2);
++ false;
+ ret[LOCAL_GL_DITHER] =
-+ MaskConfig::MParamGL(LOCAL_GL_DITHER, true, webgl2);
++ true;
+ ret[LOCAL_GL_POLYGON_OFFSET_FILL] =
-+ MaskConfig::MParamGL(LOCAL_GL_POLYGON_OFFSET_FILL, false, webgl2);
-+ ret[LOCAL_GL_SAMPLE_ALPHA_TO_COVERAGE] = MaskConfig::MParamGL(
-+ LOCAL_GL_SAMPLE_ALPHA_TO_COVERAGE, false, webgl2);
++ false;
++ ret[LOCAL_GL_SAMPLE_ALPHA_TO_COVERAGE] =
++ false;
+ ret[LOCAL_GL_SAMPLE_COVERAGE] =
-+ MaskConfig::MParamGL(LOCAL_GL_SAMPLE_COVERAGE, false, webgl2);
++ false;
+ ret[LOCAL_GL_SCISSOR_TEST] =
-+ MaskConfig::MParamGL(LOCAL_GL_SCISSOR_TEST, false, webgl2);
++ false;
+ ret[LOCAL_GL_STENCIL_TEST] =
-+ MaskConfig::MParamGL(LOCAL_GL_STENCIL_TEST, false, webgl2);
++ false;
if (webgl2) {
- ret[LOCAL_GL_RASTERIZER_DISCARD] = false;
+ ret[LOCAL_GL_RASTERIZER_DISCARD] =
-+ MaskConfig::MParamGL(LOCAL_GL_RASTERIZER_DISCARD, false, webgl2);
++ false;
}
return ret;
-@@ -2027,6 +2099,57 @@ void ClientWebGLContext::GetParameter(JSContext* cx, GLenum pname,
+@@ -2027,6 +2077,129 @@ void ClientWebGLContext::GetParameter(JSContext* cx, GLenum pname,
const auto& state = State();
// -
++ // Camoufox: only the device's fixed LIMITS come from the spoofed table, and
++ // only where stock Firefox answers the pname at all: WebGL 2 limits on a
++ // WebGL 2 context, extension limits once the page has enabled the extension.
++ // Everything else is answered by the real context: live state (bindings,
++ // enables, clear values, viewport, pixel-store flags, hints, draw buffers),
++ // values that follow the bound framebuffer (*_BITS,
++ // IMPLEMENTATION_COLOR_READ_*), the strings (VENDOR/RENDERER/VERSION; the
++ // UNMASKED_* strings come from webGl:vendor/renderer on the extension path
++ // below) and invalid enums. Answering those from the table read back state
++ // the page had just changed (UNPACK_FLIP_Y_WEBGL false after pixelStorei,
++ // ALPHA_BITS 8 on an {alpha: false} context, DRAW_BUFFER0 after
++ // drawBuffers) and returned UNMASKED_RENDERER_WEBGL without the extension,
++ // where stock returns null with INVALID_ENUM.
++ const bool fromTable = [&]() {
++ switch (pname) {
++ case LOCAL_GL_MAX_TEXTURE_SIZE:
++ case LOCAL_GL_MAX_VIEWPORT_DIMS:
++ case LOCAL_GL_SUBPIXEL_BITS:
++ case LOCAL_GL_ALIASED_POINT_SIZE_RANGE:
++ case LOCAL_GL_ALIASED_LINE_WIDTH_RANGE:
++ case LOCAL_GL_MAX_RENDERBUFFER_SIZE:
++ case LOCAL_GL_MAX_CUBE_MAP_TEXTURE_SIZE:
++ case LOCAL_GL_MAX_VERTEX_ATTRIBS:
++ case LOCAL_GL_MAX_TEXTURE_IMAGE_UNITS:
++ case LOCAL_GL_MAX_VERTEX_TEXTURE_IMAGE_UNITS:
++ case LOCAL_GL_MAX_COMBINED_TEXTURE_IMAGE_UNITS:
++ case LOCAL_GL_MAX_VERTEX_UNIFORM_VECTORS:
++ case LOCAL_GL_MAX_VARYING_VECTORS:
++ case LOCAL_GL_MAX_FRAGMENT_UNIFORM_VECTORS:
++ return true;
++ case LOCAL_GL_MAX_3D_TEXTURE_SIZE:
++ case LOCAL_GL_MAX_ELEMENTS_VERTICES:
++ case LOCAL_GL_MAX_ELEMENTS_INDICES:
++ case LOCAL_GL_MAX_TEXTURE_LOD_BIAS:
++ case LOCAL_GL_MAX_ARRAY_TEXTURE_LAYERS:
++ case LOCAL_GL_MIN_PROGRAM_TEXEL_OFFSET:
++ case LOCAL_GL_MAX_PROGRAM_TEXEL_OFFSET:
++ case LOCAL_GL_MAX_VERTEX_UNIFORM_BLOCKS:
++ case LOCAL_GL_MAX_FRAGMENT_UNIFORM_BLOCKS:
++ case LOCAL_GL_MAX_COMBINED_UNIFORM_BLOCKS:
++ case LOCAL_GL_MAX_UNIFORM_BUFFER_BINDINGS:
++ case LOCAL_GL_MAX_UNIFORM_BLOCK_SIZE:
++ case LOCAL_GL_MAX_COMBINED_VERTEX_UNIFORM_COMPONENTS:
++ case LOCAL_GL_MAX_COMBINED_FRAGMENT_UNIFORM_COMPONENTS:
++ case LOCAL_GL_UNIFORM_BUFFER_OFFSET_ALIGNMENT:
++ case LOCAL_GL_MAX_FRAGMENT_UNIFORM_COMPONENTS:
++ case LOCAL_GL_MAX_VERTEX_UNIFORM_COMPONENTS:
++ case LOCAL_GL_MAX_VARYING_COMPONENTS:
++ case LOCAL_GL_MAX_TRANSFORM_FEEDBACK_SEPARATE_COMPONENTS:
++ case LOCAL_GL_MAX_TRANSFORM_FEEDBACK_INTERLEAVED_COMPONENTS:
++ case LOCAL_GL_MAX_TRANSFORM_FEEDBACK_SEPARATE_ATTRIBS:
++ case LOCAL_GL_MAX_SAMPLES:
++ case LOCAL_GL_MAX_ELEMENT_INDEX:
++ case LOCAL_GL_MAX_SERVER_WAIT_TIMEOUT:
++ case LOCAL_GL_MAX_VERTEX_OUTPUT_COMPONENTS:
++ case LOCAL_GL_MAX_FRAGMENT_INPUT_COMPONENTS:
++ case LOCAL_GL_MAX_CLIENT_WAIT_TIMEOUT_WEBGL:
++ return mIsWebGL2;
++ case LOCAL_GL_MAX_DRAW_BUFFERS:
++ case LOCAL_GL_MAX_COLOR_ATTACHMENTS:
++ return mIsWebGL2 ||
++ IsExtensionEnabled(WebGLExtensionID::WEBGL_draw_buffers);
++ case LOCAL_GL_MAX_TEXTURE_MAX_ANISOTROPY:
++ return IsExtensionEnabled(
++ WebGLExtensionID::EXT_texture_filter_anisotropic);
++ case LOCAL_GL_MAX_VIEWS_OVR:
++ return IsExtensionEnabled(WebGLExtensionID::OVR_multiview2);
++ default:
++ return false;
++ }
++ }();
++
+ std::optional<
+ std::variant>
+ data;
-+ data = MaskConfig::GLParam(pname, mIsWebGL2);
++ if (fromTable) {
++ data = MaskConfig::GLParam(pname, mIsWebGL2);
++ }
+
+ if (data.has_value()) {
+ const auto& value = data.value();
@@ -393,10 +427,9 @@ index aee042ab75..54b5638d19 100644
+ retval.set(StringValue(cx, std::get(value), rv));
+ return;
+ }
-+ if (std::holds_alternative(value)) {
-+ retval.set(JS::NullValue());
-+ return;
-+ }
++ // Camoufox: a null table entry is "not captured for this device", so the
++ // real context answers (an extension constant the page can query after
++ // getExtension() succeeded must never come back null).
+ }
+ // If the value is not array (we will handle those later),
+ // then check if it should be blocked.
@@ -415,24 +448,22 @@ index aee042ab75..54b5638d19 100644
+ case dom::WEBGL_debug_renderer_info_Binding::UNMASKED_VENDOR_WEBGL:
+ break;
+ default:
-+ if (MaskConfig::CheckBool(mIsWebGL2 ? "webGl2:parameters:blockIfNotDefined"
-+ : "webGl:parameters:blockIfNotDefined")) {
-+ retval.set(JS::NullValue());
-+ return;
-+ }
++ // Camoufox: a pname outside the spoofed table (extension constants such
++ // as MAX_TEXTURE_MAX_ANISOTROPY_EXT, live state) is answered by the real
++ // context. Returning null here was itself a tell.
++ break;
+ }
const auto fnSetRetval_Buffer = [&](const GLenum target) {
const auto buffer = *MaybeFind(state.mBoundBufferByTarget, target);
-@@ -2132,49 +2255,84 @@ void ClientWebGLContext::GetParameter(JSContext* cx, GLenum pname,
+@@ -2132,49 +2305,80 @@ void ClientWebGLContext::GetParameter(JSContext* cx, GLenum pname,
// 2 floats
case LOCAL_GL_DEPTH_RANGE:
- retval.set(Create(cx, this, state.mDepthRange, rv));
+ retval.set(Create(
+ cx, this,
-+ MaskConfig::MParamGL>(pname, state.mDepthRange,
-+ mIsWebGL2),
++ state.mDepthRange,
+ rv));
return;
@@ -461,8 +492,7 @@ index aee042ab75..54b5638d19 100644
- retval.set(Create(cx, this, state.mClearColor, rv));
+ retval.set(Create(
+ cx, this,
-+ MaskConfig::MParamGL>(pname, state.mClearColor,
-+ mIsWebGL2),
++ state.mClearColor,
+ rv));
return;
@@ -470,8 +500,7 @@ index aee042ab75..54b5638d19 100644
- retval.set(Create(cx, this, state.mBlendColor, rv));
+ retval.set(Create(
+ cx, this,
-+ MaskConfig::MParamGL>(pname, state.mBlendColor,
-+ mIsWebGL2),
++ state.mBlendColor,
+ rv));
return;
@@ -493,8 +522,7 @@ index aee042ab75..54b5638d19 100644
- retval.set(Create(cx, this, state.mScissor, rv));
+ retval.set(Create(
+ cx, this,
-+ MaskConfig::MParamGL>(pname, state.mScissor,
-+ mIsWebGL2),
++ state.mScissor,
+ rv));
return;
@@ -502,8 +530,7 @@ index aee042ab75..54b5638d19 100644
- retval.set(Create(cx, this, state.mViewport, rv));
+ retval.set(Create(
+ cx, this,
-+ MaskConfig::MParamGL>(pname, state.mViewport,
-+ mIsWebGL2),
++ state.mViewport,
+ rv));
return;
@@ -514,15 +541,16 @@ index aee042ab75..54b5638d19 100644
+ std::vector compressedTextureUint32(
+ state.mCompressedTextureFormats.begin(),
+ state.mCompressedTextureFormats.end());
++ // Camoufox: the formats of the compressed-texture extensions the page
++ // has enabled, as stock reports them -- not a captured list.
+ retval.set(Create(
+ cx, this,
-+ MaskConfig::MParamGLVector(pname, compressedTextureUint32,
-+ mIsWebGL2),
++ compressedTextureUint32,
+ rv));
return;
}
-@@ -2355,6 +2513,17 @@ void ClientWebGLContext::GetParameter(JSContext* cx, GLenum pname,
+@@ -2355,6 +2559,17 @@ void ClientWebGLContext::GetParameter(JSContext* cx, GLenum pname,
switch (pname) {
case dom::WEBGL_debug_renderer_info_Binding::UNMASKED_RENDERER_WEBGL:
@@ -540,7 +568,7 @@ index aee042ab75..54b5638d19 100644
if (ShouldResistFingerprinting(RFPTarget::WebGLRenderInfo) ||
ShouldResistFingerprinting(RFPTarget::WebGLRendererConstant)) {
ret = Some("Mozilla"_ns);
-@@ -2367,6 +2536,17 @@ void ClientWebGLContext::GetParameter(JSContext* cx, GLenum pname,
+@@ -2367,6 +2582,17 @@ void ClientWebGLContext::GetParameter(JSContext* cx, GLenum pname,
break;
case dom::WEBGL_debug_renderer_info_Binding::UNMASKED_VENDOR_WEBGL:
@@ -558,7 +586,7 @@ index aee042ab75..54b5638d19 100644
if (ShouldResistFingerprinting(RFPTarget::WebGLRenderInfo)) {
ret = Some("Mozilla"_ns);
} else if (ShouldResistFingerprinting(
-@@ -2478,7 +2658,9 @@ void ClientWebGLContext::GetParameter(JSContext* cx, GLenum pname,
+@@ -2478,7 +2704,9 @@ void ClientWebGLContext::GetParameter(JSContext* cx, GLenum pname,
case LOCAL_GL_COLOR_WRITEMASK: {
const auto mask = uint8_t(*maybe);
const auto bs = std::bitset<4>(mask);
@@ -569,7 +597,7 @@ index aee042ab75..54b5638d19 100644
JS::Rooted arr(cx);
if (!dom::ToJSValue(cx, src.data(), src.size(), &arr)) {
rv = NS_ERROR_OUT_OF_MEMORY;
-@@ -2871,6 +3053,24 @@ ClientWebGLContext::GetShaderPrecisionFormat(const GLenum shadertype,
+@@ -2871,6 +3099,24 @@ ClientWebGLContext::GetShaderPrecisionFormat(const GLenum shadertype,
const FuncScope funcScope(*this, "getShaderPrecisionFormat");
if (IsContextLost()) return nullptr;
@@ -594,7 +622,7 @@ index aee042ab75..54b5638d19 100644
const auto& shaderPrecisions = *notLost->info.shaderPrecisions;
const auto args =
webgl::GetShaderPrecisionFormatArgs{shadertype, precisiontype};
-@@ -5948,6 +6148,17 @@ bool ClientWebGLContext::IsSupported(const WebGLExtensionID ext,
+@@ -5948,6 +6194,17 @@ bool ClientWebGLContext::IsSupported(const WebGLExtensionID ext,
return false;
}
@@ -612,7 +640,7 @@ index aee042ab75..54b5638d19 100644
const auto& limits = Limits();
return limits.supportedExtensions[ext];
}
-@@ -5959,6 +6170,18 @@ void ClientWebGLContext::GetSupportedExtensions(
+@@ -5959,6 +6216,18 @@ void ClientWebGLContext::GetSupportedExtensions(
if (IsContextLost()) return;
auto& retarr = retval.SetValue();
@@ -663,11 +691,11 @@ index b370df55dd..71893f4db2 100644
"/js/xpconnect/wrappers",
]
diff --git a/dom/webidl/Window.webidl b/dom/webidl/Window.webidl
-index afa1dd59f3..d630148361 100644
+index f01e8011cc..3a13d4963f 100644
--- a/dom/webidl/Window.webidl
+++ b/dom/webidl/Window.webidl
@@ -1009,6 +1009,18 @@ partial interface Window {
- undefined setNavigatorUserAgent(DOMString ua);
+ undefined setScreenColorDepth(unsigned long depth);
};
+// Per-context WebGL vendor spoofing
diff --git a/patches/webrtc-ip-spoofing.patch b/patches/webrtc-ip-spoofing.patch
index 3f907b4db..bc8136145 100644
--- a/patches/webrtc-ip-spoofing.patch
+++ b/patches/webrtc-ip-spoofing.patch
@@ -262,7 +262,7 @@ index 0000000000..c9810a06d2
+
+#endif // mozilla_dom_WebRTCIPManager_h
diff --git a/dom/base/moz.build b/dom/base/moz.build
-index 23e33db4da..eab9fdc3e8 100644
+index b718f44036..52a61b0ca1 100644
--- a/dom/base/moz.build
+++ b/dom/base/moz.build
@@ -297,10 +297,15 @@ EXPORTS.mozilla.dom += [
@@ -282,7 +282,7 @@ index 23e33db4da..eab9fdc3e8 100644
# in unified builds (it includes RoverfoxStorageManager.h which can affect
# alphabetically-later files like BarProps.cpp)
diff --git a/dom/base/nsGlobalWindowInner.cpp b/dom/base/nsGlobalWindowInner.cpp
-index d4a967ce53..ff932f8528 100644
+index 007e8f5eae..7cdaf2767c 100644
--- a/dom/base/nsGlobalWindowInner.cpp
+++ b/dom/base/nsGlobalWindowInner.cpp
@@ -335,6 +335,10 @@
@@ -296,7 +296,7 @@ index d4a967ce53..ff932f8528 100644
#ifdef NS_PRINTING
# include "nsIPrintSettings.h"
#endif
-@@ -7872,6 +7876,42 @@ void nsGlobalWindowInner::SetTimezone(const nsAString& timezone, ErrorResult& aR
+@@ -7826,6 +7830,42 @@ void nsGlobalWindowInner::SetTimezone(const nsAString& timezone, ErrorResult& aR
}
}
@@ -340,10 +340,10 @@ index d4a967ce53..ff932f8528 100644
MOZ_ASSERT(aSharedWorker);
MOZ_ASSERT(!mSharedWorkers.Contains(aSharedWorker));
diff --git a/dom/base/nsGlobalWindowInner.h b/dom/base/nsGlobalWindowInner.h
-index 063843934e..11736cc985 100644
+index 17e00f408f..d709b07f7d 100644
--- a/dom/base/nsGlobalWindowInner.h
+++ b/dom/base/nsGlobalWindowInner.h
-@@ -691,6 +691,10 @@ class nsGlobalWindowInner final : public mozilla::dom::EventTarget,
+@@ -687,6 +687,10 @@ class nsGlobalWindowInner final : public mozilla::dom::EventTarget,
void SetFontSpacingSeed(uint32_t seed, mozilla::ErrorResult& aRv);
void SetTimezone(const nsAString& timezone, mozilla::ErrorResult& aRv);
@@ -355,10 +355,10 @@ index 063843934e..11736cc985 100644
void ForgetSharedWorker(mozilla::dom::SharedWorker* aSharedWorker);
diff --git a/dom/media/webrtc/jsapi/PeerConnectionImpl.cpp b/dom/media/webrtc/jsapi/PeerConnectionImpl.cpp
-index 91f927902f..b1f3c6980d 100644
+index e9afe2cfb2..97263a3d04 100644
--- a/dom/media/webrtc/jsapi/PeerConnectionImpl.cpp
+++ b/dom/media/webrtc/jsapi/PeerConnectionImpl.cpp
-@@ -99,6 +99,11 @@
+@@ -98,6 +98,11 @@
#include "mozilla/glean/DomMediaWebrtcMetrics.h"
#include "mozilla/net/DataChannelProtocol.h"
#include "mozilla/net/WebrtcProxyConfig.h"
@@ -370,7 +370,7 @@ index 91f927902f..b1f3c6980d 100644
#include "nsContentUtils.h"
#include "nsDOMJSUtils.h"
#include "nsGlobalWindowInner.h"
-@@ -228,6 +233,14 @@ class DataChannel;
+@@ -227,6 +232,14 @@ class DataChannel;
namespace mozilla {
@@ -385,7 +385,7 @@ index 91f927902f..b1f3c6980d 100644
void PeerConnectionAutoTimer::RegisterConnection() { mRefCnt++; }
void PeerConnectionAutoTimer::UnregisterConnection(bool aContainedAV) {
-@@ -1592,7 +1605,15 @@ PeerConnectionImpl::SetLocalDescription(int32_t aAction, const char* aSDP) {
+@@ -1585,7 +1598,15 @@ PeerConnectionImpl::SetLocalDescription(int32_t aAction, const char* aSDP) {
}
};
@@ -402,7 +402,7 @@ index 91f927902f..b1f3c6980d 100644
SyncToJsep();
-@@ -1751,11 +1772,75 @@ already_AddRefed PeerConnectionImpl::GetStats(
+@@ -1751,11 +1772,85 @@ already_AddRefed PeerConnectionImpl::GetStats(
MOZ_CRASH("Failed to create a promise!");
}
@@ -411,6 +411,7 @@ index 91f927902f..b1f3c6980d 100644
+ // The port of the fabricated srflx (if any), so the synthetic getStats
+ // entry below matches the candidate/SDP exactly. 0 = nothing fabricated.
+ uint16_t fabricatedSrflxPort = mFabricatedSrflxPort;
++ nsString fabricatedSrflxStatsId = mFabricatedSrflxStatsId;
+
GetStats(aSelector, false)
->Then(
@@ -418,7 +419,7 @@ index 91f927902f..b1f3c6980d 100644
- [promise,
- window = mWindow](UniquePtr&& aReport) {
+ [promise, window = mWindow, shouldSanitizeStats,
-+ fabricatedSrflxPort](
++ fabricatedSrflxPort, fabricatedSrflxStatsId](
+ UniquePtr&& aReport) {
+ // Camoufox: Sanitize IP addresses in stats before exposing to JS
+ if (shouldSanitizeStats && aReport) {
@@ -426,12 +427,20 @@ index 91f927902f..b1f3c6980d 100644
+ auto ipv6Opt = MaskConfig::GetString("webrtc:ipv6");
+ bool haveSrflx = false;
+ for (auto& candStat : aReport->mIceCandidateStats) {
++ // Only this side's candidates carry our address, and an mDNS
++ // host name is already opaque: stock reports it as-is.
++ if (!candStat.mType.WasPassed() ||
++ candStat.mType.Value() !=
++ dom::RTCStatsType::Local_candidate) {
++ continue;
++ }
+ if (candStat.mCandidateType.WasPassed() &&
+ candStat.mCandidateType.Value() ==
+ dom::RTCIceCandidateType::Srflx) {
+ haveSrflx = true;
+ }
-+ if (candStat.mAddress.WasPassed() && !candStat.mAddress.Value().IsEmpty()) {
++ if (candStat.mAddress.WasPassed() && !candStat.mAddress.Value().IsEmpty() &&
++ !StringEndsWith(candStat.mAddress.Value(), u".local"_ns)) {
+ nsAutoCString addr;
+ addr.Assign(NS_ConvertUTF16toUTF8(candStat.mAddress.Value()));
+ // Check for colons AND no periods to avoid IPv4:port false positives
@@ -453,7 +462,8 @@ index 91f927902f..b1f3c6980d 100644
+ std::string spoofIp = ipv4Opt ? ipv4Opt.value()
+ : (ipv6Opt ? ipv6Opt.value()
+ : std::string());
-+ if (!haveSrflx && !spoofIp.empty() && fabricatedSrflxPort != 0) {
++ if (!haveSrflx && !spoofIp.empty() && fabricatedSrflxPort != 0 &&
++ !fabricatedSrflxStatsId.IsEmpty()) {
+ dom::RTCIceCandidateStats cand;
+ cand.mType.Construct(dom::RTCStatsType::Local_candidate);
+ cand.mTimestamp.Construct(aReport->mTimestamp);
@@ -463,7 +473,7 @@ index 91f927902f..b1f3c6980d 100644
+ cand.mPort.Construct(fabricatedSrflxPort);
+ cand.mProtocol.Construct(NS_ConvertASCIItoUTF16("udp"));
+ cand.mProxied.Construct(NS_ConvertASCIItoUTF16("proxied"));
-+ cand.mId.Construct(NS_ConvertASCIItoUTF16("camou-srflx"));
++ cand.mId.Construct(fabricatedSrflxStatsId);
+ // Associate with the same transport as the real candidates.
+ for (const auto& existing : aReport->mIceCandidateStats) {
+ if (existing.mTransportId.WasPassed()) {
@@ -480,7 +490,7 @@ index 91f927902f..b1f3c6980d 100644
RefPtr report(new RTCStatsReport(window));
report->Incorporate(*aReport);
promise->MaybeResolve(std::move(report));
-@@ -3260,12 +3345,22 @@ const std::string& PeerConnectionImpl::GetName() {
+@@ -3274,12 +3369,22 @@ const std::string& PeerConnectionImpl::GetName() {
return mName;
}
@@ -504,7 +514,7 @@ index 91f927902f..b1f3c6980d 100644
if (mForceIceTcp && std::string::npos != candidate.find(" UDP ")) {
CSFLogWarn(LOGTAG, "Blocking local UDP candidate: %s", candidate.c_str());
STAMP_TIMECARD(mTimeCard, "UDP Ice Candidate blocked");
-@@ -3328,10 +3423,393 @@ void PeerConnectionImpl::SendLocalIceCandidateToContent(
+@@ -3342,10 +3447,438 @@ void PeerConnectionImpl::SendLocalIceCandidateToContent(
uint16_t level, const std::string& mid, const std::string& candidate,
const std::string& ufrag) {
STAMP_TIMECARD(mTimeCard, "Send Ice Candidate to content");
@@ -516,6 +526,20 @@ index 91f927902f..b1f3c6980d 100644
+ candidate.find(" typ relay ") != std::string::npos) {
+ mSurfacedPublicCandidate = true;
+ }
++ if (candidate.find(" typ host") != std::string::npos) {
++ mSurfacedHostCandidate = true;
++ // "candidate:
++ // typ host ..."
++ std::istringstream fields(candidate);
++ std::string foundation, component, transport, priority, address, port;
++ if (!mSurfacedHostUdpPort &&
++ (fields >> foundation >> component >> transport >> priority >>
++ address >> port) &&
++ (transport == "UDP" || transport == "udp")) {
++ mSurfacedHostUdpPort =
++ static_cast(std::strtoul(port.c_str(), nullptr, 10));
++ }
++ }
+
+ // Check if IP spoofing is enabled
+ if (ShouldSpoofCandidateIP()) {
@@ -758,7 +782,15 @@ index 91f927902f..b1f3c6980d 100644
+}
+
+void PeerConnectionImpl::MaybeFabricateSrflxCandidate() {
-+ if (!ShouldSpoofCandidateIP() || mSurfacedPublicCandidate) {
++ // Only what a real gather could have produced and did not: host candidates
++ // when none reached the page, and a srflx only when the page configured an
++ // ICE server. `new RTCPeerConnection()` with no iceServers gathers host
++ // candidates alone in stock Firefox; a srflx there (plus a second host set
++ // after end-of-candidates) was a direct tell.
++ const bool wantHosts = !mSurfacedHostCandidate;
++ const bool wantSrflx =
++ !mSurfacedPublicCandidate && !mJsConfiguration.mIceServers.IsEmpty();
++ if (!ShouldSpoofCandidateIP() || (!wantHosts && !wantSrflx)) {
+ return;
+ }
+
@@ -784,11 +816,22 @@ index 91f927902f..b1f3c6980d 100644
+ return;
+ }
+
-+ // One random ephemeral port, shared by the UDP host candidate and the srflx,
-+ // exactly as real Firefox reuses its local RTP port across both. Remember it
-+ // so the getStats() synthetic srflx reports the same port.
-+ uint16_t port = RandomEphemeralPort();
-+ mFabricatedSrflxPort = port;
++ // One ephemeral port, shared by the UDP host candidate and the srflx, exactly
++ // as real Firefox reuses its local RTP port across both: the real host's when
++ // one surfaced. Remember it so the getStats() synthetic srflx reports the
++ // same port.
++ uint16_t port =
++ mSurfacedHostUdpPort ? mSurfacedHostUdpPort : RandomEphemeralPort();
++ if (wantSrflx) {
++ mFabricatedSrflxPort = port;
++ if (mFabricatedSrflxStatsId.IsEmpty()) {
++ // Candidate stats ids are 8 lowercase hex digits.
++ char id[9];
++ SprintfLiteral(id, "%08x",
++ static_cast(mozilla::RandomUint64OrDie()));
++ mFabricatedSrflxStatsId.AssignASCII(id);
++ }
++ }
+
+ // mDNS .local hostname for the host candidates, like real Firefox
+ // (obfuscate_host_addresses). PCUuidGenerator yields "{uuid}"; strip braces.
@@ -802,7 +845,7 @@ index 91f927902f..b1f3c6980d 100644
+ mdnsHost = uuid + ".local";
+ }
+ }
-+ if (mdnsHost.empty()) {
++ if (wantHosts && mdnsHost.empty()) {
+ return;
+ }
+
@@ -839,11 +882,18 @@ index 91f927902f..b1f3c6980d 100644
+
+ // Mark surfaced now so re-entrant ICE-state changes during the delay below
+ // don't fabricate a second set.
-+ mSurfacedPublicCandidate = true;
++ if (wantHosts) {
++ mSurfacedHostCandidate = true;
++ mSurfacedHostUdpPort = port;
++ }
++ if (wantSrflx) {
++ mSurfacedPublicCandidate = true;
++ }
+
JSErrorResult rv;
- mPCObserver->OnIceCandidate(level, ObString(mid.c_str()),
- ObString(candidate.c_str()),
+- ObString(ufrag.c_str()), rv);
+
+ // STEP 1: the two host candidates first (UDP foundation 0, TCP foundation 2),
+ // sharing one mDNS hostname -- the exact pair real Firefox emits. CreepJS
@@ -851,23 +901,29 @@ index 91f927902f..b1f3c6980d 100644
+ // "type & base ip". Neither carries a real IP (.local / port 9), so an
+ // IP-from-SDP probe still sees 0.0.0.0 and keeps waiting, just like a real
+ // browser whose srflx round-trip is still in flight.
-+ std::ostringstream hostUdp;
-+ hostUdp << "candidate:0 1 UDP " << kHostUdpPriority << " " << mdnsHost << " "
-+ << port << " typ host";
-+ std::string hostUdpCand = hostUdp.str();
-+ injectIntoSdp(hostUdpCand);
-+ mPCObserver->OnIceCandidate(0, ObString(mid.c_str()),
-+ ObString(hostUdpCand.c_str()),
-+ ObString(ufrag.c_str()), rv);
-+
-+ std::ostringstream hostTcp;
-+ hostTcp << "candidate:2 1 TCP " << kHostTcpPriority << " " << mdnsHost
-+ << " 9 typ host tcptype active";
-+ std::string hostTcpCand = hostTcp.str();
-+ injectIntoSdp(hostTcpCand);
-+ mPCObserver->OnIceCandidate(0, ObString(mid.c_str()),
-+ ObString(hostTcpCand.c_str()),
- ObString(ufrag.c_str()), rv);
++ if (wantHosts) {
++ std::ostringstream hostUdp;
++ hostUdp << "candidate:0 1 UDP " << kHostUdpPriority << " " << mdnsHost << " "
++ << port << " typ host";
++ std::string hostUdpCand = hostUdp.str();
++ injectIntoSdp(hostUdpCand);
++ mPCObserver->OnIceCandidate(0, ObString(mid.c_str()),
++ ObString(hostUdpCand.c_str()),
++ ObString(ufrag.c_str()), rv);
++
++ std::ostringstream hostTcp;
++ hostTcp << "candidate:2 1 TCP " << kHostTcpPriority << " " << mdnsHost
++ << " 9 typ host tcptype active";
++ std::string hostTcpCand = hostTcp.str();
++ injectIntoSdp(hostTcpCand);
++ mPCObserver->OnIceCandidate(0, ObString(mid.c_str()),
++ ObString(hostTcpCand.c_str()),
++ ObString(ufrag.c_str()), rv);
++ }
++
++ if (!wantSrflx) {
++ return;
++ }
+
+ // STEP 2: the srflx (foundation 1, spoof/proxy IP, SAME port as the UDP host),
+ // delayed by a realistic STUN round-trip so the timing matches a real gather.
@@ -900,7 +956,7 @@ index 91f927902f..b1f3c6980d 100644
}
void PeerConnectionImpl::IceConnectionStateChange(
-@@ -3420,6 +3898,19 @@ void PeerConnectionImpl::IceConnectionStateChange(
+@@ -3434,6 +3967,47 @@ void PeerConnectionImpl::IceConnectionStateChange(
// If connectionIceConnectionStateChanged is true, fire an event named
// iceconnectionstatechange at connection.
if (connectionIceConnectionStateChanged) {
@@ -915,12 +971,40 @@ index 91f927902f..b1f3c6980d 100644
+ mIceConnectionState == RTCIceConnectionState::Disconnected ||
+ mIceConnectionState == RTCIceConnectionState::Connected ||
+ mIceConnectionState == RTCIceConnectionState::Completed) {
++ // Camoufox: when ICE failed before gathering ever started (forced proxy,
++ // no TURN), stock Firefox's observable sequence is still
++ // new -> gathering -> [candidates] -> complete -> null candidate. Walk
++ // it here around the fabricated candidates, otherwise the page sits at
++ // "new" forever, which no real Firefox does (daijro/camoufox#774).
++ const bool replayGathering =
++ mIceConnectionState == RTCIceConnectionState::Failed &&
++ mIceGatheringState == RTCIceGatheringState::New;
++ if (replayGathering) {
++ IceGatheringStateChange(aTransportId,
++ dom::RTCIceGathererState::Gathering);
++ }
+ MaybeFabricateSrflxCandidate();
++ if (replayGathering) {
++ // After the delayed fabricated srflx (RandomSrflxDelayMs <= 90 ms).
++ RefPtr self(this);
++ std::string transportId = aTransportId;
++ GetMainThreadSerialEventTarget()->DelayedDispatch(
++ NS_NewRunnableFunction(
++ "PeerConnectionImpl::CompleteReplayedGathering",
++ [self, transportId]() {
++ if (self->IsClosed()) {
++ return;
++ }
++ self->IceGatheringStateChange(
++ transportId, dom::RTCIceGathererState::Complete);
++ }),
++ 120);
++ }
+ }
pcObserver->OnStateChange(PCObserverStateType::IceConnectionState, rv);
}
-@@ -3605,6 +4096,12 @@ void PeerConnectionImpl::IceGatheringStateChange(
+@@ -3619,6 +4193,12 @@ void PeerConnectionImpl::IceGatheringStateChange(
// If connectionIceGatheringStateChanged is true, fire an event named
// icegatheringstatechange at connection.
if (gatheringStateChanged) {
@@ -933,7 +1017,7 @@ index 91f927902f..b1f3c6980d 100644
// NOTE: If we're in the "complete" case, our JS code will fire a null
// icecandidate event after firing the icegatheringstatechange event.
// Fire an event named icecandidate using the RTCPeerConnectionIceEvent
-@@ -3696,11 +4193,27 @@ void PeerConnectionImpl::UpdateDefaultCandidate(
+@@ -3710,11 +4290,27 @@ void PeerConnectionImpl::UpdateDefaultCandidate(
const std::string& defaultRtcpAddr, uint16_t defaultRtcpPort,
const std::string& transportId) {
CSFLogDebug(LOGTAG, "%s", __FUNCTION__);
@@ -963,7 +1047,7 @@ index 91f927902f..b1f3c6980d 100644
transportId);
}
}
-@@ -4471,8 +4984,10 @@ bool PeerConnectionImpl::GetPrefDefaultAddressOnly() const {
+@@ -4485,8 +5081,10 @@ bool PeerConnectionImpl::GetPrefDefaultAddressOnly() const {
uint64_t winId = mWindow->WindowID();
@@ -977,10 +1061,10 @@ index 91f927902f..b1f3c6980d 100644
!MediaManager::Get()->IsActivelyCapturingOrHasAPermission(winId);
return default_address_only;
diff --git a/dom/media/webrtc/jsapi/PeerConnectionImpl.h b/dom/media/webrtc/jsapi/PeerConnectionImpl.h
-index b2b657a046..8d98809d17 100644
+index 084a437313..b556e82084 100644
--- a/dom/media/webrtc/jsapi/PeerConnectionImpl.h
+++ b/dom/media/webrtc/jsapi/PeerConnectionImpl.h
-@@ -619,8 +619,17 @@ class PeerConnectionImpl final
+@@ -620,8 +620,17 @@ class PeerConnectionImpl final
RefPtr GetMediaPipelineForTrack(
dom::MediaStreamTrack& aRecvTrack);
@@ -999,9 +1083,9 @@ index b2b657a046..8d98809d17 100644
void SendLocalIceCandidateToContent(uint16_t level, const std::string& mid,
const std::string& candidate,
const std::string& ufrag);
-@@ -728,7 +737,14 @@ class PeerConnectionImpl final
+@@ -719,6 +728,21 @@ class PeerConnectionImpl final
unsigned int mDataChannelsClosed = 0;
-
+
bool mForceIceTcp;
+ // Camoufox: set true once a public (srflx/prflx/relay) candidate has been
+ // surfaced to content, so MaybeFabricateSrflxCandidate() only fabricates when
@@ -1010,10 +1094,17 @@ index b2b657a046..8d98809d17 100644
+ // Camoufox: the port of the fabricated srflx, so the getStats() synthetic
+ // entry reports the SAME port as the candidate string / SDP line. 0 = none.
+ uint16_t mFabricatedSrflxPort = 0;
++ // Camoufox: the fabricated srflx's getStats() id, in the shape real candidate
++ // ids have (8 hex digits), fixed for the life of the connection.
++ nsString mFabricatedSrflxStatsId;
++ // Camoufox: set once a host candidate reached content (real or fabricated),
++ // with the UDP host's port, so a fabricated srflx never brings a second host
++ // set and shares the host's port as a real gather does.
++ bool mSurfacedHostCandidate = false;
++ uint16_t mSurfacedHostUdpPort = 0;
Maybe mRtcpMuxPolicy;
RefPtr mTransportHandler;
- // The JSEP negotiation session.
diff --git a/dom/media/webrtc/jsapi/moz.build b/dom/media/webrtc/jsapi/moz.build
index d32e08c2b0..40a750196a 100644
--- a/dom/media/webrtc/jsapi/moz.build
@@ -1026,10 +1117,10 @@ index d32e08c2b0..40a750196a 100644
+# DOM Mask
+LOCAL_INCLUDES += ["/camoucfg"]
diff --git a/dom/webidl/Window.webidl b/dom/webidl/Window.webidl
-index d630148361..a5b0995e4d 100644
+index 3a13d4963f..6b4c7101fa 100644
--- a/dom/webidl/Window.webidl
+++ b/dom/webidl/Window.webidl
-@@ -976,6 +976,17 @@ partial interface Window {
+@@ -964,6 +964,17 @@ partial interface Window {
undefined setTimezone(DOMString timezone);
};
diff --git a/patches/wheel-native-ticks.patch b/patches/wheel-native-ticks.patch
new file mode 100644
index 000000000..8b7d622c2
--- /dev/null
+++ b/patches/wheel-native-ticks.patch
@@ -0,0 +1,30 @@
+diff --git a/dom/base/nsDOMWindowUtils.cpp b/dom/base/nsDOMWindowUtils.cpp
+index 9b6cddf8d9..75a1481158 100644
+--- a/dom/base/nsDOMWindowUtils.cpp
++++ b/dom/base/nsDOMWindowUtils.cpp
+@@ -801,6 +801,10 @@ nsDOMWindowUtils::SendWheelEvent(float aX, float aY, double aDeltaX,
+ (aOptions & WHEEL_EVENT_CUSTOMIZED_BY_USER_PREFS) != 0;
+ wheelEvent.mLineOrPageDeltaX = aLineOrPageDeltaX;
+ wheelEvent.mLineOrPageDeltaY = aLineOrPageDeltaY;
++ if (aOptions & WHEEL_EVENT_NATIVE_NOTCHES) {
++ wheelEvent.mWheelTicksX = aLineOrPageDeltaX / 3.0;
++ wheelEvent.mWheelTicksY = aLineOrPageDeltaY / 3.0;
++ }
+ wheelEvent.mCallbackId = notifier.SaveCallback();
+
+ nsPresContext* presContext = GetPresContext();
+diff --git a/dom/interfaces/base/nsIDOMWindowUtils.idl b/dom/interfaces/base/nsIDOMWindowUtils.idl
+index 44284cc319..2711040b70 100644
+--- a/dom/interfaces/base/nsIDOMWindowUtils.idl
++++ b/dom/interfaces/base/nsIDOMWindowUtils.idl
+@@ -391,6 +391,10 @@ interface nsIDOMWindowUtils : nsISupports {
+ const unsigned long WHEEL_EVENT_EXPECTED_OVERFLOW_DELTA_Y_ZERO = 0x0100;
+ const unsigned long WHEEL_EVENT_EXPECTED_OVERFLOW_DELTA_Y_POSITIVE = 0x0200;
+ const unsigned long WHEEL_EVENT_EXPECTED_OVERFLOW_DELTA_Y_NEGATIVE = 0x0400;
++ // Camoufox: the event comes from wheel notches, one notch per 3 lines of
++ // aLineOrPageDelta, and carries native ticks as a physical wheel does
++ // (WheelEvent.wheelDelta is then -120 per notch).
++ const unsigned long WHEEL_EVENT_NATIVE_NOTCHES = 0x10000;
+ void sendWheelEvent(in float aX,
+ in float aY,
+ in double aDeltaX,
diff --git a/patches/window-setter-seal.patch b/patches/window-setter-seal.patch
index 519cb52e7..fbb45c388 100644
--- a/patches/window-setter-seal.patch
+++ b/patches/window-setter-seal.patch
@@ -16,9 +16,8 @@ diff --git a/dom/base/ChromeUtils.cpp b/dom/base/ChromeUtils.cpp
index 8657d3282b..d8889edb6a 100644
--- a/dom/base/ChromeUtils.cpp
+++ b/dom/base/ChromeUtils.cpp
-@@ -6,6 +6,10 @@
+@@ -6,5 +6,9 @@
#include "MaskConfig.hpp"
- #include "MouseTrajectories.hpp"
+// Camoufox: for CamouSealFingerprintSetters below.
+#include "mozilla/dom/ScriptSettings.h"
@@ -27,8 +26,8 @@ index 8657d3282b..d8889edb6a 100644
#include "JSOracleParent.h"
#include "ThirdPartyUtil.h"
#include "VsyncSource.h"
-@@ -2781,6 +2785,74 @@ void ChromeUtils::CamouGetMouseTrajectory(GlobalObject& aGlobal, long aFromX,
- aPoints.AppendElements(flattenedPoints.data(), flattenedPoints.size());
+@@ -2768,6 +2772,74 @@ void ChromeUtils::CamouGetStringList(GlobalObject& aGlobal,
+ aRetVal.Clear();
}
+// Camoufox: every per-context fingerprint setter, in the order the managers
@@ -106,9 +105,9 @@ diff --git a/dom/base/ChromeUtils.h b/dom/base/ChromeUtils.h
index e32ee77dfd..8747d75c44 100644
--- a/dom/base/ChromeUtils.h
+++ b/dom/base/ChromeUtils.h
-@@ -365,6 +365,12 @@ class ChromeUtils {
- long aFromY, long aToX, long aToY,
- nsTArray& aPoints);
+@@ -361,6 +361,12 @@ class ChromeUtils {
+ static void CamouGetStringList(GlobalObject& aGlobal, const nsAString& aVarName,
+ nsTArray& aRetVal);
+ static void CamouSealFingerprintSetters(GlobalObject& aGlobal,
+ uint64_t aInnerWindowId);
@@ -336,9 +335,9 @@ diff --git a/dom/chrome-webidl/ChromeUtils.webidl b/dom/chrome-webidl/ChromeUtil
index 4c15c49fef..33aa276db2 100644
--- a/dom/chrome-webidl/ChromeUtils.webidl
+++ b/dom/chrome-webidl/ChromeUtils.webidl
-@@ -943,6 +943,20 @@ partial namespace ChromeUtils {
+@@ -938,6 +938,20 @@ partial namespace ChromeUtils {
*/
- sequence camouGetMouseTrajectory(long fromX, long fromY, long toX, long toY);
+ sequence camouGetStringList(DOMString varName);
+ /**
+ * Camoufox: open and close the window.setXxx() fingerprint setters.
diff --git a/patches/windows-exe-manifest.patch b/patches/windows-exe-manifest.patch
new file mode 100644
index 000000000..fdebbe143
--- /dev/null
+++ b/patches/windows-exe-manifest.patch
@@ -0,0 +1,66 @@
+Camoufox: embed Firefox's application manifest in camoufox.exe.
+
+config/rules.mk embeds $(srcdir)/.manifest, and browser/app only has
+firefox.exe.manifest, so --with-app-name=camoufox has always produced a
+camoufox.exe WITHOUT a manifest. With no Windows 10 supportedOS GUID the process
+(and every child: GPU, RDD, content run from the same exe) is treated as a
+pre-Windows-10 application and Gecko's Windows-10-gated paths switch off --
+measured on a Windows 11 host (Intel UHD), headed: MediaCapabilities.decodingInfo
+H.264/VP9 powerEfficient false (stock true), the HDR metadata probe 000 (stock
+111). Also present in the official beta.30.
+
+The file is a byte-for-byte copy of browser/app/firefox.exe.manifest, including
+name="Firefox" (the manifest is not page-readable; identical is simplest).
+
+diff --git a/browser/app/camoufox.exe.manifest b/browser/app/camoufox.exe.manifest
+new file mode 100644
+--- /dev/null
++++ b/browser/app/camoufox.exe.manifest
+@@ -0,0 +1,47 @@
++
++
++
++Firefox
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
diff --git a/patches/windows-theming-bug-modified.patch b/patches/windows-theming-bug-modified.patch
index 720e374e7..ba8147d75 100644
--- a/patches/windows-theming-bug-modified.patch
+++ b/patches/windows-theming-bug-modified.patch
@@ -11,20 +11,3 @@ index a615f68a6f..f950c876fa 100644
$(MKDIR) -p '$(dist_dest)/Contents/Library/LaunchServices'
ifdef MOZ_UPDATER
cp -f '$(dist_dest)/Contents/MacOS/updater.app/Contents/MacOS/org.mozilla.updater' '$(dist_dest)/Contents/Library/LaunchServices'
-diff --git a/browser/app/firefox.exe.manifest b/browser/app/firefox.exe.manifest
-index 995b2fc869..4a03da3064 100644
---- a/browser/app/firefox.exe.manifest
-+++ b/browser/app/firefox.exe.manifest
-@@ -3,10 +3,10 @@
-
--Firefox
-+Camoufox
-
-
- camoufox version
Python Packages
Camoufox v0.5.0
- Browserforge v1.2.4
+ fpgen v1.3.0
Apify Fingerprints v0.10.0
Playwright v1.57.1.dev0+g732639b35.d20251217
Browser
diff --git a/pythonlib/camoufox/__main__.py b/pythonlib/camoufox/__main__.py
index 5b153ea4b..f11326318 100644
--- a/pythonlib/camoufox/__main__.py
+++ b/pythonlib/camoufox/__main__.py
@@ -865,7 +865,7 @@ def packages(self):
"""
self._header("Python Packages")
self._pkg("Camoufox", "camoufox")
- self._pkg("Browserforge", "browserforge")
+ self._pkg("fpgen", "fpgen")
self._pkg("Apify Fingerprints", "apify_fingerprint_datapoints")
self._pkg("Playwright", "playwright")
diff --git a/pythonlib/camoufox/async_api.py b/pythonlib/camoufox/async_api.py
index efd7f735d..7a60fea99 100644
--- a/pythonlib/camoufox/async_api.py
+++ b/pythonlib/camoufox/async_api.py
@@ -19,7 +19,9 @@
from .utils import (
async_attach_vd,
attach_no_viewport_default,
+ attach_stock_media_defaults,
launch_options,
+ STOCK_MEDIA_DEFAULTS,
spoofs_window_dimensions,
)
@@ -105,6 +107,8 @@ async def AsyncNewBrowser(
virtual_display = None
if not from_options:
+ # Opt-in; see the note in sync_api.launch_options_or_default.
+ kwargs.setdefault('pin_cpu_cores', False)
from_options = await asyncio.get_event_loop().run_in_executor(
None,
partial(launch_options, headless=headless, debug=debug, **kwargs),
@@ -114,10 +118,55 @@ async def AsyncNewBrowser(
# to a different size (daijro/camoufox#666), so default to no_viewport.
no_viewport_default = spoofs_window_dimensions(from_options)
+ # Pin the driver (and so the browser it is about to spawn) to as many
+ # cores as the identity reports, so measurable parallelism matches
+ # navigator.hardwareConcurrency; the driver gets its cores back afterwards.
+ from . import cpu_affinity
+ from .utils import driver_pid, pinned_core_count
+
+ pin_to = pinned_core_count(from_options)
+ pid = driver_pid(playwright) if pin_to else None
+ if not pid:
+ return await _launch(playwright, from_options, persistent_context, no_viewport_default, virtual_display)
+ # The browser inherits the driver's mask at spawn, so two concurrent launches
+ # on one driver must not interleave pin/restore: the second pin would land on
+ # the first browser, and the first restore would leave the driver pinned.
+ async with _pin_lock(pid):
+ previous = cpu_affinity.pin(pid, pin_to)
+ try:
+ return await _launch(playwright, from_options, persistent_context, no_viewport_default, virtual_display)
+ finally:
+ cpu_affinity.restore(pid, previous)
+
+
+_PIN_LOCKS: Dict[int, asyncio.Lock] = {}
+
+
+def _pin_lock(pid: int) -> asyncio.Lock:
+ # One lock per driver: a driver belongs to one event loop.
+ lock = _PIN_LOCKS.get(pid)
+ if lock is None:
+ lock = _PIN_LOCKS[pid] = asyncio.Lock()
+ return lock
+
+
+async def _launch(
+ playwright: Playwright,
+ from_options: Dict[str, Any],
+ persistent_context: bool,
+ no_viewport_default: bool,
+ virtual_display: Optional[VirtualDisplay],
+) -> Union[Browser, BrowserContext]:
# Persistent context
if persistent_context:
if no_viewport_default and not ('viewport' in from_options or 'no_viewport' in from_options):
from_options = {**from_options, 'no_viewport': True}
+ # The persistent context is created by the launch itself, so its media
+ # features come from these options rather than from new_context().
+ from_options = {
+ **{k: v for k, v in STOCK_MEDIA_DEFAULTS.items() if k not in from_options},
+ **from_options,
+ }
context = await playwright.firefox.launch_persistent_context(**from_options)
return await async_attach_vd(context, virtual_display)
@@ -125,6 +174,7 @@ async def AsyncNewBrowser(
browser = await playwright.firefox.launch(**from_options)
if no_viewport_default:
attach_no_viewport_default(browser)
+ attach_stock_media_defaults(browser)
return await async_attach_vd(browser, virtual_display)
diff --git a/pythonlib/camoufox/browserforge.yml b/pythonlib/camoufox/browserforge.yml
deleted file mode 100644
index 7f7df90eb..000000000
--- a/pythonlib/camoufox/browserforge.yml
+++ /dev/null
@@ -1,68 +0,0 @@
-# Mappings of Browserforge fingerprints to Camoufox config properties.
-
-navigator:
- # Note: Browserforge tends to have outdated UAs.
- # The version will be replaced in Camoufox.
- userAgent: navigator.userAgent
- # userAgentData not in Firefox
- doNotTrack: navigator.doNotTrack
- appCodeName: navigator.appCodeName
- appName: navigator.appName
- appVersion: navigator.appVersion
- oscpu: navigator.oscpu
- # webdriver is always True
- # Locale is now implemented separately:
- # language: navigator.language
- # languages: navigator.languages
- platform: navigator.platform
- # deviceMemory not in Firefox
- hardwareConcurrency: navigator.hardwareConcurrency
- product: navigator.product
- # Never override productSub #105
- # productSub: navigator.productSub
- # vendor is not necessary
- # vendorSub is not necessary
- maxTouchPoints: navigator.maxTouchPoints
- extraProperties:
- # Note: Changing pdfViewerEnabled is not recommended. This will be kept to True.
- globalPrivacyControl: navigator.globalPrivacyControl
-
-screen:
- # hasHDR is not implemented in Camoufox
- availLeft: screen.availLeft
- availTop: screen.availTop
- availWidth: screen.availWidth
- availHeight: screen.availHeight
- height: screen.height
- width: screen.width
- colorDepth: screen.colorDepth
- pixelDepth: screen.pixelDepth
- # devicePixelRatio is not recommended. Any value other than 1.0 is suspicious.
- pageXOffset: screen.pageXOffset
- pageYOffset: screen.pageYOffset
- outerHeight: window.outerHeight
- outerWidth: window.outerWidth
- innerHeight: window.innerHeight
- innerWidth: window.innerWidth
- screenX: window.screenX
- screenY: window.screenY
- # Tends to generate out of bounds (network inconsistencies):
- # clientWidth: document.body.clientWidth
- # clientHeight: document.body.clientHeight
-
-# videoCard:
-# renderer: webgl:renderer
-# vendor: webgl:vendor
-
-headers:
- # headers.User-Agent is redundant with navigator.userAgent
- # headers.Accept-Language is redundant with locale:*
- Accept-Encoding: headers.Accept-Encoding
-
-battery:
- charging: battery:charging
- chargingTime: battery:chargingTime
- dischargingTime: battery:dischargingTime
-
-# Unsupported: videoCodecs, audioCodecs, pluginsData, multimediaDevices
-# Fonts are listed through the launcher.
diff --git a/pythonlib/camoufox/coherence.py b/pythonlib/camoufox/coherence.py
new file mode 100644
index 000000000..bc0f055bc
--- /dev/null
+++ b/pythonlib/camoufox/coherence.py
@@ -0,0 +1,364 @@
+"""Whole-identity coherence: the checks that look at more than one field.
+
+Camoufox assembles an identity from several pools -- the navigator and screen
+from the fingerprint generator, the GPU from `webgl_data.db`, fonts and voices
+from its own catalogues, media devices from `media-devices.json`. Each pool is
+sampled on its own, so a combination that no machine has ever had can be built
+out of individually plausible parts: an Apple M1 with 2 cores, a Mac reporting a
+Braswell Atom GPU, a Linux identity whose platform says armv81 while its user
+agent says x86_64.
+
+That class of defect cannot be removed by cleaning the pools, because it is
+created when they are combined. So every identity passes through here, whatever
+it was built from: a generated fingerprint, a bundled preset, or a config the
+caller wrote by hand.
+
+Each rule states an invariant that holds on real machines, says how to repair an
+identity that breaks it where a correct value is determined, and is checked
+again afterwards. `validate()` reports what is still broken; `apply()` repairs
+what it can. Rules are written against measured behaviour, and the measurement
+is cited in the rule -- a rule nobody can trace is a rule nobody can revise.
+
+Ground truth used below was captured from stock Firefox 152.0.4, headed, on
+three machines on 2026-09-17: a 16-core Linux box (1920x1080, colorDepth 24,
+dpr 1, "Radeon HD 3200 Graphics, or similar"), a 16-core Windows 11 laptop with
+a touchscreen (3456x2160 at dpr 2.5 -> 1382x864 CSS, colorDepth 24, maxTouchPoints
+5, ANGLE/Intel), and a 10-core Apple Silicon Mac mini (2560x1440, colorDepth 30,
+dpr 2, "Apple M1, or similar" -- the machine is an M4, and Firefox generalises
+the renderer string itself).
+"""
+
+from typing import Any, Callable, Dict, List, NamedTuple, Optional
+
+# Core counts Apple Silicon actually ships. The M1 is the floor at 8; nothing
+# Apple has made has fewer. Firefox reports "Apple M1, or similar" for every
+# M-series part, so the renderer string cannot narrow it further than this.
+# 11 is in the set because the M3 Pro is 6P+5E -- an odd count that is real, and
+# the reason this is an explicit list rather than "8 to 32": 9, 13 and 15 are
+# not Apple parts. Apple Silicon has no SMT, so logical cores == physical.
+APPLE_SILICON_CORES = frozenset({8, 10, 11, 12, 14, 16, 20, 24, 28, 32})
+
+# devicePixelRatio by platform. Windows exposes the display-scaling steps
+# (100/125/150/175/200/250/300%); macOS reports 1 or 2 and nothing between;
+# Linux reports 1, or 2 under HiDPI, with GNOME fractional scaling giving the
+# 1.25/1.5/1.75 steps. Values outside these (1.818, 1.09, 1.36) are scraped
+# artefacts -- a browser zoom level folded into the ratio, not a display mode.
+PLAUSIBLE_DPR = {
+ 'win': frozenset({1, 1.25, 1.5, 1.75, 2, 2.5, 3}),
+ 'mac': frozenset({1, 2}),
+ 'lin': frozenset({1, 1.25, 1.5, 1.75, 2}),
+}
+
+# colorDepth: Firefox reports 24, or 30 on a deep-colour display. macOS defaults
+# to deep colour, so an Apple Silicon Mac reports 30 (measured). 32 appears in
+# scraped data and is not a value Firefox emits.
+PLAUSIBLE_COLOR_DEPTH = frozenset({24, 30})
+
+# maxTouchPoints: 0 with no digitiser, otherwise the panel's maximum simultaneous
+# contacts. Measured 5 on the Windows laptop. This is a RANGE rather than a list
+# of seen values, because neither source is authoritative here: fpgen's Windows
+# pool offers 0, 1 and 10 and never the 5 the real machine reports, while the
+# presets carry 40 and fpgen's draws carry 256. Consumer digitisers top out at
+# 10 contacts; anything above that is a scraped artefact.
+MAX_PLAUSIBLE_TOUCH_POINTS = 10
+
+# The browser's own chrome height, in CSS pixels: the toolbar strip above the
+# content area. Measured 86 on this build (stock Firefox's own value; see the
+# leak register's chrome-height row), and it is a property of the BINARY, not of
+# the identity -- the same window furniture renders whatever OS is claimed.
+#
+# It matters because the real window is sized from window.outerHeight, so the
+# content area a page can actually receive input in is outerHeight - 86. An
+# identity claiming `outerHeight - innerHeight` SMALLER than that is claiming a
+# viewport taller than the window can hold, and the difference is unreachable:
+# mouse events dispatched into those bottom rows are delivered to nothing.
+# Measured 2026-09-17 -- a drawn pair of outer 801 / inner 717 (chrome 84) left
+# the bottom 2 rows dead, which the boundary-sweep guard caught.
+BROWSER_CHROME_HEIGHT = 86
+
+# GPU strings that are not possible on macOS. Firefox on a Mac reports Apple
+# Silicon as "Apple M1, or similar", and Intel Macs as an Intel Iris/UHD/HD
+# 4000-6000 part; ANGLE is Windows-only (Direct3D), and these two rows in
+# webgl_data.db are a Braswell Atom IGP and a desktop PC card, neither of which
+# shipped in any Mac.
+_NOT_A_MAC_GPU = ('ANGLE', 'Intel(R) HD Graphics 400', 'Radeon R9 200 Series', 'llvmpipe')
+
+
+class Violation(NamedTuple):
+ rule: str
+ detail: str
+
+
+class Rule(NamedTuple):
+ name: str
+ #: Returns a description of the breakage, or None when the identity holds.
+ check: Callable[[Dict[str, Any], str], Optional[str]]
+ #: Repairs the identity in place. None where no correct value is determined.
+ repair: Optional[Callable[[Dict[str, Any], str], None]]
+
+
+def _renderer(config: Dict[str, Any]) -> str:
+ return str(config.get('webGl:renderer') or '')
+
+
+def _is_apple_silicon(config: Dict[str, Any]) -> bool:
+ return 'Apple M' in _renderer(config)
+
+
+def _check_apple_silicon_cores(config: Dict[str, Any], target_os: str) -> Optional[str]:
+ if not _is_apple_silicon(config):
+ return None
+ cores = config.get('navigator.hardwareConcurrency')
+ if isinstance(cores, int) and cores not in APPLE_SILICON_CORES:
+ return f'{_renderer(config)!r} with hardwareConcurrency {cores}; Apple Silicon starts at 8'
+ return None
+
+
+def _repair_apple_silicon_cores(config: Dict[str, Any], target_os: str) -> None:
+ cores = config.get('navigator.hardwareConcurrency')
+ if not isinstance(cores, int):
+ return
+ # Snap UP to the nearest count Apple ships: a machine claiming an M-series
+ # GPU has at least 8 cores, and a page timing workers can see how many.
+ config['navigator.hardwareConcurrency'] = min(
+ (c for c in sorted(APPLE_SILICON_CORES) if c >= cores), default=max(APPLE_SILICON_CORES)
+ )
+
+
+def gpu_fits_os(renderer: Optional[str], target_os: str) -> bool:
+ """Whether this renderer string is one the OS can report.
+
+ Used both to check a finished identity and to filter `webgl_data.db` before
+ sampling, so the two can never disagree about what a Mac may claim.
+ """
+ renderer = str(renderer or '')
+ if not renderer:
+ return True
+ if target_os == 'mac':
+ return not any(bad in renderer for bad in _NOT_A_MAC_GPU)
+ if target_os == 'win':
+ return renderer.startswith('ANGLE')
+ if target_os == 'lin':
+ return 'ANGLE' not in renderer and 'Apple M' not in renderer
+ return True
+
+
+def _check_gpu_matches_os(config: Dict[str, Any], target_os: str) -> Optional[str]:
+ renderer = _renderer(config)
+ if not renderer or gpu_fits_os(renderer, target_os):
+ return None
+ if target_os == 'mac':
+ return f'macOS identity with {renderer!r}, which no Mac reports'
+ if target_os == 'win':
+ return f'Windows identity with {renderer!r}; Firefox on Windows renders through ANGLE'
+ return f'Linux identity with {renderer!r}'
+
+
+def _check_color_depth(config: Dict[str, Any], target_os: str) -> Optional[str]:
+ depth = config.get('screen.colorDepth')
+ if depth is None:
+ return None
+ if depth not in PLAUSIBLE_COLOR_DEPTH:
+ return f'screen.colorDepth {depth}; Firefox reports 24 or 30'
+ if target_os == 'mac' and _is_apple_silicon(config) and depth != 30:
+ return f'Apple Silicon Mac with colorDepth {depth}; deep colour is the macOS default'
+ return None
+
+
+def _repair_color_depth(config: Dict[str, Any], target_os: str) -> None:
+ depth = config.get('screen.colorDepth')
+ if depth is not None and depth not in PLAUSIBLE_COLOR_DEPTH:
+ config['screen.colorDepth'] = 24
+ if target_os == 'mac' and _is_apple_silicon(config):
+ config['screen.colorDepth'] = 30
+ # pixelDepth is the same number in every browser that reports both.
+ if 'screen.pixelDepth' in config or 'screen.colorDepth' in config:
+ config['screen.pixelDepth'] = config.get('screen.colorDepth', 24)
+
+
+def _check_touch_points(config: Dict[str, Any], target_os: str) -> Optional[str]:
+ touch = config.get('navigator.maxTouchPoints')
+ if touch is None:
+ return None
+ if not isinstance(touch, int) or touch < 0 or touch > MAX_PLAUSIBLE_TOUCH_POINTS:
+ return f'navigator.maxTouchPoints {touch}; a digitiser reports at most {MAX_PLAUSIBLE_TOUCH_POINTS}'
+ if target_os == 'mac' and touch:
+ return f'macOS identity with maxTouchPoints {touch}; no Mac has a touchscreen'
+ return None
+
+
+def _repair_touch_points(config: Dict[str, Any], target_os: str) -> None:
+ touch = config.get('navigator.maxTouchPoints')
+ too_many = isinstance(touch, int) and touch > MAX_PLAUSIBLE_TOUCH_POINTS
+ if target_os == 'mac' or too_many or (touch is not None and not isinstance(touch, int)):
+ # A machine claiming 256 contacts is not a machine with a better
+ # touchscreen; the value is noise, so the identity has no digitiser.
+ config['navigator.maxTouchPoints'] = 0
+
+
+def _check_device_pixel_ratio(config: Dict[str, Any], target_os: str) -> Optional[str]:
+ dpr = config.get('window.devicePixelRatio')
+ if dpr is None:
+ return None
+ allowed = PLAUSIBLE_DPR.get(target_os)
+ if allowed and float(dpr) not in {float(v) for v in allowed}:
+ return f'window.devicePixelRatio {dpr} is not a display mode {target_os} offers'
+ return None
+
+
+def _repair_device_pixel_ratio(config: Dict[str, Any], target_os: str) -> None:
+ dpr = config.get('window.devicePixelRatio')
+ allowed = PLAUSIBLE_DPR.get(target_os)
+ if dpr is None or not allowed:
+ return
+ # Nearest real scaling step: 1.818 becomes 1.75 on Windows, 2 on macOS.
+ config['window.devicePixelRatio'] = min(allowed, key=lambda v: abs(float(v) - float(dpr)))
+
+
+def _check_window_chrome(config: Dict[str, Any], target_os: str) -> Optional[str]:
+ inner = config.get('window.innerHeight')
+ outer = config.get('window.outerHeight')
+ if not inner or not outer:
+ return None
+ if outer - inner < BROWSER_CHROME_HEIGHT:
+ return (f'window.outerHeight {outer} - innerHeight {inner} = {outer - inner}, less than the '
+ f'{BROWSER_CHROME_HEIGHT}px of chrome the window actually has; the bottom '
+ f'{BROWSER_CHROME_HEIGHT - (outer - inner)}px of the claimed viewport cannot receive input')
+ return None
+
+
+def _repair_window_chrome(config: Dict[str, Any], target_os: str) -> None:
+ inner = config.get('window.innerHeight')
+ outer = config.get('window.outerHeight')
+ if not inner or not outer:
+ return
+ avail = config.get('screen.availHeight') or config.get('screen.height')
+ # Prefer growing the window, which keeps the viewport the identity drew.
+ if not avail or inner + BROWSER_CHROME_HEIGHT <= avail:
+ config['window.outerHeight'] = inner + BROWSER_CHROME_HEIGHT
+ return
+ # No room on the claimed screen: shrink the viewport to what the window can
+ # hold instead, so the claim matches the surface either way.
+ config['window.innerHeight'] = max(outer - BROWSER_CHROME_HEIGHT, 1)
+
+
+def _check_screen_shape(config: Dict[str, Any], target_os: str) -> Optional[str]:
+ width, height = config.get('screen.width'), config.get('screen.height')
+ if not width or not height:
+ return None
+ if height > width:
+ return f'portrait screen {width}x{height}; desktop panels are landscape'
+ if width < 1024:
+ return f'screen {width}x{height} is smaller than any current desktop panel'
+ return None
+
+
+def _check_avail_bounds(config: Dict[str, Any], target_os: str) -> Optional[str]:
+ width, height = config.get('screen.width'), config.get('screen.height')
+ avail_w, avail_h = config.get('screen.availWidth'), config.get('screen.availHeight')
+ if width and avail_w and avail_w > width:
+ return f'screen.availWidth {avail_w} exceeds screen.width {width}'
+ if height and avail_h and avail_h > height:
+ return f'screen.availHeight {avail_h} exceeds screen.height {height}'
+ return None
+
+
+def _repair_avail_bounds(config: Dict[str, Any], target_os: str) -> None:
+ width, height = config.get('screen.width'), config.get('screen.height')
+ if width and config.get('screen.availWidth', 0) > width:
+ config['screen.availWidth'] = width
+ if height and config.get('screen.availHeight', 0) > height:
+ config['screen.availHeight'] = height
+
+
+def _check_arch_agreement(config: Dict[str, Any], target_os: str) -> Optional[str]:
+ ua = str(config.get('navigator.userAgent') or '')
+ platform = str(config.get('navigator.platform') or '')
+ oscpu = str(config.get('navigator.oscpu') or '')
+ if not ua:
+ return None
+ if 'x86_64' in ua and ('armv' in platform or 'armv' in oscpu):
+ return f'user agent claims x86_64 while platform/oscpu say {platform!r}/{oscpu!r}'
+ return None
+
+
+RULES: List[Rule] = [
+ Rule('apple-silicon-cores', _check_apple_silicon_cores, _repair_apple_silicon_cores),
+ Rule('gpu-matches-os', _check_gpu_matches_os, None),
+ Rule('color-depth', _check_color_depth, _repair_color_depth),
+ Rule('touch-points', _check_touch_points, _repair_touch_points),
+ Rule('device-pixel-ratio', _check_device_pixel_ratio, _repair_device_pixel_ratio),
+ Rule('window-chrome', _check_window_chrome, _repair_window_chrome),
+ Rule('screen-shape', _check_screen_shape, None),
+ Rule('avail-bounds', _check_avail_bounds, _repair_avail_bounds),
+ Rule('arch-agreement', _check_arch_agreement, None),
+]
+
+
+def screen_is_implausible(config: Dict[str, Any]) -> bool:
+ """Whether the screen is one no desktop reports (portrait, or tiny)."""
+ return _check_screen_shape(config, '') is not None
+
+
+def repair_screen_orientation(config: Dict[str, Any]) -> bool:
+ """Turn a portrait screen landscape, keeping the panel's own dimensions.
+
+ One bundled preset reports 1440x2560: a phone panel, or a desktop one
+ captured while rotated. Either way a desktop identity that claims it is
+ answering a `matchMedia('(orientation: portrait)')` the way no desktop
+ does, so the axes are swapped rather than the numbers invented. Run before
+ the window clamps, which then bound the window to the new screen.
+ """
+ width, height = config.get('screen.width'), config.get('screen.height')
+ if not width or not height or height <= width:
+ return False
+ config['screen.width'], config['screen.height'] = height, width
+ avail_w, avail_h = config.get('screen.availWidth'), config.get('screen.availHeight')
+ if avail_w and avail_h:
+ config['screen.availWidth'], config['screen.availHeight'] = avail_h, avail_w
+ return True
+
+
+def drop_incoherent_source_values(config: Dict[str, Any], target_os: str) -> List[Violation]:
+ """Discard values a source supplied that this identity cannot keep.
+
+ Run before the pools that would otherwise defer to them. A preset carries
+ its own GPU pair, so a macOS preset naming a Braswell Atom IGP keeps it all
+ the way to the page unless the pair is dropped here -- at which point the
+ normal WebGL sampling draws a coherent one instead. 15 of the 312 bundled
+ presets need this; they are scraped rows, not real machines.
+
+ Only values that another pool can replace are dropped. Everything else is
+ left for `apply()` to repair or report.
+ """
+ dropped = []
+ renderer = _renderer(config)
+ if renderer and not gpu_fits_os(renderer, target_os):
+ config.pop('webGl:renderer', None)
+ config.pop('webGl:vendor', None)
+ dropped.append(Violation('gpu-matches-os', f'dropped {renderer!r} for a {target_os} identity'))
+ return dropped
+
+
+def validate(config: Dict[str, Any], target_os: str) -> List[Violation]:
+ """Every invariant this identity breaks. Empty means coherent."""
+ violations = []
+ for rule in RULES:
+ detail = rule.check(config, target_os)
+ if detail:
+ violations.append(Violation(rule.name, detail))
+ return violations
+
+
+def apply(config: Dict[str, Any], target_os: str) -> List[Violation]:
+ """Repair what is determined, and report what is left.
+
+ A rule with no repair -- a Windows GPU on a macOS identity, a portrait
+ screen -- cannot be corrected without inventing a machine, so it is
+ returned for the caller to decide about. The caller that draws the identity
+ can simply draw again.
+ """
+ for rule in RULES:
+ if rule.repair and rule.check(config, target_os):
+ rule.repair(config, target_os)
+ return validate(config, target_os)
diff --git a/pythonlib/camoufox/cpu_affinity.py b/pythonlib/camoufox/cpu_affinity.py
new file mode 100644
index 000000000..244ce48ea
--- /dev/null
+++ b/pythonlib/camoufox/cpu_affinity.py
@@ -0,0 +1,154 @@
+"""Pin the browser to as many CPU cores as the identity reports.
+
+navigator.hardwareConcurrency is spoofed by the browser, but the number of
+cores a page can *measure* (timing N parallel workers) is the number the OS
+lets the browser run on. Reporting the fingerprint's value and pinning the
+browser's CPU affinity to that many cores makes the two agree, so the drawn
+value survives instead of being replaced by the host count.
+
+The pin is applied to the Playwright driver process right before the browser
+is launched -- child processes inherit the affinity mask on Linux and Windows,
+so the browser and every content/GPU process it spawns run on the pinned set
+-- and lifted from the driver again afterwards. macOS has no process affinity
+API, so nothing can be pinned there and the launcher falls back to reporting
+the host's (snapped) count.
+"""
+
+import os
+import platform
+import random
+from typing import Iterable, List, Optional, Sequence
+
+
+def supported() -> bool:
+ """Whether this host can constrain a process to a subset of its cores."""
+ system = platform.system()
+ if system == 'Linux':
+ return hasattr(os, 'sched_setaffinity')
+ return system == 'Windows'
+
+
+def host_cores() -> Optional[List[int]]:
+ """The cores this process may run on, in order."""
+ try:
+ if hasattr(os, 'sched_getaffinity'):
+ return sorted(os.sched_getaffinity(0)) # type: ignore[attr-defined]
+ except OSError:
+ pass
+ if platform.system() == 'Windows':
+ mask = _win_get_mask(os.getpid())
+ if mask:
+ return _mask_to_cores(mask)
+ n = os.cpu_count()
+ return list(range(n)) if n else None
+
+
+def _pick(cores: Sequence[int], count: int) -> List[int]:
+ """`count` adjacent cores from a random starting point (wrapping). Always
+ taking the first `count` stacked every browser on one host onto cores
+ 0..count-1, so concurrent browsers measured far less parallelism than they
+ report; adjacent cores keep the SMT topology a real machine of that size
+ would have."""
+ start = random.randrange(len(cores))
+ return sorted((list(cores[start:]) + list(cores[:start]))[:count])
+
+
+def pin(pid: int, count: int) -> Optional[Sequence[int]]:
+ """Restrict `pid` to `count` of its cores. Returns the previous set so it
+ can be handed back to `restore()`, or None if nothing was changed.
+
+ The caller must not pin the same process for two launches at once: the
+ browser inherits whatever mask the driver has when it is spawned."""
+ if count < 1 or not supported():
+ return None
+ system = platform.system()
+ if system == 'Linux':
+ try:
+ before = sorted(os.sched_getaffinity(pid)) # type: ignore[attr-defined]
+ if count >= len(before):
+ return None
+ os.sched_setaffinity(pid, set(_pick(before, count))) # type: ignore[attr-defined]
+ return before
+ except OSError:
+ return None
+ if system == 'Windows':
+ before_mask = _win_get_mask(pid)
+ if not before_mask:
+ return None
+ before = _mask_to_cores(before_mask)
+ if count >= len(before):
+ return None
+ return before if _win_set_mask(pid, _cores_to_mask(_pick(before, count))) else None
+ return None
+
+
+def restore(pid: int, previous: Optional[Sequence[int]]) -> None:
+ """Give `pid` back the cores it had before `pin()`."""
+ if not previous:
+ return
+ system = platform.system()
+ try:
+ if system == 'Linux':
+ os.sched_setaffinity(pid, set(previous)) # type: ignore[attr-defined]
+ elif system == 'Windows':
+ _win_set_mask(pid, _cores_to_mask(previous))
+ except OSError:
+ pass
+
+
+# -- Windows ---------------------------------------------------------------
+
+_PROCESS_QUERY_INFORMATION = 0x0400
+_PROCESS_SET_INFORMATION = 0x0200
+
+
+def _mask_to_cores(mask: int) -> List[int]:
+ return [i for i in range(mask.bit_length()) if mask >> i & 1]
+
+
+def _cores_to_mask(cores: Iterable[int]) -> int:
+ mask = 0
+ for c in cores:
+ mask |= 1 << c
+ return mask
+
+
+def _win_handle(pid: int):
+ import ctypes
+
+ k32 = ctypes.windll.kernel32 # type: ignore[attr-defined]
+ return k32, k32.OpenProcess(_PROCESS_QUERY_INFORMATION | _PROCESS_SET_INFORMATION, False, pid)
+
+
+def _win_get_mask(pid: int) -> int:
+ try:
+ import ctypes
+
+ k32, h = _win_handle(pid)
+ if not h:
+ return 0
+ try:
+ proc_mask = ctypes.c_size_t()
+ sys_mask = ctypes.c_size_t()
+ if not k32.GetProcessAffinityMask(h, ctypes.byref(proc_mask), ctypes.byref(sys_mask)):
+ return 0
+ return int(proc_mask.value)
+ finally:
+ k32.CloseHandle(h)
+ except Exception:
+ return 0
+
+
+def _win_set_mask(pid: int, mask: int) -> bool:
+ try:
+ import ctypes
+
+ k32, h = _win_handle(pid)
+ if not h:
+ return False
+ try:
+ return bool(k32.SetProcessAffinityMask(h, ctypes.c_size_t(mask)))
+ finally:
+ k32.CloseHandle(h)
+ except Exception:
+ return False
diff --git a/pythonlib/camoufox/fingerprint-presets-v150.json b/pythonlib/camoufox/fingerprint-presets-v150.json
index 4660ea59b..44d1de0d1 100644
--- a/pythonlib/camoufox/fingerprint-presets-v150.json
+++ b/pythonlib/camoufox/fingerprint-presets-v150.json
@@ -25,26 +25,6 @@
"unmaskedRenderer": "Radeon HD 3200 Graphics, or similar"
}
},
- {
- "navigator": {
- "userAgent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:150.0) Gecko/20100101 Firefox/150.0",
- "platform": "MacIntel",
- "hardwareConcurrency": 2,
- "maxTouchPoints": 0
- },
- "screen": {
- "width": 1280,
- "height": 800,
- "colorDepth": 30,
- "availWidth": 1280,
- "availHeight": 800,
- "devicePixelRatio": 2
- },
- "webgl": {
- "unmaskedVendor": "Intel Inc.",
- "unmaskedRenderer": "Intel(R) HD Graphics 400, or similar"
- }
- },
{
"navigator": {
"userAgent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:150.0) Gecko/20100101 Firefox/150.0",
@@ -501,16 +481,36 @@
"navigator": {
"userAgent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:150.0) Gecko/20100101 Firefox/150.0",
"platform": "MacIntel",
- "hardwareConcurrency": 10,
+ "hardwareConcurrency": 8,
+ "maxTouchPoints": 0
+ },
+ "screen": {
+ "width": 2056,
+ "height": 1329,
+ "colorDepth": 30,
+ "availWidth": 2056,
+ "availHeight": 1253,
+ "devicePixelRatio": 2
+ },
+ "webgl": {
+ "unmaskedVendor": "Apple",
+ "unmaskedRenderer": "Apple M1, or similar"
+ }
+ },
+ {
+ "navigator": {
+ "userAgent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:150.0) Gecko/20100101 Firefox/150.0",
+ "platform": "MacIntel",
+ "hardwareConcurrency": 16,
"maxTouchPoints": 0
},
"screen": {
- "width": 736,
- "height": 414,
+ "width": 2560,
+ "height": 1440,
"colorDepth": 30,
- "availWidth": 736,
- "availHeight": 414,
- "devicePixelRatio": 2.60869565217391
+ "availWidth": 2560,
+ "availHeight": 1410,
+ "devicePixelRatio": 1
},
"webgl": {
"unmaskedVendor": "Apple",
@@ -703,26 +703,6 @@
"Zuzana:cs-CZ:local"
]
},
- {
- "navigator": {
- "userAgent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:150.0) Gecko/20100101 Firefox/150.0",
- "platform": "MacIntel",
- "hardwareConcurrency": 8,
- "maxTouchPoints": 0
- },
- "screen": {
- "width": 2056,
- "height": 1329,
- "colorDepth": 30,
- "availWidth": 2056,
- "availHeight": 1253,
- "devicePixelRatio": 2
- },
- "webgl": {
- "unmaskedVendor": "Apple",
- "unmaskedRenderer": "Apple M1, or similar"
- }
- },
{
"navigator": {
"userAgent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:150.0) Gecko/20100101 Firefox/150.0",
@@ -731,12 +711,12 @@
"maxTouchPoints": 0
},
"screen": {
- "width": 2560,
- "height": 1440,
+ "width": 3360,
+ "height": 1890,
"colorDepth": 30,
- "availWidth": 2560,
- "availHeight": 1410,
- "devicePixelRatio": 1
+ "availWidth": 3360,
+ "availHeight": 1865,
+ "devicePixelRatio": 2
},
"webgl": {
"unmaskedVendor": "Apple",
@@ -745,13 +725,10 @@
"speechVoices": [
"Albert:en-US:local",
"Alice:it-IT:local",
- "Soumya:kn-IN:local",
"Alva:sv-SE:local",
- "Aman:en-IN:local",
"Amélie:fr-CA:local",
"Amira:ms-MY:local",
"Anna:de-DE:local",
- "Aru:kk-KZ:local",
"Bad News:en-US:local",
"Bahh:en-US:local",
"Bells:en-US:local",
@@ -793,7 +770,6 @@
"Flo (Chinese (China mainland)):zh-CN:local",
"Flo (Chinese (Taiwan)):zh-TW:local",
"Fred:en-US:local",
- "Geeta:te-IN:local",
"Good News:en-US:local",
"Grandma (German (Germany)):de-DE:local",
"Grandma (English (UK)):en-GB:local",
@@ -847,10 +823,8 @@
"Mónica:es-ES:local",
"Montse:ca-ES:local",
"Nora:nb-NO:local",
- "Ona:lt-LT:local",
"Organ:en-US:local",
"Paulina:es-MX:local",
- "Piya:bn-IN:local",
"Superstar:en-US:local",
"Ralph:en-US:local",
"Reed (German (Germany)):de-DE:local",
@@ -913,7 +887,6 @@
"Shelley (Chinese (China mainland)):zh-CN:local",
"Shelley (Chinese (Taiwan)):zh-TW:local",
"Sinji:zh-HK:local",
- "Tara:en-IN:local",
"Tessa:en-ZA:local",
"Thomas:fr-FR:local",
"Tina:sl-SI:local",
@@ -929,76 +902,6 @@
"Zuzana:cs-CZ:local"
]
},
- {
- "navigator": {
- "userAgent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:149.0) Gecko/20100101 Firefox/149.0",
- "platform": "MacIntel",
- "hardwareConcurrency": 2,
- "maxTouchPoints": 0
- },
- "screen": {
- "width": 1440,
- "height": 900,
- "colorDepth": 30,
- "availWidth": 1440,
- "availHeight": 900,
- "devicePixelRatio": 1
- },
- "webgl": {
- "unmaskedVendor": "Intel Inc.",
- "unmaskedRenderer": "Intel(R) HD Graphics 400, or similar"
- },
- "speechVoices": [
- "Alex:en-US:local",
- "Alice:it-IT:local",
- "Alva:sv-SE:local",
- "Amelie:fr-CA:local",
- "Anna:de-DE:local",
- "Carmit:he-IL:local",
- "Damayanti:id-ID:local",
- "Daniel:en-GB:local",
- "Diego:es-AR:local",
- "Ellen:nl-BE:local",
- "Fiona:en-scotland:local",
- "Fred:en-US:local",
- "Ioana:ro-RO:local",
- "Joana:pt-PT:local",
- "Jorge:es-ES:local",
- "Juan:es-MX:local",
- "Kanya:th-TH:local",
- "Karen:en-AU:local",
- "Kyoko:ja-JP:local",
- "Laura:sk-SK:local",
- "Lekha:hi-IN:local",
- "Luca:it-IT:local",
- "Luciana:pt-BR:local",
- "Maged:ar-SA:local",
- "Mariska:hu-HU:local",
- "Mei-Jia:zh-TW:local",
- "Melina:el-GR:local",
- "Milena:ru-RU:local",
- "Moira:en-IE:local",
- "Monica:es-ES:local",
- "Nora:nb-NO:local",
- "Paulina:es-MX:local",
- "Rishi:en-IN:local",
- "Samantha:en-US:local",
- "Sara:da-DK:local",
- "Satu:fi-FI:local",
- "Sin-ji:zh-HK:local",
- "Tessa:en-ZA:local",
- "Thomas:fr-FR:local",
- "Ting-Ting:zh-CN:local",
- "Veena:en-IN:local",
- "Victoria:en-US:local",
- "Xander:nl-NL:local",
- "Yelda:tr-TR:local",
- "Yuna:ko-KR:local",
- "Yuri:ru-RU:local",
- "Zosia:pl-PL:local",
- "Zuzana:cs-CZ:local"
- ]
- },
{
"navigator": {
"userAgent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:150.0) Gecko/20100101 Firefox/150.0",
@@ -1007,11 +910,11 @@
"maxTouchPoints": 0
},
"screen": {
- "width": 3360,
- "height": 1890,
+ "width": 1728,
+ "height": 1117,
"colorDepth": 30,
- "availWidth": 3360,
- "availHeight": 1865,
+ "availWidth": 1728,
+ "availHeight": 1010,
"devicePixelRatio": 2
},
"webgl": {
@@ -1021,10 +924,13 @@
"speechVoices": [
"Albert:en-US:local",
"Alice:it-IT:local",
+ "Soumya:kn-IN:local",
"Alva:sv-SE:local",
+ "Aman:en-IN:local",
"Amélie:fr-CA:local",
"Amira:ms-MY:local",
"Anna:de-DE:local",
+ "Aru:kk-KZ:local",
"Bad News:en-US:local",
"Bahh:en-US:local",
"Bells:en-US:local",
@@ -1066,6 +972,7 @@
"Flo (Chinese (China mainland)):zh-CN:local",
"Flo (Chinese (Taiwan)):zh-TW:local",
"Fred:en-US:local",
+ "Geeta:te-IN:local",
"Good News:en-US:local",
"Grandma (German (Germany)):de-DE:local",
"Grandma (English (UK)):en-GB:local",
@@ -1119,8 +1026,10 @@
"Mónica:es-ES:local",
"Montse:ca-ES:local",
"Nora:nb-NO:local",
+ "Ona:lt-LT:local",
"Organ:en-US:local",
"Paulina:es-MX:local",
+ "Piya:bn-IN:local",
"Superstar:en-US:local",
"Ralph:en-US:local",
"Reed (German (Germany)):de-DE:local",
@@ -1183,6 +1092,7 @@
"Shelley (Chinese (China mainland)):zh-CN:local",
"Shelley (Chinese (Taiwan)):zh-TW:local",
"Sinji:zh-HK:local",
+ "Tara:en-IN:local",
"Tessa:en-ZA:local",
"Thomas:fr-FR:local",
"Tina:sl-SI:local",
@@ -1202,16 +1112,16 @@
"navigator": {
"userAgent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:150.0) Gecko/20100101 Firefox/150.0",
"platform": "MacIntel",
- "hardwareConcurrency": 16,
+ "hardwareConcurrency": 10,
"maxTouchPoints": 0
},
"screen": {
- "width": 1728,
- "height": 1117,
+ "width": 1920,
+ "height": 1200,
"colorDepth": 30,
- "availWidth": 1728,
- "availHeight": 1010,
- "devicePixelRatio": 2
+ "availWidth": 1920,
+ "availHeight": 1170,
+ "devicePixelRatio": 1
},
"webgl": {
"unmaskedVendor": "Apple",
@@ -1408,28 +1318,31 @@
"navigator": {
"userAgent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:150.0) Gecko/20100101 Firefox/150.0",
"platform": "MacIntel",
- "hardwareConcurrency": 2,
+ "hardwareConcurrency": 10,
"maxTouchPoints": 0
},
"screen": {
- "width": 2560,
- "height": 1440,
- "colorDepth": 24,
- "availWidth": 2560,
- "availHeight": 1440,
+ "width": 2048,
+ "height": 1152,
+ "colorDepth": 30,
+ "availWidth": 2048,
+ "availHeight": 1122,
"devicePixelRatio": 2
},
"webgl": {
- "unmaskedVendor": "ATI Technologies Inc.",
- "unmaskedRenderer": "Radeon R9 200 Series, or similar"
+ "unmaskedVendor": "Apple",
+ "unmaskedRenderer": "Apple M1, or similar"
},
"speechVoices": [
"Albert:en-US:local",
"Alice:it-IT:local",
+ "Soumya:kn-IN:local",
"Alva:sv-SE:local",
+ "Aman:en-IN:local",
"Amélie:fr-CA:local",
"Amira:ms-MY:local",
"Anna:de-DE:local",
+ "Aru:kk-KZ:local",
"Bad News:en-US:local",
"Bahh:en-US:local",
"Bells:en-US:local",
@@ -1471,6 +1384,7 @@
"Flo (Chinese (China mainland)):zh-CN:local",
"Flo (Chinese (Taiwan)):zh-TW:local",
"Fred:en-US:local",
+ "Geeta:te-IN:local",
"Good News:en-US:local",
"Grandma (German (Germany)):de-DE:local",
"Grandma (English (UK)):en-GB:local",
@@ -1524,8 +1438,10 @@
"Mónica:es-ES:local",
"Montse:ca-ES:local",
"Nora:nb-NO:local",
+ "Ona:lt-LT:local",
"Organ:en-US:local",
"Paulina:es-MX:local",
+ "Piya:bn-IN:local",
"Superstar:en-US:local",
"Ralph:en-US:local",
"Reed (German (Germany)):de-DE:local",
@@ -1588,6 +1504,7 @@
"Shelley (Chinese (China mainland)):zh-CN:local",
"Shelley (Chinese (Taiwan)):zh-TW:local",
"Sinji:zh-HK:local",
+ "Tara:en-IN:local",
"Tessa:en-ZA:local",
"Thomas:fr-FR:local",
"Tina:sl-SI:local",
@@ -1607,29 +1524,31 @@
"navigator": {
"userAgent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:150.0) Gecko/20100101 Firefox/150.0",
"platform": "MacIntel",
- "hardwareConcurrency": 16,
+ "hardwareConcurrency": 8,
"maxTouchPoints": 0
},
"screen": {
- "width": 1344,
- "height": 840,
+ "width": 3440,
+ "height": 1440,
"colorDepth": 30,
- "availWidth": 1344,
- "availHeight": 764,
- "devicePixelRatio": 2
+ "availWidth": 3440,
+ "availHeight": 1364,
+ "devicePixelRatio": 1
},
"webgl": {
- "unmaskedVendor": "Intel Inc.",
- "unmaskedRenderer": "Intel(R) HD Graphics 400, or similar"
+ "unmaskedVendor": "Apple",
+ "unmaskedRenderer": "Apple M1, or similar"
},
"speechVoices": [
"Albert:en-US:local",
"Alice:it-IT:local",
"Soumya:kn-IN:local",
"Alva:sv-SE:local",
+ "Aman:en-IN:local",
"Amélie:fr-CA:local",
"Amira:ms-MY:local",
"Anna:de-DE:local",
+ "Aru:kk-KZ:local",
"Bad News:en-US:local",
"Bahh:en-US:local",
"Bells:en-US:local",
@@ -1725,6 +1644,7 @@
"Mónica:es-ES:local",
"Montse:ca-ES:local",
"Nora:nb-NO:local",
+ "Ona:lt-LT:local",
"Organ:en-US:local",
"Paulina:es-MX:local",
"Piya:bn-IN:local",
@@ -1790,6 +1710,7 @@
"Shelley (Chinese (China mainland)):zh-CN:local",
"Shelley (Chinese (Taiwan)):zh-TW:local",
"Sinji:zh-HK:local",
+ "Tara:en-IN:local",
"Tessa:en-ZA:local",
"Thomas:fr-FR:local",
"Tina:sl-SI:local",
@@ -1809,16 +1730,16 @@
"navigator": {
"userAgent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:150.0) Gecko/20100101 Firefox/150.0",
"platform": "MacIntel",
- "hardwareConcurrency": 2,
+ "hardwareConcurrency": 10,
"maxTouchPoints": 0
},
"screen": {
- "width": 1440,
- "height": 900,
- "colorDepth": 24,
- "availWidth": 1440,
- "availHeight": 900,
- "devicePixelRatio": 2
+ "width": 1360,
+ "height": 768,
+ "colorDepth": 30,
+ "availWidth": 1360,
+ "availHeight": 676,
+ "devicePixelRatio": 1
},
"webgl": {
"unmaskedVendor": "Apple",
@@ -1827,13 +1748,10 @@
"speechVoices": [
"Albert:en-US:local",
"Alice:it-IT:local",
- "Soumya:kn-IN:local",
"Alva:sv-SE:local",
- "Aman:en-IN:local",
"Amélie:fr-CA:local",
"Amira:ms-MY:local",
"Anna:de-DE:local",
- "Aru:kk-KZ:local",
"Bad News:en-US:local",
"Bahh:en-US:local",
"Bells:en-US:local",
@@ -1854,11 +1772,7 @@
"Eddy (French (Canada)):fr-CA:local",
"Eddy (French (France)):fr-FR:local",
"Eddy (Italian (Italy)):it-IT:local",
- "Eddy (Japanese (Japan)):ja-JP:local",
- "Eddy (Korean (South Korea)):ko-KR:local",
"Eddy (Portuguese (Brazil)):pt-BR:local",
- "Eddy (Chinese (China mainland)):zh-CN:local",
- "Eddy (Chinese (Taiwan)):zh-TW:local",
"Ellen:nl-BE:local",
"Flo (German (Germany)):de-DE:local",
"Flo (English (UK)):en-GB:local",
@@ -1869,13 +1783,8 @@
"Flo (French (Canada)):fr-CA:local",
"Flo (French (France)):fr-FR:local",
"Flo (Italian (Italy)):it-IT:local",
- "Flo (Japanese (Japan)):ja-JP:local",
- "Flo (Korean (South Korea)):ko-KR:local",
"Flo (Portuguese (Brazil)):pt-BR:local",
- "Flo (Chinese (China mainland)):zh-CN:local",
- "Flo (Chinese (Taiwan)):zh-TW:local",
"Fred:en-US:local",
- "Geeta:te-IN:local",
"Good News:en-US:local",
"Grandma (German (Germany)):de-DE:local",
"Grandma (English (UK)):en-GB:local",
@@ -1886,11 +1795,7 @@
"Grandma (French (Canada)):fr-CA:local",
"Grandma (French (France)):fr-FR:local",
"Grandma (Italian (Italy)):it-IT:local",
- "Grandma (Japanese (Japan)):ja-JP:local",
- "Grandma (Korean (South Korea)):ko-KR:local",
"Grandma (Portuguese (Brazil)):pt-BR:local",
- "Grandma (Chinese (China mainland)):zh-CN:local",
- "Grandma (Chinese (Taiwan)):zh-TW:local",
"Grandpa (German (Germany)):de-DE:local",
"Grandpa (English (UK)):en-GB:local",
"Grandpa (English (US)):en-US:local",
@@ -1900,11 +1805,7 @@
"Grandpa (French (Canada)):fr-CA:local",
"Grandpa (French (France)):fr-FR:local",
"Grandpa (Italian (Italy)):it-IT:local",
- "Grandpa (Japanese (Japan)):ja-JP:local",
- "Grandpa (Korean (South Korea)):ko-KR:local",
"Grandpa (Portuguese (Brazil)):pt-BR:local",
- "Grandpa (Chinese (China mainland)):zh-CN:local",
- "Grandpa (Chinese (Taiwan)):zh-TW:local",
"Jester:en-US:local",
"Ioana:ro-RO:local",
"Jacques:fr-FR:local",
@@ -1929,10 +1830,8 @@
"Mónica:es-ES:local",
"Montse:ca-ES:local",
"Nora:nb-NO:local",
- "Ona:lt-LT:local",
"Organ:en-US:local",
"Paulina:es-MX:local",
- "Piya:bn-IN:local",
"Superstar:en-US:local",
"Ralph:en-US:local",
"Reed (German (Germany)):de-DE:local",
@@ -1943,11 +1842,7 @@
"Reed (Finnish (Finland)):fi-FI:local",
"Reed (French (Canada)):fr-CA:local",
"Reed (Italian (Italy)):it-IT:local",
- "Reed (Japanese (Japan)):ja-JP:local",
- "Reed (Korean (South Korea)):ko-KR:local",
"Reed (Portuguese (Brazil)):pt-BR:local",
- "Reed (Chinese (China mainland)):zh-CN:local",
- "Reed (Chinese (Taiwan)):zh-TW:local",
"Rishi:en-IN:local",
"Rocko (German (Germany)):de-DE:local",
"Rocko (English (UK)):en-GB:local",
@@ -1958,11 +1853,7 @@
"Rocko (French (Canada)):fr-CA:local",
"Rocko (French (France)):fr-FR:local",
"Rocko (Italian (Italy)):it-IT:local",
- "Rocko (Japanese (Japan)):ja-JP:local",
- "Rocko (Korean (South Korea)):ko-KR:local",
"Rocko (Portuguese (Brazil)):pt-BR:local",
- "Rocko (Chinese (China mainland)):zh-CN:local",
- "Rocko (Chinese (Taiwan)):zh-TW:local",
"Samantha:en-US:local",
"Sandy (German (Germany)):de-DE:local",
"Sandy (English (UK)):en-GB:local",
@@ -1973,11 +1864,7 @@
"Sandy (French (Canada)):fr-CA:local",
"Sandy (French (France)):fr-FR:local",
"Sandy (Italian (Italy)):it-IT:local",
- "Sandy (Japanese (Japan)):ja-JP:local",
- "Sandy (Korean (South Korea)):ko-KR:local",
"Sandy (Portuguese (Brazil)):pt-BR:local",
- "Sandy (Chinese (China mainland)):zh-CN:local",
- "Sandy (Chinese (Taiwan)):zh-TW:local",
"Sara:da-DK:local",
"Satu:fi-FI:local",
"Shelley (German (Germany)):de-DE:local",
@@ -1989,19 +1876,12 @@
"Shelley (French (Canada)):fr-CA:local",
"Shelley (French (France)):fr-FR:local",
"Shelley (Italian (Italy)):it-IT:local",
- "Shelley (Japanese (Japan)):ja-JP:local",
- "Shelley (Korean (South Korea)):ko-KR:local",
"Shelley (Portuguese (Brazil)):pt-BR:local",
- "Shelley (Chinese (China mainland)):zh-CN:local",
- "Shelley (Chinese (Taiwan)):zh-TW:local",
"Sinji:zh-HK:local",
- "Tara:en-IN:local",
"Tessa:en-ZA:local",
"Thomas:fr-FR:local",
- "Tina:sl-SI:local",
"Tingting:zh-CN:local",
"Trinoids:en-US:local",
- "Vani:ta-IN:local",
"Whisper:en-US:local",
"Xander:nl-NL:local",
"Yelda:tr-TR:local",
@@ -2013,18 +1893,18 @@
},
{
"navigator": {
- "userAgent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:150.0) Gecko/20100101 Firefox/150.0",
+ "userAgent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:149.0) Gecko/20100101 Firefox/149.0",
"platform": "MacIntel",
- "hardwareConcurrency": 10,
+ "hardwareConcurrency": 8,
"maxTouchPoints": 0
},
"screen": {
- "width": 1920,
- "height": 1200,
+ "width": 1710,
+ "height": 1107,
"colorDepth": 30,
- "availWidth": 1920,
- "availHeight": 1170,
- "devicePixelRatio": 1
+ "availWidth": 1710,
+ "availHeight": 1031,
+ "devicePixelRatio": 2
},
"webgl": {
"unmaskedVendor": "Apple",
@@ -2217,6 +2097,26 @@
"Zuzana:cs-CZ:local"
]
},
+ {
+ "navigator": {
+ "userAgent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:150.0) Gecko/20100101 Firefox/150.0",
+ "platform": "MacIntel",
+ "hardwareConcurrency": 2,
+ "maxTouchPoints": 0
+ },
+ "screen": {
+ "width": 1280,
+ "height": 800,
+ "colorDepth": 30,
+ "availWidth": 1280,
+ "availHeight": 715,
+ "devicePixelRatio": 1
+ },
+ "webgl": {
+ "unmaskedVendor": "Intel Inc.",
+ "unmaskedRenderer": "Intel(R) HD Graphics, or similar"
+ }
+ },
{
"navigator": {
"userAgent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:150.0) Gecko/20100101 Firefox/150.0",
@@ -2225,11 +2125,11 @@
"maxTouchPoints": 0
},
"screen": {
- "width": 2048,
- "height": 1152,
+ "width": 1710,
+ "height": 1107,
"colorDepth": 30,
- "availWidth": 2048,
- "availHeight": 1122,
+ "availWidth": 1710,
+ "availHeight": 1074,
"devicePixelRatio": 2
},
"webgl": {
@@ -2239,13 +2139,10 @@
"speechVoices": [
"Albert:en-US:local",
"Alice:it-IT:local",
- "Soumya:kn-IN:local",
"Alva:sv-SE:local",
- "Aman:en-IN:local",
"Amélie:fr-CA:local",
"Amira:ms-MY:local",
"Anna:de-DE:local",
- "Aru:kk-KZ:local",
"Bad News:en-US:local",
"Bahh:en-US:local",
"Bells:en-US:local",
@@ -2287,7 +2184,6 @@
"Flo (Chinese (China mainland)):zh-CN:local",
"Flo (Chinese (Taiwan)):zh-TW:local",
"Fred:en-US:local",
- "Geeta:te-IN:local",
"Good News:en-US:local",
"Grandma (German (Germany)):de-DE:local",
"Grandma (English (UK)):en-GB:local",
@@ -2341,10 +2237,8 @@
"Mónica:es-ES:local",
"Montse:ca-ES:local",
"Nora:nb-NO:local",
- "Ona:lt-LT:local",
"Organ:en-US:local",
"Paulina:es-MX:local",
- "Piya:bn-IN:local",
"Superstar:en-US:local",
"Ralph:en-US:local",
"Reed (German (Germany)):de-DE:local",
@@ -2407,13 +2301,11 @@
"Shelley (Chinese (China mainland)):zh-CN:local",
"Shelley (Chinese (Taiwan)):zh-TW:local",
"Sinji:zh-HK:local",
- "Tara:en-IN:local",
"Tessa:en-ZA:local",
"Thomas:fr-FR:local",
"Tina:sl-SI:local",
"Tingting:zh-CN:local",
"Trinoids:en-US:local",
- "Vani:ta-IN:local",
"Whisper:en-US:local",
"Xander:nl-NL:local",
"Yelda:tr-TR:local",
@@ -2431,12 +2323,12 @@
"maxTouchPoints": 0
},
"screen": {
- "width": 3440,
- "height": 1440,
+ "width": 1280,
+ "height": 800,
"colorDepth": 30,
- "availWidth": 3440,
- "availHeight": 1364,
- "devicePixelRatio": 1
+ "availWidth": 1280,
+ "availHeight": 730,
+ "devicePixelRatio": 2
},
"webgl": {
"unmaskedVendor": "Apple",
@@ -2445,13 +2337,10 @@
"speechVoices": [
"Albert:en-US:local",
"Alice:it-IT:local",
- "Soumya:kn-IN:local",
"Alva:sv-SE:local",
- "Aman:en-IN:local",
"Amélie:fr-CA:local",
"Amira:ms-MY:local",
"Anna:de-DE:local",
- "Aru:kk-KZ:local",
"Bad News:en-US:local",
"Bahh:en-US:local",
"Bells:en-US:local",
@@ -2472,11 +2361,7 @@
"Eddy (French (Canada)):fr-CA:local",
"Eddy (French (France)):fr-FR:local",
"Eddy (Italian (Italy)):it-IT:local",
- "Eddy (Japanese (Japan)):ja-JP:local",
- "Eddy (Korean (South Korea)):ko-KR:local",
"Eddy (Portuguese (Brazil)):pt-BR:local",
- "Eddy (Chinese (China mainland)):zh-CN:local",
- "Eddy (Chinese (Taiwan)):zh-TW:local",
"Ellen:nl-BE:local",
"Flo (German (Germany)):de-DE:local",
"Flo (English (UK)):en-GB:local",
@@ -2487,13 +2372,8 @@
"Flo (French (Canada)):fr-CA:local",
"Flo (French (France)):fr-FR:local",
"Flo (Italian (Italy)):it-IT:local",
- "Flo (Japanese (Japan)):ja-JP:local",
- "Flo (Korean (South Korea)):ko-KR:local",
"Flo (Portuguese (Brazil)):pt-BR:local",
- "Flo (Chinese (China mainland)):zh-CN:local",
- "Flo (Chinese (Taiwan)):zh-TW:local",
"Fred:en-US:local",
- "Geeta:te-IN:local",
"Good News:en-US:local",
"Grandma (German (Germany)):de-DE:local",
"Grandma (English (UK)):en-GB:local",
@@ -2504,11 +2384,7 @@
"Grandma (French (Canada)):fr-CA:local",
"Grandma (French (France)):fr-FR:local",
"Grandma (Italian (Italy)):it-IT:local",
- "Grandma (Japanese (Japan)):ja-JP:local",
- "Grandma (Korean (South Korea)):ko-KR:local",
"Grandma (Portuguese (Brazil)):pt-BR:local",
- "Grandma (Chinese (China mainland)):zh-CN:local",
- "Grandma (Chinese (Taiwan)):zh-TW:local",
"Grandpa (German (Germany)):de-DE:local",
"Grandpa (English (UK)):en-GB:local",
"Grandpa (English (US)):en-US:local",
@@ -2518,11 +2394,7 @@
"Grandpa (French (Canada)):fr-CA:local",
"Grandpa (French (France)):fr-FR:local",
"Grandpa (Italian (Italy)):it-IT:local",
- "Grandpa (Japanese (Japan)):ja-JP:local",
- "Grandpa (Korean (South Korea)):ko-KR:local",
"Grandpa (Portuguese (Brazil)):pt-BR:local",
- "Grandpa (Chinese (China mainland)):zh-CN:local",
- "Grandpa (Chinese (Taiwan)):zh-TW:local",
"Jester:en-US:local",
"Ioana:ro-RO:local",
"Jacques:fr-FR:local",
@@ -2547,10 +2419,8 @@
"Mónica:es-ES:local",
"Montse:ca-ES:local",
"Nora:nb-NO:local",
- "Ona:lt-LT:local",
"Organ:en-US:local",
"Paulina:es-MX:local",
- "Piya:bn-IN:local",
"Superstar:en-US:local",
"Ralph:en-US:local",
"Reed (German (Germany)):de-DE:local",
@@ -2561,11 +2431,7 @@
"Reed (Finnish (Finland)):fi-FI:local",
"Reed (French (Canada)):fr-CA:local",
"Reed (Italian (Italy)):it-IT:local",
- "Reed (Japanese (Japan)):ja-JP:local",
- "Reed (Korean (South Korea)):ko-KR:local",
"Reed (Portuguese (Brazil)):pt-BR:local",
- "Reed (Chinese (China mainland)):zh-CN:local",
- "Reed (Chinese (Taiwan)):zh-TW:local",
"Rishi:en-IN:local",
"Rocko (German (Germany)):de-DE:local",
"Rocko (English (UK)):en-GB:local",
@@ -2576,11 +2442,7 @@
"Rocko (French (Canada)):fr-CA:local",
"Rocko (French (France)):fr-FR:local",
"Rocko (Italian (Italy)):it-IT:local",
- "Rocko (Japanese (Japan)):ja-JP:local",
- "Rocko (Korean (South Korea)):ko-KR:local",
"Rocko (Portuguese (Brazil)):pt-BR:local",
- "Rocko (Chinese (China mainland)):zh-CN:local",
- "Rocko (Chinese (Taiwan)):zh-TW:local",
"Samantha:en-US:local",
"Sandy (German (Germany)):de-DE:local",
"Sandy (English (UK)):en-GB:local",
@@ -2591,11 +2453,7 @@
"Sandy (French (Canada)):fr-CA:local",
"Sandy (French (France)):fr-FR:local",
"Sandy (Italian (Italy)):it-IT:local",
- "Sandy (Japanese (Japan)):ja-JP:local",
- "Sandy (Korean (South Korea)):ko-KR:local",
"Sandy (Portuguese (Brazil)):pt-BR:local",
- "Sandy (Chinese (China mainland)):zh-CN:local",
- "Sandy (Chinese (Taiwan)):zh-TW:local",
"Sara:da-DK:local",
"Satu:fi-FI:local",
"Shelley (German (Germany)):de-DE:local",
@@ -2607,19 +2465,12 @@
"Shelley (French (Canada)):fr-CA:local",
"Shelley (French (France)):fr-FR:local",
"Shelley (Italian (Italy)):it-IT:local",
- "Shelley (Japanese (Japan)):ja-JP:local",
- "Shelley (Korean (South Korea)):ko-KR:local",
"Shelley (Portuguese (Brazil)):pt-BR:local",
- "Shelley (Chinese (China mainland)):zh-CN:local",
- "Shelley (Chinese (Taiwan)):zh-TW:local",
"Sinji:zh-HK:local",
- "Tara:en-IN:local",
"Tessa:en-ZA:local",
"Thomas:fr-FR:local",
- "Tina:sl-SI:local",
"Tingting:zh-CN:local",
"Trinoids:en-US:local",
- "Vani:ta-IN:local",
"Whisper:en-US:local",
"Xander:nl-NL:local",
"Yelda:tr-TR:local",
@@ -2633,24 +2484,25 @@
"navigator": {
"userAgent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:150.0) Gecko/20100101 Firefox/150.0",
"platform": "MacIntel",
- "hardwareConcurrency": 10,
+ "hardwareConcurrency": 8,
"maxTouchPoints": 0
},
"screen": {
- "width": 1360,
- "height": 768,
+ "width": 1440,
+ "height": 900,
"colorDepth": 30,
- "availWidth": 1360,
- "availHeight": 676,
- "devicePixelRatio": 1
+ "availWidth": 1440,
+ "availHeight": 870,
+ "devicePixelRatio": 2
},
"webgl": {
- "unmaskedVendor": "Apple",
- "unmaskedRenderer": "Apple M1, or similar"
+ "unmaskedVendor": "Intel Inc.",
+ "unmaskedRenderer": "Intel(R) HD Graphics, or similar"
},
"speechVoices": [
"Albert:en-US:local",
"Alice:it-IT:local",
+ "Soumya:kn-IN:local",
"Alva:sv-SE:local",
"Amélie:fr-CA:local",
"Amira:ms-MY:local",
@@ -2675,7 +2527,11 @@
"Eddy (French (Canada)):fr-CA:local",
"Eddy (French (France)):fr-FR:local",
"Eddy (Italian (Italy)):it-IT:local",
+ "Eddy (Japanese (Japan)):ja-JP:local",
+ "Eddy (Korean (South Korea)):ko-KR:local",
"Eddy (Portuguese (Brazil)):pt-BR:local",
+ "Eddy (Chinese (China mainland)):zh-CN:local",
+ "Eddy (Chinese (Taiwan)):zh-TW:local",
"Ellen:nl-BE:local",
"Flo (German (Germany)):de-DE:local",
"Flo (English (UK)):en-GB:local",
@@ -2686,8 +2542,13 @@
"Flo (French (Canada)):fr-CA:local",
"Flo (French (France)):fr-FR:local",
"Flo (Italian (Italy)):it-IT:local",
+ "Flo (Japanese (Japan)):ja-JP:local",
+ "Flo (Korean (South Korea)):ko-KR:local",
"Flo (Portuguese (Brazil)):pt-BR:local",
+ "Flo (Chinese (China mainland)):zh-CN:local",
+ "Flo (Chinese (Taiwan)):zh-TW:local",
"Fred:en-US:local",
+ "Geeta:te-IN:local",
"Good News:en-US:local",
"Grandma (German (Germany)):de-DE:local",
"Grandma (English (UK)):en-GB:local",
@@ -2698,7 +2559,11 @@
"Grandma (French (Canada)):fr-CA:local",
"Grandma (French (France)):fr-FR:local",
"Grandma (Italian (Italy)):it-IT:local",
+ "Grandma (Japanese (Japan)):ja-JP:local",
+ "Grandma (Korean (South Korea)):ko-KR:local",
"Grandma (Portuguese (Brazil)):pt-BR:local",
+ "Grandma (Chinese (China mainland)):zh-CN:local",
+ "Grandma (Chinese (Taiwan)):zh-TW:local",
"Grandpa (German (Germany)):de-DE:local",
"Grandpa (English (UK)):en-GB:local",
"Grandpa (English (US)):en-US:local",
@@ -2708,7 +2573,11 @@
"Grandpa (French (Canada)):fr-CA:local",
"Grandpa (French (France)):fr-FR:local",
"Grandpa (Italian (Italy)):it-IT:local",
+ "Grandpa (Japanese (Japan)):ja-JP:local",
+ "Grandpa (Korean (South Korea)):ko-KR:local",
"Grandpa (Portuguese (Brazil)):pt-BR:local",
+ "Grandpa (Chinese (China mainland)):zh-CN:local",
+ "Grandpa (Chinese (Taiwan)):zh-TW:local",
"Jester:en-US:local",
"Ioana:ro-RO:local",
"Jacques:fr-FR:local",
@@ -2735,6 +2604,7 @@
"Nora:nb-NO:local",
"Organ:en-US:local",
"Paulina:es-MX:local",
+ "Piya:bn-IN:local",
"Superstar:en-US:local",
"Ralph:en-US:local",
"Reed (German (Germany)):de-DE:local",
@@ -2745,7 +2615,11 @@
"Reed (Finnish (Finland)):fi-FI:local",
"Reed (French (Canada)):fr-CA:local",
"Reed (Italian (Italy)):it-IT:local",
+ "Reed (Japanese (Japan)):ja-JP:local",
+ "Reed (Korean (South Korea)):ko-KR:local",
"Reed (Portuguese (Brazil)):pt-BR:local",
+ "Reed (Chinese (China mainland)):zh-CN:local",
+ "Reed (Chinese (Taiwan)):zh-TW:local",
"Rishi:en-IN:local",
"Rocko (German (Germany)):de-DE:local",
"Rocko (English (UK)):en-GB:local",
@@ -2756,7 +2630,11 @@
"Rocko (French (Canada)):fr-CA:local",
"Rocko (French (France)):fr-FR:local",
"Rocko (Italian (Italy)):it-IT:local",
+ "Rocko (Japanese (Japan)):ja-JP:local",
+ "Rocko (Korean (South Korea)):ko-KR:local",
"Rocko (Portuguese (Brazil)):pt-BR:local",
+ "Rocko (Chinese (China mainland)):zh-CN:local",
+ "Rocko (Chinese (Taiwan)):zh-TW:local",
"Samantha:en-US:local",
"Sandy (German (Germany)):de-DE:local",
"Sandy (English (UK)):en-GB:local",
@@ -2767,7 +2645,11 @@
"Sandy (French (Canada)):fr-CA:local",
"Sandy (French (France)):fr-FR:local",
"Sandy (Italian (Italy)):it-IT:local",
+ "Sandy (Japanese (Japan)):ja-JP:local",
+ "Sandy (Korean (South Korea)):ko-KR:local",
"Sandy (Portuguese (Brazil)):pt-BR:local",
+ "Sandy (Chinese (China mainland)):zh-CN:local",
+ "Sandy (Chinese (Taiwan)):zh-TW:local",
"Sara:da-DK:local",
"Satu:fi-FI:local",
"Shelley (German (Germany)):de-DE:local",
@@ -2779,12 +2661,18 @@
"Shelley (French (Canada)):fr-CA:local",
"Shelley (French (France)):fr-FR:local",
"Shelley (Italian (Italy)):it-IT:local",
+ "Shelley (Japanese (Japan)):ja-JP:local",
+ "Shelley (Korean (South Korea)):ko-KR:local",
"Shelley (Portuguese (Brazil)):pt-BR:local",
+ "Shelley (Chinese (China mainland)):zh-CN:local",
+ "Shelley (Chinese (Taiwan)):zh-TW:local",
"Sinji:zh-HK:local",
"Tessa:en-ZA:local",
"Thomas:fr-FR:local",
+ "Tina:sl-SI:local",
"Tingting:zh-CN:local",
"Trinoids:en-US:local",
+ "Vani:ta-IN:local",
"Whisper:en-US:local",
"Xander:nl-NL:local",
"Yelda:tr-TR:local",
@@ -2798,31 +2686,28 @@
"navigator": {
"userAgent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:150.0) Gecko/20100101 Firefox/150.0",
"platform": "MacIntel",
- "hardwareConcurrency": 18,
+ "hardwareConcurrency": 6,
"maxTouchPoints": 0
},
"screen": {
- "width": 3840,
- "height": 2160,
+ "width": 1792,
+ "height": 1120,
"colorDepth": 30,
- "availWidth": 3840,
- "availHeight": 2052,
- "devicePixelRatio": 1
+ "availWidth": 1792,
+ "availHeight": 1010,
+ "devicePixelRatio": 2
},
"webgl": {
- "unmaskedVendor": "Apple",
- "unmaskedRenderer": "Apple M1, or similar"
+ "unmaskedVendor": "ATI Technologies Inc.",
+ "unmaskedRenderer": "Radeon HD 3200 Graphics, or similar"
},
"speechVoices": [
"Albert:en-US:local",
"Alice:it-IT:local",
- "Soumya:kn-IN:local",
"Alva:sv-SE:local",
- "Aman:en-IN:local",
"Amélie:fr-CA:local",
"Amira:ms-MY:local",
"Anna:de-DE:local",
- "Aru:kk-KZ:local",
"Bad News:en-US:local",
"Bahh:en-US:local",
"Bells:en-US:local",
@@ -2864,7 +2749,6 @@
"Flo (Chinese (China mainland)):zh-CN:local",
"Flo (Chinese (Taiwan)):zh-TW:local",
"Fred:en-US:local",
- "Geeta:te-IN:local",
"Good News:en-US:local",
"Grandma (German (Germany)):de-DE:local",
"Grandma (English (UK)):en-GB:local",
@@ -2918,10 +2802,8 @@
"Mónica:es-ES:local",
"Montse:ca-ES:local",
"Nora:nb-NO:local",
- "Ona:lt-LT:local",
"Organ:en-US:local",
"Paulina:es-MX:local",
- "Piya:bn-IN:local",
"Superstar:en-US:local",
"Ralph:en-US:local",
"Reed (German (Germany)):de-DE:local",
@@ -2984,7 +2866,6 @@
"Shelley (Chinese (China mainland)):zh-CN:local",
"Shelley (Chinese (Taiwan)):zh-TW:local",
"Sinji:zh-HK:local",
- "Tara:en-IN:local",
"Tessa:en-ZA:local",
"Thomas:fr-FR:local",
"Tina:sl-SI:local",
@@ -3004,71 +2885,161 @@
"navigator": {
"userAgent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:149.0) Gecko/20100101 Firefox/149.0",
"platform": "MacIntel",
- "hardwareConcurrency": 8,
+ "hardwareConcurrency": 2,
"maxTouchPoints": 0
},
"screen": {
- "width": 1710,
- "height": 1107,
+ "width": 1280,
+ "height": 800,
"colorDepth": 30,
- "availWidth": 1710,
- "availHeight": 1031,
+ "availWidth": 1280,
+ "availHeight": 800,
"devicePixelRatio": 2
},
"webgl": {
- "unmaskedVendor": "Apple",
- "unmaskedRenderer": "Apple M1, or similar"
+ "unmaskedVendor": "Intel Inc.",
+ "unmaskedRenderer": "Intel 945GM, or similar"
},
"speechVoices": [
- "Albert:en-US:local",
+ "Alex:en-US:local",
"Alice:it-IT:local",
- "Soumya:kn-IN:local",
"Alva:sv-SE:local",
- "Aman:en-IN:local",
- "Amélie:fr-CA:local",
- "Amira:ms-MY:local",
+ "Amelie:fr-CA:local",
"Anna:de-DE:local",
- "Aru:kk-KZ:local",
- "Bad News:en-US:local",
- "Bahh:en-US:local",
- "Bells:en-US:local",
- "Boing:en-US:local",
- "Bubbles:en-US:local",
"Carmit:he-IL:local",
- "Cellos:en-US:local",
"Damayanti:id-ID:local",
"Daniel:en-GB:local",
- "Daria:bg-BG:local",
- "Wobble:en-US:local",
- "Eddy (German (Germany)):de-DE:local",
- "Eddy (English (UK)):en-GB:local",
- "Eddy (English (US)):en-US:local",
- "Eddy (Spanish (Spain)):es-ES:local",
- "Eddy (Spanish (Mexico)):es-MX:local",
- "Eddy (Finnish (Finland)):fi-FI:local",
- "Eddy (French (Canada)):fr-CA:local",
- "Eddy (French (France)):fr-FR:local",
- "Eddy (Italian (Italy)):it-IT:local",
- "Eddy (Japanese (Japan)):ja-JP:local",
- "Eddy (Korean (South Korea)):ko-KR:local",
- "Eddy (Portuguese (Brazil)):pt-BR:local",
- "Eddy (Chinese (China mainland)):zh-CN:local",
- "Eddy (Chinese (Taiwan)):zh-TW:local",
+ "Diego:es-AR:local",
"Ellen:nl-BE:local",
- "Flo (German (Germany)):de-DE:local",
- "Flo (English (UK)):en-GB:local",
- "Flo (English (US)):en-US:local",
- "Flo (Spanish (Spain)):es-ES:local",
- "Flo (Spanish (Mexico)):es-MX:local",
- "Flo (Finnish (Finland)):fi-FI:local",
- "Flo (French (Canada)):fr-CA:local",
- "Flo (French (France)):fr-FR:local",
- "Flo (Italian (Italy)):it-IT:local",
- "Flo (Japanese (Japan)):ja-JP:local",
- "Flo (Korean (South Korea)):ko-KR:local",
- "Flo (Portuguese (Brazil)):pt-BR:local",
- "Flo (Chinese (China mainland)):zh-CN:local",
- "Flo (Chinese (Taiwan)):zh-TW:local",
+ "Fiona:en-scotland:local",
+ "Fred:en-US:local",
+ "Ioana:ro-RO:local",
+ "Joana:pt-PT:local",
+ "Jorge:es-ES:local",
+ "Juan:es-MX:local",
+ "Kanya:th-TH:local",
+ "Karen:en-AU:local",
+ "Kyoko:ja-JP:local",
+ "Laura:sk-SK:local",
+ "Lekha:hi-IN:local",
+ "Luca:it-IT:local",
+ "Luciana:pt-BR:local",
+ "Maged:ar-SA:local",
+ "Mariska:hu-HU:local",
+ "Mei-Jia:zh-TW:local",
+ "Melina:el-GR:local",
+ "Milena:ru-RU:local",
+ "Moira:en-IE:local",
+ "Monica:es-ES:local",
+ "Nora:nb-NO:local",
+ "Paulina:es-MX:local",
+ "Rishi:en-IN:local",
+ "Samantha:en-US:local",
+ "Sara:da-DK:local",
+ "Satu:fi-FI:local",
+ "Sin-ji:zh-HK:local",
+ "Tessa:en-ZA:local",
+ "Thomas:fr-FR:local",
+ "Ting-Ting:zh-CN:local",
+ "Veena:en-IN:local",
+ "Victoria:en-US:local",
+ "Xander:nl-NL:local",
+ "Yelda:tr-TR:local",
+ "Yuna:ko-KR:local",
+ "Yuri:ru-RU:local",
+ "Zosia:pl-PL:local",
+ "Zuzana:cs-CZ:local"
+ ]
+ },
+ {
+ "navigator": {
+ "userAgent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:150.0) Gecko/20100101 Firefox/150.0",
+ "platform": "MacIntel",
+ "hardwareConcurrency": 10,
+ "maxTouchPoints": 0
+ },
+ "screen": {
+ "width": 1512,
+ "height": 982,
+ "colorDepth": 30,
+ "availWidth": 1512,
+ "availHeight": 893,
+ "devicePixelRatio": 2
+ },
+ "webgl": {
+ "unmaskedVendor": "Apple",
+ "unmaskedRenderer": "Apple M1, or similar"
+ }
+ },
+ {
+ "navigator": {
+ "userAgent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:150.0) Gecko/20100101 Firefox/150.0",
+ "platform": "MacIntel",
+ "hardwareConcurrency": 8,
+ "maxTouchPoints": 0
+ },
+ "screen": {
+ "width": 1470,
+ "height": 956,
+ "colorDepth": 30,
+ "availWidth": 1470,
+ "availHeight": 880,
+ "devicePixelRatio": 2
+ },
+ "webgl": {
+ "unmaskedVendor": "Apple",
+ "unmaskedRenderer": "Apple M1, or similar"
+ },
+ "speechVoices": [
+ "Albert:en-US:local",
+ "Alice:it-IT:local",
+ "Soumya:kn-IN:local",
+ "Alva:sv-SE:local",
+ "Aman:en-IN:local",
+ "Amélie:fr-CA:local",
+ "Amira:ms-MY:local",
+ "Anna:de-DE:local",
+ "Aru:kk-KZ:local",
+ "Bad News:en-US:local",
+ "Bahh:en-US:local",
+ "Bells:en-US:local",
+ "Boing:en-US:local",
+ "Bubbles:en-US:local",
+ "Carmit:he-IL:local",
+ "Cellos:en-US:local",
+ "Damayanti:id-ID:local",
+ "Daniel:en-GB:local",
+ "Daria:bg-BG:local",
+ "Wobble:en-US:local",
+ "Eddy (German (Germany)):de-DE:local",
+ "Eddy (English (UK)):en-GB:local",
+ "Eddy (English (US)):en-US:local",
+ "Eddy (Spanish (Spain)):es-ES:local",
+ "Eddy (Spanish (Mexico)):es-MX:local",
+ "Eddy (Finnish (Finland)):fi-FI:local",
+ "Eddy (French (Canada)):fr-CA:local",
+ "Eddy (French (France)):fr-FR:local",
+ "Eddy (Italian (Italy)):it-IT:local",
+ "Eddy (Japanese (Japan)):ja-JP:local",
+ "Eddy (Korean (South Korea)):ko-KR:local",
+ "Eddy (Portuguese (Brazil)):pt-BR:local",
+ "Eddy (Chinese (China mainland)):zh-CN:local",
+ "Eddy (Chinese (Taiwan)):zh-TW:local",
+ "Ellen:nl-BE:local",
+ "Flo (German (Germany)):de-DE:local",
+ "Flo (English (UK)):en-GB:local",
+ "Flo (English (US)):en-US:local",
+ "Flo (Spanish (Spain)):es-ES:local",
+ "Flo (Spanish (Mexico)):es-MX:local",
+ "Flo (Finnish (Finland)):fi-FI:local",
+ "Flo (French (Canada)):fr-CA:local",
+ "Flo (French (France)):fr-FR:local",
+ "Flo (Italian (Italy)):it-IT:local",
+ "Flo (Japanese (Japan)):ja-JP:local",
+ "Flo (Korean (South Korea)):ko-KR:local",
+ "Flo (Portuguese (Brazil)):pt-BR:local",
+ "Flo (Chinese (China mainland)):zh-CN:local",
+ "Flo (Chinese (Taiwan)):zh-TW:local",
"Fred:en-US:local",
"Geeta:te-IN:local",
"Good News:en-US:local",
@@ -3208,37 +3179,17 @@
},
{
"navigator": {
- "userAgent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:150.0) Gecko/20100101 Firefox/150.0",
- "platform": "MacIntel",
- "hardwareConcurrency": 2,
- "maxTouchPoints": 0
- },
- "screen": {
- "width": 1280,
- "height": 800,
- "colorDepth": 30,
- "availWidth": 1280,
- "availHeight": 715,
- "devicePixelRatio": 1
- },
- "webgl": {
- "unmaskedVendor": "Intel Inc.",
- "unmaskedRenderer": "Intel(R) HD Graphics, or similar"
- }
- },
- {
- "navigator": {
- "userAgent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:150.0) Gecko/20100101 Firefox/150.0",
+ "userAgent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:149.0) Gecko/20100101 Firefox/149.0",
"platform": "MacIntel",
- "hardwareConcurrency": 10,
+ "hardwareConcurrency": 8,
"maxTouchPoints": 0
},
"screen": {
- "width": 1710,
- "height": 1107,
+ "width": 1920,
+ "height": 1080,
"colorDepth": 30,
- "availWidth": 1710,
- "availHeight": 1074,
+ "availWidth": 1920,
+ "availHeight": 1080,
"devicePixelRatio": 2
},
"webgl": {
@@ -3415,6 +3366,7 @@
"Tina:sl-SI:local",
"Tingting:zh-CN:local",
"Trinoids:en-US:local",
+ "Vani:ta-IN:local",
"Whisper:en-US:local",
"Xander:nl-NL:local",
"Yelda:tr-TR:local",
@@ -3426,18 +3378,18 @@
},
{
"navigator": {
- "userAgent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:150.0) Gecko/20100101 Firefox/150.0",
+ "userAgent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:149.0) Gecko/20100101 Firefox/149.0",
"platform": "MacIntel",
- "hardwareConcurrency": 8,
+ "hardwareConcurrency": 10,
"maxTouchPoints": 0
},
"screen": {
- "width": 1280,
- "height": 800,
+ "width": 2560,
+ "height": 1600,
"colorDepth": 30,
- "availWidth": 1280,
- "availHeight": 730,
- "devicePixelRatio": 2
+ "availWidth": 2560,
+ "availHeight": 1480,
+ "devicePixelRatio": 1
},
"webgl": {
"unmaskedVendor": "Apple",
@@ -3446,10 +3398,13 @@
"speechVoices": [
"Albert:en-US:local",
"Alice:it-IT:local",
+ "Soumya:kn-IN:local",
"Alva:sv-SE:local",
+ "Aman:en-IN:local",
"Amélie:fr-CA:local",
"Amira:ms-MY:local",
"Anna:de-DE:local",
+ "Aru:kk-KZ:local",
"Bad News:en-US:local",
"Bahh:en-US:local",
"Bells:en-US:local",
@@ -3470,7 +3425,11 @@
"Eddy (French (Canada)):fr-CA:local",
"Eddy (French (France)):fr-FR:local",
"Eddy (Italian (Italy)):it-IT:local",
+ "Eddy (Japanese (Japan)):ja-JP:local",
+ "Eddy (Korean (South Korea)):ko-KR:local",
"Eddy (Portuguese (Brazil)):pt-BR:local",
+ "Eddy (Chinese (China mainland)):zh-CN:local",
+ "Eddy (Chinese (Taiwan)):zh-TW:local",
"Ellen:nl-BE:local",
"Flo (German (Germany)):de-DE:local",
"Flo (English (UK)):en-GB:local",
@@ -3481,8 +3440,13 @@
"Flo (French (Canada)):fr-CA:local",
"Flo (French (France)):fr-FR:local",
"Flo (Italian (Italy)):it-IT:local",
+ "Flo (Japanese (Japan)):ja-JP:local",
+ "Flo (Korean (South Korea)):ko-KR:local",
"Flo (Portuguese (Brazil)):pt-BR:local",
+ "Flo (Chinese (China mainland)):zh-CN:local",
+ "Flo (Chinese (Taiwan)):zh-TW:local",
"Fred:en-US:local",
+ "Geeta:te-IN:local",
"Good News:en-US:local",
"Grandma (German (Germany)):de-DE:local",
"Grandma (English (UK)):en-GB:local",
@@ -3493,7 +3457,11 @@
"Grandma (French (Canada)):fr-CA:local",
"Grandma (French (France)):fr-FR:local",
"Grandma (Italian (Italy)):it-IT:local",
+ "Grandma (Japanese (Japan)):ja-JP:local",
+ "Grandma (Korean (South Korea)):ko-KR:local",
"Grandma (Portuguese (Brazil)):pt-BR:local",
+ "Grandma (Chinese (China mainland)):zh-CN:local",
+ "Grandma (Chinese (Taiwan)):zh-TW:local",
"Grandpa (German (Germany)):de-DE:local",
"Grandpa (English (UK)):en-GB:local",
"Grandpa (English (US)):en-US:local",
@@ -3503,7 +3471,11 @@
"Grandpa (French (Canada)):fr-CA:local",
"Grandpa (French (France)):fr-FR:local",
"Grandpa (Italian (Italy)):it-IT:local",
+ "Grandpa (Japanese (Japan)):ja-JP:local",
+ "Grandpa (Korean (South Korea)):ko-KR:local",
"Grandpa (Portuguese (Brazil)):pt-BR:local",
+ "Grandpa (Chinese (China mainland)):zh-CN:local",
+ "Grandpa (Chinese (Taiwan)):zh-TW:local",
"Jester:en-US:local",
"Ioana:ro-RO:local",
"Jacques:fr-FR:local",
@@ -3528,8 +3500,10 @@
"Mónica:es-ES:local",
"Montse:ca-ES:local",
"Nora:nb-NO:local",
+ "Ona:lt-LT:local",
"Organ:en-US:local",
"Paulina:es-MX:local",
+ "Piya:bn-IN:local",
"Superstar:en-US:local",
"Ralph:en-US:local",
"Reed (German (Germany)):de-DE:local",
@@ -3540,7 +3514,11 @@
"Reed (Finnish (Finland)):fi-FI:local",
"Reed (French (Canada)):fr-CA:local",
"Reed (Italian (Italy)):it-IT:local",
+ "Reed (Japanese (Japan)):ja-JP:local",
+ "Reed (Korean (South Korea)):ko-KR:local",
"Reed (Portuguese (Brazil)):pt-BR:local",
+ "Reed (Chinese (China mainland)):zh-CN:local",
+ "Reed (Chinese (Taiwan)):zh-TW:local",
"Rishi:en-IN:local",
"Rocko (German (Germany)):de-DE:local",
"Rocko (English (UK)):en-GB:local",
@@ -3551,7 +3529,11 @@
"Rocko (French (Canada)):fr-CA:local",
"Rocko (French (France)):fr-FR:local",
"Rocko (Italian (Italy)):it-IT:local",
+ "Rocko (Japanese (Japan)):ja-JP:local",
+ "Rocko (Korean (South Korea)):ko-KR:local",
"Rocko (Portuguese (Brazil)):pt-BR:local",
+ "Rocko (Chinese (China mainland)):zh-CN:local",
+ "Rocko (Chinese (Taiwan)):zh-TW:local",
"Samantha:en-US:local",
"Sandy (German (Germany)):de-DE:local",
"Sandy (English (UK)):en-GB:local",
@@ -3562,7 +3544,11 @@
"Sandy (French (Canada)):fr-CA:local",
"Sandy (French (France)):fr-FR:local",
"Sandy (Italian (Italy)):it-IT:local",
+ "Sandy (Japanese (Japan)):ja-JP:local",
+ "Sandy (Korean (South Korea)):ko-KR:local",
"Sandy (Portuguese (Brazil)):pt-BR:local",
+ "Sandy (Chinese (China mainland)):zh-CN:local",
+ "Sandy (Chinese (Taiwan)):zh-TW:local",
"Sara:da-DK:local",
"Satu:fi-FI:local",
"Shelley (German (Germany)):de-DE:local",
@@ -3574,12 +3560,19 @@
"Shelley (French (Canada)):fr-CA:local",
"Shelley (French (France)):fr-FR:local",
"Shelley (Italian (Italy)):it-IT:local",
+ "Shelley (Japanese (Japan)):ja-JP:local",
+ "Shelley (Korean (South Korea)):ko-KR:local",
"Shelley (Portuguese (Brazil)):pt-BR:local",
+ "Shelley (Chinese (China mainland)):zh-CN:local",
+ "Shelley (Chinese (Taiwan)):zh-TW:local",
"Sinji:zh-HK:local",
+ "Tara:en-IN:local",
"Tessa:en-ZA:local",
"Thomas:fr-FR:local",
+ "Tina:sl-SI:local",
"Tingting:zh-CN:local",
"Trinoids:en-US:local",
+ "Vani:ta-IN:local",
"Whisper:en-US:local",
"Xander:nl-NL:local",
"Yelda:tr-TR:local",
@@ -3591,17 +3584,17 @@
},
{
"navigator": {
- "userAgent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:151.0) Gecko/20100101 Firefox/151.0",
+ "userAgent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:149.0) Gecko/20100101 Firefox/149.0",
"platform": "MacIntel",
- "hardwareConcurrency": 8,
+ "hardwareConcurrency": 16,
"maxTouchPoints": 0
},
"screen": {
- "width": 1440,
- "height": 2560,
+ "width": 1728,
+ "height": 1117,
"colorDepth": 30,
- "availWidth": 1440,
- "availHeight": 2484,
+ "availWidth": 1728,
+ "availHeight": 1083,
"devicePixelRatio": 2
},
"webgl": {
@@ -3618,235 +3611,31 @@
"Amira:ms-MY:local",
"Anna:de-DE:local",
"Aru:kk-KZ:local",
- "Brutte notizie:en-US:local",
+ "Bad News:en-US:local",
"Bahh:en-US:local",
- "Campane:en-US:local",
+ "Bells:en-US:local",
"Boing:en-US:local",
- "Bollicine:en-US:local",
+ "Bubbles:en-US:local",
"Carmit:he-IL:local",
- "Violoncelli:en-US:local",
+ "Cellos:en-US:local",
"Damayanti:id-ID:local",
"Daniel:en-GB:local",
"Daria:bg-BG:local",
- "Tremolio:en-US:local",
- "Eddy (Tedesco (Germania)):de-DE:local",
- "Eddy (Inglese (UK)):en-GB:local",
- "Eddy (Inglese (USA)):en-US:local",
- "Eddy (Spagnolo (Spagna)):es-ES:local",
- "Eddy (Spagnolo (Messico)):es-MX:local",
- "Eddy (Finlandese (Finlandia)):fi-FI:local",
- "Eddy (Francese (Canada)):fr-CA:local",
- "Eddy (Francese (Francia)):fr-FR:local",
- "Eddy (Italiano (Italia)):it-IT:local",
- "Eddy (Giapponese (Giappone)):ja-JP:local",
- "Eddy (Coreano (Corea del Sud)):ko-KR:local",
- "Eddy (Portoghese (Brasile)):pt-BR:local",
- "Eddy (Cinese (Cina continentale)):zh-CN:local",
- "Eddy (Cinese (Taiwan)):zh-TW:local",
- "Ellen:nl-BE:local",
- "Flo (Tedesco (Germania)):de-DE:local",
- "Flo (Inglese (UK)):en-GB:local",
- "Flo (Inglese (USA)):en-US:local",
- "Flo (Spagnolo (Spagna)):es-ES:local",
- "Flo (Spagnolo (Messico)):es-MX:local",
- "Flo (Finlandese (Finlandia)):fi-FI:local",
- "Flo (Francese (Canada)):fr-CA:local",
- "Flo (Francese (Francia)):fr-FR:local",
- "Flo (Italiano (Italia)):it-IT:local",
- "Flo (Giapponese (Giappone)):ja-JP:local",
- "Flo (Coreano (Corea del Sud)):ko-KR:local",
- "Flo (Portoghese (Brasile)):pt-BR:local",
- "Flo (Cinese (Cina continentale)):zh-CN:local",
- "Flo (Cinese (Taiwan)):zh-TW:local",
- "Fred:en-US:local",
- "Geeta:te-IN:local",
- "Buone notizie:en-US:local",
- "Grandma (Tedesco (Germania)):de-DE:local",
- "Grandma (Inglese (UK)):en-GB:local",
- "Grandma (Inglese (USA)):en-US:local",
- "Grandma (Spagnolo (Spagna)):es-ES:local",
- "Grandma (Spagnolo (Messico)):es-MX:local",
- "Grandma (Finlandese (Finlandia)):fi-FI:local",
- "Grandma (Francese (Canada)):fr-CA:local",
- "Grandma (Francese (Francia)):fr-FR:local",
- "Grandma (Italiano (Italia)):it-IT:local",
- "Grandma (Giapponese (Giappone)):ja-JP:local",
- "Grandma (Coreano (Corea del Sud)):ko-KR:local",
- "Grandma (Portoghese (Brasile)):pt-BR:local",
- "Grandma (Cinese (Cina continentale)):zh-CN:local",
- "Grandma (Cinese (Taiwan)):zh-TW:local",
- "Grandpa (Tedesco (Germania)):de-DE:local",
- "Grandpa (Inglese (UK)):en-GB:local",
- "Grandpa (Inglese (USA)):en-US:local",
- "Grandpa (Spagnolo (Spagna)):es-ES:local",
- "Grandpa (Spagnolo (Messico)):es-MX:local",
- "Grandpa (Finlandese (Finlandia)):fi-FI:local",
- "Grandpa (Francese (Canada)):fr-CA:local",
- "Grandpa (Francese (Francia)):fr-FR:local",
- "Grandpa (Italiano (Italia)):it-IT:local",
- "Grandpa (Giapponese (Giappone)):ja-JP:local",
- "Grandpa (Coreano (Corea del Sud)):ko-KR:local",
- "Grandpa (Portoghese (Brasile)):pt-BR:local",
- "Grandpa (Cinese (Cina continentale)):zh-CN:local",
- "Grandpa (Cinese (Taiwan)):zh-TW:local",
- "Giullare:en-US:local",
- "Ioana:ro-RO:local",
- "Jacques:fr-FR:local",
- "Joana:pt-PT:local",
- "Junior:en-US:local",
- "Kanya:th-TH:local",
- "Karen:en-AU:local",
- "Kathy:en-US:local",
- "Kyoko:ja-JP:local",
- "Lana:hr-HR:local",
- "Laura:sk-SK:local",
- "Lekha:hi-IN:local",
- "Lesya:uk-UA:local",
- "Linh:vi-VN:local",
- "Luciana:pt-BR:local",
- "Majed:ar-001:local",
- "Tünde:hu-HU:local",
- "Meijia:zh-TW:local",
- "Melina:el-GR:local",
- "Milena:ru-RU:local",
- "Moira:en-IE:local",
- "Mónica:es-ES:local",
- "Montse:ca-ES:local",
- "Nora:nb-NO:local",
- "Ona:lt-LT:local",
- "Organo:en-US:local",
- "Paulina:es-MX:local",
- "Piya:bn-IN:local",
- "Superstar:en-US:local",
- "Ralph:en-US:local",
- "Reed (Tedesco (Germania)):de-DE:local",
- "Reed (Inglese (UK)):en-GB:local",
- "Reed (Inglese (USA)):en-US:local",
- "Reed (Spagnolo (Spagna)):es-ES:local",
- "Reed (Spagnolo (Messico)):es-MX:local",
- "Reed (Finlandese (Finlandia)):fi-FI:local",
- "Reed (Francese (Canada)):fr-CA:local",
- "Reed (Italiano (Italia)):it-IT:local",
- "Reed (Giapponese (Giappone)):ja-JP:local",
- "Reed (Coreano (Corea del Sud)):ko-KR:local",
- "Reed (Portoghese (Brasile)):pt-BR:local",
- "Reed (Cinese (Cina continentale)):zh-CN:local",
- "Reed (Cinese (Taiwan)):zh-TW:local",
- "Rishi:en-IN:local",
- "Rocko (Tedesco (Germania)):de-DE:local",
- "Rocko (Inglese (UK)):en-GB:local",
- "Rocko (Inglese (USA)):en-US:local",
- "Rocko (Spagnolo (Spagna)):es-ES:local",
- "Rocko (Spagnolo (Messico)):es-MX:local",
- "Rocko (Finlandese (Finlandia)):fi-FI:local",
- "Rocko (Francese (Canada)):fr-CA:local",
- "Rocko (Francese (Francia)):fr-FR:local",
- "Rocko (Italiano (Italia)):it-IT:local",
- "Rocko (Giapponese (Giappone)):ja-JP:local",
- "Rocko (Coreano (Corea del Sud)):ko-KR:local",
- "Rocko (Portoghese (Brasile)):pt-BR:local",
- "Rocko (Cinese (Cina continentale)):zh-CN:local",
- "Rocko (Cinese (Taiwan)):zh-TW:local",
- "Samantha:en-US:local",
- "Sandy (Tedesco (Germania)):de-DE:local",
- "Sandy (Inglese (UK)):en-GB:local",
- "Sandy (Inglese (USA)):en-US:local",
- "Sandy (Spagnolo (Spagna)):es-ES:local",
- "Sandy (Spagnolo (Messico)):es-MX:local",
- "Sandy (Finlandese (Finlandia)):fi-FI:local",
- "Sandy (Francese (Canada)):fr-CA:local",
- "Sandy (Francese (Francia)):fr-FR:local",
- "Sandy (Italiano (Italia)):it-IT:local",
- "Sandy (Giapponese (Giappone)):ja-JP:local",
- "Sandy (Coreano (Corea del Sud)):ko-KR:local",
- "Sandy (Portoghese (Brasile)):pt-BR:local",
- "Sandy (Cinese (Cina continentale)):zh-CN:local",
- "Sandy (Cinese (Taiwan)):zh-TW:local",
- "Sara:da-DK:local",
- "Satu:fi-FI:local",
- "Shelley (Tedesco (Germania)):de-DE:local",
- "Shelley (Inglese (UK)):en-GB:local",
- "Shelley (Inglese (USA)):en-US:local",
- "Shelley (Spagnolo (Spagna)):es-ES:local",
- "Shelley (Spagnolo (Messico)):es-MX:local",
- "Shelley (Finlandese (Finlandia)):fi-FI:local",
- "Shelley (Francese (Canada)):fr-CA:local",
- "Shelley (Francese (Francia)):fr-FR:local",
- "Shelley (Italiano (Italia)):it-IT:local",
- "Shelley (Giapponese (Giappone)):ja-JP:local",
- "Shelley (Coreano (Corea del Sud)):ko-KR:local",
- "Shelley (Portoghese (Brasile)):pt-BR:local",
- "Shelley (Cinese (Cina continentale)):zh-CN:local",
- "Shelley (Cinese (Taiwan)):zh-TW:local",
- "Sinji:zh-HK:local",
- "Tara:en-IN:local",
- "Tessa:en-ZA:local",
- "Thomas:fr-FR:local",
- "Tina:sl-SI:local",
- "Ting-Ting:zh-CN:local",
- "Trinoid:en-US:local",
- "Vani:ta-IN:local",
- "Sussurro:en-US:local",
- "Xander:nl-NL:local",
- "Yelda:tr-TR:local",
- "Yuna:ko-KR:local",
- "Zarvox:en-US:local",
- "Zosia:pl-PL:local",
- "Zuzana:cs-CZ:local"
- ]
- },
- {
- "navigator": {
- "userAgent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:150.0) Gecko/20100101 Firefox/150.0",
- "platform": "MacIntel",
- "hardwareConcurrency": 8,
- "maxTouchPoints": 0
- },
- "screen": {
- "width": 1440,
- "height": 900,
- "colorDepth": 30,
- "availWidth": 1440,
- "availHeight": 870,
- "devicePixelRatio": 2
- },
- "webgl": {
- "unmaskedVendor": "Intel Inc.",
- "unmaskedRenderer": "Intel(R) HD Graphics, or similar"
- },
- "speechVoices": [
- "Albert:en-US:local",
- "Alice:it-IT:local",
- "Soumya:kn-IN:local",
- "Alva:sv-SE:local",
- "Amélie:fr-CA:local",
- "Amira:ms-MY:local",
- "Anna:de-DE:local",
- "Bad News:en-US:local",
- "Bahh:en-US:local",
- "Bells:en-US:local",
- "Boing:en-US:local",
- "Bubbles:en-US:local",
- "Carmit:he-IL:local",
- "Cellos:en-US:local",
- "Damayanti:id-ID:local",
- "Daniel:en-GB:local",
- "Daria:bg-BG:local",
- "Wobble:en-US:local",
- "Eddy (German (Germany)):de-DE:local",
- "Eddy (English (UK)):en-GB:local",
- "Eddy (English (US)):en-US:local",
- "Eddy (Spanish (Spain)):es-ES:local",
- "Eddy (Spanish (Mexico)):es-MX:local",
- "Eddy (Finnish (Finland)):fi-FI:local",
- "Eddy (French (Canada)):fr-CA:local",
- "Eddy (French (France)):fr-FR:local",
- "Eddy (Italian (Italy)):it-IT:local",
- "Eddy (Japanese (Japan)):ja-JP:local",
- "Eddy (Korean (South Korea)):ko-KR:local",
- "Eddy (Portuguese (Brazil)):pt-BR:local",
- "Eddy (Chinese (China mainland)):zh-CN:local",
- "Eddy (Chinese (Taiwan)):zh-TW:local",
+ "Wobble:en-US:local",
+ "Eddy (German (Germany)):de-DE:local",
+ "Eddy (English (UK)):en-GB:local",
+ "Eddy (English (US)):en-US:local",
+ "Eddy (Spanish (Spain)):es-ES:local",
+ "Eddy (Spanish (Mexico)):es-MX:local",
+ "Eddy (Finnish (Finland)):fi-FI:local",
+ "Eddy (French (Canada)):fr-CA:local",
+ "Eddy (French (France)):fr-FR:local",
+ "Eddy (Italian (Italy)):it-IT:local",
+ "Eddy (Japanese (Japan)):ja-JP:local",
+ "Eddy (Korean (South Korea)):ko-KR:local",
+ "Eddy (Portuguese (Brazil)):pt-BR:local",
+ "Eddy (Chinese (China mainland)):zh-CN:local",
+ "Eddy (Chinese (Taiwan)):zh-TW:local",
"Ellen:nl-BE:local",
"Flo (German (Germany)):de-DE:local",
"Flo (English (UK)):en-GB:local",
@@ -3917,6 +3706,7 @@
"Mónica:es-ES:local",
"Montse:ca-ES:local",
"Nora:nb-NO:local",
+ "Ona:lt-LT:local",
"Organ:en-US:local",
"Paulina:es-MX:local",
"Piya:bn-IN:local",
@@ -3982,6 +3772,7 @@
"Shelley (Chinese (China mainland)):zh-CN:local",
"Shelley (Chinese (Taiwan)):zh-TW:local",
"Sinji:zh-HK:local",
+ "Tara:en-IN:local",
"Tessa:en-ZA:local",
"Thomas:fr-FR:local",
"Tina:sl-SI:local",
@@ -3999,101 +3790,105 @@
},
{
"navigator": {
- "userAgent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:150.0) Gecko/20100101 Firefox/150.0",
+ "userAgent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:149.0) Gecko/20100101 Firefox/149.0",
"platform": "MacIntel",
- "hardwareConcurrency": 6,
+ "hardwareConcurrency": 10,
"maxTouchPoints": 0
},
"screen": {
- "width": 1792,
- "height": 1120,
+ "width": 1280,
+ "height": 832,
"colorDepth": 30,
- "availWidth": 1792,
- "availHeight": 1010,
+ "availWidth": 1280,
+ "availHeight": 803,
"devicePixelRatio": 2
},
"webgl": {
- "unmaskedVendor": "ATI Technologies Inc.",
- "unmaskedRenderer": "Radeon HD 3200 Graphics, or similar"
+ "unmaskedVendor": "Apple",
+ "unmaskedRenderer": "Apple M1, or similar"
},
"speechVoices": [
"Albert:en-US:local",
"Alice:it-IT:local",
+ "Soumya:kn-IN:local",
"Alva:sv-SE:local",
+ "Aman:en-IN:local",
"Amélie:fr-CA:local",
"Amira:ms-MY:local",
"Anna:de-DE:local",
- "Bad News:en-US:local",
+ "Aru:kk-KZ:local",
+ "Malas noticias:en-US:local",
"Bahh:en-US:local",
- "Bells:en-US:local",
+ "Campanas:en-US:local",
"Boing:en-US:local",
- "Bubbles:en-US:local",
+ "Burbujas:en-US:local",
"Carmit:he-IL:local",
- "Cellos:en-US:local",
+ "Violonchelos:en-US:local",
"Damayanti:id-ID:local",
"Daniel:en-GB:local",
"Daria:bg-BG:local",
"Wobble:en-US:local",
- "Eddy (German (Germany)):de-DE:local",
- "Eddy (English (UK)):en-GB:local",
- "Eddy (English (US)):en-US:local",
- "Eddy (Spanish (Spain)):es-ES:local",
- "Eddy (Spanish (Mexico)):es-MX:local",
- "Eddy (Finnish (Finland)):fi-FI:local",
- "Eddy (French (Canada)):fr-CA:local",
- "Eddy (French (France)):fr-FR:local",
- "Eddy (Italian (Italy)):it-IT:local",
- "Eddy (Japanese (Japan)):ja-JP:local",
- "Eddy (Korean (South Korea)):ko-KR:local",
- "Eddy (Portuguese (Brazil)):pt-BR:local",
- "Eddy (Chinese (China mainland)):zh-CN:local",
- "Eddy (Chinese (Taiwan)):zh-TW:local",
+ "Eddy (Alemán (Alemania)):de-DE:local",
+ "Eddy (Inglés (RU)):en-GB:local",
+ "Eddy (Inglés (EE. UU.)):en-US:local",
+ "Eddy (Español (España)):es-ES:local",
+ "Eddy (Español (México)):es-MX:local",
+ "Eddy (Finés (Finlandia)):fi-FI:local",
+ "Eddy (Francés (Canadá)):fr-CA:local",
+ "Eddy (Francés (Francia)):fr-FR:local",
+ "Eddy (Italiano (Italia)):it-IT:local",
+ "Eddy (Japonés (Japón)):ja-JP:local",
+ "Eddy (Coreano (Corea del Sur)):ko-KR:local",
+ "Eddy (Portugués (Brasil)):pt-BR:local",
+ "Eddy (Chino (China continental)):zh-CN:local",
+ "Eddy (Chino (Taiwán)):zh-TW:local",
"Ellen:nl-BE:local",
- "Flo (German (Germany)):de-DE:local",
- "Flo (English (UK)):en-GB:local",
- "Flo (English (US)):en-US:local",
- "Flo (Spanish (Spain)):es-ES:local",
- "Flo (Spanish (Mexico)):es-MX:local",
- "Flo (Finnish (Finland)):fi-FI:local",
- "Flo (French (Canada)):fr-CA:local",
- "Flo (French (France)):fr-FR:local",
- "Flo (Italian (Italy)):it-IT:local",
- "Flo (Japanese (Japan)):ja-JP:local",
- "Flo (Korean (South Korea)):ko-KR:local",
- "Flo (Portuguese (Brazil)):pt-BR:local",
- "Flo (Chinese (China mainland)):zh-CN:local",
- "Flo (Chinese (Taiwan)):zh-TW:local",
+ "Flo (Alemán (Alemania)):de-DE:local",
+ "Flo (Inglés (RU)):en-GB:local",
+ "Flo (Inglés (EE. UU.)):en-US:local",
+ "Flo (Español (España)):es-ES:local",
+ "Flo (Español (México)):es-MX:local",
+ "Flo (Finés (Finlandia)):fi-FI:local",
+ "Flo (Francés (Canadá)):fr-CA:local",
+ "Flo (Francés (Francia)):fr-FR:local",
+ "Flo (Italiano (Italia)):it-IT:local",
+ "Flo (Japonés (Japón)):ja-JP:local",
+ "Flo (Coreano (Corea del Sur)):ko-KR:local",
+ "Flo (Portugués (Brasil)):pt-BR:local",
+ "Flo (Chino (China continental)):zh-CN:local",
+ "Flo (Chino (Taiwán)):zh-TW:local",
"Fred:en-US:local",
- "Good News:en-US:local",
- "Grandma (German (Germany)):de-DE:local",
- "Grandma (English (UK)):en-GB:local",
- "Grandma (English (US)):en-US:local",
- "Grandma (Spanish (Spain)):es-ES:local",
- "Grandma (Spanish (Mexico)):es-MX:local",
- "Grandma (Finnish (Finland)):fi-FI:local",
- "Grandma (French (Canada)):fr-CA:local",
- "Grandma (French (France)):fr-FR:local",
- "Grandma (Italian (Italy)):it-IT:local",
- "Grandma (Japanese (Japan)):ja-JP:local",
- "Grandma (Korean (South Korea)):ko-KR:local",
- "Grandma (Portuguese (Brazil)):pt-BR:local",
- "Grandma (Chinese (China mainland)):zh-CN:local",
- "Grandma (Chinese (Taiwan)):zh-TW:local",
- "Grandpa (German (Germany)):de-DE:local",
- "Grandpa (English (UK)):en-GB:local",
- "Grandpa (English (US)):en-US:local",
- "Grandpa (Spanish (Spain)):es-ES:local",
- "Grandpa (Spanish (Mexico)):es-MX:local",
- "Grandpa (Finnish (Finland)):fi-FI:local",
- "Grandpa (French (Canada)):fr-CA:local",
- "Grandpa (French (France)):fr-FR:local",
- "Grandpa (Italian (Italy)):it-IT:local",
- "Grandpa (Japanese (Japan)):ja-JP:local",
- "Grandpa (Korean (South Korea)):ko-KR:local",
- "Grandpa (Portuguese (Brazil)):pt-BR:local",
- "Grandpa (Chinese (China mainland)):zh-CN:local",
- "Grandpa (Chinese (Taiwan)):zh-TW:local",
- "Jester:en-US:local",
+ "Geeta:te-IN:local",
+ "Buenas noticias:en-US:local",
+ "Grandma (Alemán (Alemania)):de-DE:local",
+ "Grandma (Inglés (RU)):en-GB:local",
+ "Grandma (Inglés (EE. UU.)):en-US:local",
+ "Grandma (Español (España)):es-ES:local",
+ "Grandma (Español (México)):es-MX:local",
+ "Grandma (Finés (Finlandia)):fi-FI:local",
+ "Grandma (Francés (Canadá)):fr-CA:local",
+ "Grandma (Francés (Francia)):fr-FR:local",
+ "Grandma (Italiano (Italia)):it-IT:local",
+ "Grandma (Japonés (Japón)):ja-JP:local",
+ "Grandma (Coreano (Corea del Sur)):ko-KR:local",
+ "Grandma (Portugués (Brasil)):pt-BR:local",
+ "Grandma (Chino (China continental)):zh-CN:local",
+ "Grandma (Chino (Taiwán)):zh-TW:local",
+ "Grandpa (Alemán (Alemania)):de-DE:local",
+ "Grandpa (Inglés (RU)):en-GB:local",
+ "Grandpa (Inglés (EE. UU.)):en-US:local",
+ "Grandpa (Español (España)):es-ES:local",
+ "Grandpa (Español (México)):es-MX:local",
+ "Grandpa (Finés (Finlandia)):fi-FI:local",
+ "Grandpa (Francés (Canadá)):fr-CA:local",
+ "Grandpa (Francés (Francia)):fr-FR:local",
+ "Grandpa (Italiano (Italia)):it-IT:local",
+ "Grandpa (Japonés (Japón)):ja-JP:local",
+ "Grandpa (Coreano (Corea del Sur)):ko-KR:local",
+ "Grandpa (Portugués (Brasil)):pt-BR:local",
+ "Grandpa (Chino (China continental)):zh-CN:local",
+ "Grandpa (Chino (Taiwán)):zh-TW:local",
+ "Bufón:en-US:local",
"Ioana:ro-RO:local",
"Jacques:fr-FR:local",
"Joana:pt-PT:local",
@@ -4117,77 +3912,80 @@
"Mónica:es-ES:local",
"Montse:ca-ES:local",
"Nora:nb-NO:local",
- "Organ:en-US:local",
+ "Ona:lt-LT:local",
+ "Órgano:en-US:local",
"Paulina:es-MX:local",
- "Superstar:en-US:local",
+ "Piya:bn-IN:local",
+ "Superestrella:en-US:local",
"Ralph:en-US:local",
- "Reed (German (Germany)):de-DE:local",
- "Reed (English (UK)):en-GB:local",
- "Reed (English (US)):en-US:local",
- "Reed (Spanish (Spain)):es-ES:local",
- "Reed (Spanish (Mexico)):es-MX:local",
- "Reed (Finnish (Finland)):fi-FI:local",
- "Reed (French (Canada)):fr-CA:local",
- "Reed (Italian (Italy)):it-IT:local",
- "Reed (Japanese (Japan)):ja-JP:local",
- "Reed (Korean (South Korea)):ko-KR:local",
- "Reed (Portuguese (Brazil)):pt-BR:local",
- "Reed (Chinese (China mainland)):zh-CN:local",
- "Reed (Chinese (Taiwan)):zh-TW:local",
+ "Reed (Alemán (Alemania)):de-DE:local",
+ "Reed (Inglés (RU)):en-GB:local",
+ "Reed (Inglés (EE. UU.)):en-US:local",
+ "Reed (Español (España)):es-ES:local",
+ "Reed (Español (México)):es-MX:local",
+ "Reed (Finés (Finlandia)):fi-FI:local",
+ "Reed (Francés (Canadá)):fr-CA:local",
+ "Reed (Italiano (Italia)):it-IT:local",
+ "Reed (Japonés (Japón)):ja-JP:local",
+ "Reed (Coreano (Corea del Sur)):ko-KR:local",
+ "Reed (Portugués (Brasil)):pt-BR:local",
+ "Reed (Chino (China continental)):zh-CN:local",
+ "Reed (Chino (Taiwán)):zh-TW:local",
"Rishi:en-IN:local",
- "Rocko (German (Germany)):de-DE:local",
- "Rocko (English (UK)):en-GB:local",
- "Rocko (English (US)):en-US:local",
- "Rocko (Spanish (Spain)):es-ES:local",
- "Rocko (Spanish (Mexico)):es-MX:local",
- "Rocko (Finnish (Finland)):fi-FI:local",
- "Rocko (French (Canada)):fr-CA:local",
- "Rocko (French (France)):fr-FR:local",
- "Rocko (Italian (Italy)):it-IT:local",
- "Rocko (Japanese (Japan)):ja-JP:local",
- "Rocko (Korean (South Korea)):ko-KR:local",
- "Rocko (Portuguese (Brazil)):pt-BR:local",
- "Rocko (Chinese (China mainland)):zh-CN:local",
- "Rocko (Chinese (Taiwan)):zh-TW:local",
+ "Rocko (Alemán (Alemania)):de-DE:local",
+ "Rocko (Inglés (RU)):en-GB:local",
+ "Rocko (Inglés (EE. UU.)):en-US:local",
+ "Rocko (Español (España)):es-ES:local",
+ "Rocko (Español (México)):es-MX:local",
+ "Rocko (Finés (Finlandia)):fi-FI:local",
+ "Rocko (Francés (Canadá)):fr-CA:local",
+ "Rocko (Francés (Francia)):fr-FR:local",
+ "Rocko (Italiano (Italia)):it-IT:local",
+ "Rocko (Japonés (Japón)):ja-JP:local",
+ "Rocko (Coreano (Corea del Sur)):ko-KR:local",
+ "Rocko (Portugués (Brasil)):pt-BR:local",
+ "Rocko (Chino (China continental)):zh-CN:local",
+ "Rocko (Chino (Taiwán)):zh-TW:local",
"Samantha:en-US:local",
- "Sandy (German (Germany)):de-DE:local",
- "Sandy (English (UK)):en-GB:local",
- "Sandy (English (US)):en-US:local",
- "Sandy (Spanish (Spain)):es-ES:local",
- "Sandy (Spanish (Mexico)):es-MX:local",
- "Sandy (Finnish (Finland)):fi-FI:local",
- "Sandy (French (Canada)):fr-CA:local",
- "Sandy (French (France)):fr-FR:local",
- "Sandy (Italian (Italy)):it-IT:local",
- "Sandy (Japanese (Japan)):ja-JP:local",
- "Sandy (Korean (South Korea)):ko-KR:local",
- "Sandy (Portuguese (Brazil)):pt-BR:local",
- "Sandy (Chinese (China mainland)):zh-CN:local",
- "Sandy (Chinese (Taiwan)):zh-TW:local",
+ "Sandy (Alemán (Alemania)):de-DE:local",
+ "Sandy (Inglés (RU)):en-GB:local",
+ "Sandy (Inglés (EE. UU.)):en-US:local",
+ "Sandy (Español (España)):es-ES:local",
+ "Sandy (Español (México)):es-MX:local",
+ "Sandy (Finés (Finlandia)):fi-FI:local",
+ "Sandy (Francés (Canadá)):fr-CA:local",
+ "Sandy (Francés (Francia)):fr-FR:local",
+ "Sandy (Italiano (Italia)):it-IT:local",
+ "Sandy (Japonés (Japón)):ja-JP:local",
+ "Sandy (Coreano (Corea del Sur)):ko-KR:local",
+ "Sandy (Portugués (Brasil)):pt-BR:local",
+ "Sandy (Chino (China continental)):zh-CN:local",
+ "Sandy (Chino (Taiwán)):zh-TW:local",
"Sara:da-DK:local",
"Satu:fi-FI:local",
- "Shelley (German (Germany)):de-DE:local",
- "Shelley (English (UK)):en-GB:local",
- "Shelley (English (US)):en-US:local",
- "Shelley (Spanish (Spain)):es-ES:local",
- "Shelley (Spanish (Mexico)):es-MX:local",
- "Shelley (Finnish (Finland)):fi-FI:local",
- "Shelley (French (Canada)):fr-CA:local",
- "Shelley (French (France)):fr-FR:local",
- "Shelley (Italian (Italy)):it-IT:local",
- "Shelley (Japanese (Japan)):ja-JP:local",
- "Shelley (Korean (South Korea)):ko-KR:local",
- "Shelley (Portuguese (Brazil)):pt-BR:local",
- "Shelley (Chinese (China mainland)):zh-CN:local",
- "Shelley (Chinese (Taiwan)):zh-TW:local",
+ "Shelley (Alemán (Alemania)):de-DE:local",
+ "Shelley (Inglés (RU)):en-GB:local",
+ "Shelley (Inglés (EE. UU.)):en-US:local",
+ "Shelley (Español (España)):es-ES:local",
+ "Shelley (Español (México)):es-MX:local",
+ "Shelley (Finés (Finlandia)):fi-FI:local",
+ "Shelley (Francés (Canadá)):fr-CA:local",
+ "Shelley (Francés (Francia)):fr-FR:local",
+ "Shelley (Italiano (Italia)):it-IT:local",
+ "Shelley (Japonés (Japón)):ja-JP:local",
+ "Shelley (Coreano (Corea del Sur)):ko-KR:local",
+ "Shelley (Portugués (Brasil)):pt-BR:local",
+ "Shelley (Chino (China continental)):zh-CN:local",
+ "Shelley (Chino (Taiwán)):zh-TW:local",
"Sinji:zh-HK:local",
+ "Tara:en-IN:local",
"Tessa:en-ZA:local",
"Thomas:fr-FR:local",
"Tina:sl-SI:local",
"Tingting:zh-CN:local",
"Trinoids:en-US:local",
"Vani:ta-IN:local",
- "Whisper:en-US:local",
+ "Susurro:en-US:local",
"Xander:nl-NL:local",
"Yelda:tr-TR:local",
"Yuna:ko-KR:local",
@@ -4198,2639 +3996,7 @@
},
{
"navigator": {
- "userAgent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:150.0) Gecko/20100101 Firefox/150.0",
- "platform": "MacIntel",
- "hardwareConcurrency": 8,
- "maxTouchPoints": 0
- },
- "screen": {
- "width": 960,
- "height": 540,
- "colorDepth": 30,
- "availWidth": 960,
- "availHeight": 528,
- "devicePixelRatio": 2
- },
- "webgl": {
- "unmaskedVendor": "Apple",
- "unmaskedRenderer": "Apple M1, or similar"
- },
- "speechVoices": [
- "Albert:en-US:local",
- "Alice:it-IT:local",
- "Alva:sv-SE:local",
- "Amélie:fr-CA:local",
- "Amira:ms-MY:local",
- "Anna:de-DE:local",
- "Bad News:en-US:local",
- "Bahh:en-US:local",
- "Bells:en-US:local",
- "Boing:en-US:local",
- "Bubbles:en-US:local",
- "Carmit:he-IL:local",
- "Cellos:en-US:local",
- "Damayanti:id-ID:local",
- "Daniel:en-GB:local",
- "Daria:bg-BG:local",
- "Wobble:en-US:local",
- "Eddy (German (Germany)):de-DE:local",
- "Eddy (English (UK)):en-GB:local",
- "Eddy (English (US)):en-US:local",
- "Eddy (Spanish (Spain)):es-ES:local",
- "Eddy (Spanish (Mexico)):es-MX:local",
- "Eddy (Finnish (Finland)):fi-FI:local",
- "Eddy (French (Canada)):fr-CA:local",
- "Eddy (French (France)):fr-FR:local",
- "Eddy (Italian (Italy)):it-IT:local",
- "Eddy (Portuguese (Brazil)):pt-BR:local",
- "Ellen:nl-BE:local",
- "Flo (German (Germany)):de-DE:local",
- "Flo (English (UK)):en-GB:local",
- "Flo (English (US)):en-US:local",
- "Flo (Spanish (Spain)):es-ES:local",
- "Flo (Spanish (Mexico)):es-MX:local",
- "Flo (Finnish (Finland)):fi-FI:local",
- "Flo (French (Canada)):fr-CA:local",
- "Flo (French (France)):fr-FR:local",
- "Flo (Italian (Italy)):it-IT:local",
- "Flo (Portuguese (Brazil)):pt-BR:local",
- "Fred:en-US:local",
- "Good News:en-US:local",
- "Grandma (German (Germany)):de-DE:local",
- "Grandma (English (UK)):en-GB:local",
- "Grandma (English (US)):en-US:local",
- "Grandma (Spanish (Spain)):es-ES:local",
- "Grandma (Spanish (Mexico)):es-MX:local",
- "Grandma (Finnish (Finland)):fi-FI:local",
- "Grandma (French (Canada)):fr-CA:local",
- "Grandma (French (France)):fr-FR:local",
- "Grandma (Italian (Italy)):it-IT:local",
- "Grandma (Portuguese (Brazil)):pt-BR:local",
- "Grandpa (German (Germany)):de-DE:local",
- "Grandpa (English (UK)):en-GB:local",
- "Grandpa (English (US)):en-US:local",
- "Grandpa (Spanish (Spain)):es-ES:local",
- "Grandpa (Spanish (Mexico)):es-MX:local",
- "Grandpa (Finnish (Finland)):fi-FI:local",
- "Grandpa (French (Canada)):fr-CA:local",
- "Grandpa (French (France)):fr-FR:local",
- "Grandpa (Italian (Italy)):it-IT:local",
- "Grandpa (Portuguese (Brazil)):pt-BR:local",
- "Jester:en-US:local",
- "Ioana:ro-RO:local",
- "Jacques:fr-FR:local",
- "Joana:pt-PT:local",
- "Junior:en-US:local",
- "Kanya:th-TH:local",
- "Karen:en-AU:local",
- "Kathy:en-US:local",
- "Kyoko:ja-JP:local",
- "Lana:hr-HR:local",
- "Laura:sk-SK:local",
- "Lekha:hi-IN:local",
- "Lesya:uk-UA:local",
- "Linh:vi-VN:local",
- "Luciana:pt-BR:local",
- "Majed:ar-001:local",
- "Tünde:hu-HU:local",
- "Meijia:zh-TW:local",
- "Melina:el-GR:local",
- "Milena:ru-RU:local",
- "Moira:en-IE:local",
- "Mónica:es-ES:local",
- "Montse:ca-ES:local",
- "Nora:nb-NO:local",
- "Organ:en-US:local",
- "Paulina:es-MX:local",
- "Superstar:en-US:local",
- "Ralph:en-US:local",
- "Reed (German (Germany)):de-DE:local",
- "Reed (English (UK)):en-GB:local",
- "Reed (English (US)):en-US:local",
- "Reed (Spanish (Spain)):es-ES:local",
- "Reed (Spanish (Mexico)):es-MX:local",
- "Reed (Finnish (Finland)):fi-FI:local",
- "Reed (French (Canada)):fr-CA:local",
- "Reed (Italian (Italy)):it-IT:local",
- "Reed (Portuguese (Brazil)):pt-BR:local",
- "Rishi:en-IN:local",
- "Rocko (German (Germany)):de-DE:local",
- "Rocko (English (UK)):en-GB:local",
- "Rocko (English (US)):en-US:local",
- "Rocko (Spanish (Spain)):es-ES:local",
- "Rocko (Spanish (Mexico)):es-MX:local",
- "Rocko (Finnish (Finland)):fi-FI:local",
- "Rocko (French (Canada)):fr-CA:local",
- "Rocko (French (France)):fr-FR:local",
- "Rocko (Italian (Italy)):it-IT:local",
- "Rocko (Portuguese (Brazil)):pt-BR:local",
- "Samantha:en-US:local",
- "Sandy (German (Germany)):de-DE:local",
- "Sandy (English (UK)):en-GB:local",
- "Sandy (English (US)):en-US:local",
- "Sandy (Spanish (Spain)):es-ES:local",
- "Sandy (Spanish (Mexico)):es-MX:local",
- "Sandy (Finnish (Finland)):fi-FI:local",
- "Sandy (French (Canada)):fr-CA:local",
- "Sandy (French (France)):fr-FR:local",
- "Sandy (Italian (Italy)):it-IT:local",
- "Sandy (Portuguese (Brazil)):pt-BR:local",
- "Sara:da-DK:local",
- "Satu:fi-FI:local",
- "Shelley (German (Germany)):de-DE:local",
- "Shelley (English (UK)):en-GB:local",
- "Shelley (English (US)):en-US:local",
- "Shelley (Spanish (Spain)):es-ES:local",
- "Shelley (Spanish (Mexico)):es-MX:local",
- "Shelley (Finnish (Finland)):fi-FI:local",
- "Shelley (French (Canada)):fr-CA:local",
- "Shelley (French (France)):fr-FR:local",
- "Shelley (Italian (Italy)):it-IT:local",
- "Shelley (Portuguese (Brazil)):pt-BR:local",
- "Sinji:zh-HK:local",
- "Tessa:en-ZA:local",
- "Thomas:fr-FR:local",
- "Tingting:zh-CN:local",
- "Trinoids:en-US:local",
- "Whisper:en-US:local",
- "Xander:nl-NL:local",
- "Yelda:tr-TR:local",
- "Yuna:ko-KR:local",
- "Zarvox:en-US:local",
- "Zosia:pl-PL:local",
- "Zuzana:cs-CZ:local"
- ]
- },
- {
- "navigator": {
- "userAgent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:150.0) Gecko/20100101 Firefox/150.0",
- "platform": "MacIntel",
- "hardwareConcurrency": 6,
- "maxTouchPoints": 0
- },
- "screen": {
- "width": 2048,
- "height": 1152,
- "colorDepth": 30,
- "availWidth": 2048,
- "availHeight": 1033,
- "devicePixelRatio": 2
- },
- "webgl": {
- "unmaskedVendor": "ATI Technologies Inc.",
- "unmaskedRenderer": "Radeon R9 200 Series, or similar"
- },
- "speechVoices": [
- "Albert:en-US:local",
- "Alice:it-IT:local",
- "Alva:sv-SE:local",
- "Amélie:fr-CA:local",
- "Amira:ms-MY:local",
- "Anna:de-DE:local",
- "Bad News:en-US:local",
- "Bahh:en-US:local",
- "Bells:en-US:local",
- "Boing:en-US:local",
- "Bubbles:en-US:local",
- "Carmit:he-IL:local",
- "Cellos:en-US:local",
- "Damayanti:id-ID:local",
- "Daniel:en-GB:local",
- "Daria:bg-BG:local",
- "Wobble:en-US:local",
- "Eddy (German (Germany)):de-DE:local",
- "Eddy (English (UK)):en-GB:local",
- "Eddy (English (US)):en-US:local",
- "Eddy (Spanish (Spain)):es-ES:local",
- "Eddy (Spanish (Mexico)):es-MX:local",
- "Eddy (Finnish (Finland)):fi-FI:local",
- "Eddy (French (Canada)):fr-CA:local",
- "Eddy (French (France)):fr-FR:local",
- "Eddy (Italian (Italy)):it-IT:local",
- "Eddy (Japanese (Japan)):ja-JP:local",
- "Eddy (Korean (South Korea)):ko-KR:local",
- "Eddy (Portuguese (Brazil)):pt-BR:local",
- "Eddy (Chinese (China mainland)):zh-CN:local",
- "Eddy (Chinese (Taiwan)):zh-TW:local",
- "Ellen:nl-BE:local",
- "Flo (German (Germany)):de-DE:local",
- "Flo (English (UK)):en-GB:local",
- "Flo (English (US)):en-US:local",
- "Flo (Spanish (Spain)):es-ES:local",
- "Flo (Spanish (Mexico)):es-MX:local",
- "Flo (Finnish (Finland)):fi-FI:local",
- "Flo (French (Canada)):fr-CA:local",
- "Flo (French (France)):fr-FR:local",
- "Flo (Italian (Italy)):it-IT:local",
- "Flo (Japanese (Japan)):ja-JP:local",
- "Flo (Korean (South Korea)):ko-KR:local",
- "Flo (Portuguese (Brazil)):pt-BR:local",
- "Flo (Chinese (China mainland)):zh-CN:local",
- "Flo (Chinese (Taiwan)):zh-TW:local",
- "Fred:en-US:local",
- "Good News:en-US:local",
- "Grandma (German (Germany)):de-DE:local",
- "Grandma (English (UK)):en-GB:local",
- "Grandma (English (US)):en-US:local",
- "Grandma (Spanish (Spain)):es-ES:local",
- "Grandma (Spanish (Mexico)):es-MX:local",
- "Grandma (Finnish (Finland)):fi-FI:local",
- "Grandma (French (Canada)):fr-CA:local",
- "Grandma (French (France)):fr-FR:local",
- "Grandma (Italian (Italy)):it-IT:local",
- "Grandma (Japanese (Japan)):ja-JP:local",
- "Grandma (Korean (South Korea)):ko-KR:local",
- "Grandma (Portuguese (Brazil)):pt-BR:local",
- "Grandma (Chinese (China mainland)):zh-CN:local",
- "Grandma (Chinese (Taiwan)):zh-TW:local",
- "Grandpa (German (Germany)):de-DE:local",
- "Grandpa (English (UK)):en-GB:local",
- "Grandpa (English (US)):en-US:local",
- "Grandpa (Spanish (Spain)):es-ES:local",
- "Grandpa (Spanish (Mexico)):es-MX:local",
- "Grandpa (Finnish (Finland)):fi-FI:local",
- "Grandpa (French (Canada)):fr-CA:local",
- "Grandpa (French (France)):fr-FR:local",
- "Grandpa (Italian (Italy)):it-IT:local",
- "Grandpa (Japanese (Japan)):ja-JP:local",
- "Grandpa (Korean (South Korea)):ko-KR:local",
- "Grandpa (Portuguese (Brazil)):pt-BR:local",
- "Grandpa (Chinese (China mainland)):zh-CN:local",
- "Grandpa (Chinese (Taiwan)):zh-TW:local",
- "Jester:en-US:local",
- "Ioana:ro-RO:local",
- "Jacques:fr-FR:local",
- "Joana:pt-PT:local",
- "Junior:en-US:local",
- "Kanya:th-TH:local",
- "Karen:en-AU:local",
- "Kathy:en-US:local",
- "Kyoko:ja-JP:local",
- "Lana:hr-HR:local",
- "Laura:sk-SK:local",
- "Lekha:hi-IN:local",
- "Lesya:uk-UA:local",
- "Linh:vi-VN:local",
- "Luciana:pt-BR:local",
- "Majed:ar-001:local",
- "Tünde:hu-HU:local",
- "Meijia:zh-TW:local",
- "Melina:el-GR:local",
- "Milena:ru-RU:local",
- "Moira:en-IE:local",
- "Mónica:es-ES:local",
- "Montse:ca-ES:local",
- "Nora:nb-NO:local",
- "Organ:en-US:local",
- "Paulina:es-MX:local",
- "Superstar:en-US:local",
- "Ralph:en-US:local",
- "Reed (German (Germany)):de-DE:local",
- "Reed (English (UK)):en-GB:local",
- "Reed (English (US)):en-US:local",
- "Reed (Spanish (Spain)):es-ES:local",
- "Reed (Spanish (Mexico)):es-MX:local",
- "Reed (Finnish (Finland)):fi-FI:local",
- "Reed (French (Canada)):fr-CA:local",
- "Reed (Italian (Italy)):it-IT:local",
- "Reed (Japanese (Japan)):ja-JP:local",
- "Reed (Korean (South Korea)):ko-KR:local",
- "Reed (Portuguese (Brazil)):pt-BR:local",
- "Reed (Chinese (China mainland)):zh-CN:local",
- "Reed (Chinese (Taiwan)):zh-TW:local",
- "Rishi:en-IN:local",
- "Rocko (German (Germany)):de-DE:local",
- "Rocko (English (UK)):en-GB:local",
- "Rocko (English (US)):en-US:local",
- "Rocko (Spanish (Spain)):es-ES:local",
- "Rocko (Spanish (Mexico)):es-MX:local",
- "Rocko (Finnish (Finland)):fi-FI:local",
- "Rocko (French (Canada)):fr-CA:local",
- "Rocko (French (France)):fr-FR:local",
- "Rocko (Italian (Italy)):it-IT:local",
- "Rocko (Japanese (Japan)):ja-JP:local",
- "Rocko (Korean (South Korea)):ko-KR:local",
- "Rocko (Portuguese (Brazil)):pt-BR:local",
- "Rocko (Chinese (China mainland)):zh-CN:local",
- "Rocko (Chinese (Taiwan)):zh-TW:local",
- "Samantha:en-US:local",
- "Sandy (German (Germany)):de-DE:local",
- "Sandy (English (UK)):en-GB:local",
- "Sandy (English (US)):en-US:local",
- "Sandy (Spanish (Spain)):es-ES:local",
- "Sandy (Spanish (Mexico)):es-MX:local",
- "Sandy (Finnish (Finland)):fi-FI:local",
- "Sandy (French (Canada)):fr-CA:local",
- "Sandy (French (France)):fr-FR:local",
- "Sandy (Italian (Italy)):it-IT:local",
- "Sandy (Japanese (Japan)):ja-JP:local",
- "Sandy (Korean (South Korea)):ko-KR:local",
- "Sandy (Portuguese (Brazil)):pt-BR:local",
- "Sandy (Chinese (China mainland)):zh-CN:local",
- "Sandy (Chinese (Taiwan)):zh-TW:local",
- "Sara:da-DK:local",
- "Satu:fi-FI:local",
- "Shelley (German (Germany)):de-DE:local",
- "Shelley (English (UK)):en-GB:local",
- "Shelley (English (US)):en-US:local",
- "Shelley (Spanish (Spain)):es-ES:local",
- "Shelley (Spanish (Mexico)):es-MX:local",
- "Shelley (Finnish (Finland)):fi-FI:local",
- "Shelley (French (Canada)):fr-CA:local",
- "Shelley (French (France)):fr-FR:local",
- "Shelley (Italian (Italy)):it-IT:local",
- "Shelley (Japanese (Japan)):ja-JP:local",
- "Shelley (Korean (South Korea)):ko-KR:local",
- "Shelley (Portuguese (Brazil)):pt-BR:local",
- "Shelley (Chinese (China mainland)):zh-CN:local",
- "Shelley (Chinese (Taiwan)):zh-TW:local",
- "Sinji:zh-HK:local",
- "Tessa:en-ZA:local",
- "Thomas:fr-FR:local",
- "Tina:sl-SI:local",
- "Tingting:zh-CN:local",
- "Trinoids:en-US:local",
- "Vani:ta-IN:local",
- "Whisper:en-US:local",
- "Xander:nl-NL:local",
- "Yelda:tr-TR:local",
- "Yuna:ko-KR:local",
- "Zarvox:en-US:local",
- "Zosia:pl-PL:local",
- "Zuzana:cs-CZ:local"
- ]
- },
- {
- "navigator": {
- "userAgent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:149.0) Gecko/20100101 Firefox/149.0",
- "platform": "MacIntel",
- "hardwareConcurrency": 2,
- "maxTouchPoints": 0
- },
- "screen": {
- "width": 1280,
- "height": 800,
- "colorDepth": 30,
- "availWidth": 1280,
- "availHeight": 800,
- "devicePixelRatio": 2
- },
- "webgl": {
- "unmaskedVendor": "Intel Inc.",
- "unmaskedRenderer": "Intel 945GM, or similar"
- },
- "speechVoices": [
- "Alex:en-US:local",
- "Alice:it-IT:local",
- "Alva:sv-SE:local",
- "Amelie:fr-CA:local",
- "Anna:de-DE:local",
- "Carmit:he-IL:local",
- "Damayanti:id-ID:local",
- "Daniel:en-GB:local",
- "Diego:es-AR:local",
- "Ellen:nl-BE:local",
- "Fiona:en-scotland:local",
- "Fred:en-US:local",
- "Ioana:ro-RO:local",
- "Joana:pt-PT:local",
- "Jorge:es-ES:local",
- "Juan:es-MX:local",
- "Kanya:th-TH:local",
- "Karen:en-AU:local",
- "Kyoko:ja-JP:local",
- "Laura:sk-SK:local",
- "Lekha:hi-IN:local",
- "Luca:it-IT:local",
- "Luciana:pt-BR:local",
- "Maged:ar-SA:local",
- "Mariska:hu-HU:local",
- "Mei-Jia:zh-TW:local",
- "Melina:el-GR:local",
- "Milena:ru-RU:local",
- "Moira:en-IE:local",
- "Monica:es-ES:local",
- "Nora:nb-NO:local",
- "Paulina:es-MX:local",
- "Rishi:en-IN:local",
- "Samantha:en-US:local",
- "Sara:da-DK:local",
- "Satu:fi-FI:local",
- "Sin-ji:zh-HK:local",
- "Tessa:en-ZA:local",
- "Thomas:fr-FR:local",
- "Ting-Ting:zh-CN:local",
- "Veena:en-IN:local",
- "Victoria:en-US:local",
- "Xander:nl-NL:local",
- "Yelda:tr-TR:local",
- "Yuna:ko-KR:local",
- "Yuri:ru-RU:local",
- "Zosia:pl-PL:local",
- "Zuzana:cs-CZ:local"
- ]
- },
- {
- "navigator": {
- "userAgent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:150.0) Gecko/20100101 Firefox/150.0",
- "platform": "MacIntel",
- "hardwareConcurrency": 2,
- "maxTouchPoints": 0
- },
- "screen": {
- "width": 2048,
- "height": 1080,
- "colorDepth": 24,
- "availWidth": 2048,
- "availHeight": 1080,
- "devicePixelRatio": 2
- },
- "webgl": {
- "unmaskedVendor": "Apple",
- "unmaskedRenderer": "Apple M1, or similar"
- }
- },
- {
- "navigator": {
- "userAgent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:150.0) Gecko/20100101 Firefox/150.0",
- "platform": "MacIntel",
- "hardwareConcurrency": 10,
- "maxTouchPoints": 0
- },
- "screen": {
- "width": 1512,
- "height": 982,
- "colorDepth": 30,
- "availWidth": 1512,
- "availHeight": 893,
- "devicePixelRatio": 2
- },
- "webgl": {
- "unmaskedVendor": "Apple",
- "unmaskedRenderer": "Apple M1, or similar"
- }
- },
- {
- "navigator": {
- "userAgent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:150.0) Gecko/20100101 Firefox/150.0",
- "platform": "MacIntel",
- "hardwareConcurrency": 8,
- "maxTouchPoints": 0
- },
- "screen": {
- "width": 1470,
- "height": 956,
- "colorDepth": 30,
- "availWidth": 1470,
- "availHeight": 880,
- "devicePixelRatio": 2
- },
- "webgl": {
- "unmaskedVendor": "Apple",
- "unmaskedRenderer": "Apple M1, or similar"
- },
- "speechVoices": [
- "Albert:en-US:local",
- "Alice:it-IT:local",
- "Soumya:kn-IN:local",
- "Alva:sv-SE:local",
- "Aman:en-IN:local",
- "Amélie:fr-CA:local",
- "Amira:ms-MY:local",
- "Anna:de-DE:local",
- "Aru:kk-KZ:local",
- "Bad News:en-US:local",
- "Bahh:en-US:local",
- "Bells:en-US:local",
- "Boing:en-US:local",
- "Bubbles:en-US:local",
- "Carmit:he-IL:local",
- "Cellos:en-US:local",
- "Damayanti:id-ID:local",
- "Daniel:en-GB:local",
- "Daria:bg-BG:local",
- "Wobble:en-US:local",
- "Eddy (German (Germany)):de-DE:local",
- "Eddy (English (UK)):en-GB:local",
- "Eddy (English (US)):en-US:local",
- "Eddy (Spanish (Spain)):es-ES:local",
- "Eddy (Spanish (Mexico)):es-MX:local",
- "Eddy (Finnish (Finland)):fi-FI:local",
- "Eddy (French (Canada)):fr-CA:local",
- "Eddy (French (France)):fr-FR:local",
- "Eddy (Italian (Italy)):it-IT:local",
- "Eddy (Japanese (Japan)):ja-JP:local",
- "Eddy (Korean (South Korea)):ko-KR:local",
- "Eddy (Portuguese (Brazil)):pt-BR:local",
- "Eddy (Chinese (China mainland)):zh-CN:local",
- "Eddy (Chinese (Taiwan)):zh-TW:local",
- "Ellen:nl-BE:local",
- "Flo (German (Germany)):de-DE:local",
- "Flo (English (UK)):en-GB:local",
- "Flo (English (US)):en-US:local",
- "Flo (Spanish (Spain)):es-ES:local",
- "Flo (Spanish (Mexico)):es-MX:local",
- "Flo (Finnish (Finland)):fi-FI:local",
- "Flo (French (Canada)):fr-CA:local",
- "Flo (French (France)):fr-FR:local",
- "Flo (Italian (Italy)):it-IT:local",
- "Flo (Japanese (Japan)):ja-JP:local",
- "Flo (Korean (South Korea)):ko-KR:local",
- "Flo (Portuguese (Brazil)):pt-BR:local",
- "Flo (Chinese (China mainland)):zh-CN:local",
- "Flo (Chinese (Taiwan)):zh-TW:local",
- "Fred:en-US:local",
- "Geeta:te-IN:local",
- "Good News:en-US:local",
- "Grandma (German (Germany)):de-DE:local",
- "Grandma (English (UK)):en-GB:local",
- "Grandma (English (US)):en-US:local",
- "Grandma (Spanish (Spain)):es-ES:local",
- "Grandma (Spanish (Mexico)):es-MX:local",
- "Grandma (Finnish (Finland)):fi-FI:local",
- "Grandma (French (Canada)):fr-CA:local",
- "Grandma (French (France)):fr-FR:local",
- "Grandma (Italian (Italy)):it-IT:local",
- "Grandma (Japanese (Japan)):ja-JP:local",
- "Grandma (Korean (South Korea)):ko-KR:local",
- "Grandma (Portuguese (Brazil)):pt-BR:local",
- "Grandma (Chinese (China mainland)):zh-CN:local",
- "Grandma (Chinese (Taiwan)):zh-TW:local",
- "Grandpa (German (Germany)):de-DE:local",
- "Grandpa (English (UK)):en-GB:local",
- "Grandpa (English (US)):en-US:local",
- "Grandpa (Spanish (Spain)):es-ES:local",
- "Grandpa (Spanish (Mexico)):es-MX:local",
- "Grandpa (Finnish (Finland)):fi-FI:local",
- "Grandpa (French (Canada)):fr-CA:local",
- "Grandpa (French (France)):fr-FR:local",
- "Grandpa (Italian (Italy)):it-IT:local",
- "Grandpa (Japanese (Japan)):ja-JP:local",
- "Grandpa (Korean (South Korea)):ko-KR:local",
- "Grandpa (Portuguese (Brazil)):pt-BR:local",
- "Grandpa (Chinese (China mainland)):zh-CN:local",
- "Grandpa (Chinese (Taiwan)):zh-TW:local",
- "Jester:en-US:local",
- "Ioana:ro-RO:local",
- "Jacques:fr-FR:local",
- "Joana:pt-PT:local",
- "Junior:en-US:local",
- "Kanya:th-TH:local",
- "Karen:en-AU:local",
- "Kathy:en-US:local",
- "Kyoko:ja-JP:local",
- "Lana:hr-HR:local",
- "Laura:sk-SK:local",
- "Lekha:hi-IN:local",
- "Lesya:uk-UA:local",
- "Linh:vi-VN:local",
- "Luciana:pt-BR:local",
- "Majed:ar-001:local",
- "Tünde:hu-HU:local",
- "Meijia:zh-TW:local",
- "Melina:el-GR:local",
- "Milena:ru-RU:local",
- "Moira:en-IE:local",
- "Mónica:es-ES:local",
- "Montse:ca-ES:local",
- "Nora:nb-NO:local",
- "Ona:lt-LT:local",
- "Organ:en-US:local",
- "Paulina:es-MX:local",
- "Piya:bn-IN:local",
- "Superstar:en-US:local",
- "Ralph:en-US:local",
- "Reed (German (Germany)):de-DE:local",
- "Reed (English (UK)):en-GB:local",
- "Reed (English (US)):en-US:local",
- "Reed (Spanish (Spain)):es-ES:local",
- "Reed (Spanish (Mexico)):es-MX:local",
- "Reed (Finnish (Finland)):fi-FI:local",
- "Reed (French (Canada)):fr-CA:local",
- "Reed (Italian (Italy)):it-IT:local",
- "Reed (Japanese (Japan)):ja-JP:local",
- "Reed (Korean (South Korea)):ko-KR:local",
- "Reed (Portuguese (Brazil)):pt-BR:local",
- "Reed (Chinese (China mainland)):zh-CN:local",
- "Reed (Chinese (Taiwan)):zh-TW:local",
- "Rishi:en-IN:local",
- "Rocko (German (Germany)):de-DE:local",
- "Rocko (English (UK)):en-GB:local",
- "Rocko (English (US)):en-US:local",
- "Rocko (Spanish (Spain)):es-ES:local",
- "Rocko (Spanish (Mexico)):es-MX:local",
- "Rocko (Finnish (Finland)):fi-FI:local",
- "Rocko (French (Canada)):fr-CA:local",
- "Rocko (French (France)):fr-FR:local",
- "Rocko (Italian (Italy)):it-IT:local",
- "Rocko (Japanese (Japan)):ja-JP:local",
- "Rocko (Korean (South Korea)):ko-KR:local",
- "Rocko (Portuguese (Brazil)):pt-BR:local",
- "Rocko (Chinese (China mainland)):zh-CN:local",
- "Rocko (Chinese (Taiwan)):zh-TW:local",
- "Samantha:en-US:local",
- "Sandy (German (Germany)):de-DE:local",
- "Sandy (English (UK)):en-GB:local",
- "Sandy (English (US)):en-US:local",
- "Sandy (Spanish (Spain)):es-ES:local",
- "Sandy (Spanish (Mexico)):es-MX:local",
- "Sandy (Finnish (Finland)):fi-FI:local",
- "Sandy (French (Canada)):fr-CA:local",
- "Sandy (French (France)):fr-FR:local",
- "Sandy (Italian (Italy)):it-IT:local",
- "Sandy (Japanese (Japan)):ja-JP:local",
- "Sandy (Korean (South Korea)):ko-KR:local",
- "Sandy (Portuguese (Brazil)):pt-BR:local",
- "Sandy (Chinese (China mainland)):zh-CN:local",
- "Sandy (Chinese (Taiwan)):zh-TW:local",
- "Sara:da-DK:local",
- "Satu:fi-FI:local",
- "Shelley (German (Germany)):de-DE:local",
- "Shelley (English (UK)):en-GB:local",
- "Shelley (English (US)):en-US:local",
- "Shelley (Spanish (Spain)):es-ES:local",
- "Shelley (Spanish (Mexico)):es-MX:local",
- "Shelley (Finnish (Finland)):fi-FI:local",
- "Shelley (French (Canada)):fr-CA:local",
- "Shelley (French (France)):fr-FR:local",
- "Shelley (Italian (Italy)):it-IT:local",
- "Shelley (Japanese (Japan)):ja-JP:local",
- "Shelley (Korean (South Korea)):ko-KR:local",
- "Shelley (Portuguese (Brazil)):pt-BR:local",
- "Shelley (Chinese (China mainland)):zh-CN:local",
- "Shelley (Chinese (Taiwan)):zh-TW:local",
- "Sinji:zh-HK:local",
- "Tara:en-IN:local",
- "Tessa:en-ZA:local",
- "Thomas:fr-FR:local",
- "Tina:sl-SI:local",
- "Tingting:zh-CN:local",
- "Trinoids:en-US:local",
- "Vani:ta-IN:local",
- "Whisper:en-US:local",
- "Xander:nl-NL:local",
- "Yelda:tr-TR:local",
- "Yuna:ko-KR:local",
- "Zarvox:en-US:local",
- "Zosia:pl-PL:local",
- "Zuzana:cs-CZ:local"
- ]
- },
- {
- "navigator": {
- "userAgent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:149.0) Gecko/20100101 Firefox/149.0",
- "platform": "MacIntel",
- "hardwareConcurrency": 18,
- "maxTouchPoints": 0
- },
- "screen": {
- "width": 2560,
- "height": 1440,
- "colorDepth": 30,
- "availWidth": 2560,
- "availHeight": 1410,
- "devicePixelRatio": 2
- },
- "webgl": {
- "unmaskedVendor": "Apple",
- "unmaskedRenderer": "Apple M1, or similar"
- },
- "speechVoices": [
- "Albert:en-US:local",
- "Alice:it-IT:local",
- "Soumya:kn-IN:local",
- "Alva:sv-SE:local",
- "Aman:en-IN:local",
- "Amélie:fr-CA:local",
- "Amira:ms-MY:local",
- "Anna:de-DE:local",
- "Aru:kk-KZ:local",
- "Bad News:en-US:local",
- "Bahh:en-US:local",
- "Bells:en-US:local",
- "Boing:en-US:local",
- "Bubbles:en-US:local",
- "Carmit:he-IL:local",
- "Cellos:en-US:local",
- "Damayanti:id-ID:local",
- "Daniel:en-GB:local",
- "Daria:bg-BG:local",
- "Wobble:en-US:local",
- "Ellen:nl-BE:local",
- "Fred:en-US:local",
- "Geeta:te-IN:local",
- "Good News:en-US:local",
- "Jester:en-US:local",
- "Ioana:ro-RO:local",
- "Joana:pt-PT:local",
- "Junior:en-US:local",
- "Kanya:th-TH:local",
- "Karen:en-AU:local",
- "Kathy:en-US:local",
- "Kyoko:ja-JP:local",
- "Lana:hr-HR:local",
- "Laura:sk-SK:local",
- "Lekha:hi-IN:local",
- "Lesya:uk-UA:local",
- "Linh:vi-VN:local",
- "Luciana:pt-BR:local",
- "Majed:ar-001:local",
- "Tünde:hu-HU:local",
- "Meijia:zh-TW:local",
- "Melina:el-GR:local",
- "Milena:ru-RU:local",
- "Moira:en-IE:local",
- "Mónica:es-ES:local",
- "Montse:ca-ES:local",
- "Nora:nb-NO:local",
- "Ona:lt-LT:local",
- "Organ:en-US:local",
- "Paulina:es-MX:local",
- "Piya:bn-IN:local",
- "Superstar:en-US:local",
- "Ralph:en-US:local",
- "Rishi:en-IN:local",
- "Samantha:en-US:local",
- "Sara:da-DK:local",
- "Satu:fi-FI:local",
- "Sinji:zh-HK:local",
- "Tara:en-IN:local",
- "Tessa:en-ZA:local",
- "Thomas:fr-FR:local",
- "Tina:sl-SI:local",
- "Tingting:zh-CN:local",
- "Trinoids:en-US:local",
- "Vani:ta-IN:local",
- "Whisper:en-US:local",
- "Xander:nl-NL:local",
- "Yelda:tr-TR:local",
- "Yuna:ko-KR:local",
- "Zarvox:en-US:local",
- "Zosia:pl-PL:local",
- "Zuzana:cs-CZ:local"
- ]
- },
- {
- "navigator": {
- "userAgent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:149.0) Gecko/20100101 Firefox/149.0",
- "platform": "MacIntel",
- "hardwareConcurrency": 2,
- "maxTouchPoints": 0
- },
- "screen": {
- "width": 1920,
- "height": 1080,
- "colorDepth": 30,
- "availWidth": 1920,
- "availHeight": 1055,
- "devicePixelRatio": 1
- },
- "webgl": {
- "unmaskedVendor": "Intel Inc.",
- "unmaskedRenderer": "Intel(R) HD Graphics 400, or similar"
- },
- "speechVoices": [
- "Albert:en-US:local",
- "Alice:it-IT:local",
- "Alva:sv-SE:local",
- "Amélie:fr-CA:local",
- "Amira:ms-MY:local",
- "Anna:de-DE:local",
- "Malas noticias:en-US:local",
- "Bahh:en-US:local",
- "Campanas:en-US:local",
- "Boing:en-US:local",
- "Burbujas:en-US:local",
- "Carmit:he-IL:local",
- "Violonchelos:en-US:local",
- "Damayanti:id-ID:local",
- "Daniel:en-GB:local",
- "Daria:bg-BG:local",
- "Wobble:en-US:local",
- "Eddy (Alemán (Alemania)):de-DE:local",
- "Eddy (Inglés (RU)):en-GB:local",
- "Eddy (Inglés (EE. UU.)):en-US:local",
- "Eddy (Español (España)):es-ES:local",
- "Eddy (Español (México)):es-MX:local",
- "Eddy (Finés (Finlandia)):fi-FI:local",
- "Eddy (Francés (Canadá)):fr-CA:local",
- "Eddy (Francés (Francia)):fr-FR:local",
- "Eddy (Italiano (Italia)):it-IT:local",
- "Eddy (Portugués (Brasil)):pt-BR:local",
- "Ellen:nl-BE:local",
- "Flo (Alemán (Alemania)):de-DE:local",
- "Flo (Inglés (RU)):en-GB:local",
- "Flo (Inglés (EE. UU.)):en-US:local",
- "Flo (Español (España)):es-ES:local",
- "Flo (Español (México)):es-MX:local",
- "Flo (Finés (Finlandia)):fi-FI:local",
- "Flo (Francés (Canadá)):fr-CA:local",
- "Flo (Francés (Francia)):fr-FR:local",
- "Flo (Italiano (Italia)):it-IT:local",
- "Flo (Portugués (Brasil)):pt-BR:local",
- "Fred:en-US:local",
- "Buenas noticias:en-US:local",
- "Grandma (Alemán (Alemania)):de-DE:local",
- "Grandma (Inglés (RU)):en-GB:local",
- "Grandma (Inglés (EE. UU.)):en-US:local",
- "Grandma (Español (España)):es-ES:local",
- "Grandma (Español (México)):es-MX:local",
- "Grandma (Finés (Finlandia)):fi-FI:local",
- "Grandma (Francés (Canadá)):fr-CA:local",
- "Grandma (Francés (Francia)):fr-FR:local",
- "Grandma (Italiano (Italia)):it-IT:local",
- "Grandma (Portugués (Brasil)):pt-BR:local",
- "Grandpa (Alemán (Alemania)):de-DE:local",
- "Grandpa (Inglés (RU)):en-GB:local",
- "Grandpa (Inglés (EE. UU.)):en-US:local",
- "Grandpa (Español (España)):es-ES:local",
- "Grandpa (Español (México)):es-MX:local",
- "Grandpa (Finés (Finlandia)):fi-FI:local",
- "Grandpa (Francés (Canadá)):fr-CA:local",
- "Grandpa (Francés (Francia)):fr-FR:local",
- "Grandpa (Italiano (Italia)):it-IT:local",
- "Grandpa (Portugués (Brasil)):pt-BR:local",
- "Bufón:en-US:local",
- "Ioana:ro-RO:local",
- "Jacques:fr-FR:local",
- "Joana:pt-PT:local",
- "Junior:en-US:local",
- "Kanya:th-TH:local",
- "Karen:en-AU:local",
- "Kathy:en-US:local",
- "Kyoko:ja-JP:local",
- "Lana:hr-HR:local",
- "Laura:sk-SK:local",
- "Lekha:hi-IN:local",
- "Lesya:uk-UA:local",
- "Linh:vi-VN:local",
- "Luciana:pt-BR:local",
- "Majed:ar-001:local",
- "Tünde:hu-HU:local",
- "Meijia:zh-TW:local",
- "Melina:el-GR:local",
- "Milena:ru-RU:local",
- "Moira:en-IE:local",
- "Mónica:es-ES:local",
- "Montse:ca-ES:local",
- "Nora:nb-NO:local",
- "Órgano:en-US:local",
- "Paulina:es-MX:local",
- "Superestrella:en-US:local",
- "Ralph:en-US:local",
- "Reed (Alemán (Alemania)):de-DE:local",
- "Reed (Inglés (RU)):en-GB:local",
- "Reed (Inglés (EE. UU.)):en-US:local",
- "Reed (Español (España)):es-ES:local",
- "Reed (Español (México)):es-MX:local",
- "Reed (Finés (Finlandia)):fi-FI:local",
- "Reed (Francés (Canadá)):fr-CA:local",
- "Reed (Italiano (Italia)):it-IT:local",
- "Reed (Portugués (Brasil)):pt-BR:local",
- "Rishi:en-IN:local",
- "Rocko (Alemán (Alemania)):de-DE:local",
- "Rocko (Inglés (RU)):en-GB:local",
- "Rocko (Inglés (EE. UU.)):en-US:local",
- "Rocko (Español (España)):es-ES:local",
- "Rocko (Español (México)):es-MX:local",
- "Rocko (Finés (Finlandia)):fi-FI:local",
- "Rocko (Francés (Canadá)):fr-CA:local",
- "Rocko (Francés (Francia)):fr-FR:local",
- "Rocko (Italiano (Italia)):it-IT:local",
- "Rocko (Portugués (Brasil)):pt-BR:local",
- "Samantha:en-US:local",
- "Sandy (Alemán (Alemania)):de-DE:local",
- "Sandy (Inglés (RU)):en-GB:local",
- "Sandy (Inglés (EE. UU.)):en-US:local",
- "Sandy (Español (España)):es-ES:local",
- "Sandy (Español (México)):es-MX:local",
- "Sandy (Finés (Finlandia)):fi-FI:local",
- "Sandy (Francés (Canadá)):fr-CA:local",
- "Sandy (Francés (Francia)):fr-FR:local",
- "Sandy (Italiano (Italia)):it-IT:local",
- "Sandy (Portugués (Brasil)):pt-BR:local",
- "Sara:da-DK:local",
- "Satu:fi-FI:local",
- "Shelley (Alemán (Alemania)):de-DE:local",
- "Shelley (Inglés (RU)):en-GB:local",
- "Shelley (Inglés (EE. UU.)):en-US:local",
- "Shelley (Español (España)):es-ES:local",
- "Shelley (Español (México)):es-MX:local",
- "Shelley (Finés (Finlandia)):fi-FI:local",
- "Shelley (Francés (Canadá)):fr-CA:local",
- "Shelley (Francés (Francia)):fr-FR:local",
- "Shelley (Italiano (Italia)):it-IT:local",
- "Shelley (Portugués (Brasil)):pt-BR:local",
- "Sinji:zh-HK:local",
- "Tessa:en-ZA:local",
- "Thomas:fr-FR:local",
- "Tingting:zh-CN:local",
- "Trinoids:en-US:local",
- "Susurro:en-US:local",
- "Xander:nl-NL:local",
- "Yelda:tr-TR:local",
- "Yuna:ko-KR:local",
- "Zarvox:en-US:local",
- "Zosia:pl-PL:local",
- "Zuzana:cs-CZ:local"
- ]
- },
- {
- "navigator": {
- "userAgent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:149.0) Gecko/20100101 Firefox/149.0",
- "platform": "MacIntel",
- "hardwareConcurrency": 8,
- "maxTouchPoints": 0
- },
- "screen": {
- "width": 1920,
- "height": 1080,
- "colorDepth": 30,
- "availWidth": 1920,
- "availHeight": 1080,
- "devicePixelRatio": 2
- },
- "webgl": {
- "unmaskedVendor": "Apple",
- "unmaskedRenderer": "Apple M1, or similar"
- },
- "speechVoices": [
- "Albert:en-US:local",
- "Alice:it-IT:local",
- "Alva:sv-SE:local",
- "Amélie:fr-CA:local",
- "Amira:ms-MY:local",
- "Anna:de-DE:local",
- "Bad News:en-US:local",
- "Bahh:en-US:local",
- "Bells:en-US:local",
- "Boing:en-US:local",
- "Bubbles:en-US:local",
- "Carmit:he-IL:local",
- "Cellos:en-US:local",
- "Damayanti:id-ID:local",
- "Daniel:en-GB:local",
- "Daria:bg-BG:local",
- "Wobble:en-US:local",
- "Eddy (German (Germany)):de-DE:local",
- "Eddy (English (UK)):en-GB:local",
- "Eddy (English (US)):en-US:local",
- "Eddy (Spanish (Spain)):es-ES:local",
- "Eddy (Spanish (Mexico)):es-MX:local",
- "Eddy (Finnish (Finland)):fi-FI:local",
- "Eddy (French (Canada)):fr-CA:local",
- "Eddy (French (France)):fr-FR:local",
- "Eddy (Italian (Italy)):it-IT:local",
- "Eddy (Japanese (Japan)):ja-JP:local",
- "Eddy (Korean (South Korea)):ko-KR:local",
- "Eddy (Portuguese (Brazil)):pt-BR:local",
- "Eddy (Chinese (China mainland)):zh-CN:local",
- "Eddy (Chinese (Taiwan)):zh-TW:local",
- "Ellen:nl-BE:local",
- "Flo (German (Germany)):de-DE:local",
- "Flo (English (UK)):en-GB:local",
- "Flo (English (US)):en-US:local",
- "Flo (Spanish (Spain)):es-ES:local",
- "Flo (Spanish (Mexico)):es-MX:local",
- "Flo (Finnish (Finland)):fi-FI:local",
- "Flo (French (Canada)):fr-CA:local",
- "Flo (French (France)):fr-FR:local",
- "Flo (Italian (Italy)):it-IT:local",
- "Flo (Japanese (Japan)):ja-JP:local",
- "Flo (Korean (South Korea)):ko-KR:local",
- "Flo (Portuguese (Brazil)):pt-BR:local",
- "Flo (Chinese (China mainland)):zh-CN:local",
- "Flo (Chinese (Taiwan)):zh-TW:local",
- "Fred:en-US:local",
- "Good News:en-US:local",
- "Grandma (German (Germany)):de-DE:local",
- "Grandma (English (UK)):en-GB:local",
- "Grandma (English (US)):en-US:local",
- "Grandma (Spanish (Spain)):es-ES:local",
- "Grandma (Spanish (Mexico)):es-MX:local",
- "Grandma (Finnish (Finland)):fi-FI:local",
- "Grandma (French (Canada)):fr-CA:local",
- "Grandma (French (France)):fr-FR:local",
- "Grandma (Italian (Italy)):it-IT:local",
- "Grandma (Japanese (Japan)):ja-JP:local",
- "Grandma (Korean (South Korea)):ko-KR:local",
- "Grandma (Portuguese (Brazil)):pt-BR:local",
- "Grandma (Chinese (China mainland)):zh-CN:local",
- "Grandma (Chinese (Taiwan)):zh-TW:local",
- "Grandpa (German (Germany)):de-DE:local",
- "Grandpa (English (UK)):en-GB:local",
- "Grandpa (English (US)):en-US:local",
- "Grandpa (Spanish (Spain)):es-ES:local",
- "Grandpa (Spanish (Mexico)):es-MX:local",
- "Grandpa (Finnish (Finland)):fi-FI:local",
- "Grandpa (French (Canada)):fr-CA:local",
- "Grandpa (French (France)):fr-FR:local",
- "Grandpa (Italian (Italy)):it-IT:local",
- "Grandpa (Japanese (Japan)):ja-JP:local",
- "Grandpa (Korean (South Korea)):ko-KR:local",
- "Grandpa (Portuguese (Brazil)):pt-BR:local",
- "Grandpa (Chinese (China mainland)):zh-CN:local",
- "Grandpa (Chinese (Taiwan)):zh-TW:local",
- "Jester:en-US:local",
- "Ioana:ro-RO:local",
- "Jacques:fr-FR:local",
- "Joana:pt-PT:local",
- "Junior:en-US:local",
- "Kanya:th-TH:local",
- "Karen:en-AU:local",
- "Kathy:en-US:local",
- "Kyoko:ja-JP:local",
- "Lana:hr-HR:local",
- "Laura:sk-SK:local",
- "Lekha:hi-IN:local",
- "Lesya:uk-UA:local",
- "Linh:vi-VN:local",
- "Luciana:pt-BR:local",
- "Majed:ar-001:local",
- "Tünde:hu-HU:local",
- "Meijia:zh-TW:local",
- "Melina:el-GR:local",
- "Milena:ru-RU:local",
- "Moira:en-IE:local",
- "Mónica:es-ES:local",
- "Montse:ca-ES:local",
- "Nora:nb-NO:local",
- "Organ:en-US:local",
- "Paulina:es-MX:local",
- "Superstar:en-US:local",
- "Ralph:en-US:local",
- "Reed (German (Germany)):de-DE:local",
- "Reed (English (UK)):en-GB:local",
- "Reed (English (US)):en-US:local",
- "Reed (Spanish (Spain)):es-ES:local",
- "Reed (Spanish (Mexico)):es-MX:local",
- "Reed (Finnish (Finland)):fi-FI:local",
- "Reed (French (Canada)):fr-CA:local",
- "Reed (Italian (Italy)):it-IT:local",
- "Reed (Japanese (Japan)):ja-JP:local",
- "Reed (Korean (South Korea)):ko-KR:local",
- "Reed (Portuguese (Brazil)):pt-BR:local",
- "Reed (Chinese (China mainland)):zh-CN:local",
- "Reed (Chinese (Taiwan)):zh-TW:local",
- "Rishi:en-IN:local",
- "Rocko (German (Germany)):de-DE:local",
- "Rocko (English (UK)):en-GB:local",
- "Rocko (English (US)):en-US:local",
- "Rocko (Spanish (Spain)):es-ES:local",
- "Rocko (Spanish (Mexico)):es-MX:local",
- "Rocko (Finnish (Finland)):fi-FI:local",
- "Rocko (French (Canada)):fr-CA:local",
- "Rocko (French (France)):fr-FR:local",
- "Rocko (Italian (Italy)):it-IT:local",
- "Rocko (Japanese (Japan)):ja-JP:local",
- "Rocko (Korean (South Korea)):ko-KR:local",
- "Rocko (Portuguese (Brazil)):pt-BR:local",
- "Rocko (Chinese (China mainland)):zh-CN:local",
- "Rocko (Chinese (Taiwan)):zh-TW:local",
- "Samantha:en-US:local",
- "Sandy (German (Germany)):de-DE:local",
- "Sandy (English (UK)):en-GB:local",
- "Sandy (English (US)):en-US:local",
- "Sandy (Spanish (Spain)):es-ES:local",
- "Sandy (Spanish (Mexico)):es-MX:local",
- "Sandy (Finnish (Finland)):fi-FI:local",
- "Sandy (French (Canada)):fr-CA:local",
- "Sandy (French (France)):fr-FR:local",
- "Sandy (Italian (Italy)):it-IT:local",
- "Sandy (Japanese (Japan)):ja-JP:local",
- "Sandy (Korean (South Korea)):ko-KR:local",
- "Sandy (Portuguese (Brazil)):pt-BR:local",
- "Sandy (Chinese (China mainland)):zh-CN:local",
- "Sandy (Chinese (Taiwan)):zh-TW:local",
- "Sara:da-DK:local",
- "Satu:fi-FI:local",
- "Shelley (German (Germany)):de-DE:local",
- "Shelley (English (UK)):en-GB:local",
- "Shelley (English (US)):en-US:local",
- "Shelley (Spanish (Spain)):es-ES:local",
- "Shelley (Spanish (Mexico)):es-MX:local",
- "Shelley (Finnish (Finland)):fi-FI:local",
- "Shelley (French (Canada)):fr-CA:local",
- "Shelley (French (France)):fr-FR:local",
- "Shelley (Italian (Italy)):it-IT:local",
- "Shelley (Japanese (Japan)):ja-JP:local",
- "Shelley (Korean (South Korea)):ko-KR:local",
- "Shelley (Portuguese (Brazil)):pt-BR:local",
- "Shelley (Chinese (China mainland)):zh-CN:local",
- "Shelley (Chinese (Taiwan)):zh-TW:local",
- "Sinji:zh-HK:local",
- "Tessa:en-ZA:local",
- "Thomas:fr-FR:local",
- "Tina:sl-SI:local",
- "Tingting:zh-CN:local",
- "Trinoids:en-US:local",
- "Vani:ta-IN:local",
- "Whisper:en-US:local",
- "Xander:nl-NL:local",
- "Yelda:tr-TR:local",
- "Yuna:ko-KR:local",
- "Zarvox:en-US:local",
- "Zosia:pl-PL:local",
- "Zuzana:cs-CZ:local"
- ]
- },
- {
- "navigator": {
- "userAgent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:149.0) Gecko/20100101 Firefox/149.0",
- "platform": "MacIntel",
- "hardwareConcurrency": 10,
- "maxTouchPoints": 0
- },
- "screen": {
- "width": 2560,
- "height": 1600,
- "colorDepth": 30,
- "availWidth": 2560,
- "availHeight": 1480,
- "devicePixelRatio": 1
- },
- "webgl": {
- "unmaskedVendor": "Apple",
- "unmaskedRenderer": "Apple M1, or similar"
- },
- "speechVoices": [
- "Albert:en-US:local",
- "Alice:it-IT:local",
- "Soumya:kn-IN:local",
- "Alva:sv-SE:local",
- "Aman:en-IN:local",
- "Amélie:fr-CA:local",
- "Amira:ms-MY:local",
- "Anna:de-DE:local",
- "Aru:kk-KZ:local",
- "Bad News:en-US:local",
- "Bahh:en-US:local",
- "Bells:en-US:local",
- "Boing:en-US:local",
- "Bubbles:en-US:local",
- "Carmit:he-IL:local",
- "Cellos:en-US:local",
- "Damayanti:id-ID:local",
- "Daniel:en-GB:local",
- "Daria:bg-BG:local",
- "Wobble:en-US:local",
- "Eddy (German (Germany)):de-DE:local",
- "Eddy (English (UK)):en-GB:local",
- "Eddy (English (US)):en-US:local",
- "Eddy (Spanish (Spain)):es-ES:local",
- "Eddy (Spanish (Mexico)):es-MX:local",
- "Eddy (Finnish (Finland)):fi-FI:local",
- "Eddy (French (Canada)):fr-CA:local",
- "Eddy (French (France)):fr-FR:local",
- "Eddy (Italian (Italy)):it-IT:local",
- "Eddy (Japanese (Japan)):ja-JP:local",
- "Eddy (Korean (South Korea)):ko-KR:local",
- "Eddy (Portuguese (Brazil)):pt-BR:local",
- "Eddy (Chinese (China mainland)):zh-CN:local",
- "Eddy (Chinese (Taiwan)):zh-TW:local",
- "Ellen:nl-BE:local",
- "Flo (German (Germany)):de-DE:local",
- "Flo (English (UK)):en-GB:local",
- "Flo (English (US)):en-US:local",
- "Flo (Spanish (Spain)):es-ES:local",
- "Flo (Spanish (Mexico)):es-MX:local",
- "Flo (Finnish (Finland)):fi-FI:local",
- "Flo (French (Canada)):fr-CA:local",
- "Flo (French (France)):fr-FR:local",
- "Flo (Italian (Italy)):it-IT:local",
- "Flo (Japanese (Japan)):ja-JP:local",
- "Flo (Korean (South Korea)):ko-KR:local",
- "Flo (Portuguese (Brazil)):pt-BR:local",
- "Flo (Chinese (China mainland)):zh-CN:local",
- "Flo (Chinese (Taiwan)):zh-TW:local",
- "Fred:en-US:local",
- "Geeta:te-IN:local",
- "Good News:en-US:local",
- "Grandma (German (Germany)):de-DE:local",
- "Grandma (English (UK)):en-GB:local",
- "Grandma (English (US)):en-US:local",
- "Grandma (Spanish (Spain)):es-ES:local",
- "Grandma (Spanish (Mexico)):es-MX:local",
- "Grandma (Finnish (Finland)):fi-FI:local",
- "Grandma (French (Canada)):fr-CA:local",
- "Grandma (French (France)):fr-FR:local",
- "Grandma (Italian (Italy)):it-IT:local",
- "Grandma (Japanese (Japan)):ja-JP:local",
- "Grandma (Korean (South Korea)):ko-KR:local",
- "Grandma (Portuguese (Brazil)):pt-BR:local",
- "Grandma (Chinese (China mainland)):zh-CN:local",
- "Grandma (Chinese (Taiwan)):zh-TW:local",
- "Grandpa (German (Germany)):de-DE:local",
- "Grandpa (English (UK)):en-GB:local",
- "Grandpa (English (US)):en-US:local",
- "Grandpa (Spanish (Spain)):es-ES:local",
- "Grandpa (Spanish (Mexico)):es-MX:local",
- "Grandpa (Finnish (Finland)):fi-FI:local",
- "Grandpa (French (Canada)):fr-CA:local",
- "Grandpa (French (France)):fr-FR:local",
- "Grandpa (Italian (Italy)):it-IT:local",
- "Grandpa (Japanese (Japan)):ja-JP:local",
- "Grandpa (Korean (South Korea)):ko-KR:local",
- "Grandpa (Portuguese (Brazil)):pt-BR:local",
- "Grandpa (Chinese (China mainland)):zh-CN:local",
- "Grandpa (Chinese (Taiwan)):zh-TW:local",
- "Jester:en-US:local",
- "Ioana:ro-RO:local",
- "Jacques:fr-FR:local",
- "Joana:pt-PT:local",
- "Junior:en-US:local",
- "Kanya:th-TH:local",
- "Karen:en-AU:local",
- "Kathy:en-US:local",
- "Kyoko:ja-JP:local",
- "Lana:hr-HR:local",
- "Laura:sk-SK:local",
- "Lekha:hi-IN:local",
- "Lesya:uk-UA:local",
- "Linh:vi-VN:local",
- "Luciana:pt-BR:local",
- "Majed:ar-001:local",
- "Tünde:hu-HU:local",
- "Meijia:zh-TW:local",
- "Melina:el-GR:local",
- "Milena:ru-RU:local",
- "Moira:en-IE:local",
- "Mónica:es-ES:local",
- "Montse:ca-ES:local",
- "Nora:nb-NO:local",
- "Ona:lt-LT:local",
- "Organ:en-US:local",
- "Paulina:es-MX:local",
- "Piya:bn-IN:local",
- "Superstar:en-US:local",
- "Ralph:en-US:local",
- "Reed (German (Germany)):de-DE:local",
- "Reed (English (UK)):en-GB:local",
- "Reed (English (US)):en-US:local",
- "Reed (Spanish (Spain)):es-ES:local",
- "Reed (Spanish (Mexico)):es-MX:local",
- "Reed (Finnish (Finland)):fi-FI:local",
- "Reed (French (Canada)):fr-CA:local",
- "Reed (Italian (Italy)):it-IT:local",
- "Reed (Japanese (Japan)):ja-JP:local",
- "Reed (Korean (South Korea)):ko-KR:local",
- "Reed (Portuguese (Brazil)):pt-BR:local",
- "Reed (Chinese (China mainland)):zh-CN:local",
- "Reed (Chinese (Taiwan)):zh-TW:local",
- "Rishi:en-IN:local",
- "Rocko (German (Germany)):de-DE:local",
- "Rocko (English (UK)):en-GB:local",
- "Rocko (English (US)):en-US:local",
- "Rocko (Spanish (Spain)):es-ES:local",
- "Rocko (Spanish (Mexico)):es-MX:local",
- "Rocko (Finnish (Finland)):fi-FI:local",
- "Rocko (French (Canada)):fr-CA:local",
- "Rocko (French (France)):fr-FR:local",
- "Rocko (Italian (Italy)):it-IT:local",
- "Rocko (Japanese (Japan)):ja-JP:local",
- "Rocko (Korean (South Korea)):ko-KR:local",
- "Rocko (Portuguese (Brazil)):pt-BR:local",
- "Rocko (Chinese (China mainland)):zh-CN:local",
- "Rocko (Chinese (Taiwan)):zh-TW:local",
- "Samantha:en-US:local",
- "Sandy (German (Germany)):de-DE:local",
- "Sandy (English (UK)):en-GB:local",
- "Sandy (English (US)):en-US:local",
- "Sandy (Spanish (Spain)):es-ES:local",
- "Sandy (Spanish (Mexico)):es-MX:local",
- "Sandy (Finnish (Finland)):fi-FI:local",
- "Sandy (French (Canada)):fr-CA:local",
- "Sandy (French (France)):fr-FR:local",
- "Sandy (Italian (Italy)):it-IT:local",
- "Sandy (Japanese (Japan)):ja-JP:local",
- "Sandy (Korean (South Korea)):ko-KR:local",
- "Sandy (Portuguese (Brazil)):pt-BR:local",
- "Sandy (Chinese (China mainland)):zh-CN:local",
- "Sandy (Chinese (Taiwan)):zh-TW:local",
- "Sara:da-DK:local",
- "Satu:fi-FI:local",
- "Shelley (German (Germany)):de-DE:local",
- "Shelley (English (UK)):en-GB:local",
- "Shelley (English (US)):en-US:local",
- "Shelley (Spanish (Spain)):es-ES:local",
- "Shelley (Spanish (Mexico)):es-MX:local",
- "Shelley (Finnish (Finland)):fi-FI:local",
- "Shelley (French (Canada)):fr-CA:local",
- "Shelley (French (France)):fr-FR:local",
- "Shelley (Italian (Italy)):it-IT:local",
- "Shelley (Japanese (Japan)):ja-JP:local",
- "Shelley (Korean (South Korea)):ko-KR:local",
- "Shelley (Portuguese (Brazil)):pt-BR:local",
- "Shelley (Chinese (China mainland)):zh-CN:local",
- "Shelley (Chinese (Taiwan)):zh-TW:local",
- "Sinji:zh-HK:local",
- "Tara:en-IN:local",
- "Tessa:en-ZA:local",
- "Thomas:fr-FR:local",
- "Tina:sl-SI:local",
- "Tingting:zh-CN:local",
- "Trinoids:en-US:local",
- "Vani:ta-IN:local",
- "Whisper:en-US:local",
- "Xander:nl-NL:local",
- "Yelda:tr-TR:local",
- "Yuna:ko-KR:local",
- "Zarvox:en-US:local",
- "Zosia:pl-PL:local",
- "Zuzana:cs-CZ:local"
- ]
- },
- {
- "navigator": {
- "userAgent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:149.0) Gecko/20100101 Firefox/149.0",
- "platform": "MacIntel",
- "hardwareConcurrency": 16,
- "maxTouchPoints": 0
- },
- "screen": {
- "width": 1728,
- "height": 1117,
- "colorDepth": 30,
- "availWidth": 1728,
- "availHeight": 1083,
- "devicePixelRatio": 2
- },
- "webgl": {
- "unmaskedVendor": "Apple",
- "unmaskedRenderer": "Apple M1, or similar"
- },
- "speechVoices": [
- "Albert:en-US:local",
- "Alice:it-IT:local",
- "Soumya:kn-IN:local",
- "Alva:sv-SE:local",
- "Aman:en-IN:local",
- "Amélie:fr-CA:local",
- "Amira:ms-MY:local",
- "Anna:de-DE:local",
- "Aru:kk-KZ:local",
- "Bad News:en-US:local",
- "Bahh:en-US:local",
- "Bells:en-US:local",
- "Boing:en-US:local",
- "Bubbles:en-US:local",
- "Carmit:he-IL:local",
- "Cellos:en-US:local",
- "Damayanti:id-ID:local",
- "Daniel:en-GB:local",
- "Daria:bg-BG:local",
- "Wobble:en-US:local",
- "Eddy (German (Germany)):de-DE:local",
- "Eddy (English (UK)):en-GB:local",
- "Eddy (English (US)):en-US:local",
- "Eddy (Spanish (Spain)):es-ES:local",
- "Eddy (Spanish (Mexico)):es-MX:local",
- "Eddy (Finnish (Finland)):fi-FI:local",
- "Eddy (French (Canada)):fr-CA:local",
- "Eddy (French (France)):fr-FR:local",
- "Eddy (Italian (Italy)):it-IT:local",
- "Eddy (Japanese (Japan)):ja-JP:local",
- "Eddy (Korean (South Korea)):ko-KR:local",
- "Eddy (Portuguese (Brazil)):pt-BR:local",
- "Eddy (Chinese (China mainland)):zh-CN:local",
- "Eddy (Chinese (Taiwan)):zh-TW:local",
- "Ellen:nl-BE:local",
- "Flo (German (Germany)):de-DE:local",
- "Flo (English (UK)):en-GB:local",
- "Flo (English (US)):en-US:local",
- "Flo (Spanish (Spain)):es-ES:local",
- "Flo (Spanish (Mexico)):es-MX:local",
- "Flo (Finnish (Finland)):fi-FI:local",
- "Flo (French (Canada)):fr-CA:local",
- "Flo (French (France)):fr-FR:local",
- "Flo (Italian (Italy)):it-IT:local",
- "Flo (Japanese (Japan)):ja-JP:local",
- "Flo (Korean (South Korea)):ko-KR:local",
- "Flo (Portuguese (Brazil)):pt-BR:local",
- "Flo (Chinese (China mainland)):zh-CN:local",
- "Flo (Chinese (Taiwan)):zh-TW:local",
- "Fred:en-US:local",
- "Geeta:te-IN:local",
- "Good News:en-US:local",
- "Grandma (German (Germany)):de-DE:local",
- "Grandma (English (UK)):en-GB:local",
- "Grandma (English (US)):en-US:local",
- "Grandma (Spanish (Spain)):es-ES:local",
- "Grandma (Spanish (Mexico)):es-MX:local",
- "Grandma (Finnish (Finland)):fi-FI:local",
- "Grandma (French (Canada)):fr-CA:local",
- "Grandma (French (France)):fr-FR:local",
- "Grandma (Italian (Italy)):it-IT:local",
- "Grandma (Japanese (Japan)):ja-JP:local",
- "Grandma (Korean (South Korea)):ko-KR:local",
- "Grandma (Portuguese (Brazil)):pt-BR:local",
- "Grandma (Chinese (China mainland)):zh-CN:local",
- "Grandma (Chinese (Taiwan)):zh-TW:local",
- "Grandpa (German (Germany)):de-DE:local",
- "Grandpa (English (UK)):en-GB:local",
- "Grandpa (English (US)):en-US:local",
- "Grandpa (Spanish (Spain)):es-ES:local",
- "Grandpa (Spanish (Mexico)):es-MX:local",
- "Grandpa (Finnish (Finland)):fi-FI:local",
- "Grandpa (French (Canada)):fr-CA:local",
- "Grandpa (French (France)):fr-FR:local",
- "Grandpa (Italian (Italy)):it-IT:local",
- "Grandpa (Japanese (Japan)):ja-JP:local",
- "Grandpa (Korean (South Korea)):ko-KR:local",
- "Grandpa (Portuguese (Brazil)):pt-BR:local",
- "Grandpa (Chinese (China mainland)):zh-CN:local",
- "Grandpa (Chinese (Taiwan)):zh-TW:local",
- "Jester:en-US:local",
- "Ioana:ro-RO:local",
- "Jacques:fr-FR:local",
- "Joana:pt-PT:local",
- "Junior:en-US:local",
- "Kanya:th-TH:local",
- "Karen:en-AU:local",
- "Kathy:en-US:local",
- "Kyoko:ja-JP:local",
- "Lana:hr-HR:local",
- "Laura:sk-SK:local",
- "Lekha:hi-IN:local",
- "Lesya:uk-UA:local",
- "Linh:vi-VN:local",
- "Luciana:pt-BR:local",
- "Majed:ar-001:local",
- "Tünde:hu-HU:local",
- "Meijia:zh-TW:local",
- "Melina:el-GR:local",
- "Milena:ru-RU:local",
- "Moira:en-IE:local",
- "Mónica:es-ES:local",
- "Montse:ca-ES:local",
- "Nora:nb-NO:local",
- "Ona:lt-LT:local",
- "Organ:en-US:local",
- "Paulina:es-MX:local",
- "Piya:bn-IN:local",
- "Superstar:en-US:local",
- "Ralph:en-US:local",
- "Reed (German (Germany)):de-DE:local",
- "Reed (English (UK)):en-GB:local",
- "Reed (English (US)):en-US:local",
- "Reed (Spanish (Spain)):es-ES:local",
- "Reed (Spanish (Mexico)):es-MX:local",
- "Reed (Finnish (Finland)):fi-FI:local",
- "Reed (French (Canada)):fr-CA:local",
- "Reed (Italian (Italy)):it-IT:local",
- "Reed (Japanese (Japan)):ja-JP:local",
- "Reed (Korean (South Korea)):ko-KR:local",
- "Reed (Portuguese (Brazil)):pt-BR:local",
- "Reed (Chinese (China mainland)):zh-CN:local",
- "Reed (Chinese (Taiwan)):zh-TW:local",
- "Rishi:en-IN:local",
- "Rocko (German (Germany)):de-DE:local",
- "Rocko (English (UK)):en-GB:local",
- "Rocko (English (US)):en-US:local",
- "Rocko (Spanish (Spain)):es-ES:local",
- "Rocko (Spanish (Mexico)):es-MX:local",
- "Rocko (Finnish (Finland)):fi-FI:local",
- "Rocko (French (Canada)):fr-CA:local",
- "Rocko (French (France)):fr-FR:local",
- "Rocko (Italian (Italy)):it-IT:local",
- "Rocko (Japanese (Japan)):ja-JP:local",
- "Rocko (Korean (South Korea)):ko-KR:local",
- "Rocko (Portuguese (Brazil)):pt-BR:local",
- "Rocko (Chinese (China mainland)):zh-CN:local",
- "Rocko (Chinese (Taiwan)):zh-TW:local",
- "Samantha:en-US:local",
- "Sandy (German (Germany)):de-DE:local",
- "Sandy (English (UK)):en-GB:local",
- "Sandy (English (US)):en-US:local",
- "Sandy (Spanish (Spain)):es-ES:local",
- "Sandy (Spanish (Mexico)):es-MX:local",
- "Sandy (Finnish (Finland)):fi-FI:local",
- "Sandy (French (Canada)):fr-CA:local",
- "Sandy (French (France)):fr-FR:local",
- "Sandy (Italian (Italy)):it-IT:local",
- "Sandy (Japanese (Japan)):ja-JP:local",
- "Sandy (Korean (South Korea)):ko-KR:local",
- "Sandy (Portuguese (Brazil)):pt-BR:local",
- "Sandy (Chinese (China mainland)):zh-CN:local",
- "Sandy (Chinese (Taiwan)):zh-TW:local",
- "Sara:da-DK:local",
- "Satu:fi-FI:local",
- "Shelley (German (Germany)):de-DE:local",
- "Shelley (English (UK)):en-GB:local",
- "Shelley (English (US)):en-US:local",
- "Shelley (Spanish (Spain)):es-ES:local",
- "Shelley (Spanish (Mexico)):es-MX:local",
- "Shelley (Finnish (Finland)):fi-FI:local",
- "Shelley (French (Canada)):fr-CA:local",
- "Shelley (French (France)):fr-FR:local",
- "Shelley (Italian (Italy)):it-IT:local",
- "Shelley (Japanese (Japan)):ja-JP:local",
- "Shelley (Korean (South Korea)):ko-KR:local",
- "Shelley (Portuguese (Brazil)):pt-BR:local",
- "Shelley (Chinese (China mainland)):zh-CN:local",
- "Shelley (Chinese (Taiwan)):zh-TW:local",
- "Sinji:zh-HK:local",
- "Tara:en-IN:local",
- "Tessa:en-ZA:local",
- "Thomas:fr-FR:local",
- "Tina:sl-SI:local",
- "Tingting:zh-CN:local",
- "Trinoids:en-US:local",
- "Vani:ta-IN:local",
- "Whisper:en-US:local",
- "Xander:nl-NL:local",
- "Yelda:tr-TR:local",
- "Yuna:ko-KR:local",
- "Zarvox:en-US:local",
- "Zosia:pl-PL:local",
- "Zuzana:cs-CZ:local"
- ]
- },
- {
- "navigator": {
- "userAgent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:149.0) Gecko/20100101 Firefox/149.0",
- "platform": "MacIntel",
- "hardwareConcurrency": 10,
- "maxTouchPoints": 0
- },
- "screen": {
- "width": 1280,
- "height": 832,
- "colorDepth": 30,
- "availWidth": 1280,
- "availHeight": 803,
- "devicePixelRatio": 2
- },
- "webgl": {
- "unmaskedVendor": "Apple",
- "unmaskedRenderer": "Apple M1, or similar"
- },
- "speechVoices": [
- "Albert:en-US:local",
- "Alice:it-IT:local",
- "Soumya:kn-IN:local",
- "Alva:sv-SE:local",
- "Aman:en-IN:local",
- "Amélie:fr-CA:local",
- "Amira:ms-MY:local",
- "Anna:de-DE:local",
- "Aru:kk-KZ:local",
- "Malas noticias:en-US:local",
- "Bahh:en-US:local",
- "Campanas:en-US:local",
- "Boing:en-US:local",
- "Burbujas:en-US:local",
- "Carmit:he-IL:local",
- "Violonchelos:en-US:local",
- "Damayanti:id-ID:local",
- "Daniel:en-GB:local",
- "Daria:bg-BG:local",
- "Wobble:en-US:local",
- "Eddy (Alemán (Alemania)):de-DE:local",
- "Eddy (Inglés (RU)):en-GB:local",
- "Eddy (Inglés (EE. UU.)):en-US:local",
- "Eddy (Español (España)):es-ES:local",
- "Eddy (Español (México)):es-MX:local",
- "Eddy (Finés (Finlandia)):fi-FI:local",
- "Eddy (Francés (Canadá)):fr-CA:local",
- "Eddy (Francés (Francia)):fr-FR:local",
- "Eddy (Italiano (Italia)):it-IT:local",
- "Eddy (Japonés (Japón)):ja-JP:local",
- "Eddy (Coreano (Corea del Sur)):ko-KR:local",
- "Eddy (Portugués (Brasil)):pt-BR:local",
- "Eddy (Chino (China continental)):zh-CN:local",
- "Eddy (Chino (Taiwán)):zh-TW:local",
- "Ellen:nl-BE:local",
- "Flo (Alemán (Alemania)):de-DE:local",
- "Flo (Inglés (RU)):en-GB:local",
- "Flo (Inglés (EE. UU.)):en-US:local",
- "Flo (Español (España)):es-ES:local",
- "Flo (Español (México)):es-MX:local",
- "Flo (Finés (Finlandia)):fi-FI:local",
- "Flo (Francés (Canadá)):fr-CA:local",
- "Flo (Francés (Francia)):fr-FR:local",
- "Flo (Italiano (Italia)):it-IT:local",
- "Flo (Japonés (Japón)):ja-JP:local",
- "Flo (Coreano (Corea del Sur)):ko-KR:local",
- "Flo (Portugués (Brasil)):pt-BR:local",
- "Flo (Chino (China continental)):zh-CN:local",
- "Flo (Chino (Taiwán)):zh-TW:local",
- "Fred:en-US:local",
- "Geeta:te-IN:local",
- "Buenas noticias:en-US:local",
- "Grandma (Alemán (Alemania)):de-DE:local",
- "Grandma (Inglés (RU)):en-GB:local",
- "Grandma (Inglés (EE. UU.)):en-US:local",
- "Grandma (Español (España)):es-ES:local",
- "Grandma (Español (México)):es-MX:local",
- "Grandma (Finés (Finlandia)):fi-FI:local",
- "Grandma (Francés (Canadá)):fr-CA:local",
- "Grandma (Francés (Francia)):fr-FR:local",
- "Grandma (Italiano (Italia)):it-IT:local",
- "Grandma (Japonés (Japón)):ja-JP:local",
- "Grandma (Coreano (Corea del Sur)):ko-KR:local",
- "Grandma (Portugués (Brasil)):pt-BR:local",
- "Grandma (Chino (China continental)):zh-CN:local",
- "Grandma (Chino (Taiwán)):zh-TW:local",
- "Grandpa (Alemán (Alemania)):de-DE:local",
- "Grandpa (Inglés (RU)):en-GB:local",
- "Grandpa (Inglés (EE. UU.)):en-US:local",
- "Grandpa (Español (España)):es-ES:local",
- "Grandpa (Español (México)):es-MX:local",
- "Grandpa (Finés (Finlandia)):fi-FI:local",
- "Grandpa (Francés (Canadá)):fr-CA:local",
- "Grandpa (Francés (Francia)):fr-FR:local",
- "Grandpa (Italiano (Italia)):it-IT:local",
- "Grandpa (Japonés (Japón)):ja-JP:local",
- "Grandpa (Coreano (Corea del Sur)):ko-KR:local",
- "Grandpa (Portugués (Brasil)):pt-BR:local",
- "Grandpa (Chino (China continental)):zh-CN:local",
- "Grandpa (Chino (Taiwán)):zh-TW:local",
- "Bufón:en-US:local",
- "Ioana:ro-RO:local",
- "Jacques:fr-FR:local",
- "Joana:pt-PT:local",
- "Junior:en-US:local",
- "Kanya:th-TH:local",
- "Karen:en-AU:local",
- "Kathy:en-US:local",
- "Kyoko:ja-JP:local",
- "Lana:hr-HR:local",
- "Laura:sk-SK:local",
- "Lekha:hi-IN:local",
- "Lesya:uk-UA:local",
- "Linh:vi-VN:local",
- "Luciana:pt-BR:local",
- "Majed:ar-001:local",
- "Tünde:hu-HU:local",
- "Meijia:zh-TW:local",
- "Melina:el-GR:local",
- "Milena:ru-RU:local",
- "Moira:en-IE:local",
- "Mónica:es-ES:local",
- "Montse:ca-ES:local",
- "Nora:nb-NO:local",
- "Ona:lt-LT:local",
- "Órgano:en-US:local",
- "Paulina:es-MX:local",
- "Piya:bn-IN:local",
- "Superestrella:en-US:local",
- "Ralph:en-US:local",
- "Reed (Alemán (Alemania)):de-DE:local",
- "Reed (Inglés (RU)):en-GB:local",
- "Reed (Inglés (EE. UU.)):en-US:local",
- "Reed (Español (España)):es-ES:local",
- "Reed (Español (México)):es-MX:local",
- "Reed (Finés (Finlandia)):fi-FI:local",
- "Reed (Francés (Canadá)):fr-CA:local",
- "Reed (Italiano (Italia)):it-IT:local",
- "Reed (Japonés (Japón)):ja-JP:local",
- "Reed (Coreano (Corea del Sur)):ko-KR:local",
- "Reed (Portugués (Brasil)):pt-BR:local",
- "Reed (Chino (China continental)):zh-CN:local",
- "Reed (Chino (Taiwán)):zh-TW:local",
- "Rishi:en-IN:local",
- "Rocko (Alemán (Alemania)):de-DE:local",
- "Rocko (Inglés (RU)):en-GB:local",
- "Rocko (Inglés (EE. UU.)):en-US:local",
- "Rocko (Español (España)):es-ES:local",
- "Rocko (Español (México)):es-MX:local",
- "Rocko (Finés (Finlandia)):fi-FI:local",
- "Rocko (Francés (Canadá)):fr-CA:local",
- "Rocko (Francés (Francia)):fr-FR:local",
- "Rocko (Italiano (Italia)):it-IT:local",
- "Rocko (Japonés (Japón)):ja-JP:local",
- "Rocko (Coreano (Corea del Sur)):ko-KR:local",
- "Rocko (Portugués (Brasil)):pt-BR:local",
- "Rocko (Chino (China continental)):zh-CN:local",
- "Rocko (Chino (Taiwán)):zh-TW:local",
- "Samantha:en-US:local",
- "Sandy (Alemán (Alemania)):de-DE:local",
- "Sandy (Inglés (RU)):en-GB:local",
- "Sandy (Inglés (EE. UU.)):en-US:local",
- "Sandy (Español (España)):es-ES:local",
- "Sandy (Español (México)):es-MX:local",
- "Sandy (Finés (Finlandia)):fi-FI:local",
- "Sandy (Francés (Canadá)):fr-CA:local",
- "Sandy (Francés (Francia)):fr-FR:local",
- "Sandy (Italiano (Italia)):it-IT:local",
- "Sandy (Japonés (Japón)):ja-JP:local",
- "Sandy (Coreano (Corea del Sur)):ko-KR:local",
- "Sandy (Portugués (Brasil)):pt-BR:local",
- "Sandy (Chino (China continental)):zh-CN:local",
- "Sandy (Chino (Taiwán)):zh-TW:local",
- "Sara:da-DK:local",
- "Satu:fi-FI:local",
- "Shelley (Alemán (Alemania)):de-DE:local",
- "Shelley (Inglés (RU)):en-GB:local",
- "Shelley (Inglés (EE. UU.)):en-US:local",
- "Shelley (Español (España)):es-ES:local",
- "Shelley (Español (México)):es-MX:local",
- "Shelley (Finés (Finlandia)):fi-FI:local",
- "Shelley (Francés (Canadá)):fr-CA:local",
- "Shelley (Francés (Francia)):fr-FR:local",
- "Shelley (Italiano (Italia)):it-IT:local",
- "Shelley (Japonés (Japón)):ja-JP:local",
- "Shelley (Coreano (Corea del Sur)):ko-KR:local",
- "Shelley (Portugués (Brasil)):pt-BR:local",
- "Shelley (Chino (China continental)):zh-CN:local",
- "Shelley (Chino (Taiwán)):zh-TW:local",
- "Sinji:zh-HK:local",
- "Tara:en-IN:local",
- "Tessa:en-ZA:local",
- "Thomas:fr-FR:local",
- "Tina:sl-SI:local",
- "Tingting:zh-CN:local",
- "Trinoids:en-US:local",
- "Vani:ta-IN:local",
- "Susurro:en-US:local",
- "Xander:nl-NL:local",
- "Yelda:tr-TR:local",
- "Yuna:ko-KR:local",
- "Zarvox:en-US:local",
- "Zosia:pl-PL:local",
- "Zuzana:cs-CZ:local"
- ]
- },
- {
- "navigator": {
- "userAgent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:150.0) Gecko/20100101 Firefox/150.0",
- "platform": "MacIntel",
- "hardwareConcurrency": 8,
- "maxTouchPoints": 0
- },
- "screen": {
- "width": 1680,
- "height": 1050,
- "colorDepth": 30,
- "availWidth": 1680,
- "availHeight": 934,
- "devicePixelRatio": 2
- },
- "webgl": {
- "unmaskedVendor": "Apple",
- "unmaskedRenderer": "Apple M1, or similar"
- },
- "speechVoices": [
- "Albert:en-US:local",
- "Alice:it-IT:local",
- "Soumya:kn-IN:local",
- "Alva:sv-SE:local",
- "Aman:en-IN:local",
- "Amélie:fr-CA:local",
- "Amira:ms-MY:local",
- "Anna:de-DE:local",
- "Aru:kk-KZ:local",
- "Bad News:en-US:local",
- "Bahh:en-US:local",
- "Bells:en-US:local",
- "Boing:en-US:local",
- "Bubbles:en-US:local",
- "Carmit:he-IL:local",
- "Cellos:en-US:local",
- "Damayanti:id-ID:local",
- "Daniel:en-GB:local",
- "Daria:bg-BG:local",
- "Wobble:en-US:local",
- "Eddy (German (Germany)):de-DE:local",
- "Eddy (English (UK)):en-GB:local",
- "Eddy (English (US)):en-US:local",
- "Eddy (Spanish (Spain)):es-ES:local",
- "Eddy (Spanish (Mexico)):es-MX:local",
- "Eddy (Finnish (Finland)):fi-FI:local",
- "Eddy (French (Canada)):fr-CA:local",
- "Eddy (French (France)):fr-FR:local",
- "Eddy (Italian (Italy)):it-IT:local",
- "Eddy (Japanese (Japan)):ja-JP:local",
- "Eddy (Korean (South Korea)):ko-KR:local",
- "Eddy (Portuguese (Brazil)):pt-BR:local",
- "Eddy (Chinese (China mainland)):zh-CN:local",
- "Eddy (Chinese (Taiwan)):zh-TW:local",
- "Ellen:nl-BE:local",
- "Flo (German (Germany)):de-DE:local",
- "Flo (English (UK)):en-GB:local",
- "Flo (English (US)):en-US:local",
- "Flo (Spanish (Spain)):es-ES:local",
- "Flo (Spanish (Mexico)):es-MX:local",
- "Flo (Finnish (Finland)):fi-FI:local",
- "Flo (French (Canada)):fr-CA:local",
- "Flo (French (France)):fr-FR:local",
- "Flo (Italian (Italy)):it-IT:local",
- "Flo (Japanese (Japan)):ja-JP:local",
- "Flo (Korean (South Korea)):ko-KR:local",
- "Flo (Portuguese (Brazil)):pt-BR:local",
- "Flo (Chinese (China mainland)):zh-CN:local",
- "Flo (Chinese (Taiwan)):zh-TW:local",
- "Fred:en-US:local",
- "Geeta:te-IN:local",
- "Good News:en-US:local",
- "Grandma (German (Germany)):de-DE:local",
- "Grandma (English (UK)):en-GB:local",
- "Grandma (English (US)):en-US:local",
- "Grandma (Spanish (Spain)):es-ES:local",
- "Grandma (Spanish (Mexico)):es-MX:local",
- "Grandma (Finnish (Finland)):fi-FI:local",
- "Grandma (French (Canada)):fr-CA:local",
- "Grandma (French (France)):fr-FR:local",
- "Grandma (Italian (Italy)):it-IT:local",
- "Grandma (Japanese (Japan)):ja-JP:local",
- "Grandma (Korean (South Korea)):ko-KR:local",
- "Grandma (Portuguese (Brazil)):pt-BR:local",
- "Grandma (Chinese (China mainland)):zh-CN:local",
- "Grandma (Chinese (Taiwan)):zh-TW:local",
- "Grandpa (German (Germany)):de-DE:local",
- "Grandpa (English (UK)):en-GB:local",
- "Grandpa (English (US)):en-US:local",
- "Grandpa (Spanish (Spain)):es-ES:local",
- "Grandpa (Spanish (Mexico)):es-MX:local",
- "Grandpa (Finnish (Finland)):fi-FI:local",
- "Grandpa (French (Canada)):fr-CA:local",
- "Grandpa (French (France)):fr-FR:local",
- "Grandpa (Italian (Italy)):it-IT:local",
- "Grandpa (Japanese (Japan)):ja-JP:local",
- "Grandpa (Korean (South Korea)):ko-KR:local",
- "Grandpa (Portuguese (Brazil)):pt-BR:local",
- "Grandpa (Chinese (China mainland)):zh-CN:local",
- "Grandpa (Chinese (Taiwan)):zh-TW:local",
- "Jester:en-US:local",
- "Ioana:ro-RO:local",
- "Jacques:fr-FR:local",
- "Joana:pt-PT:local",
- "Junior:en-US:local",
- "Kanya:th-TH:local",
- "Karen:en-AU:local",
- "Kathy:en-US:local",
- "Kyoko:ja-JP:local",
- "Lana:hr-HR:local",
- "Laura:sk-SK:local",
- "Lekha:hi-IN:local",
- "Lesya:uk-UA:local",
- "Linh:vi-VN:local",
- "Luciana:pt-BR:local",
- "Majed:ar-001:local",
- "Tünde:hu-HU:local",
- "Meijia:zh-TW:local",
- "Melina:el-GR:local",
- "Milena:ru-RU:local",
- "Moira:en-IE:local",
- "Mónica:es-ES:local",
- "Montse:ca-ES:local",
- "Nora:nb-NO:local",
- "Ona:lt-LT:local",
- "Organ:en-US:local",
- "Paulina:es-MX:local",
- "Piya:bn-IN:local",
- "Superstar:en-US:local",
- "Ralph:en-US:local",
- "Reed (German (Germany)):de-DE:local",
- "Reed (English (UK)):en-GB:local",
- "Reed (English (US)):en-US:local",
- "Reed (Spanish (Spain)):es-ES:local",
- "Reed (Spanish (Mexico)):es-MX:local",
- "Reed (Finnish (Finland)):fi-FI:local",
- "Reed (French (Canada)):fr-CA:local",
- "Reed (Italian (Italy)):it-IT:local",
- "Reed (Japanese (Japan)):ja-JP:local",
- "Reed (Korean (South Korea)):ko-KR:local",
- "Reed (Portuguese (Brazil)):pt-BR:local",
- "Reed (Chinese (China mainland)):zh-CN:local",
- "Reed (Chinese (Taiwan)):zh-TW:local",
- "Rishi:en-IN:local",
- "Rocko (German (Germany)):de-DE:local",
- "Rocko (English (UK)):en-GB:local",
- "Rocko (English (US)):en-US:local",
- "Rocko (Spanish (Spain)):es-ES:local",
- "Rocko (Spanish (Mexico)):es-MX:local",
- "Rocko (Finnish (Finland)):fi-FI:local",
- "Rocko (French (Canada)):fr-CA:local",
- "Rocko (French (France)):fr-FR:local",
- "Rocko (Italian (Italy)):it-IT:local",
- "Rocko (Japanese (Japan)):ja-JP:local",
- "Rocko (Korean (South Korea)):ko-KR:local",
- "Rocko (Portuguese (Brazil)):pt-BR:local",
- "Rocko (Chinese (China mainland)):zh-CN:local",
- "Rocko (Chinese (Taiwan)):zh-TW:local",
- "Samantha:en-US:local",
- "Sandy (German (Germany)):de-DE:local",
- "Sandy (English (UK)):en-GB:local",
- "Sandy (English (US)):en-US:local",
- "Sandy (Spanish (Spain)):es-ES:local",
- "Sandy (Spanish (Mexico)):es-MX:local",
- "Sandy (Finnish (Finland)):fi-FI:local",
- "Sandy (French (Canada)):fr-CA:local",
- "Sandy (French (France)):fr-FR:local",
- "Sandy (Italian (Italy)):it-IT:local",
- "Sandy (Japanese (Japan)):ja-JP:local",
- "Sandy (Korean (South Korea)):ko-KR:local",
- "Sandy (Portuguese (Brazil)):pt-BR:local",
- "Sandy (Chinese (China mainland)):zh-CN:local",
- "Sandy (Chinese (Taiwan)):zh-TW:local",
- "Sara:da-DK:local",
- "Satu:fi-FI:local",
- "Shelley (German (Germany)):de-DE:local",
- "Shelley (English (UK)):en-GB:local",
- "Shelley (English (US)):en-US:local",
- "Shelley (Spanish (Spain)):es-ES:local",
- "Shelley (Spanish (Mexico)):es-MX:local",
- "Shelley (Finnish (Finland)):fi-FI:local",
- "Shelley (French (Canada)):fr-CA:local",
- "Shelley (French (France)):fr-FR:local",
- "Shelley (Italian (Italy)):it-IT:local",
- "Shelley (Japanese (Japan)):ja-JP:local",
- "Shelley (Korean (South Korea)):ko-KR:local",
- "Shelley (Portuguese (Brazil)):pt-BR:local",
- "Shelley (Chinese (China mainland)):zh-CN:local",
- "Shelley (Chinese (Taiwan)):zh-TW:local",
- "Sinji:zh-HK:local",
- "Tara:en-IN:local",
- "Tessa:en-ZA:local",
- "Thomas:fr-FR:local",
- "Tina:sl-SI:local",
- "Tingting:zh-CN:local",
- "Trinoids:en-US:local",
- "Vani:ta-IN:local",
- "Whisper:en-US:local",
- "Xander:nl-NL:local",
- "Yelda:tr-TR:local",
- "Yuna:ko-KR:local",
- "Zarvox:en-US:local",
- "Zosia:pl-PL:local",
- "Zuzana:cs-CZ:local"
- ]
- },
- {
- "navigator": {
- "userAgent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:152.0) Gecko/20100101 Firefox/152.0",
- "platform": "MacIntel",
- "hardwareConcurrency": 10,
- "maxTouchPoints": 0
- },
- "screen": {
- "width": 1920,
- "height": 1080,
- "colorDepth": 30,
- "availWidth": 1920,
- "availHeight": 1004,
- "devicePixelRatio": 2
- },
- "webgl": {
- "unmaskedVendor": "Apple",
- "unmaskedRenderer": "Apple M1, or similar"
- },
- "speechVoices": [
- "Albert:en-US:local",
- "Alice:it-IT:local",
- "Soumya:kn-IN:local",
- "Alva:sv-SE:local",
- "Aman:en-IN:local",
- "Amélie:fr-CA:local",
- "Amira:ms-MY:local",
- "Anna:de-DE:local",
- "Aru:kk-KZ:local",
- "Bad News:en-US:local",
- "Bahh:en-US:local",
- "Bells:en-US:local",
- "Boing:en-US:local",
- "Bubbles:en-US:local",
- "Carmit:he-IL:local",
- "Cellos:en-US:local",
- "Damayanti:id-ID:local",
- "Daniel:en-GB:local",
- "Daria:bg-BG:local",
- "Wobble:en-US:local",
- "Eddy (German (Germany)):de-DE:local",
- "Eddy (English (UK)):en-GB:local",
- "Eddy (English (US)):en-US:local",
- "Eddy (Spanish (Spain)):es-ES:local",
- "Eddy (Spanish (Mexico)):es-MX:local",
- "Eddy (Finnish (Finland)):fi-FI:local",
- "Eddy (French (Canada)):fr-CA:local",
- "Eddy (French (France)):fr-FR:local",
- "Eddy (Italian (Italy)):it-IT:local",
- "Eddy (Japanese (Japan)):ja-JP:local",
- "Eddy (Korean (South Korea)):ko-KR:local",
- "Eddy (Portuguese (Brazil)):pt-BR:local",
- "Eddy (Chinese (China mainland)):zh-CN:local",
- "Eddy (Chinese (Taiwan)):zh-TW:local",
- "Ellen:nl-BE:local",
- "Flo (German (Germany)):de-DE:local",
- "Flo (English (UK)):en-GB:local",
- "Flo (English (US)):en-US:local",
- "Flo (Spanish (Spain)):es-ES:local",
- "Flo (Spanish (Mexico)):es-MX:local",
- "Flo (Finnish (Finland)):fi-FI:local",
- "Flo (French (Canada)):fr-CA:local",
- "Flo (French (France)):fr-FR:local",
- "Flo (Italian (Italy)):it-IT:local",
- "Flo (Japanese (Japan)):ja-JP:local",
- "Flo (Korean (South Korea)):ko-KR:local",
- "Flo (Portuguese (Brazil)):pt-BR:local",
- "Flo (Chinese (China mainland)):zh-CN:local",
- "Flo (Chinese (Taiwan)):zh-TW:local",
- "Fred:en-US:local",
- "Geeta:te-IN:local",
- "Good News:en-US:local",
- "Grandma (German (Germany)):de-DE:local",
- "Grandma (English (UK)):en-GB:local",
- "Grandma (English (US)):en-US:local",
- "Grandma (Spanish (Spain)):es-ES:local",
- "Grandma (Spanish (Mexico)):es-MX:local",
- "Grandma (Finnish (Finland)):fi-FI:local",
- "Grandma (French (Canada)):fr-CA:local",
- "Grandma (French (France)):fr-FR:local",
- "Grandma (Italian (Italy)):it-IT:local",
- "Grandma (Japanese (Japan)):ja-JP:local",
- "Grandma (Korean (South Korea)):ko-KR:local",
- "Grandma (Portuguese (Brazil)):pt-BR:local",
- "Grandma (Chinese (China mainland)):zh-CN:local",
- "Grandma (Chinese (Taiwan)):zh-TW:local",
- "Grandpa (German (Germany)):de-DE:local",
- "Grandpa (English (UK)):en-GB:local",
- "Grandpa (English (US)):en-US:local",
- "Grandpa (Spanish (Spain)):es-ES:local",
- "Grandpa (Spanish (Mexico)):es-MX:local",
- "Grandpa (Finnish (Finland)):fi-FI:local",
- "Grandpa (French (Canada)):fr-CA:local",
- "Grandpa (French (France)):fr-FR:local",
- "Grandpa (Italian (Italy)):it-IT:local",
- "Grandpa (Japanese (Japan)):ja-JP:local",
- "Grandpa (Korean (South Korea)):ko-KR:local",
- "Grandpa (Portuguese (Brazil)):pt-BR:local",
- "Grandpa (Chinese (China mainland)):zh-CN:local",
- "Grandpa (Chinese (Taiwan)):zh-TW:local",
- "Jester:en-US:local",
- "Ioana:ro-RO:local",
- "Jacques:fr-FR:local",
- "Joana:pt-PT:local",
- "Junior:en-US:local",
- "Kanya:th-TH:local",
- "Karen:en-AU:local",
- "Kathy:en-US:local",
- "Kyoko:ja-JP:local",
- "Lana:hr-HR:local",
- "Laura:sk-SK:local",
- "Lekha:hi-IN:local",
- "Lesya:uk-UA:local",
- "Linh:vi-VN:local",
- "Luciana:pt-BR:local",
- "Majed:ar-001:local",
- "Tünde:hu-HU:local",
- "Meijia:zh-TW:local",
- "Melina:el-GR:local",
- "Milena:ru-RU:local",
- "Moira:en-IE:local",
- "Mónica:es-ES:local",
- "Montse:ca-ES:local",
- "Nora:nb-NO:local",
- "Ona:lt-LT:local",
- "Organ:en-US:local",
- "Paulina:es-MX:local",
- "Piya:bn-IN:local",
- "Superstar:en-US:local",
- "Ralph:en-US:local",
- "Reed (German (Germany)):de-DE:local",
- "Reed (English (UK)):en-GB:local",
- "Reed (English (US)):en-US:local",
- "Reed (Spanish (Spain)):es-ES:local",
- "Reed (Spanish (Mexico)):es-MX:local",
- "Reed (Finnish (Finland)):fi-FI:local",
- "Reed (French (Canada)):fr-CA:local",
- "Reed (Italian (Italy)):it-IT:local",
- "Reed (Japanese (Japan)):ja-JP:local",
- "Reed (Korean (South Korea)):ko-KR:local",
- "Reed (Portuguese (Brazil)):pt-BR:local",
- "Reed (Chinese (China mainland)):zh-CN:local",
- "Reed (Chinese (Taiwan)):zh-TW:local",
- "Rishi:en-IN:local",
- "Rocko (German (Germany)):de-DE:local",
- "Rocko (English (UK)):en-GB:local",
- "Rocko (English (US)):en-US:local",
- "Rocko (Spanish (Spain)):es-ES:local",
- "Rocko (Spanish (Mexico)):es-MX:local",
- "Rocko (Finnish (Finland)):fi-FI:local",
- "Rocko (French (Canada)):fr-CA:local",
- "Rocko (French (France)):fr-FR:local",
- "Rocko (Italian (Italy)):it-IT:local",
- "Rocko (Japanese (Japan)):ja-JP:local",
- "Rocko (Korean (South Korea)):ko-KR:local",
- "Rocko (Portuguese (Brazil)):pt-BR:local",
- "Rocko (Chinese (China mainland)):zh-CN:local",
- "Rocko (Chinese (Taiwan)):zh-TW:local",
- "Samantha:en-US:local",
- "Sandy (German (Germany)):de-DE:local",
- "Sandy (English (UK)):en-GB:local",
- "Sandy (English (US)):en-US:local",
- "Sandy (Spanish (Spain)):es-ES:local",
- "Sandy (Spanish (Mexico)):es-MX:local",
- "Sandy (Finnish (Finland)):fi-FI:local",
- "Sandy (French (Canada)):fr-CA:local",
- "Sandy (French (France)):fr-FR:local",
- "Sandy (Italian (Italy)):it-IT:local",
- "Sandy (Japanese (Japan)):ja-JP:local",
- "Sandy (Korean (South Korea)):ko-KR:local",
- "Sandy (Portuguese (Brazil)):pt-BR:local",
- "Sandy (Chinese (China mainland)):zh-CN:local",
- "Sandy (Chinese (Taiwan)):zh-TW:local",
- "Sara:da-DK:local",
- "Satu:fi-FI:local",
- "Shelley (German (Germany)):de-DE:local",
- "Shelley (English (UK)):en-GB:local",
- "Shelley (English (US)):en-US:local",
- "Shelley (Spanish (Spain)):es-ES:local",
- "Shelley (Spanish (Mexico)):es-MX:local",
- "Shelley (Finnish (Finland)):fi-FI:local",
- "Shelley (French (Canada)):fr-CA:local",
- "Shelley (French (France)):fr-FR:local",
- "Shelley (Italian (Italy)):it-IT:local",
- "Shelley (Japanese (Japan)):ja-JP:local",
- "Shelley (Korean (South Korea)):ko-KR:local",
- "Shelley (Portuguese (Brazil)):pt-BR:local",
- "Shelley (Chinese (China mainland)):zh-CN:local",
- "Shelley (Chinese (Taiwan)):zh-TW:local",
- "Sinji:zh-HK:local",
- "Tara:en-IN:local",
- "Tessa:en-ZA:local",
- "Thomas:fr-FR:local",
- "Tina:sl-SI:local",
- "Tingting:zh-CN:local",
- "Trinoids:en-US:local",
- "Vani:ta-IN:local",
- "Whisper:en-US:local",
- "Xander:nl-NL:local",
- "Yelda:tr-TR:local",
- "Yuna:ko-KR:local",
- "Zarvox:en-US:local",
- "Zosia:pl-PL:local",
- "Zuzana:cs-CZ:local"
- ]
- },
- {
- "navigator": {
- "userAgent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:149.0) Gecko/20100101 Firefox/149.0",
- "platform": "MacIntel",
- "hardwareConcurrency": 2,
- "maxTouchPoints": 0
- },
- "screen": {
- "width": 1280,
- "height": 800,
- "colorDepth": 30,
- "availWidth": 1280,
- "availHeight": 719,
- "devicePixelRatio": 2
- },
- "webgl": {
- "unmaskedVendor": "Intel Inc.",
- "unmaskedRenderer": "Intel(R) HD Graphics 400, or similar"
- },
- "speechVoices": [
- "Alex:en-US:local",
- "Alice:it-IT:local",
- "Alva:sv-SE:local",
- "Amelie:fr-CA:local",
- "Anna:de-DE:local",
- "Carmit:he-IL:local",
- "Damayanti:id-ID:local",
- "Daniel:en-GB:local",
- "Diego:es-AR:local",
- "Ellen:nl-BE:local",
- "Fiona:en-scotland:local",
- "Fred:en-US:local",
- "Ioana:ro-RO:local",
- "Joana:pt-PT:local",
- "Jorge:es-ES:local",
- "Juan:es-MX:local",
- "Kanya:th-TH:local",
- "Karen:en-AU:local",
- "Kyoko:ja-JP:local",
- "Laura:sk-SK:local",
- "Lekha:hi-IN:local",
- "Luca:it-IT:local",
- "Luciana:pt-BR:local",
- "Maged:ar-SA:local",
- "Mariska:hu-HU:local",
- "Mei-Jia:zh-TW:local",
- "Melina:el-GR:local",
- "Milena:ru-RU:local",
- "Moira:en-IE:local",
- "Monica:es-ES:local",
- "Nora:nb-NO:local",
- "Paulina:es-MX:local",
- "Rishi:en-IN:local",
- "Samantha:en-US:local",
- "Sara:da-DK:local",
- "Satu:fi-FI:local",
- "Sin-ji:zh-HK:local",
- "Tessa:en-ZA:local",
- "Thomas:fr-FR:local",
- "Ting-Ting:zh-CN:local",
- "Veena:en-IN:local",
- "Victoria:en-US:local",
- "Xander:nl-NL:local",
- "Yelda:tr-TR:local",
- "Yuna:ko-KR:local",
- "Yuri:ru-RU:local",
- "Zosia:pl-PL:local",
- "Zuzana:cs-CZ:local"
- ]
- },
- {
- "navigator": {
- "userAgent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:150.0) Gecko/20100101 Firefox/150.0",
- "platform": "MacIntel",
- "hardwareConcurrency": 6,
- "maxTouchPoints": 0
- },
- "screen": {
- "width": 1920,
- "height": 1080,
- "colorDepth": 30,
- "availWidth": 1920,
- "availHeight": 984,
- "devicePixelRatio": 1
- },
- "webgl": {
- "unmaskedVendor": "ATI Technologies Inc.",
- "unmaskedRenderer": "Radeon HD 3200 Graphics, or similar"
- },
- "speechVoices": [
- "Albert:en-US:local",
- "Alice:it-IT:local",
- "Alva:sv-SE:local",
- "Amélie:fr-CA:local",
- "Amira:ms-MY:local",
- "Anna:de-DE:local",
- "Bad News:en-US:local",
- "Bahh:en-US:local",
- "Bells:en-US:local",
- "Boing:en-US:local",
- "Bubbles:en-US:local",
- "Carmit:he-IL:local",
- "Cellos:en-US:local",
- "Damayanti:id-ID:local",
- "Daniel:en-GB:local",
- "Daria:bg-BG:local",
- "Wobble:en-US:local",
- "Eddy (German (Germany)):de-DE:local",
- "Eddy (English (UK)):en-GB:local",
- "Eddy (English (US)):en-US:local",
- "Eddy (Spanish (Spain)):es-ES:local",
- "Eddy (Spanish (Mexico)):es-MX:local",
- "Eddy (Finnish (Finland)):fi-FI:local",
- "Eddy (French (Canada)):fr-CA:local",
- "Eddy (French (France)):fr-FR:local",
- "Eddy (Italian (Italy)):it-IT:local",
- "Eddy (Portuguese (Brazil)):pt-BR:local",
- "Ellen:nl-BE:local",
- "Flo (German (Germany)):de-DE:local",
- "Flo (English (UK)):en-GB:local",
- "Flo (English (US)):en-US:local",
- "Flo (Spanish (Spain)):es-ES:local",
- "Flo (Spanish (Mexico)):es-MX:local",
- "Flo (Finnish (Finland)):fi-FI:local",
- "Flo (French (Canada)):fr-CA:local",
- "Flo (French (France)):fr-FR:local",
- "Flo (Italian (Italy)):it-IT:local",
- "Flo (Portuguese (Brazil)):pt-BR:local",
- "Fred:en-US:local",
- "Good News:en-US:local",
- "Grandma (German (Germany)):de-DE:local",
- "Grandma (English (UK)):en-GB:local",
- "Grandma (English (US)):en-US:local",
- "Grandma (Spanish (Spain)):es-ES:local",
- "Grandma (Spanish (Mexico)):es-MX:local",
- "Grandma (Finnish (Finland)):fi-FI:local",
- "Grandma (French (Canada)):fr-CA:local",
- "Grandma (French (France)):fr-FR:local",
- "Grandma (Italian (Italy)):it-IT:local",
- "Grandma (Portuguese (Brazil)):pt-BR:local",
- "Grandpa (German (Germany)):de-DE:local",
- "Grandpa (English (UK)):en-GB:local",
- "Grandpa (English (US)):en-US:local",
- "Grandpa (Spanish (Spain)):es-ES:local",
- "Grandpa (Spanish (Mexico)):es-MX:local",
- "Grandpa (Finnish (Finland)):fi-FI:local",
- "Grandpa (French (Canada)):fr-CA:local",
- "Grandpa (French (France)):fr-FR:local",
- "Grandpa (Italian (Italy)):it-IT:local",
- "Grandpa (Portuguese (Brazil)):pt-BR:local",
- "Jester:en-US:local",
- "Ioana:ro-RO:local",
- "Jacques:fr-FR:local",
- "Joana:pt-PT:local",
- "Junior:en-US:local",
- "Kanya:th-TH:local",
- "Karen:en-AU:local",
- "Kathy:en-US:local",
- "Kyoko:ja-JP:local",
- "Lana:hr-HR:local",
- "Laura:sk-SK:local",
- "Lekha:hi-IN:local",
- "Lesya:uk-UA:local",
- "Linh:vi-VN:local",
- "Luciana:pt-BR:local",
- "Majed:ar-001:local",
- "Tünde:hu-HU:local",
- "Meijia:zh-TW:local",
- "Melina:el-GR:local",
- "Milena:ru-RU:local",
- "Moira:en-IE:local",
- "Mónica:es-ES:local",
- "Montse:ca-ES:local",
- "Nora:nb-NO:local",
- "Organ:en-US:local",
- "Paulina:es-MX:local",
- "Superstar:en-US:local",
- "Ralph:en-US:local",
- "Reed (German (Germany)):de-DE:local",
- "Reed (English (UK)):en-GB:local",
- "Reed (English (US)):en-US:local",
- "Reed (Spanish (Spain)):es-ES:local",
- "Reed (Spanish (Mexico)):es-MX:local",
- "Reed (Finnish (Finland)):fi-FI:local",
- "Reed (French (Canada)):fr-CA:local",
- "Reed (Italian (Italy)):it-IT:local",
- "Reed (Portuguese (Brazil)):pt-BR:local",
- "Rishi:en-IN:local",
- "Rocko (German (Germany)):de-DE:local",
- "Rocko (English (UK)):en-GB:local",
- "Rocko (English (US)):en-US:local",
- "Rocko (Spanish (Spain)):es-ES:local",
- "Rocko (Spanish (Mexico)):es-MX:local",
- "Rocko (Finnish (Finland)):fi-FI:local",
- "Rocko (French (Canada)):fr-CA:local",
- "Rocko (French (France)):fr-FR:local",
- "Rocko (Italian (Italy)):it-IT:local",
- "Rocko (Portuguese (Brazil)):pt-BR:local",
- "Samantha:en-US:local",
- "Sandy (German (Germany)):de-DE:local",
- "Sandy (English (UK)):en-GB:local",
- "Sandy (English (US)):en-US:local",
- "Sandy (Spanish (Spain)):es-ES:local",
- "Sandy (Spanish (Mexico)):es-MX:local",
- "Sandy (Finnish (Finland)):fi-FI:local",
- "Sandy (French (Canada)):fr-CA:local",
- "Sandy (French (France)):fr-FR:local",
- "Sandy (Italian (Italy)):it-IT:local",
- "Sandy (Portuguese (Brazil)):pt-BR:local",
- "Sara:da-DK:local",
- "Satu:fi-FI:local",
- "Shelley (German (Germany)):de-DE:local",
- "Shelley (English (UK)):en-GB:local",
- "Shelley (English (US)):en-US:local",
- "Shelley (Spanish (Spain)):es-ES:local",
- "Shelley (Spanish (Mexico)):es-MX:local",
- "Shelley (Finnish (Finland)):fi-FI:local",
- "Shelley (French (Canada)):fr-CA:local",
- "Shelley (French (France)):fr-FR:local",
- "Shelley (Italian (Italy)):it-IT:local",
- "Shelley (Portuguese (Brazil)):pt-BR:local",
- "Sinji:zh-HK:local",
- "Tessa:en-ZA:local",
- "Thomas:fr-FR:local",
- "Tingting:zh-CN:local",
- "Trinoids:en-US:local",
- "Whisper:en-US:local",
- "Xander:nl-NL:local",
- "Yelda:tr-TR:local",
- "Yuna:ko-KR:local",
- "Zarvox:en-US:local",
- "Zosia:pl-PL:local",
- "Zuzana:cs-CZ:local"
- ]
- },
- {
- "navigator": {
- "userAgent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:150.0) Gecko/20100101 Firefox/150.0",
- "platform": "MacIntel",
- "hardwareConcurrency": 8,
- "maxTouchPoints": 0
- },
- "screen": {
- "width": 1710,
- "height": 1112,
- "colorDepth": 30,
- "availWidth": 1710,
- "availHeight": 1073,
- "devicePixelRatio": 2
- },
- "webgl": {
- "unmaskedVendor": "Apple",
- "unmaskedRenderer": "Apple M1, or similar"
- },
- "speechVoices": [
- "Albert:en-US:local",
- "Alice:it-IT:local",
- "Soumya:kn-IN:local",
- "Alva:sv-SE:local",
- "Aman (English (India)):en-IN:local",
- "Aman (English (India)):en-IN:local",
- "Amélie:fr-CA:local",
- "Amira:ms-MY:local",
- "Anna:de-DE:local",
- "Aru:kk-KZ:local",
- "Bad News:en-US:local",
- "Bahh:en-US:local",
- "Bells:en-US:local",
- "Boing:en-US:local",
- "Bubbles:en-US:local",
- "Carmit:he-IL:local",
- "Cellos:en-US:local",
- "Damayanti:id-ID:local",
- "Daniel:en-GB:local",
- "Daria:bg-BG:local",
- "Wobble:en-US:local",
- "Eddy (German (Germany)):de-DE:local",
- "Eddy (English (UK)):en-GB:local",
- "Eddy (English (US)):en-US:local",
- "Eddy (Spanish (Spain)):es-ES:local",
- "Eddy (Spanish (Mexico)):es-MX:local",
- "Eddy (Finnish (Finland)):fi-FI:local",
- "Eddy (French (Canada)):fr-CA:local",
- "Eddy (French (France)):fr-FR:local",
- "Eddy (Italian (Italy)):it-IT:local",
- "Eddy (Japanese (Japan)):ja-JP:local",
- "Eddy (Korean (South Korea)):ko-KR:local",
- "Eddy (Portuguese (Brazil)):pt-BR:local",
- "Eddy (Chinese (China mainland)):zh-CN:local",
- "Eddy (Chinese (Taiwan)):zh-TW:local",
- "Ellen:nl-BE:local",
- "Flo (German (Germany)):de-DE:local",
- "Flo (English (UK)):en-GB:local",
- "Flo (English (US)):en-US:local",
- "Flo (Spanish (Spain)):es-ES:local",
- "Flo (Spanish (Mexico)):es-MX:local",
- "Flo (Finnish (Finland)):fi-FI:local",
- "Flo (French (Canada)):fr-CA:local",
- "Flo (French (France)):fr-FR:local",
- "Flo (Italian (Italy)):it-IT:local",
- "Flo (Japanese (Japan)):ja-JP:local",
- "Flo (Korean (South Korea)):ko-KR:local",
- "Flo (Portuguese (Brazil)):pt-BR:local",
- "Flo (Chinese (China mainland)):zh-CN:local",
- "Flo (Chinese (Taiwan)):zh-TW:local",
- "Fred:en-US:local",
- "Geeta:te-IN:local",
- "Good News:en-US:local",
- "Grandma (German (Germany)):de-DE:local",
- "Grandma (English (UK)):en-GB:local",
- "Grandma (English (US)):en-US:local",
- "Grandma (Spanish (Spain)):es-ES:local",
- "Grandma (Spanish (Mexico)):es-MX:local",
- "Grandma (Finnish (Finland)):fi-FI:local",
- "Grandma (French (Canada)):fr-CA:local",
- "Grandma (French (France)):fr-FR:local",
- "Grandma (Italian (Italy)):it-IT:local",
- "Grandma (Japanese (Japan)):ja-JP:local",
- "Grandma (Korean (South Korea)):ko-KR:local",
- "Grandma (Portuguese (Brazil)):pt-BR:local",
- "Grandma (Chinese (China mainland)):zh-CN:local",
- "Grandma (Chinese (Taiwan)):zh-TW:local",
- "Grandpa (German (Germany)):de-DE:local",
- "Grandpa (English (UK)):en-GB:local",
- "Grandpa (English (US)):en-US:local",
- "Grandpa (Spanish (Spain)):es-ES:local",
- "Grandpa (Spanish (Mexico)):es-MX:local",
- "Grandpa (Finnish (Finland)):fi-FI:local",
- "Grandpa (French (Canada)):fr-CA:local",
- "Grandpa (French (France)):fr-FR:local",
- "Grandpa (Italian (Italy)):it-IT:local",
- "Grandpa (Japanese (Japan)):ja-JP:local",
- "Grandpa (Korean (South Korea)):ko-KR:local",
- "Grandpa (Portuguese (Brazil)):pt-BR:local",
- "Grandpa (Chinese (China mainland)):zh-CN:local",
- "Grandpa (Chinese (Taiwan)):zh-TW:local",
- "Jester:en-US:local",
- "Yelda:tr-TR:local",
- "Ioana:ro-RO:local",
- "Yuna:ko-KR:local",
- "Jacques:fr-FR:local",
- "Joana:pt-PT:local",
- "Junior:en-US:local",
- "Kanya:th-TH:local",
- "Karen:en-AU:local",
- "Kathy:en-US:local",
- "Kyoko:ja-JP:local",
- "Krzysztof (Enhanced):pl-PL:local",
- "Lana:hr-HR:local",
- "Laura:sk-SK:local",
- "Lekha:hi-IN:local",
- "Lesya:uk-UA:local",
- "Linh:vi-VN:local",
- "Luciana:pt-BR:local",
- "Majed:ar-001:local",
- "Tünde:hu-HU:local",
- "Meijia:zh-TW:local",
- "Melina:el-GR:local",
- "Milena:ru-RU:local",
- "Moira:en-IE:local",
- "Mónica:es-ES:local",
- "Montse:ca-ES:local",
- "Nora:nb-NO:local",
- "Ona ((null)):lt-LT:local",
- "Ona ((null)):lt-LT:local",
- "Organ:en-US:local",
- "Piya:bn-IN:local",
- "Paulina:es-MX:local",
- "Superstar:en-US:local",
- "Ralph:en-US:local",
- "Reed (German (Germany)):de-DE:local",
- "Reed (English (UK)):en-GB:local",
- "Reed (English (US)):en-US:local",
- "Reed (Spanish (Spain)):es-ES:local",
- "Reed (Spanish (Mexico)):es-MX:local",
- "Reed (Finnish (Finland)):fi-FI:local",
- "Reed (French (Canada)):fr-CA:local",
- "Reed (Italian (Italy)):it-IT:local",
- "Reed (Japanese (Japan)):ja-JP:local",
- "Reed (Korean (South Korea)):ko-KR:local",
- "Reed (Portuguese (Brazil)):pt-BR:local",
- "Reed (Chinese (China mainland)):zh-CN:local",
- "Reed (Chinese (Taiwan)):zh-TW:local",
- "Rishi:en-IN:local",
- "Rocko (German (Germany)):de-DE:local",
- "Rocko (English (UK)):en-GB:local",
- "Rocko (English (US)):en-US:local",
- "Rocko (Spanish (Spain)):es-ES:local",
- "Rocko (Spanish (Mexico)):es-MX:local",
- "Rocko (Finnish (Finland)):fi-FI:local",
- "Rocko (French (Canada)):fr-CA:local",
- "Rocko (French (France)):fr-FR:local",
- "Rocko (Italian (Italy)):it-IT:local",
- "Rocko (Japanese (Japan)):ja-JP:local",
- "Rocko (Korean (South Korea)):ko-KR:local",
- "Rocko (Portuguese (Brazil)):pt-BR:local",
- "Rocko (Chinese (China mainland)):zh-CN:local",
- "Rocko (Chinese (Taiwan)):zh-TW:local",
- "Samantha:en-US:local",
- "Sandy (German (Germany)):de-DE:local",
- "Sandy (English (UK)):en-GB:local",
- "Sandy (English (US)):en-US:local",
- "Sandy (Spanish (Spain)):es-ES:local",
- "Sandy (Spanish (Mexico)):es-MX:local",
- "Sandy (Finnish (Finland)):fi-FI:local",
- "Sandy (French (Canada)):fr-CA:local",
- "Sandy (French (France)):fr-FR:local",
- "Sandy (Italian (Italy)):it-IT:local",
- "Sandy (Japanese (Japan)):ja-JP:local",
- "Sandy (Korean (South Korea)):ko-KR:local",
- "Sandy (Portuguese (Brazil)):pt-BR:local",
- "Sandy (Chinese (China mainland)):zh-CN:local",
- "Sandy (Chinese (Taiwan)):zh-TW:local",
- "Sara:da-DK:local",
- "Satu:fi-FI:local",
- "Shelley (German (Germany)):de-DE:local",
- "Shelley (English (UK)):en-GB:local",
- "Shelley (English (US)):en-US:local",
- "Shelley (Spanish (Spain)):es-ES:local",
- "Shelley (Spanish (Mexico)):es-MX:local",
- "Shelley (Finnish (Finland)):fi-FI:local",
- "Shelley (French (Canada)):fr-CA:local",
- "Shelley (French (France)):fr-FR:local",
- "Shelley (Italian (Italy)):it-IT:local",
- "Shelley (Japanese (Japan)):ja-JP:local",
- "Shelley (Korean (South Korea)):ko-KR:local",
- "Shelley (Portuguese (Brazil)):pt-BR:local",
- "Shelley (Chinese (China mainland)):zh-CN:local",
- "Shelley (Chinese (Taiwan)):zh-TW:local",
- "Sinji:zh-HK:local",
- "Tara:en-IN:local",
- "Tessa:en-ZA:local",
- "Thomas:fr-FR:local",
- "Tina:sl-SI:local",
- "Tingting:zh-CN:local",
- "Trinoids:en-US:local",
- "Vani:ta-IN:local",
- "Whisper:en-US:local",
- "Xander:nl-NL:local",
- "Zarvox:en-US:local",
- "Zosia:pl-PL:local",
- "Zuzana:cs-CZ:local"
- ]
- },
- {
- "navigator": {
- "userAgent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:150.0) Gecko/20100101 Firefox/150.0",
- "platform": "MacIntel",
- "hardwareConcurrency": 4,
- "maxTouchPoints": 0
- },
- "screen": {
- "width": 1440,
- "height": 900,
- "colorDepth": 30,
- "availWidth": 1440,
- "availHeight": 824,
- "devicePixelRatio": 2
- },
- "webgl": {
- "unmaskedVendor": "Intel Inc.",
- "unmaskedRenderer": "Intel(R) HD Graphics 400, or similar"
- }
- },
- {
- "navigator": {
- "userAgent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:151.0) Gecko/20100101 Firefox/151.0",
+ "userAgent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:150.0) Gecko/20100101 Firefox/150.0",
"platform": "MacIntel",
"hardwareConcurrency": 8,
"maxTouchPoints": 0
@@ -6840,27 +4006,7 @@
"height": 1050,
"colorDepth": 30,
"availWidth": 1680,
- "availHeight": 974,
- "devicePixelRatio": 2
- },
- "webgl": {
- "unmaskedVendor": "Apple",
- "unmaskedRenderer": "Apple M1, or similar"
- }
- },
- {
- "navigator": {
- "userAgent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:149.0) Gecko/20100101 Firefox/149.0",
- "platform": "MacIntel",
- "hardwareConcurrency": 10,
- "maxTouchPoints": 0
- },
- "screen": {
- "width": 2048,
- "height": 1080,
- "colorDepth": 30,
- "availWidth": 2048,
- "availHeight": 1080,
+ "availHeight": 934,
"devicePixelRatio": 2
},
"webgl": {
@@ -7056,170 +4202,33 @@
},
{
"navigator": {
- "userAgent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:150.0) Gecko/20100101 Firefox/150.0",
+ "userAgent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:152.0) Gecko/20100101 Firefox/152.0",
"platform": "MacIntel",
- "hardwareConcurrency": 6,
+ "hardwareConcurrency": 10,
"maxTouchPoints": 0
},
"screen": {
- "width": 2560,
+ "width": 1920,
"height": 1080,
"colorDepth": 30,
- "availWidth": 2560,
- "availHeight": 957,
- "devicePixelRatio": 1
- },
- "webgl": {
- "unmaskedVendor": "ATI Technologies Inc.",
- "unmaskedRenderer": "Radeon R9 200 Series, or similar"
- },
- "speechVoices": [
- "Alex:en-US:local",
- "Alice:it-IT:local",
- "Alva:sv-SE:local",
- "Amelie:fr-CA:local",
- "Anna:de-DE:local",
- "Carmit:he-IL:local",
- "Damayanti:id-ID:local",
- "Daniel:en-GB:local",
- "Diego:es-AR:local",
- "Ellen:nl-BE:local",
- "Fiona:en-scotland:local",
- "Fred:en-US:local",
- "Ioana:ro-RO:local",
- "Joana:pt-PT:local",
- "Jorge:es-ES:local",
- "Juan:es-MX:local",
- "Kanya:th-TH:local",
- "Karen:en-AU:local",
- "Kyoko:ja-JP:local",
- "Laura:sk-SK:local",
- "Lekha:hi-IN:local",
- "Luca:it-IT:local",
- "Luciana:pt-BR:local",
- "Maged:ar-SA:local",
- "Mariska:hu-HU:local",
- "Mei-Jia:zh-TW:local",
- "Melina:el-GR:local",
- "Milena:ru-RU:local",
- "Moira:en-IE:local",
- "Monica:es-ES:local",
- "Nora:nb-NO:local",
- "Paulina:es-MX:local",
- "Rishi:en-IN:local",
- "Samantha:en-US:local",
- "Sara:da-DK:local",
- "Satu:fi-FI:local",
- "Sin-ji:zh-HK:local",
- "Tessa:en-ZA:local",
- "Thomas:fr-FR:local",
- "Ting-Ting:zh-CN:local",
- "Veena:en-IN:local",
- "Victoria:en-US:local",
- "Xander:nl-NL:local",
- "Yelda:tr-TR:local",
- "Yuna:ko-KR:local",
- "Yuri:ru-RU:local",
- "Zosia:pl-PL:local",
- "Zuzana:cs-CZ:local"
- ]
- },
- {
- "navigator": {
- "userAgent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:149.0) Gecko/20100101 Firefox/149.0",
- "platform": "MacIntel",
- "hardwareConcurrency": 2,
- "maxTouchPoints": 0
- },
- "screen": {
- "width": 1440,
- "height": 900,
- "colorDepth": 30,
- "availWidth": 1440,
- "availHeight": 900,
- "devicePixelRatio": 1
- },
- "webgl": {
- "unmaskedVendor": "Intel Inc.",
- "unmaskedRenderer": "Intel(R) HD Graphics, or similar"
- },
- "speechVoices": [
- "Alex:en-US:local",
- "Alice:it-IT:local",
- "Alva:sv-SE:local",
- "Amelie:fr-CA:local",
- "Anna:de-DE:local",
- "Carmit:he-IL:local",
- "Damayanti:id-ID:local",
- "Daniel:en-GB:local",
- "Diego:es-AR:local",
- "Ellen:nl-BE:local",
- "Fiona:en-scotland:local",
- "Fred:en-US:local",
- "Ioana:ro-RO:local",
- "Joana:pt-PT:local",
- "Jorge:es-ES:local",
- "Juan:es-MX:local",
- "Kanya:th-TH:local",
- "Karen:en-AU:local",
- "Kyoko:ja-JP:local",
- "Laura:sk-SK:local",
- "Lekha:hi-IN:local",
- "Luca:it-IT:local",
- "Luciana:pt-BR:local",
- "Maged:ar-SA:local",
- "Mariska:hu-HU:local",
- "Mei-Jia:zh-TW:local",
- "Melina:el-GR:local",
- "Milena:ru-RU:local",
- "Moira:en-IE:local",
- "Monica:es-ES:local",
- "Nora:nb-NO:local",
- "Paulina:es-MX:local",
- "Rishi:en-IN:local",
- "Samantha:en-US:local",
- "Sara:da-DK:local",
- "Satu:fi-FI:local",
- "Sin-ji:zh-HK:local",
- "Tessa:en-ZA:local",
- "Thomas:fr-FR:local",
- "Ting-Ting:zh-CN:local",
- "Veena:en-IN:local",
- "Victoria:en-US:local",
- "Xander:nl-NL:local",
- "Yelda:tr-TR:local",
- "Yuna:ko-KR:local",
- "Yuri:ru-RU:local",
- "Zosia:pl-PL:local",
- "Zuzana:cs-CZ:local"
- ]
- },
- {
- "navigator": {
- "userAgent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:149.0) Gecko/20100101 Firefox/149.0",
- "platform": "MacIntel",
- "hardwareConcurrency": 4,
- "maxTouchPoints": 0
- },
- "screen": {
- "width": 1024,
- "height": 768,
- "colorDepth": 30,
- "availWidth": 1024,
- "availHeight": 768,
- "devicePixelRatio": 1
+ "availWidth": 1920,
+ "availHeight": 1004,
+ "devicePixelRatio": 2
},
"webgl": {
- "unmaskedVendor": "Intel Inc.",
- "unmaskedRenderer": "Intel(R) HD Graphics 400, or similar"
+ "unmaskedVendor": "Apple",
+ "unmaskedRenderer": "Apple M1, or similar"
},
"speechVoices": [
"Albert:en-US:local",
"Alice:it-IT:local",
+ "Soumya:kn-IN:local",
"Alva:sv-SE:local",
+ "Aman:en-IN:local",
"Amélie:fr-CA:local",
"Amira:ms-MY:local",
"Anna:de-DE:local",
+ "Aru:kk-KZ:local",
"Bad News:en-US:local",
"Bahh:en-US:local",
"Bells:en-US:local",
@@ -7261,6 +4270,7 @@
"Flo (Chinese (China mainland)):zh-CN:local",
"Flo (Chinese (Taiwan)):zh-TW:local",
"Fred:en-US:local",
+ "Geeta:te-IN:local",
"Good News:en-US:local",
"Grandma (German (Germany)):de-DE:local",
"Grandma (English (UK)):en-GB:local",
@@ -7314,8 +4324,10 @@
"Mónica:es-ES:local",
"Montse:ca-ES:local",
"Nora:nb-NO:local",
+ "Ona:lt-LT:local",
"Organ:en-US:local",
"Paulina:es-MX:local",
+ "Piya:bn-IN:local",
"Superstar:en-US:local",
"Ralph:en-US:local",
"Reed (German (Germany)):de-DE:local",
@@ -7378,6 +4390,7 @@
"Shelley (Chinese (China mainland)):zh-CN:local",
"Shelley (Chinese (Taiwan)):zh-TW:local",
"Sinji:zh-HK:local",
+ "Tara:en-IN:local",
"Tessa:en-ZA:local",
"Thomas:fr-FR:local",
"Tina:sl-SI:local",
@@ -7395,33 +4408,30 @@
},
{
"navigator": {
- "userAgent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:149.0) Gecko/20100101 Firefox/149.0",
+ "userAgent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:150.0) Gecko/20100101 Firefox/150.0",
"platform": "MacIntel",
- "hardwareConcurrency": 12,
+ "hardwareConcurrency": 6,
"maxTouchPoints": 0
},
"screen": {
- "width": 2304,
- "height": 1296,
+ "width": 1920,
+ "height": 1080,
"colorDepth": 30,
- "availWidth": 2304,
- "availHeight": 1266,
- "devicePixelRatio": 2
+ "availWidth": 1920,
+ "availHeight": 984,
+ "devicePixelRatio": 1
},
"webgl": {
- "unmaskedVendor": "Apple",
- "unmaskedRenderer": "Apple M1, or similar"
+ "unmaskedVendor": "ATI Technologies Inc.",
+ "unmaskedRenderer": "Radeon HD 3200 Graphics, or similar"
},
"speechVoices": [
"Albert:en-US:local",
"Alice:it-IT:local",
- "Soumya:kn-IN:local",
"Alva:sv-SE:local",
- "Aman:en-IN:local",
"Amélie:fr-CA:local",
"Amira:ms-MY:local",
"Anna:de-DE:local",
- "Aru:kk-KZ:local",
"Bad News:en-US:local",
"Bahh:en-US:local",
"Bells:en-US:local",
@@ -7442,11 +4452,7 @@
"Eddy (French (Canada)):fr-CA:local",
"Eddy (French (France)):fr-FR:local",
"Eddy (Italian (Italy)):it-IT:local",
- "Eddy (Japanese (Japan)):ja-JP:local",
- "Eddy (Korean (South Korea)):ko-KR:local",
"Eddy (Portuguese (Brazil)):pt-BR:local",
- "Eddy (Chinese (China mainland)):zh-CN:local",
- "Eddy (Chinese (Taiwan)):zh-TW:local",
"Ellen:nl-BE:local",
"Flo (German (Germany)):de-DE:local",
"Flo (English (UK)):en-GB:local",
@@ -7457,13 +4463,8 @@
"Flo (French (Canada)):fr-CA:local",
"Flo (French (France)):fr-FR:local",
"Flo (Italian (Italy)):it-IT:local",
- "Flo (Japanese (Japan)):ja-JP:local",
- "Flo (Korean (South Korea)):ko-KR:local",
"Flo (Portuguese (Brazil)):pt-BR:local",
- "Flo (Chinese (China mainland)):zh-CN:local",
- "Flo (Chinese (Taiwan)):zh-TW:local",
"Fred:en-US:local",
- "Geeta:te-IN:local",
"Good News:en-US:local",
"Grandma (German (Germany)):de-DE:local",
"Grandma (English (UK)):en-GB:local",
@@ -7474,11 +4475,7 @@
"Grandma (French (Canada)):fr-CA:local",
"Grandma (French (France)):fr-FR:local",
"Grandma (Italian (Italy)):it-IT:local",
- "Grandma (Japanese (Japan)):ja-JP:local",
- "Grandma (Korean (South Korea)):ko-KR:local",
"Grandma (Portuguese (Brazil)):pt-BR:local",
- "Grandma (Chinese (China mainland)):zh-CN:local",
- "Grandma (Chinese (Taiwan)):zh-TW:local",
"Grandpa (German (Germany)):de-DE:local",
"Grandpa (English (UK)):en-GB:local",
"Grandpa (English (US)):en-US:local",
@@ -7488,11 +4485,7 @@
"Grandpa (French (Canada)):fr-CA:local",
"Grandpa (French (France)):fr-FR:local",
"Grandpa (Italian (Italy)):it-IT:local",
- "Grandpa (Japanese (Japan)):ja-JP:local",
- "Grandpa (Korean (South Korea)):ko-KR:local",
"Grandpa (Portuguese (Brazil)):pt-BR:local",
- "Grandpa (Chinese (China mainland)):zh-CN:local",
- "Grandpa (Chinese (Taiwan)):zh-TW:local",
"Jester:en-US:local",
"Ioana:ro-RO:local",
"Jacques:fr-FR:local",
@@ -7517,10 +4510,8 @@
"Mónica:es-ES:local",
"Montse:ca-ES:local",
"Nora:nb-NO:local",
- "Ona:lt-LT:local",
"Organ:en-US:local",
"Paulina:es-MX:local",
- "Piya:bn-IN:local",
"Superstar:en-US:local",
"Ralph:en-US:local",
"Reed (German (Germany)):de-DE:local",
@@ -7531,11 +4522,7 @@
"Reed (Finnish (Finland)):fi-FI:local",
"Reed (French (Canada)):fr-CA:local",
"Reed (Italian (Italy)):it-IT:local",
- "Reed (Japanese (Japan)):ja-JP:local",
- "Reed (Korean (South Korea)):ko-KR:local",
"Reed (Portuguese (Brazil)):pt-BR:local",
- "Reed (Chinese (China mainland)):zh-CN:local",
- "Reed (Chinese (Taiwan)):zh-TW:local",
"Rishi:en-IN:local",
"Rocko (German (Germany)):de-DE:local",
"Rocko (English (UK)):en-GB:local",
@@ -7546,11 +4533,7 @@
"Rocko (French (Canada)):fr-CA:local",
"Rocko (French (France)):fr-FR:local",
"Rocko (Italian (Italy)):it-IT:local",
- "Rocko (Japanese (Japan)):ja-JP:local",
- "Rocko (Korean (South Korea)):ko-KR:local",
"Rocko (Portuguese (Brazil)):pt-BR:local",
- "Rocko (Chinese (China mainland)):zh-CN:local",
- "Rocko (Chinese (Taiwan)):zh-TW:local",
"Samantha:en-US:local",
"Sandy (German (Germany)):de-DE:local",
"Sandy (English (UK)):en-GB:local",
@@ -7561,11 +4544,7 @@
"Sandy (French (Canada)):fr-CA:local",
"Sandy (French (France)):fr-FR:local",
"Sandy (Italian (Italy)):it-IT:local",
- "Sandy (Japanese (Japan)):ja-JP:local",
- "Sandy (Korean (South Korea)):ko-KR:local",
"Sandy (Portuguese (Brazil)):pt-BR:local",
- "Sandy (Chinese (China mainland)):zh-CN:local",
- "Sandy (Chinese (Taiwan)):zh-TW:local",
"Sara:da-DK:local",
"Satu:fi-FI:local",
"Shelley (German (Germany)):de-DE:local",
@@ -7577,19 +4556,12 @@
"Shelley (French (Canada)):fr-CA:local",
"Shelley (French (France)):fr-FR:local",
"Shelley (Italian (Italy)):it-IT:local",
- "Shelley (Japanese (Japan)):ja-JP:local",
- "Shelley (Korean (South Korea)):ko-KR:local",
"Shelley (Portuguese (Brazil)):pt-BR:local",
- "Shelley (Chinese (China mainland)):zh-CN:local",
- "Shelley (Chinese (Taiwan)):zh-TW:local",
"Sinji:zh-HK:local",
- "Tara:en-IN:local",
"Tessa:en-ZA:local",
"Thomas:fr-FR:local",
- "Tina:sl-SI:local",
"Tingting:zh-CN:local",
"Trinoids:en-US:local",
- "Vani:ta-IN:local",
"Whisper:en-US:local",
"Xander:nl-NL:local",
"Yelda:tr-TR:local",
@@ -7601,17 +4573,17 @@
},
{
"navigator": {
- "userAgent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:149.0) Gecko/20100101 Firefox/149.0",
+ "userAgent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:150.0) Gecko/20100101 Firefox/150.0",
"platform": "MacIntel",
- "hardwareConcurrency": 10,
+ "hardwareConcurrency": 8,
"maxTouchPoints": 0
},
"screen": {
- "width": 1512,
- "height": 982,
+ "width": 1710,
+ "height": 1112,
"colorDepth": 30,
- "availWidth": 1512,
- "availHeight": 860,
+ "availWidth": 1710,
+ "availHeight": 1073,
"devicePixelRatio": 2
},
"webgl": {
@@ -7623,7 +4595,8 @@
"Alice:it-IT:local",
"Soumya:kn-IN:local",
"Alva:sv-SE:local",
- "Aman:en-IN:local",
+ "Aman (English (India)):en-IN:local",
+ "Aman (English (India)):en-IN:local",
"Amélie:fr-CA:local",
"Amira:ms-MY:local",
"Anna:de-DE:local",
@@ -7700,7 +4673,9 @@
"Grandpa (Chinese (China mainland)):zh-CN:local",
"Grandpa (Chinese (Taiwan)):zh-TW:local",
"Jester:en-US:local",
+ "Yelda:tr-TR:local",
"Ioana:ro-RO:local",
+ "Yuna:ko-KR:local",
"Jacques:fr-FR:local",
"Joana:pt-PT:local",
"Junior:en-US:local",
@@ -7708,6 +4683,7 @@
"Karen:en-AU:local",
"Kathy:en-US:local",
"Kyoko:ja-JP:local",
+ "Krzysztof (Enhanced):pl-PL:local",
"Lana:hr-HR:local",
"Laura:sk-SK:local",
"Lekha:hi-IN:local",
@@ -7723,10 +4699,11 @@
"Mónica:es-ES:local",
"Montse:ca-ES:local",
"Nora:nb-NO:local",
- "Ona:lt-LT:local",
+ "Ona ((null)):lt-LT:local",
+ "Ona ((null)):lt-LT:local",
"Organ:en-US:local",
- "Paulina:es-MX:local",
"Piya:bn-IN:local",
+ "Paulina:es-MX:local",
"Superstar:en-US:local",
"Ralph:en-US:local",
"Reed (German (Germany)):de-DE:local",
@@ -7798,26 +4775,44 @@
"Vani:ta-IN:local",
"Whisper:en-US:local",
"Xander:nl-NL:local",
- "Yelda:tr-TR:local",
- "Yuna:ko-KR:local",
"Zarvox:en-US:local",
"Zosia:pl-PL:local",
"Zuzana:cs-CZ:local"
]
},
+ {
+ "navigator": {
+ "userAgent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:151.0) Gecko/20100101 Firefox/151.0",
+ "platform": "MacIntel",
+ "hardwareConcurrency": 8,
+ "maxTouchPoints": 0
+ },
+ "screen": {
+ "width": 1680,
+ "height": 1050,
+ "colorDepth": 30,
+ "availWidth": 1680,
+ "availHeight": 974,
+ "devicePixelRatio": 2
+ },
+ "webgl": {
+ "unmaskedVendor": "Apple",
+ "unmaskedRenderer": "Apple M1, or similar"
+ }
+ },
{
"navigator": {
"userAgent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:149.0) Gecko/20100101 Firefox/149.0",
"platform": "MacIntel",
- "hardwareConcurrency": 16,
+ "hardwareConcurrency": 10,
"maxTouchPoints": 0
},
"screen": {
- "width": 1935,
- "height": 1251,
+ "width": 2048,
+ "height": 1080,
"colorDepth": 30,
- "availWidth": 1935,
- "availHeight": 1160,
+ "availWidth": 2048,
+ "availHeight": 1080,
"devicePixelRatio": 2
},
"webgl": {
@@ -8015,15 +5010,85 @@
"navigator": {
"userAgent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:149.0) Gecko/20100101 Firefox/149.0",
"platform": "MacIntel",
- "hardwareConcurrency": 8,
+ "hardwareConcurrency": 2,
"maxTouchPoints": 0
},
"screen": {
- "width": 1710,
- "height": 1112,
+ "width": 1440,
+ "height": 900,
"colorDepth": 30,
- "availWidth": 1710,
- "availHeight": 1112,
+ "availWidth": 1440,
+ "availHeight": 900,
+ "devicePixelRatio": 1
+ },
+ "webgl": {
+ "unmaskedVendor": "Intel Inc.",
+ "unmaskedRenderer": "Intel(R) HD Graphics, or similar"
+ },
+ "speechVoices": [
+ "Alex:en-US:local",
+ "Alice:it-IT:local",
+ "Alva:sv-SE:local",
+ "Amelie:fr-CA:local",
+ "Anna:de-DE:local",
+ "Carmit:he-IL:local",
+ "Damayanti:id-ID:local",
+ "Daniel:en-GB:local",
+ "Diego:es-AR:local",
+ "Ellen:nl-BE:local",
+ "Fiona:en-scotland:local",
+ "Fred:en-US:local",
+ "Ioana:ro-RO:local",
+ "Joana:pt-PT:local",
+ "Jorge:es-ES:local",
+ "Juan:es-MX:local",
+ "Kanya:th-TH:local",
+ "Karen:en-AU:local",
+ "Kyoko:ja-JP:local",
+ "Laura:sk-SK:local",
+ "Lekha:hi-IN:local",
+ "Luca:it-IT:local",
+ "Luciana:pt-BR:local",
+ "Maged:ar-SA:local",
+ "Mariska:hu-HU:local",
+ "Mei-Jia:zh-TW:local",
+ "Melina:el-GR:local",
+ "Milena:ru-RU:local",
+ "Moira:en-IE:local",
+ "Monica:es-ES:local",
+ "Nora:nb-NO:local",
+ "Paulina:es-MX:local",
+ "Rishi:en-IN:local",
+ "Samantha:en-US:local",
+ "Sara:da-DK:local",
+ "Satu:fi-FI:local",
+ "Sin-ji:zh-HK:local",
+ "Tessa:en-ZA:local",
+ "Thomas:fr-FR:local",
+ "Ting-Ting:zh-CN:local",
+ "Veena:en-IN:local",
+ "Victoria:en-US:local",
+ "Xander:nl-NL:local",
+ "Yelda:tr-TR:local",
+ "Yuna:ko-KR:local",
+ "Yuri:ru-RU:local",
+ "Zosia:pl-PL:local",
+ "Zuzana:cs-CZ:local"
+ ]
+ },
+ {
+ "navigator": {
+ "userAgent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:149.0) Gecko/20100101 Firefox/149.0",
+ "platform": "MacIntel",
+ "hardwareConcurrency": 12,
+ "maxTouchPoints": 0
+ },
+ "screen": {
+ "width": 2304,
+ "height": 1296,
+ "colorDepth": 30,
+ "availWidth": 2304,
+ "availHeight": 1266,
"devicePixelRatio": 2
},
"webgl": {
@@ -8221,35 +5286,15 @@
"navigator": {
"userAgent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:149.0) Gecko/20100101 Firefox/149.0",
"platform": "MacIntel",
- "hardwareConcurrency": 8,
- "maxTouchPoints": 0
- },
- "screen": {
- "width": 1470,
- "height": 956,
- "colorDepth": 30,
- "availWidth": 1470,
- "availHeight": 849,
- "devicePixelRatio": 2
- },
- "webgl": {
- "unmaskedVendor": "Apple",
- "unmaskedRenderer": "Apple M1, or similar"
- }
- },
- {
- "navigator": {
- "userAgent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:149.0) Gecko/20100101 Firefox/149.0",
- "platform": "MacIntel",
- "hardwareConcurrency": 8,
+ "hardwareConcurrency": 10,
"maxTouchPoints": 0
},
"screen": {
- "width": 1440,
- "height": 900,
+ "width": 1512,
+ "height": 982,
"colorDepth": 30,
- "availWidth": 1440,
- "availHeight": 824,
+ "availWidth": 1512,
+ "availHeight": 860,
"devicePixelRatio": 2
},
"webgl": {
@@ -8259,10 +5304,13 @@
"speechVoices": [
"Albert:en-US:local",
"Alice:it-IT:local",
+ "Soumya:kn-IN:local",
"Alva:sv-SE:local",
+ "Aman:en-IN:local",
"Amélie:fr-CA:local",
"Amira:ms-MY:local",
"Anna:de-DE:local",
+ "Aru:kk-KZ:local",
"Bad News:en-US:local",
"Bahh:en-US:local",
"Bells:en-US:local",
@@ -8304,6 +5352,7 @@
"Flo (Chinese (China mainland)):zh-CN:local",
"Flo (Chinese (Taiwan)):zh-TW:local",
"Fred:en-US:local",
+ "Geeta:te-IN:local",
"Good News:en-US:local",
"Grandma (German (Germany)):de-DE:local",
"Grandma (English (UK)):en-GB:local",
@@ -8357,8 +5406,10 @@
"Mónica:es-ES:local",
"Montse:ca-ES:local",
"Nora:nb-NO:local",
+ "Ona:lt-LT:local",
"Organ:en-US:local",
"Paulina:es-MX:local",
+ "Piya:bn-IN:local",
"Superstar:en-US:local",
"Ralph:en-US:local",
"Reed (German (Germany)):de-DE:local",
@@ -8421,6 +5472,7 @@
"Shelley (Chinese (China mainland)):zh-CN:local",
"Shelley (Chinese (Taiwan)):zh-TW:local",
"Sinji:zh-HK:local",
+ "Tara:en-IN:local",
"Tessa:en-ZA:local",
"Thomas:fr-FR:local",
"Tina:sl-SI:local",
@@ -8444,11 +5496,11 @@
"maxTouchPoints": 0
},
"screen": {
- "width": 2056,
- "height": 1329,
+ "width": 1935,
+ "height": 1251,
"colorDepth": 30,
- "availWidth": 2056,
- "availHeight": 1285,
+ "availWidth": 1935,
+ "availHeight": 1160,
"devicePixelRatio": 2
},
"webgl": {
@@ -8458,10 +5510,13 @@
"speechVoices": [
"Albert:en-US:local",
"Alice:it-IT:local",
+ "Soumya:kn-IN:local",
"Alva:sv-SE:local",
+ "Aman:en-IN:local",
"Amélie:fr-CA:local",
"Amira:ms-MY:local",
"Anna:de-DE:local",
+ "Aru:kk-KZ:local",
"Bad News:en-US:local",
"Bahh:en-US:local",
"Bells:en-US:local",
@@ -8482,7 +5537,11 @@
"Eddy (French (Canada)):fr-CA:local",
"Eddy (French (France)):fr-FR:local",
"Eddy (Italian (Italy)):it-IT:local",
+ "Eddy (Japanese (Japan)):ja-JP:local",
+ "Eddy (Korean (South Korea)):ko-KR:local",
"Eddy (Portuguese (Brazil)):pt-BR:local",
+ "Eddy (Chinese (China mainland)):zh-CN:local",
+ "Eddy (Chinese (Taiwan)):zh-TW:local",
"Ellen:nl-BE:local",
"Flo (German (Germany)):de-DE:local",
"Flo (English (UK)):en-GB:local",
@@ -8493,8 +5552,13 @@
"Flo (French (Canada)):fr-CA:local",
"Flo (French (France)):fr-FR:local",
"Flo (Italian (Italy)):it-IT:local",
+ "Flo (Japanese (Japan)):ja-JP:local",
+ "Flo (Korean (South Korea)):ko-KR:local",
"Flo (Portuguese (Brazil)):pt-BR:local",
+ "Flo (Chinese (China mainland)):zh-CN:local",
+ "Flo (Chinese (Taiwan)):zh-TW:local",
"Fred:en-US:local",
+ "Geeta:te-IN:local",
"Good News:en-US:local",
"Grandma (German (Germany)):de-DE:local",
"Grandma (English (UK)):en-GB:local",
@@ -8505,7 +5569,11 @@
"Grandma (French (Canada)):fr-CA:local",
"Grandma (French (France)):fr-FR:local",
"Grandma (Italian (Italy)):it-IT:local",
+ "Grandma (Japanese (Japan)):ja-JP:local",
+ "Grandma (Korean (South Korea)):ko-KR:local",
"Grandma (Portuguese (Brazil)):pt-BR:local",
+ "Grandma (Chinese (China mainland)):zh-CN:local",
+ "Grandma (Chinese (Taiwan)):zh-TW:local",
"Grandpa (German (Germany)):de-DE:local",
"Grandpa (English (UK)):en-GB:local",
"Grandpa (English (US)):en-US:local",
@@ -8515,7 +5583,11 @@
"Grandpa (French (Canada)):fr-CA:local",
"Grandpa (French (France)):fr-FR:local",
"Grandpa (Italian (Italy)):it-IT:local",
+ "Grandpa (Japanese (Japan)):ja-JP:local",
+ "Grandpa (Korean (South Korea)):ko-KR:local",
"Grandpa (Portuguese (Brazil)):pt-BR:local",
+ "Grandpa (Chinese (China mainland)):zh-CN:local",
+ "Grandpa (Chinese (Taiwan)):zh-TW:local",
"Jester:en-US:local",
"Ioana:ro-RO:local",
"Jacques:fr-FR:local",
@@ -8540,8 +5612,10 @@
"Mónica:es-ES:local",
"Montse:ca-ES:local",
"Nora:nb-NO:local",
+ "Ona:lt-LT:local",
"Organ:en-US:local",
"Paulina:es-MX:local",
+ "Piya:bn-IN:local",
"Superstar:en-US:local",
"Ralph:en-US:local",
"Reed (German (Germany)):de-DE:local",
@@ -8552,7 +5626,11 @@
"Reed (Finnish (Finland)):fi-FI:local",
"Reed (French (Canada)):fr-CA:local",
"Reed (Italian (Italy)):it-IT:local",
+ "Reed (Japanese (Japan)):ja-JP:local",
+ "Reed (Korean (South Korea)):ko-KR:local",
"Reed (Portuguese (Brazil)):pt-BR:local",
+ "Reed (Chinese (China mainland)):zh-CN:local",
+ "Reed (Chinese (Taiwan)):zh-TW:local",
"Rishi:en-IN:local",
"Rocko (German (Germany)):de-DE:local",
"Rocko (English (UK)):en-GB:local",
@@ -8563,7 +5641,11 @@
"Rocko (French (Canada)):fr-CA:local",
"Rocko (French (France)):fr-FR:local",
"Rocko (Italian (Italy)):it-IT:local",
+ "Rocko (Japanese (Japan)):ja-JP:local",
+ "Rocko (Korean (South Korea)):ko-KR:local",
"Rocko (Portuguese (Brazil)):pt-BR:local",
+ "Rocko (Chinese (China mainland)):zh-CN:local",
+ "Rocko (Chinese (Taiwan)):zh-TW:local",
"Samantha:en-US:local",
"Sandy (German (Germany)):de-DE:local",
"Sandy (English (UK)):en-GB:local",
@@ -8574,7 +5656,11 @@
"Sandy (French (Canada)):fr-CA:local",
"Sandy (French (France)):fr-FR:local",
"Sandy (Italian (Italy)):it-IT:local",
+ "Sandy (Japanese (Japan)):ja-JP:local",
+ "Sandy (Korean (South Korea)):ko-KR:local",
"Sandy (Portuguese (Brazil)):pt-BR:local",
+ "Sandy (Chinese (China mainland)):zh-CN:local",
+ "Sandy (Chinese (Taiwan)):zh-TW:local",
"Sara:da-DK:local",
"Satu:fi-FI:local",
"Shelley (German (Germany)):de-DE:local",
@@ -8586,12 +5672,19 @@
"Shelley (French (Canada)):fr-CA:local",
"Shelley (French (France)):fr-FR:local",
"Shelley (Italian (Italy)):it-IT:local",
+ "Shelley (Japanese (Japan)):ja-JP:local",
+ "Shelley (Korean (South Korea)):ko-KR:local",
"Shelley (Portuguese (Brazil)):pt-BR:local",
+ "Shelley (Chinese (China mainland)):zh-CN:local",
+ "Shelley (Chinese (Taiwan)):zh-TW:local",
"Sinji:zh-HK:local",
+ "Tara:en-IN:local",
"Tessa:en-ZA:local",
"Thomas:fr-FR:local",
+ "Tina:sl-SI:local",
"Tingting:zh-CN:local",
"Trinoids:en-US:local",
+ "Vani:ta-IN:local",
"Whisper:en-US:local",
"Xander:nl-NL:local",
"Yelda:tr-TR:local",
@@ -8609,11 +5702,11 @@
"maxTouchPoints": 0
},
"screen": {
- "width": 1280,
- "height": 720,
+ "width": 1710,
+ "height": 1112,
"colorDepth": 30,
- "availWidth": 1280,
- "availHeight": 720,
+ "availWidth": 1710,
+ "availHeight": 1112,
"devicePixelRatio": 2
},
"webgl": {
@@ -8638,7 +5731,7 @@
"Carmit:he-IL:local",
"Cellos:en-US:local",
"Damayanti:id-ID:local",
- "Daniel (English (UK)):en-GB:local",
+ "Daniel:en-GB:local",
"Daria:bg-BG:local",
"Wobble:en-US:local",
"Eddy (German (Germany)):de-DE:local",
@@ -8815,12 +5908,32 @@
"maxTouchPoints": 0
},
"screen": {
- "width": 5120,
- "height": 1440,
+ "width": 1470,
+ "height": 956,
"colorDepth": 30,
- "availWidth": 5120,
- "availHeight": 1364,
- "devicePixelRatio": 1
+ "availWidth": 1470,
+ "availHeight": 849,
+ "devicePixelRatio": 2
+ },
+ "webgl": {
+ "unmaskedVendor": "Apple",
+ "unmaskedRenderer": "Apple M1, or similar"
+ }
+ },
+ {
+ "navigator": {
+ "userAgent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:149.0) Gecko/20100101 Firefox/149.0",
+ "platform": "MacIntel",
+ "hardwareConcurrency": 8,
+ "maxTouchPoints": 0
+ },
+ "screen": {
+ "width": 1440,
+ "height": 900,
+ "colorDepth": 30,
+ "availWidth": 1440,
+ "availHeight": 824,
+ "devicePixelRatio": 2
},
"webgl": {
"unmaskedVendor": "Apple",
@@ -8829,13 +5942,10 @@
"speechVoices": [
"Albert:en-US:local",
"Alice:it-IT:local",
- "Soumya:kn-IN:local",
"Alva:sv-SE:local",
- "Aman:en-IN:local",
"Amélie:fr-CA:local",
"Amira:ms-MY:local",
"Anna:de-DE:local",
- "Aru:kk-KZ:local",
"Bad News:en-US:local",
"Bahh:en-US:local",
"Bells:en-US:local",
@@ -8877,7 +5987,6 @@
"Flo (Chinese (China mainland)):zh-CN:local",
"Flo (Chinese (Taiwan)):zh-TW:local",
"Fred:en-US:local",
- "Geeta:te-IN:local",
"Good News:en-US:local",
"Grandma (German (Germany)):de-DE:local",
"Grandma (English (UK)):en-GB:local",
@@ -8931,10 +6040,8 @@
"Mónica:es-ES:local",
"Montse:ca-ES:local",
"Nora:nb-NO:local",
- "Ona:lt-LT:local",
"Organ:en-US:local",
"Paulina:es-MX:local",
- "Piya:bn-IN:local",
"Superstar:en-US:local",
"Ralph:en-US:local",
"Reed (German (Germany)):de-DE:local",
@@ -8997,7 +6104,6 @@
"Shelley (Chinese (China mainland)):zh-CN:local",
"Shelley (Chinese (Taiwan)):zh-TW:local",
"Sinji:zh-HK:local",
- "Tara:en-IN:local",
"Tessa:en-ZA:local",
"Thomas:fr-FR:local",
"Tina:sl-SI:local",
@@ -9017,20 +6123,20 @@
"navigator": {
"userAgent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:149.0) Gecko/20100101 Firefox/149.0",
"platform": "MacIntel",
- "hardwareConcurrency": 6,
+ "hardwareConcurrency": 16,
"maxTouchPoints": 0
},
"screen": {
- "width": 1536,
- "height": 960,
+ "width": 2056,
+ "height": 1329,
"colorDepth": 30,
- "availWidth": 1536,
- "availHeight": 935,
+ "availWidth": 2056,
+ "availHeight": 1285,
"devicePixelRatio": 2
},
"webgl": {
- "unmaskedVendor": "Intel Inc.",
- "unmaskedRenderer": "Intel(R) HD Graphics 400, or similar"
+ "unmaskedVendor": "Apple",
+ "unmaskedRenderer": "Apple M1, or similar"
},
"speechVoices": [
"Albert:en-US:local",
@@ -9182,15 +6288,15 @@
"navigator": {
"userAgent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:149.0) Gecko/20100101 Firefox/149.0",
"platform": "MacIntel",
- "hardwareConcurrency": 10,
+ "hardwareConcurrency": 8,
"maxTouchPoints": 0
},
"screen": {
- "width": 1800,
- "height": 1169,
+ "width": 1280,
+ "height": 720,
"colorDepth": 30,
- "availWidth": 1800,
- "availHeight": 1061,
+ "availWidth": 1280,
+ "availHeight": 720,
"devicePixelRatio": 2
},
"webgl": {
@@ -9200,10 +6306,13 @@
"speechVoices": [
"Albert:en-US:local",
"Alice:it-IT:local",
+ "Soumya:kn-IN:local",
"Alva:sv-SE:local",
+ "Aman:en-IN:local",
"Amélie:fr-CA:local",
"Amira:ms-MY:local",
"Anna:de-DE:local",
+ "Aru:kk-KZ:local",
"Bad News:en-US:local",
"Bahh:en-US:local",
"Bells:en-US:local",
@@ -9212,7 +6321,7 @@
"Carmit:he-IL:local",
"Cellos:en-US:local",
"Damayanti:id-ID:local",
- "Daniel:en-GB:local",
+ "Daniel (English (UK)):en-GB:local",
"Daria:bg-BG:local",
"Wobble:en-US:local",
"Eddy (German (Germany)):de-DE:local",
@@ -9245,6 +6354,7 @@
"Flo (Chinese (China mainland)):zh-CN:local",
"Flo (Chinese (Taiwan)):zh-TW:local",
"Fred:en-US:local",
+ "Geeta:te-IN:local",
"Good News:en-US:local",
"Grandma (German (Germany)):de-DE:local",
"Grandma (English (UK)):en-GB:local",
@@ -9298,8 +6408,10 @@
"Mónica:es-ES:local",
"Montse:ca-ES:local",
"Nora:nb-NO:local",
+ "Ona:lt-LT:local",
"Organ:en-US:local",
"Paulina:es-MX:local",
+ "Piya:bn-IN:local",
"Superstar:en-US:local",
"Ralph:en-US:local",
"Reed (German (Germany)):de-DE:local",
@@ -9362,6 +6474,7 @@
"Shelley (Chinese (China mainland)):zh-CN:local",
"Shelley (Chinese (Taiwan)):zh-TW:local",
"Sinji:zh-HK:local",
+ "Tara:en-IN:local",
"Tessa:en-ZA:local",
"Thomas:fr-FR:local",
"Tina:sl-SI:local",
@@ -9377,26 +6490,6 @@
"Zuzana:cs-CZ:local"
]
},
- {
- "navigator": {
- "userAgent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:149.0) Gecko/20100101 Firefox/149.0",
- "platform": "MacIntel",
- "hardwareConcurrency": 6,
- "maxTouchPoints": 0
- },
- "screen": {
- "width": 2560,
- "height": 1440,
- "colorDepth": 30,
- "availWidth": 2560,
- "availHeight": 1415,
- "devicePixelRatio": 2
- },
- "webgl": {
- "unmaskedVendor": "ATI Technologies Inc.",
- "unmaskedRenderer": "Radeon R9 200 Series, or similar"
- }
- },
{
"navigator": {
"userAgent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:149.0) Gecko/20100101 Firefox/149.0",
@@ -9405,24 +6498,27 @@
"maxTouchPoints": 0
},
"screen": {
- "width": 2133,
- "height": 1200,
+ "width": 5120,
+ "height": 1440,
"colorDepth": 30,
- "availWidth": 2133,
- "availHeight": 1179,
- "devicePixelRatio": 2.4
+ "availWidth": 5120,
+ "availHeight": 1364,
+ "devicePixelRatio": 1
},
"webgl": {
- "unmaskedVendor": "ATI Technologies Inc.",
- "unmaskedRenderer": "Radeon R9 200 Series, or similar"
+ "unmaskedVendor": "Apple",
+ "unmaskedRenderer": "Apple M1, or similar"
},
"speechVoices": [
"Albert:en-US:local",
"Alice:it-IT:local",
+ "Soumya:kn-IN:local",
"Alva:sv-SE:local",
+ "Aman:en-IN:local",
"Amélie:fr-CA:local",
"Amira:ms-MY:local",
"Anna:de-DE:local",
+ "Aru:kk-KZ:local",
"Bad News:en-US:local",
"Bahh:en-US:local",
"Bells:en-US:local",
@@ -9464,6 +6560,7 @@
"Flo (Chinese (China mainland)):zh-CN:local",
"Flo (Chinese (Taiwan)):zh-TW:local",
"Fred:en-US:local",
+ "Geeta:te-IN:local",
"Good News:en-US:local",
"Grandma (German (Germany)):de-DE:local",
"Grandma (English (UK)):en-GB:local",
@@ -9517,8 +6614,10 @@
"Mónica:es-ES:local",
"Montse:ca-ES:local",
"Nora:nb-NO:local",
+ "Ona:lt-LT:local",
"Organ:en-US:local",
"Paulina:es-MX:local",
+ "Piya:bn-IN:local",
"Superstar:en-US:local",
"Ralph:en-US:local",
"Reed (German (Germany)):de-DE:local",
@@ -9581,6 +6680,7 @@
"Shelley (Chinese (China mainland)):zh-CN:local",
"Shelley (Chinese (Taiwan)):zh-TW:local",
"Sinji:zh-HK:local",
+ "Tara:en-IN:local",
"Tessa:en-ZA:local",
"Thomas:fr-FR:local",
"Tina:sl-SI:local",
@@ -9600,90 +6700,20 @@
"navigator": {
"userAgent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:149.0) Gecko/20100101 Firefox/149.0",
"platform": "MacIntel",
- "hardwareConcurrency": 4,
- "maxTouchPoints": 0
- },
- "screen": {
- "width": 1920,
- "height": 1080,
- "colorDepth": 30,
- "availWidth": 1920,
- "availHeight": 984,
- "devicePixelRatio": 1
- },
- "webgl": {
- "unmaskedVendor": "Intel Inc.",
- "unmaskedRenderer": "Intel 945GM, or similar"
- },
- "speechVoices": [
- "Alex:en-US:local",
- "Alice:it-IT:local",
- "Alva:sv-SE:local",
- "Amelie:fr-CA:local",
- "Anna:de-DE:local",
- "Carmit:he-IL:local",
- "Damayanti:id-ID:local",
- "Daniel:en-GB:local",
- "Diego:es-AR:local",
- "Ellen:nl-BE:local",
- "Fiona:en-scotland:local",
- "Fred:en-US:local",
- "Ioana:ro-RO:local",
- "Joana:pt-PT:local",
- "Jorge:es-ES:local",
- "Juan:es-MX:local",
- "Kanya:th-TH:local",
- "Karen:en-AU:local",
- "Kyoko:ja-JP:local",
- "Laura:sk-SK:local",
- "Lekha:hi-IN:local",
- "Luca:it-IT:local",
- "Luciana:pt-BR:local",
- "Maged:ar-SA:local",
- "Mariska:hu-HU:local",
- "Mei-Jia:zh-TW:local",
- "Melina:el-GR:local",
- "Milena:ru-RU:local",
- "Moira:en-IE:local",
- "Monica:es-ES:local",
- "Nora:nb-NO:local",
- "Paulina:es-MX:local",
- "Rishi:en-IN:local",
- "Samantha:en-US:local",
- "Sara:da-DK:local",
- "Satu:fi-FI:local",
- "Sin-ji:zh-HK:local",
- "Tessa:en-ZA:local",
- "Thomas:fr-FR:local",
- "Ting-Ting:zh-CN:local",
- "Veena:en-IN:local",
- "Victoria:en-US:local",
- "Xander:nl-NL:local",
- "Yelda:tr-TR:local",
- "Yuna:ko-KR:local",
- "Yuri:ru-RU:local",
- "Zosia:pl-PL:local",
- "Zuzana:cs-CZ:local"
- ]
- },
- {
- "navigator": {
- "userAgent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:149.0) Gecko/20100101 Firefox/149.0",
- "platform": "MacIntel",
- "hardwareConcurrency": 6,
+ "hardwareConcurrency": 10,
"maxTouchPoints": 0
},
"screen": {
- "width": 2048,
- "height": 1152,
+ "width": 1800,
+ "height": 1169,
"colorDepth": 30,
- "availWidth": 2048,
- "availHeight": 1026,
+ "availWidth": 1800,
+ "availHeight": 1061,
"devicePixelRatio": 2
},
"webgl": {
- "unmaskedVendor": "ATI Technologies Inc.",
- "unmaskedRenderer": "Radeon R9 200 Series, or similar"
+ "unmaskedVendor": "Apple",
+ "unmaskedRenderer": "Apple M1, or similar"
},
"speechVoices": [
"Albert:en-US:local",
@@ -9869,21 +6899,71 @@
"navigator": {
"userAgent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:149.0) Gecko/20100101 Firefox/149.0",
"platform": "MacIntel",
- "hardwareConcurrency": 2,
+ "hardwareConcurrency": 4,
"maxTouchPoints": 0
},
"screen": {
- "width": 1366,
- "height": 768,
+ "width": 1920,
+ "height": 1080,
"colorDepth": 30,
- "availWidth": 1366,
- "availHeight": 670,
+ "availWidth": 1920,
+ "availHeight": 984,
"devicePixelRatio": 1
},
"webgl": {
"unmaskedVendor": "Intel Inc.",
- "unmaskedRenderer": "Intel(R) HD Graphics 400, or similar"
- }
+ "unmaskedRenderer": "Intel 945GM, or similar"
+ },
+ "speechVoices": [
+ "Alex:en-US:local",
+ "Alice:it-IT:local",
+ "Alva:sv-SE:local",
+ "Amelie:fr-CA:local",
+ "Anna:de-DE:local",
+ "Carmit:he-IL:local",
+ "Damayanti:id-ID:local",
+ "Daniel:en-GB:local",
+ "Diego:es-AR:local",
+ "Ellen:nl-BE:local",
+ "Fiona:en-scotland:local",
+ "Fred:en-US:local",
+ "Ioana:ro-RO:local",
+ "Joana:pt-PT:local",
+ "Jorge:es-ES:local",
+ "Juan:es-MX:local",
+ "Kanya:th-TH:local",
+ "Karen:en-AU:local",
+ "Kyoko:ja-JP:local",
+ "Laura:sk-SK:local",
+ "Lekha:hi-IN:local",
+ "Luca:it-IT:local",
+ "Luciana:pt-BR:local",
+ "Maged:ar-SA:local",
+ "Mariska:hu-HU:local",
+ "Mei-Jia:zh-TW:local",
+ "Melina:el-GR:local",
+ "Milena:ru-RU:local",
+ "Moira:en-IE:local",
+ "Monica:es-ES:local",
+ "Nora:nb-NO:local",
+ "Paulina:es-MX:local",
+ "Rishi:en-IN:local",
+ "Samantha:en-US:local",
+ "Sara:da-DK:local",
+ "Satu:fi-FI:local",
+ "Sin-ji:zh-HK:local",
+ "Tessa:en-ZA:local",
+ "Thomas:fr-FR:local",
+ "Ting-Ting:zh-CN:local",
+ "Veena:en-IN:local",
+ "Victoria:en-US:local",
+ "Xander:nl-NL:local",
+ "Yelda:tr-TR:local",
+ "Yuna:ko-KR:local",
+ "Yuri:ru-RU:local",
+ "Zosia:pl-PL:local",
+ "Zuzana:cs-CZ:local"
+ ]
},
{
"navigator": {
@@ -10652,26 +7732,6 @@
"Microsoft Heami Desktop - Korean:ko-KR:local"
]
},
- {
- "navigator": {
- "userAgent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:150.0) Gecko/20100101 Firefox/150.0",
- "platform": "Win32",
- "hardwareConcurrency": 4,
- "maxTouchPoints": 10
- },
- "screen": {
- "width": 1718,
- "height": 1277,
- "colorDepth": 24,
- "availWidth": 1718,
- "availHeight": 1277,
- "devicePixelRatio": 2
- },
- "webgl": {
- "unmaskedVendor": "Mozilla",
- "unmaskedRenderer": "Mozilla"
- }
- },
{
"navigator": {
"userAgent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:150.0) Gecko/20100101 Firefox/150.0",
@@ -12060,35 +9120,6 @@
"Microsoft Zira Desktop - English (United States):en-US:local"
]
},
- {
- "navigator": {
- "userAgent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:150.0) Gecko/20100101 Firefox/150.0",
- "platform": "Win32",
- "hardwareConcurrency": 4,
- "maxTouchPoints": 40
- },
- "screen": {
- "width": 1360,
- "height": 768,
- "colorDepth": 24,
- "availWidth": 1360,
- "availHeight": 728,
- "devicePixelRatio": 1
- },
- "webgl": {
- "unmaskedVendor": "Google Inc. (Intel)",
- "unmaskedRenderer": "ANGLE (Intel, Intel(R) HD Graphics Direct3D11 vs_5_0 ps_5_0), or similar"
- },
- "speechVoices": [
- "Microsoft David - English (United States):en-US:local",
- "Microsoft Ravi - English (India):en-IN:local",
- "Microsoft Heera - English (India):en-IN:local",
- "Microsoft Mark - English (United States):en-US:local",
- "Microsoft Zira - English (United States):en-US:local",
- "Microsoft David Desktop - English (United States):en-US:local",
- "Microsoft Zira Desktop - English (United States):en-US:local"
- ]
- },
{
"navigator": {
"userAgent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:150.0) Gecko/20100101 Firefox/150.0",
diff --git a/pythonlib/camoufox/fingerprint-presets.json b/pythonlib/camoufox/fingerprint-presets.json
index 1d0da22f7..95ba13256 100644
--- a/pythonlib/camoufox/fingerprint-presets.json
+++ b/pythonlib/camoufox/fingerprint-presets.json
@@ -3,171 +3,6 @@
"generated_at": "2026-03-11T00:45:14.521Z",
"presets": {
"macos": [
- {
- "navigator": {
- "userAgent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:148.0) Gecko/20100101 Firefox/148.0",
- "platform": "MacIntel",
- "hardwareConcurrency": 4,
- "maxTouchPoints": 0
- },
- "screen": {
- "width": 1440,
- "height": 900,
- "colorDepth": 30,
- "availWidth": 1440,
- "availHeight": 900,
- "devicePixelRatio": 2
- },
- "webgl": {
- "unmaskedVendor": "Intel Inc.",
- "unmaskedRenderer": "Intel(R) HD Graphics 400, or similar"
- },
- "speechVoices": [
- "Albert:en-US:local",
- "Alice:it-IT:local",
- "Alva:sv-SE:local",
- "Amélie:fr-CA:local",
- "Amira:ms-MY:local",
- "Anna:de-DE:local",
- "Bad News:en-US:local",
- "Bahh:en-US:local",
- "Bells:en-US:local",
- "Boing:en-US:local",
- "Bubbles:en-US:local",
- "Carmit:he-IL:local",
- "Cellos:en-US:local",
- "Damayanti:id-ID:local",
- "Daniel:en-GB:local",
- "Daria:bg-BG:local",
- "Wobble:en-US:local",
- "Eddy (German (Germany)):de-DE:local",
- "Eddy (English (U.K.)):en-GB:local",
- "Eddy (English (U.S.)):en-US:local",
- "Eddy (Spanish (Spain)):es-ES:local",
- "Eddy (Spanish (Mexico)):es-MX:local",
- "Eddy (Finnish (Finland)):fi-FI:local",
- "Eddy (French (Canada)):fr-CA:local",
- "Eddy (French (France)):fr-FR:local",
- "Eddy (Italian (Italy)):it-IT:local",
- "Eddy (Portuguese (Brazil)):pt-BR:local",
- "Ellen:nl-BE:local",
- "Flo (German (Germany)):de-DE:local",
- "Flo (English (U.K.)):en-GB:local",
- "Flo (English (U.S.)):en-US:local",
- "Flo (Spanish (Spain)):es-ES:local",
- "Flo (Spanish (Mexico)):es-MX:local",
- "Flo (Finnish (Finland)):fi-FI:local",
- "Flo (French (Canada)):fr-CA:local",
- "Flo (French (France)):fr-FR:local",
- "Flo (Italian (Italy)):it-IT:local",
- "Flo (Portuguese (Brazil)):pt-BR:local",
- "Fred:en-US:local",
- "Good News:en-US:local",
- "Grandma (German (Germany)):de-DE:local",
- "Grandma (English (U.K.)):en-GB:local",
- "Grandma (English (U.S.)):en-US:local",
- "Grandma (Spanish (Spain)):es-ES:local",
- "Grandma (Spanish (Mexico)):es-MX:local",
- "Grandma (Finnish (Finland)):fi-FI:local",
- "Grandma (French (Canada)):fr-CA:local",
- "Grandma (French (France)):fr-FR:local",
- "Grandma (Italian (Italy)):it-IT:local",
- "Grandma (Portuguese (Brazil)):pt-BR:local",
- "Grandpa (German (Germany)):de-DE:local",
- "Grandpa (English (U.K.)):en-GB:local",
- "Grandpa (English (U.S.)):en-US:local",
- "Grandpa (Spanish (Spain)):es-ES:local",
- "Grandpa (Spanish (Mexico)):es-MX:local",
- "Grandpa (Finnish (Finland)):fi-FI:local",
- "Grandpa (French (Canada)):fr-CA:local",
- "Grandpa (French (France)):fr-FR:local",
- "Grandpa (Italian (Italy)):it-IT:local",
- "Grandpa (Portuguese (Brazil)):pt-BR:local",
- "Jester:en-US:local",
- "Ioana:ro-RO:local",
- "Jacques:fr-FR:local",
- "Joana:pt-PT:local",
- "Junior:en-US:local",
- "Kanya:th-TH:local",
- "Karen:en-AU:local",
- "Kathy:en-US:local",
- "Kyoko:ja-JP:local",
- "Lana:hr-HR:local",
- "Laura:sk-SK:local",
- "Lekha:hi-IN:local",
- "Lesya:uk-UA:local",
- "Linh:vi-VN:local",
- "Luciana:pt-BR:local",
- "Majed:ar-001:local",
- "Tünde:hu-HU:local",
- "Meijia:zh-TW:local",
- "Melina:el-GR:local",
- "Milena:ru-RU:local",
- "Moira:en-IE:local",
- "Mónica:es-ES:local",
- "Montse:ca-ES:local",
- "Nora:nb-NO:local",
- "Organ:en-US:local",
- "Paulina:es-MX:local",
- "Superstar:en-US:local",
- "Ralph:en-US:local",
- "Reed (German (Germany)):de-DE:local",
- "Reed (English (U.K.)):en-GB:local",
- "Reed (English (U.S.)):en-US:local",
- "Reed (Spanish (Spain)):es-ES:local",
- "Reed (Spanish (Mexico)):es-MX:local",
- "Reed (Finnish (Finland)):fi-FI:local",
- "Reed (French (Canada)):fr-CA:local",
- "Reed (Italian (Italy)):it-IT:local",
- "Reed (Portuguese (Brazil)):pt-BR:local",
- "Rishi:en-IN:local",
- "Rocko (German (Germany)):de-DE:local",
- "Rocko (English (U.K.)):en-GB:local",
- "Rocko (English (U.S.)):en-US:local",
- "Rocko (Spanish (Spain)):es-ES:local",
- "Rocko (Spanish (Mexico)):es-MX:local",
- "Rocko (Finnish (Finland)):fi-FI:local",
- "Rocko (French (Canada)):fr-CA:local",
- "Rocko (French (France)):fr-FR:local",
- "Rocko (Italian (Italy)):it-IT:local",
- "Rocko (Portuguese (Brazil)):pt-BR:local",
- "Samantha:en-US:local",
- "Sandy (German (Germany)):de-DE:local",
- "Sandy (English (U.K.)):en-GB:local",
- "Sandy (English (U.S.)):en-US:local",
- "Sandy (Spanish (Spain)):es-ES:local",
- "Sandy (Spanish (Mexico)):es-MX:local",
- "Sandy (Finnish (Finland)):fi-FI:local",
- "Sandy (French (Canada)):fr-CA:local",
- "Sandy (French (France)):fr-FR:local",
- "Sandy (Italian (Italy)):it-IT:local",
- "Sandy (Portuguese (Brazil)):pt-BR:local",
- "Sara:da-DK:local",
- "Satu:fi-FI:local",
- "Shelley (German (Germany)):de-DE:local",
- "Shelley (English (U.K.)):en-GB:local",
- "Shelley (English (U.S.)):en-US:local",
- "Shelley (Spanish (Spain)):es-ES:local",
- "Shelley (Spanish (Mexico)):es-MX:local",
- "Shelley (Finnish (Finland)):fi-FI:local",
- "Shelley (French (Canada)):fr-CA:local",
- "Shelley (French (France)):fr-FR:local",
- "Shelley (Italian (Italy)):it-IT:local",
- "Shelley (Portuguese (Brazil)):pt-BR:local",
- "Sinji:zh-HK:local",
- "Tessa:en-ZA:local",
- "Thomas:fr-FR:local",
- "Tingting:zh-CN:local",
- "Trinoids:en-US:local",
- "Whisper:en-US:local",
- "Xander:nl-NL:local",
- "Yelda:tr-TR:local",
- "Yuna:ko-KR:local",
- "Zarvox:en-US:local",
- "Zosia:pl-PL:local",
- "Zuzana:cs-CZ:local"
- ]
- },
{
"navigator": {
"userAgent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:148.0) Gecko/20100101 Firefox/148.0",
@@ -375,164 +210,89 @@
},
{
"navigator": {
- "userAgent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:148.0) Gecko/20100101 Firefox/148.0",
+ "userAgent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10.13; rv:109.0) Gecko/20100101 Firefox/115.0",
"platform": "MacIntel",
- "hardwareConcurrency": 2,
+ "hardwareConcurrency": 4,
"maxTouchPoints": 0
},
"screen": {
- "width": 1920,
- "height": 1080,
+ "width": 1280,
+ "height": 800,
"colorDepth": 30,
- "availWidth": 1920,
- "availHeight": 985
+ "availWidth": 1280,
+ "availHeight": 714
},
"webgl": {
"unmaskedVendor": "Intel Inc.",
- "unmaskedRenderer": "Intel(R) HD Graphics 400, or similar"
+ "unmaskedRenderer": "Intel(R) HD Graphics"
+ }
+ },
+ {
+ "navigator": {
+ "userAgent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0",
+ "platform": "MacIntel",
+ "hardwareConcurrency": 4,
+ "maxTouchPoints": 0
+ },
+ "screen": {
+ "width": 1440,
+ "height": 900,
+ "colorDepth": 30,
+ "availWidth": 1440,
+ "availHeight": 900,
+ "devicePixelRatio": 2
+ },
+ "webgl": {
+ "unmaskedVendor": "Intel Inc.",
+ "unmaskedRenderer": "Intel(R) HD Graphics, or similar"
},
"speechVoices": [
- "Albert:en-US:local",
+ "Alex:en-US:local",
"Alice:it-IT:local",
"Alva:sv-SE:local",
- "Amélie:fr-CA:local",
- "Amira:ms-MY:local",
+ "Amelie:fr-CA:local",
"Anna:de-DE:local",
- "Bad News:en-US:local",
- "Bahh:en-US:local",
- "Bells:en-US:local",
- "Boing:en-US:local",
- "Bubbles:en-US:local",
"Carmit:he-IL:local",
- "Cellos:en-US:local",
"Damayanti:id-ID:local",
"Daniel:en-GB:local",
- "Daria:bg-BG:local",
- "Wobble:en-US:local",
- "Eddy (German (Germany)):de-DE:local",
- "Eddy (English (UK)):en-GB:local",
- "Eddy (English (US)):en-US:local",
- "Eddy (Spanish (Spain)):es-ES:local",
- "Eddy (Spanish (Mexico)):es-MX:local",
- "Eddy (Finnish (Finland)):fi-FI:local",
- "Eddy (French (Canada)):fr-CA:local",
- "Eddy (French (France)):fr-FR:local",
- "Eddy (Italian (Italy)):it-IT:local",
- "Eddy (Portuguese (Brazil)):pt-BR:local",
+ "Diego:es-AR:local",
"Ellen:nl-BE:local",
- "Flo (German (Germany)):de-DE:local",
- "Flo (English (UK)):en-GB:local",
- "Flo (English (US)):en-US:local",
- "Flo (Spanish (Spain)):es-ES:local",
- "Flo (Spanish (Mexico)):es-MX:local",
- "Flo (Finnish (Finland)):fi-FI:local",
- "Flo (French (Canada)):fr-CA:local",
- "Flo (French (France)):fr-FR:local",
- "Flo (Italian (Italy)):it-IT:local",
- "Flo (Portuguese (Brazil)):pt-BR:local",
+ "Fiona:en-scotland:local",
"Fred:en-US:local",
- "Good News:en-US:local",
- "Grandma (German (Germany)):de-DE:local",
- "Grandma (English (UK)):en-GB:local",
- "Grandma (English (US)):en-US:local",
- "Grandma (Spanish (Spain)):es-ES:local",
- "Grandma (Spanish (Mexico)):es-MX:local",
- "Grandma (Finnish (Finland)):fi-FI:local",
- "Grandma (French (Canada)):fr-CA:local",
- "Grandma (French (France)):fr-FR:local",
- "Grandma (Italian (Italy)):it-IT:local",
- "Grandma (Portuguese (Brazil)):pt-BR:local",
- "Grandpa (German (Germany)):de-DE:local",
- "Grandpa (English (UK)):en-GB:local",
- "Grandpa (English (US)):en-US:local",
- "Grandpa (Spanish (Spain)):es-ES:local",
- "Grandpa (Spanish (Mexico)):es-MX:local",
- "Grandpa (Finnish (Finland)):fi-FI:local",
- "Grandpa (French (Canada)):fr-CA:local",
- "Grandpa (French (France)):fr-FR:local",
- "Grandpa (Italian (Italy)):it-IT:local",
- "Grandpa (Portuguese (Brazil)):pt-BR:local",
- "Jester:en-US:local",
"Ioana:ro-RO:local",
- "Jacques:fr-FR:local",
"Joana:pt-PT:local",
- "Junior:en-US:local",
+ "Jorge:es-ES:local",
+ "Juan:es-MX:local",
"Kanya:th-TH:local",
"Karen:en-AU:local",
- "Kathy:en-US:local",
"Kyoko:ja-JP:local",
- "Lana:hr-HR:local",
"Laura:sk-SK:local",
"Lekha:hi-IN:local",
- "Lesya:uk-UA:local",
- "Linh:vi-VN:local",
+ "Luca:it-IT:local",
"Luciana:pt-BR:local",
- "Majed:ar-001:local",
- "Tünde:hu-HU:local",
- "Meijia:zh-TW:local",
+ "Maged:ar-SA:local",
+ "Mariska:hu-HU:local",
+ "Mei-Jia:zh-TW:local",
"Melina:el-GR:local",
"Milena:ru-RU:local",
"Moira:en-IE:local",
- "Mónica:es-ES:local",
- "Montse:ca-ES:local",
+ "Monica:es-ES:local",
"Nora:nb-NO:local",
- "Organ:en-US:local",
"Paulina:es-MX:local",
- "Superstar:en-US:local",
- "Ralph:en-US:local",
- "Reed (German (Germany)):de-DE:local",
- "Reed (English (UK)):en-GB:local",
- "Reed (English (US)):en-US:local",
- "Reed (Spanish (Spain)):es-ES:local",
- "Reed (Spanish (Mexico)):es-MX:local",
- "Reed (Finnish (Finland)):fi-FI:local",
- "Reed (French (Canada)):fr-CA:local",
- "Reed (Italian (Italy)):it-IT:local",
- "Reed (Portuguese (Brazil)):pt-BR:local",
"Rishi:en-IN:local",
- "Rocko (German (Germany)):de-DE:local",
- "Rocko (English (UK)):en-GB:local",
- "Rocko (English (US)):en-US:local",
- "Rocko (Spanish (Spain)):es-ES:local",
- "Rocko (Spanish (Mexico)):es-MX:local",
- "Rocko (Finnish (Finland)):fi-FI:local",
- "Rocko (French (Canada)):fr-CA:local",
- "Rocko (French (France)):fr-FR:local",
- "Rocko (Italian (Italy)):it-IT:local",
- "Rocko (Portuguese (Brazil)):pt-BR:local",
"Samantha:en-US:local",
- "Sandy (German (Germany)):de-DE:local",
- "Sandy (English (UK)):en-GB:local",
- "Sandy (English (US)):en-US:local",
- "Sandy (Spanish (Spain)):es-ES:local",
- "Sandy (Spanish (Mexico)):es-MX:local",
- "Sandy (Finnish (Finland)):fi-FI:local",
- "Sandy (French (Canada)):fr-CA:local",
- "Sandy (French (France)):fr-FR:local",
- "Sandy (Italian (Italy)):it-IT:local",
- "Sandy (Portuguese (Brazil)):pt-BR:local",
"Sara:da-DK:local",
"Satu:fi-FI:local",
- "Shelley (German (Germany)):de-DE:local",
- "Shelley (English (UK)):en-GB:local",
- "Shelley (English (US)):en-US:local",
- "Shelley (Spanish (Spain)):es-ES:local",
- "Shelley (Spanish (Mexico)):es-MX:local",
- "Shelley (Finnish (Finland)):fi-FI:local",
- "Shelley (French (Canada)):fr-CA:local",
- "Shelley (French (France)):fr-FR:local",
- "Shelley (Italian (Italy)):it-IT:local",
- "Shelley (Portuguese (Brazil)):pt-BR:local",
- "Sinji:zh-HK:local",
+ "Sin-ji:zh-HK:local",
"Tessa:en-ZA:local",
"Thomas:fr-FR:local",
- "Tingting:zh-CN:local",
- "Trinoids:en-US:local",
- "Whisper:en-US:local",
+ "Ting-Ting:zh-CN:local",
+ "Veena:en-IN:local",
+ "Victoria:en-US:local",
"Xander:nl-NL:local",
"Yelda:tr-TR:local",
"Yuna:ko-KR:local",
- "Zarvox:en-US:local",
+ "Yuri:ru-RU:local",
"Zosia:pl-PL:local",
"Zuzana:cs-CZ:local"
]
@@ -541,204 +301,59 @@
"navigator": {
"userAgent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:148.0) Gecko/20100101 Firefox/148.0",
"platform": "MacIntel",
- "hardwareConcurrency": 4,
+ "hardwareConcurrency": 10,
"maxTouchPoints": 0
},
"screen": {
- "width": 2048,
- "height": 1152,
+ "width": 1280,
+ "height": 832,
"colorDepth": 30,
- "availWidth": 2048,
- "availHeight": 1045,
+ "availWidth": 1280,
+ "availHeight": 746,
"devicePixelRatio": 2
},
"webgl": {
- "unmaskedVendor": "ATI Technologies Inc.",
- "unmaskedRenderer": "Radeon R9 200 Series, or similar"
- },
- "speechVoices": [
- "Albert:en-US:local",
- "Alice:it-IT:local",
- "Alva:sv-SE:local",
- "Amélie:fr-CA:local",
- "Amira:ms-MY:local",
- "Anna:de-DE:local",
- "Bad News:en-US:local",
- "Bahh:en-US:local",
- "Bells:en-US:local",
- "Boing:en-US:local",
- "Bubbles:en-US:local",
- "Carmit:he-IL:local",
- "Cellos:en-US:local",
- "Damayanti:id-ID:local",
- "Daniel:en-GB:local",
- "Daria:bg-BG:local",
- "Wobble:en-US:local",
- "Eddy (German (Germany)):de-DE:local",
- "Eddy (English (U.K.)):en-GB:local",
- "Eddy (English (U.S.)):en-US:local",
- "Eddy (Spanish (Spain)):es-ES:local",
- "Eddy (Spanish (Mexico)):es-MX:local",
- "Eddy (Finnish (Finland)):fi-FI:local",
- "Eddy (French (Canada)):fr-CA:local",
- "Eddy (French (France)):fr-FR:local",
- "Eddy (Italian (Italy)):it-IT:local",
- "Eddy (Portuguese (Brazil)):pt-BR:local",
- "Ellen:nl-BE:local",
- "Flo (German (Germany)):de-DE:local",
- "Flo (English (U.K.)):en-GB:local",
- "Flo (English (U.S.)):en-US:local",
- "Flo (Spanish (Spain)):es-ES:local",
- "Flo (Spanish (Mexico)):es-MX:local",
- "Flo (Finnish (Finland)):fi-FI:local",
- "Flo (French (Canada)):fr-CA:local",
- "Flo (French (France)):fr-FR:local",
- "Flo (Italian (Italy)):it-IT:local",
- "Flo (Portuguese (Brazil)):pt-BR:local",
- "Fred:en-US:local",
- "Good News:en-US:local",
- "Grandma (German (Germany)):de-DE:local",
- "Grandma (English (U.K.)):en-GB:local",
- "Grandma (English (U.S.)):en-US:local",
- "Grandma (Spanish (Spain)):es-ES:local",
- "Grandma (Spanish (Mexico)):es-MX:local",
- "Grandma (Finnish (Finland)):fi-FI:local",
- "Grandma (French (Canada)):fr-CA:local",
- "Grandma (French (France)):fr-FR:local",
- "Grandma (Italian (Italy)):it-IT:local",
- "Grandma (Portuguese (Brazil)):pt-BR:local",
- "Grandpa (German (Germany)):de-DE:local",
- "Grandpa (English (U.K.)):en-GB:local",
- "Grandpa (English (U.S.)):en-US:local",
- "Grandpa (Spanish (Spain)):es-ES:local",
- "Grandpa (Spanish (Mexico)):es-MX:local",
- "Grandpa (Finnish (Finland)):fi-FI:local",
- "Grandpa (French (Canada)):fr-CA:local",
- "Grandpa (French (France)):fr-FR:local",
- "Grandpa (Italian (Italy)):it-IT:local",
- "Grandpa (Portuguese (Brazil)):pt-BR:local",
- "Jester:en-US:local",
- "Ioana:ro-RO:local",
- "Jacques:fr-FR:local",
- "Joana:pt-PT:local",
- "Junior:en-US:local",
- "Kanya:th-TH:local",
- "Karen:en-AU:local",
- "Kathy:en-US:local",
- "Kyoko:ja-JP:local",
- "Lana:hr-HR:local",
- "Laura:sk-SK:local",
- "Lekha:hi-IN:local",
- "Lesya:uk-UA:local",
- "Linh:vi-VN:local",
- "Luciana:pt-BR:local",
- "Majed:ar-001:local",
- "Tünde:hu-HU:local",
- "Meijia:zh-TW:local",
- "Melina:el-GR:local",
- "Milena:ru-RU:local",
- "Moira:en-IE:local",
- "Mónica:es-ES:local",
- "Montse:ca-ES:local",
- "Nora:nb-NO:local",
- "Organ:en-US:local",
- "Paulina:es-MX:local",
- "Superstar:en-US:local",
- "Ralph:en-US:local",
- "Reed (German (Germany)):de-DE:local",
- "Reed (English (U.K.)):en-GB:local",
- "Reed (English (U.S.)):en-US:local",
- "Reed (Spanish (Spain)):es-ES:local",
- "Reed (Spanish (Mexico)):es-MX:local",
- "Reed (Finnish (Finland)):fi-FI:local",
- "Reed (French (Canada)):fr-CA:local",
- "Reed (Italian (Italy)):it-IT:local",
- "Reed (Portuguese (Brazil)):pt-BR:local",
- "Rishi:en-IN:local",
- "Rocko (German (Germany)):de-DE:local",
- "Rocko (English (U.K.)):en-GB:local",
- "Rocko (English (U.S.)):en-US:local",
- "Rocko (Spanish (Spain)):es-ES:local",
- "Rocko (Spanish (Mexico)):es-MX:local",
- "Rocko (Finnish (Finland)):fi-FI:local",
- "Rocko (French (Canada)):fr-CA:local",
- "Rocko (French (France)):fr-FR:local",
- "Rocko (Italian (Italy)):it-IT:local",
- "Rocko (Portuguese (Brazil)):pt-BR:local",
- "Samantha:en-US:local",
- "Sandy (German (Germany)):de-DE:local",
- "Sandy (English (U.K.)):en-GB:local",
- "Sandy (English (U.S.)):en-US:local",
- "Sandy (Spanish (Spain)):es-ES:local",
- "Sandy (Spanish (Mexico)):es-MX:local",
- "Sandy (Finnish (Finland)):fi-FI:local",
- "Sandy (French (Canada)):fr-CA:local",
- "Sandy (French (France)):fr-FR:local",
- "Sandy (Italian (Italy)):it-IT:local",
- "Sandy (Portuguese (Brazil)):pt-BR:local",
- "Sara:da-DK:local",
- "Satu:fi-FI:local",
- "Shelley (German (Germany)):de-DE:local",
- "Shelley (English (U.K.)):en-GB:local",
- "Shelley (English (U.S.)):en-US:local",
- "Shelley (Spanish (Spain)):es-ES:local",
- "Shelley (Spanish (Mexico)):es-MX:local",
- "Shelley (Finnish (Finland)):fi-FI:local",
- "Shelley (French (Canada)):fr-CA:local",
- "Shelley (French (France)):fr-FR:local",
- "Shelley (Italian (Italy)):it-IT:local",
- "Shelley (Portuguese (Brazil)):pt-BR:local",
- "Sinji:zh-HK:local",
- "Tessa:en-ZA:local",
- "Thomas:fr-FR:local",
- "Tingting:zh-CN:local",
- "Trinoids:en-US:local",
- "Whisper:en-US:local",
- "Xander:nl-NL:local",
- "Yelda:tr-TR:local",
- "Yuna:ko-KR:local",
- "Zarvox:en-US:local",
- "Zosia:pl-PL:local",
- "Zuzana:cs-CZ:local"
- ]
+ "unmaskedVendor": "Apple",
+ "unmaskedRenderer": "Apple M1, or similar"
+ }
},
{
"navigator": {
- "userAgent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10.13; rv:109.0) Gecko/20100101 Firefox/115.0",
+ "userAgent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:148.0) Gecko/20100101 Firefox/148.0",
"platform": "MacIntel",
- "hardwareConcurrency": 4,
+ "hardwareConcurrency": 8,
"maxTouchPoints": 0
},
"screen": {
- "width": 1280,
- "height": 800,
+ "width": 1470,
+ "height": 956,
"colorDepth": 30,
- "availWidth": 1280,
- "availHeight": 714
+ "availWidth": 1470,
+ "availHeight": 923,
+ "devicePixelRatio": 2
},
"webgl": {
- "unmaskedVendor": "Intel Inc.",
- "unmaskedRenderer": "Intel(R) HD Graphics"
+ "unmaskedVendor": "Apple",
+ "unmaskedRenderer": "Apple M1, or similar"
}
},
{
"navigator": {
- "userAgent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0",
+ "userAgent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:148.0) Gecko/20100101 Firefox/148.0",
"platform": "MacIntel",
"hardwareConcurrency": 4,
"maxTouchPoints": 0
},
"screen": {
- "width": 1440,
- "height": 900,
+ "width": 1920,
+ "height": 1080,
"colorDepth": 30,
- "availWidth": 1440,
- "availHeight": 900,
- "devicePixelRatio": 2
+ "availWidth": 1920,
+ "availHeight": 1011
},
"webgl": {
- "unmaskedVendor": "Intel Inc.",
- "unmaskedRenderer": "Intel(R) HD Graphics, or similar"
+ "unmaskedVendor": "NVIDIA Corporation",
+ "unmaskedRenderer": "NVIDIA GeForce GTX 480, or similar"
},
"speechVoices": [
"Alex:en-US:local",
@@ -781,1087 +396,29 @@
"Tessa:en-ZA:local",
"Thomas:fr-FR:local",
"Ting-Ting:zh-CN:local",
- "Veena:en-IN:local",
- "Victoria:en-US:local",
- "Xander:nl-NL:local",
- "Yelda:tr-TR:local",
- "Yuna:ko-KR:local",
- "Yuri:ru-RU:local",
- "Zosia:pl-PL:local",
- "Zuzana:cs-CZ:local"
- ]
- },
- {
- "navigator": {
- "userAgent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:146.0) Gecko/20100101 Firefox/146.0",
- "platform": "MacIntel",
- "hardwareConcurrency": 2,
- "maxTouchPoints": 0
- },
- "screen": {
- "width": 1800,
- "height": 1169,
- "colorDepth": 24,
- "availWidth": 1800,
- "availHeight": 1169,
- "devicePixelRatio": 2
- },
- "webgl": {
- "unmaskedVendor": "Apple",
- "unmaskedRenderer": "Apple M1, or similar"
- },
- "speechVoices": [
- "Albert:en-US:local",
- "Alice:it-IT:local",
- "Soumya:kn-IN:local",
- "Alva:sv-SE:local",
- "Aman:en-IN:local",
- "Amélie:fr-CA:local",
- "Amira:ms-MY:local",
- "Anna:de-DE:local",
- "Aru:kk-KZ:local",
- "Bad News:en-US:local",
- "Bahh:en-US:local",
- "Bells:en-US:local",
- "Boing:en-US:local",
- "Bubbles:en-US:local",
- "Carmit:he-IL:local",
- "Cellos:en-US:local",
- "Damayanti:id-ID:local",
- "Daniel:en-GB:local",
- "Daria:bg-BG:local",
- "Wobble:en-US:local",
- "Eddy (German (Germany)):de-DE:local",
- "Eddy (English (UK)):en-GB:local",
- "Eddy (English (US)):en-US:local",
- "Eddy (Spanish (Spain)):es-ES:local",
- "Eddy (Spanish (Mexico)):es-MX:local",
- "Eddy (Finnish (Finland)):fi-FI:local",
- "Eddy (French (Canada)):fr-CA:local",
- "Eddy (French (France)):fr-FR:local",
- "Eddy (Italian (Italy)):it-IT:local",
- "Eddy (Japanese (Japan)):ja-JP:local",
- "Eddy (Korean (South Korea)):ko-KR:local",
- "Eddy (Portuguese (Brazil)):pt-BR:local",
- "Eddy (Chinese (China mainland)):zh-CN:local",
- "Eddy (Chinese (Taiwan)):zh-TW:local",
- "Ellen:nl-BE:local",
- "Flo (German (Germany)):de-DE:local",
- "Flo (English (UK)):en-GB:local",
- "Flo (English (US)):en-US:local",
- "Flo (Spanish (Spain)):es-ES:local",
- "Flo (Spanish (Mexico)):es-MX:local",
- "Flo (Finnish (Finland)):fi-FI:local",
- "Flo (French (Canada)):fr-CA:local",
- "Flo (French (France)):fr-FR:local",
- "Flo (Italian (Italy)):it-IT:local",
- "Flo (Japanese (Japan)):ja-JP:local",
- "Flo (Korean (South Korea)):ko-KR:local",
- "Flo (Portuguese (Brazil)):pt-BR:local",
- "Flo (Chinese (China mainland)):zh-CN:local",
- "Flo (Chinese (Taiwan)):zh-TW:local",
- "Fred:en-US:local",
- "Geeta:te-IN:local",
- "Good News:en-US:local",
- "Grandma (German (Germany)):de-DE:local",
- "Grandma (English (UK)):en-GB:local",
- "Grandma (English (US)):en-US:local",
- "Grandma (Spanish (Spain)):es-ES:local",
- "Grandma (Spanish (Mexico)):es-MX:local",
- "Grandma (Finnish (Finland)):fi-FI:local",
- "Grandma (French (Canada)):fr-CA:local",
- "Grandma (French (France)):fr-FR:local",
- "Grandma (Italian (Italy)):it-IT:local",
- "Grandma (Japanese (Japan)):ja-JP:local",
- "Grandma (Korean (South Korea)):ko-KR:local",
- "Grandma (Portuguese (Brazil)):pt-BR:local",
- "Grandma (Chinese (China mainland)):zh-CN:local",
- "Grandma (Chinese (Taiwan)):zh-TW:local",
- "Grandpa (German (Germany)):de-DE:local",
- "Grandpa (English (UK)):en-GB:local",
- "Grandpa (English (US)):en-US:local",
- "Grandpa (Spanish (Spain)):es-ES:local",
- "Grandpa (Spanish (Mexico)):es-MX:local",
- "Grandpa (Finnish (Finland)):fi-FI:local",
- "Grandpa (French (Canada)):fr-CA:local",
- "Grandpa (French (France)):fr-FR:local",
- "Grandpa (Italian (Italy)):it-IT:local",
- "Grandpa (Japanese (Japan)):ja-JP:local",
- "Grandpa (Korean (South Korea)):ko-KR:local",
- "Grandpa (Portuguese (Brazil)):pt-BR:local",
- "Grandpa (Chinese (China mainland)):zh-CN:local",
- "Grandpa (Chinese (Taiwan)):zh-TW:local",
- "Jester:en-US:local",
- "Ioana:ro-RO:local",
- "Jacques:fr-FR:local",
- "Joana:pt-PT:local",
- "Junior:en-US:local",
- "Kanya:th-TH:local",
- "Karen:en-AU:local",
- "Kathy:en-US:local",
- "Kyoko:ja-JP:local",
- "Lana:hr-HR:local",
- "Laura:sk-SK:local",
- "Lekha:hi-IN:local",
- "Lesya:uk-UA:local",
- "Linh:vi-VN:local",
- "Luciana:pt-BR:local",
- "Majed:ar-001:local",
- "Tünde:hu-HU:local",
- "Meijia:zh-TW:local",
- "Melina:el-GR:local",
- "Milena:ru-RU:local",
- "Moira:en-IE:local",
- "Mónica:es-ES:local",
- "Montse:ca-ES:local",
- "Nora:nb-NO:local",
- "Ona:lt-LT:local",
- "Organ:en-US:local",
- "Paulina:es-MX:local",
- "Piya:bn-IN:local",
- "Superstar:en-US:local",
- "Ralph:en-US:local",
- "Reed (German (Germany)):de-DE:local",
- "Reed (English (UK)):en-GB:local",
- "Reed (English (US)):en-US:local",
- "Reed (Spanish (Spain)):es-ES:local",
- "Reed (Spanish (Mexico)):es-MX:local",
- "Reed (Finnish (Finland)):fi-FI:local",
- "Reed (French (Canada)):fr-CA:local",
- "Reed (Italian (Italy)):it-IT:local",
- "Reed (Japanese (Japan)):ja-JP:local",
- "Reed (Korean (South Korea)):ko-KR:local",
- "Reed (Portuguese (Brazil)):pt-BR:local",
- "Reed (Chinese (China mainland)):zh-CN:local",
- "Reed (Chinese (Taiwan)):zh-TW:local",
- "Rishi:en-IN:local",
- "Rocko (German (Germany)):de-DE:local",
- "Rocko (English (UK)):en-GB:local",
- "Rocko (English (US)):en-US:local",
- "Rocko (Spanish (Spain)):es-ES:local",
- "Rocko (Spanish (Mexico)):es-MX:local",
- "Rocko (Finnish (Finland)):fi-FI:local",
- "Rocko (French (Canada)):fr-CA:local",
- "Rocko (French (France)):fr-FR:local",
- "Rocko (Italian (Italy)):it-IT:local",
- "Rocko (Japanese (Japan)):ja-JP:local",
- "Rocko (Korean (South Korea)):ko-KR:local",
- "Rocko (Portuguese (Brazil)):pt-BR:local",
- "Rocko (Chinese (China mainland)):zh-CN:local",
- "Rocko (Chinese (Taiwan)):zh-TW:local",
- "Samantha:en-US:local",
- "Sandy (German (Germany)):de-DE:local",
- "Sandy (English (UK)):en-GB:local",
- "Sandy (English (US)):en-US:local",
- "Sandy (Spanish (Spain)):es-ES:local",
- "Sandy (Spanish (Mexico)):es-MX:local",
- "Sandy (Finnish (Finland)):fi-FI:local",
- "Sandy (French (Canada)):fr-CA:local",
- "Sandy (French (France)):fr-FR:local",
- "Sandy (Italian (Italy)):it-IT:local",
- "Sandy (Japanese (Japan)):ja-JP:local",
- "Sandy (Korean (South Korea)):ko-KR:local",
- "Sandy (Portuguese (Brazil)):pt-BR:local",
- "Sandy (Chinese (China mainland)):zh-CN:local",
- "Sandy (Chinese (Taiwan)):zh-TW:local",
- "Sara:da-DK:local",
- "Satu:fi-FI:local",
- "Shelley (German (Germany)):de-DE:local",
- "Shelley (English (UK)):en-GB:local",
- "Shelley (English (US)):en-US:local",
- "Shelley (Spanish (Spain)):es-ES:local",
- "Shelley (Spanish (Mexico)):es-MX:local",
- "Shelley (Finnish (Finland)):fi-FI:local",
- "Shelley (French (Canada)):fr-CA:local",
- "Shelley (French (France)):fr-FR:local",
- "Shelley (Italian (Italy)):it-IT:local",
- "Shelley (Japanese (Japan)):ja-JP:local",
- "Shelley (Korean (South Korea)):ko-KR:local",
- "Shelley (Portuguese (Brazil)):pt-BR:local",
- "Shelley (Chinese (China mainland)):zh-CN:local",
- "Shelley (Chinese (Taiwan)):zh-TW:local",
- "Sinji:zh-HK:local",
- "Tara:en-IN:local",
- "Tessa:en-ZA:local",
- "Thomas:fr-FR:local",
- "Tina:sl-SI:local",
- "Tingting:zh-CN:local",
- "Trinoids:en-US:local",
- "Vani:ta-IN:local",
- "Whisper:en-US:local",
- "Xander:nl-NL:local",
- "Yelda:tr-TR:local",
- "Yuna:ko-KR:local",
- "Zarvox:en-US:local",
- "Zosia:pl-PL:local",
- "Zuzana:cs-CZ:local"
- ]
- },
- {
- "navigator": {
- "userAgent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:148.0) Gecko/20100101 Firefox/148.0",
- "platform": "MacIntel",
- "hardwareConcurrency": 10,
- "maxTouchPoints": 0
- },
- "screen": {
- "width": 1280,
- "height": 832,
- "colorDepth": 30,
- "availWidth": 1280,
- "availHeight": 746,
- "devicePixelRatio": 2
- },
- "webgl": {
- "unmaskedVendor": "Apple",
- "unmaskedRenderer": "Apple M1, or similar"
- }
- },
- {
- "navigator": {
- "userAgent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:148.0) Gecko/20100101 Firefox/148.0",
- "platform": "MacIntel",
- "hardwareConcurrency": 8,
- "maxTouchPoints": 0
- },
- "screen": {
- "width": 1470,
- "height": 956,
- "colorDepth": 30,
- "availWidth": 1470,
- "availHeight": 923,
- "devicePixelRatio": 2
- },
- "webgl": {
- "unmaskedVendor": "Apple",
- "unmaskedRenderer": "Apple M1, or similar"
- }
- },
- {
- "navigator": {
- "userAgent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:148.0) Gecko/20100101 Firefox/148.0",
- "platform": "MacIntel",
- "hardwareConcurrency": 4,
- "maxTouchPoints": 0
- },
- "screen": {
- "width": 1920,
- "height": 1080,
- "colorDepth": 30,
- "availWidth": 1920,
- "availHeight": 1011
- },
- "webgl": {
- "unmaskedVendor": "NVIDIA Corporation",
- "unmaskedRenderer": "NVIDIA GeForce GTX 480, or similar"
- },
- "speechVoices": [
- "Alex:en-US:local",
- "Alice:it-IT:local",
- "Alva:sv-SE:local",
- "Amelie:fr-CA:local",
- "Anna:de-DE:local",
- "Carmit:he-IL:local",
- "Damayanti:id-ID:local",
- "Daniel:en-GB:local",
- "Diego:es-AR:local",
- "Ellen:nl-BE:local",
- "Fiona:en-scotland:local",
- "Fred:en-US:local",
- "Ioana:ro-RO:local",
- "Joana:pt-PT:local",
- "Jorge:es-ES:local",
- "Juan:es-MX:local",
- "Kanya:th-TH:local",
- "Karen:en-AU:local",
- "Kyoko:ja-JP:local",
- "Laura:sk-SK:local",
- "Lekha:hi-IN:local",
- "Luca:it-IT:local",
- "Luciana:pt-BR:local",
- "Maged:ar-SA:local",
- "Mariska:hu-HU:local",
- "Mei-Jia:zh-TW:local",
- "Melina:el-GR:local",
- "Milena:ru-RU:local",
- "Moira:en-IE:local",
- "Monica:es-ES:local",
- "Nora:nb-NO:local",
- "Paulina:es-MX:local",
- "Rishi:en-IN:local",
- "Samantha:en-US:local",
- "Sara:da-DK:local",
- "Satu:fi-FI:local",
- "Sin-ji:zh-HK:local",
- "Tessa:en-ZA:local",
- "Thomas:fr-FR:local",
- "Ting-Ting:zh-CN:local",
- "Veena:en-IN:local",
- "Victoria:en-US:local",
- "Xander:nl-NL:local",
- "Yelda:tr-TR:local",
- "Yuna:ko-KR:local",
- "Yuri:ru-RU:local",
- "Zosia:pl-PL:local",
- "Zuzana:cs-CZ:local"
- ]
- },
- {
- "navigator": {
- "userAgent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0",
- "platform": "MacIntel",
- "hardwareConcurrency": 14,
- "maxTouchPoints": 0
- },
- "screen": {
- "width": 1512,
- "height": 982,
- "colorDepth": 30,
- "availWidth": 1512,
- "availHeight": 886,
- "devicePixelRatio": 2
- },
- "webgl": {
- "unmaskedVendor": "Apple",
- "unmaskedRenderer": "Apple M1, or similar"
- },
- "speechVoices": [
- "Albert:en-US:local",
- "Alice:it-IT:local",
- "Alva:sv-SE:local",
- "Amélie:fr-CA:local",
- "Amira:ms-MY:local",
- "Anna:de-DE:local",
- "Bad News:en-US:local",
- "Bahh:en-US:local",
- "Bells:en-US:local",
- "Boing:en-US:local",
- "Bubbles:en-US:local",
- "Carmit:he-IL:local",
- "Cellos:en-US:local",
- "Damayanti:id-ID:local",
- "Daniel:en-GB:local",
- "Daria:bg-BG:local",
- "Wobble:en-US:local",
- "Eddy (German (Germany)):de-DE:local",
- "Eddy (English (UK)):en-GB:local",
- "Eddy (English (US)):en-US:local",
- "Eddy (Spanish (Spain)):es-ES:local",
- "Eddy (Spanish (Mexico)):es-MX:local",
- "Eddy (Finnish (Finland)):fi-FI:local",
- "Eddy (French (Canada)):fr-CA:local",
- "Eddy (French (France)):fr-FR:local",
- "Eddy (Italian (Italy)):it-IT:local",
- "Eddy (Japanese (Japan)):ja-JP:local",
- "Eddy (Korean (South Korea)):ko-KR:local",
- "Eddy (Portuguese (Brazil)):pt-BR:local",
- "Eddy (Chinese (China mainland)):zh-CN:local",
- "Eddy (Chinese (Taiwan)):zh-TW:local",
- "Ellen:nl-BE:local",
- "Flo (German (Germany)):de-DE:local",
- "Flo (English (UK)):en-GB:local",
- "Flo (English (US)):en-US:local",
- "Flo (Spanish (Spain)):es-ES:local",
- "Flo (Spanish (Mexico)):es-MX:local",
- "Flo (Finnish (Finland)):fi-FI:local",
- "Flo (French (Canada)):fr-CA:local",
- "Flo (French (France)):fr-FR:local",
- "Flo (Italian (Italy)):it-IT:local",
- "Flo (Japanese (Japan)):ja-JP:local",
- "Flo (Korean (South Korea)):ko-KR:local",
- "Flo (Portuguese (Brazil)):pt-BR:local",
- "Flo (Chinese (China mainland)):zh-CN:local",
- "Flo (Chinese (Taiwan)):zh-TW:local",
- "Fred:en-US:local",
- "Good News:en-US:local",
- "Grandma (German (Germany)):de-DE:local",
- "Grandma (English (UK)):en-GB:local",
- "Grandma (English (US)):en-US:local",
- "Grandma (Spanish (Spain)):es-ES:local",
- "Grandma (Spanish (Mexico)):es-MX:local",
- "Grandma (Finnish (Finland)):fi-FI:local",
- "Grandma (French (Canada)):fr-CA:local",
- "Grandma (French (France)):fr-FR:local",
- "Grandma (Italian (Italy)):it-IT:local",
- "Grandma (Japanese (Japan)):ja-JP:local",
- "Grandma (Korean (South Korea)):ko-KR:local",
- "Grandma (Portuguese (Brazil)):pt-BR:local",
- "Grandma (Chinese (China mainland)):zh-CN:local",
- "Grandma (Chinese (Taiwan)):zh-TW:local",
- "Grandpa (German (Germany)):de-DE:local",
- "Grandpa (English (UK)):en-GB:local",
- "Grandpa (English (US)):en-US:local",
- "Grandpa (Spanish (Spain)):es-ES:local",
- "Grandpa (Spanish (Mexico)):es-MX:local",
- "Grandpa (Finnish (Finland)):fi-FI:local",
- "Grandpa (French (Canada)):fr-CA:local",
- "Grandpa (French (France)):fr-FR:local",
- "Grandpa (Italian (Italy)):it-IT:local",
- "Grandpa (Japanese (Japan)):ja-JP:local",
- "Grandpa (Korean (South Korea)):ko-KR:local",
- "Grandpa (Portuguese (Brazil)):pt-BR:local",
- "Grandpa (Chinese (China mainland)):zh-CN:local",
- "Grandpa (Chinese (Taiwan)):zh-TW:local",
- "Jester:en-US:local",
- "Ioana:ro-RO:local",
- "Jacques:fr-FR:local",
- "Joana:pt-PT:local",
- "Junior:en-US:local",
- "Kanya:th-TH:local",
- "Karen:en-AU:local",
- "Kathy:en-US:local",
- "Kyoko:ja-JP:local",
- "Lana:hr-HR:local",
- "Laura:sk-SK:local",
- "Lekha:hi-IN:local",
- "Lesya:uk-UA:local",
- "Linh:vi-VN:local",
- "Luciana:pt-BR:local",
- "Majed:ar-001:local",
- "Tünde:hu-HU:local",
- "Meijia:zh-TW:local",
- "Melina:el-GR:local",
- "Milena:ru-RU:local",
- "Moira:en-IE:local",
- "Mónica:es-ES:local",
- "Montse:ca-ES:local",
- "Nora:nb-NO:local",
- "Organ:en-US:local",
- "Paulina:es-MX:local",
- "Superstar:en-US:local",
- "Ralph:en-US:local",
- "Reed (German (Germany)):de-DE:local",
- "Reed (English (UK)):en-GB:local",
- "Reed (English (US)):en-US:local",
- "Reed (Spanish (Spain)):es-ES:local",
- "Reed (Spanish (Mexico)):es-MX:local",
- "Reed (Finnish (Finland)):fi-FI:local",
- "Reed (French (Canada)):fr-CA:local",
- "Reed (Italian (Italy)):it-IT:local",
- "Reed (Japanese (Japan)):ja-JP:local",
- "Reed (Korean (South Korea)):ko-KR:local",
- "Reed (Portuguese (Brazil)):pt-BR:local",
- "Reed (Chinese (China mainland)):zh-CN:local",
- "Reed (Chinese (Taiwan)):zh-TW:local",
- "Rishi:en-IN:local",
- "Rocko (German (Germany)):de-DE:local",
- "Rocko (English (UK)):en-GB:local",
- "Rocko (English (US)):en-US:local",
- "Rocko (Spanish (Spain)):es-ES:local",
- "Rocko (Spanish (Mexico)):es-MX:local",
- "Rocko (Finnish (Finland)):fi-FI:local",
- "Rocko (French (Canada)):fr-CA:local",
- "Rocko (French (France)):fr-FR:local",
- "Rocko (Italian (Italy)):it-IT:local",
- "Rocko (Japanese (Japan)):ja-JP:local",
- "Rocko (Korean (South Korea)):ko-KR:local",
- "Rocko (Portuguese (Brazil)):pt-BR:local",
- "Rocko (Chinese (China mainland)):zh-CN:local",
- "Rocko (Chinese (Taiwan)):zh-TW:local",
- "Samantha:en-US:local",
- "Sandy (German (Germany)):de-DE:local",
- "Sandy (English (UK)):en-GB:local",
- "Sandy (English (US)):en-US:local",
- "Sandy (Spanish (Spain)):es-ES:local",
- "Sandy (Spanish (Mexico)):es-MX:local",
- "Sandy (Finnish (Finland)):fi-FI:local",
- "Sandy (French (Canada)):fr-CA:local",
- "Sandy (French (France)):fr-FR:local",
- "Sandy (Italian (Italy)):it-IT:local",
- "Sandy (Japanese (Japan)):ja-JP:local",
- "Sandy (Korean (South Korea)):ko-KR:local",
- "Sandy (Portuguese (Brazil)):pt-BR:local",
- "Sandy (Chinese (China mainland)):zh-CN:local",
- "Sandy (Chinese (Taiwan)):zh-TW:local",
- "Sara:da-DK:local",
- "Satu:fi-FI:local",
- "Shelley (German (Germany)):de-DE:local",
- "Shelley (English (UK)):en-GB:local",
- "Shelley (English (US)):en-US:local",
- "Shelley (Spanish (Spain)):es-ES:local",
- "Shelley (Spanish (Mexico)):es-MX:local",
- "Shelley (Finnish (Finland)):fi-FI:local",
- "Shelley (French (Canada)):fr-CA:local",
- "Shelley (French (France)):fr-FR:local",
- "Shelley (Italian (Italy)):it-IT:local",
- "Shelley (Japanese (Japan)):ja-JP:local",
- "Shelley (Korean (South Korea)):ko-KR:local",
- "Shelley (Portuguese (Brazil)):pt-BR:local",
- "Shelley (Chinese (China mainland)):zh-CN:local",
- "Shelley (Chinese (Taiwan)):zh-TW:local",
- "Sinji:zh-HK:local",
- "Tessa:en-ZA:local",
- "Thomas:fr-FR:local",
- "Tina:sl-SI:local",
- "Tingting:zh-CN:local",
- "Trinoids:en-US:local",
- "Vani:ta-IN:local",
- "Whisper:en-US:local",
- "Xander:nl-NL:local",
- "Yelda:tr-TR:local",
- "Yuna:ko-KR:local",
- "Zarvox:en-US:local",
- "Zosia:pl-PL:local",
- "Zuzana:cs-CZ:local"
- ]
- },
- {
- "navigator": {
- "userAgent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:148.0) Gecko/20100101 Firefox/148.0",
- "platform": "MacIntel",
- "hardwareConcurrency": 8,
- "maxTouchPoints": 0
- },
- "screen": {
- "width": 1920,
- "height": 1080,
- "colorDepth": 30,
- "availWidth": 1920,
- "availHeight": 1050
- },
- "webgl": {
- "unmaskedVendor": "Apple",
- "unmaskedRenderer": "Apple M1, or similar"
- },
- "speechVoices": [
- "Albert:en-US:local",
- "Alice:it-IT:local",
- "Soumya:kn-IN:local",
- "Alva:sv-SE:local",
- "Aman:en-IN:local",
- "Amélie:fr-CA:local",
- "Amira:ms-MY:local",
- "Anna:de-DE:local",
- "Aru:kk-KZ:local",
- "Bad News:en-US:local",
- "Bahh:en-US:local",
- "Bells:en-US:local",
- "Boing:en-US:local",
- "Bubbles:en-US:local",
- "Carmit:he-IL:local",
- "Cellos:en-US:local",
- "Damayanti:id-ID:local",
- "Daniel:en-GB:local",
- "Daria:bg-BG:local",
- "Wobble:en-US:local",
- "Eddy (German (Germany)):de-DE:local",
- "Eddy (English (UK)):en-GB:local",
- "Eddy (English (US)):en-US:local",
- "Eddy (Spanish (Spain)):es-ES:local",
- "Eddy (Spanish (Mexico)):es-MX:local",
- "Eddy (Finnish (Finland)):fi-FI:local",
- "Eddy (French (Canada)):fr-CA:local",
- "Eddy (French (France)):fr-FR:local",
- "Eddy (Italian (Italy)):it-IT:local",
- "Eddy (Japanese (Japan)):ja-JP:local",
- "Eddy (Korean (South Korea)):ko-KR:local",
- "Eddy (Portuguese (Brazil)):pt-BR:local",
- "Eddy (Chinese (China mainland)):zh-CN:local",
- "Eddy (Chinese (Taiwan)):zh-TW:local",
- "Ellen:nl-BE:local",
- "Flo (German (Germany)):de-DE:local",
- "Flo (English (UK)):en-GB:local",
- "Flo (English (US)):en-US:local",
- "Flo (Spanish (Spain)):es-ES:local",
- "Flo (Spanish (Mexico)):es-MX:local",
- "Flo (Finnish (Finland)):fi-FI:local",
- "Flo (French (Canada)):fr-CA:local",
- "Flo (French (France)):fr-FR:local",
- "Flo (Italian (Italy)):it-IT:local",
- "Flo (Japanese (Japan)):ja-JP:local",
- "Flo (Korean (South Korea)):ko-KR:local",
- "Flo (Portuguese (Brazil)):pt-BR:local",
- "Flo (Chinese (China mainland)):zh-CN:local",
- "Flo (Chinese (Taiwan)):zh-TW:local",
- "Fred:en-US:local",
- "Geeta:te-IN:local",
- "Good News:en-US:local",
- "Grandma (German (Germany)):de-DE:local",
- "Grandma (English (UK)):en-GB:local",
- "Grandma (English (US)):en-US:local",
- "Grandma (Spanish (Spain)):es-ES:local",
- "Grandma (Spanish (Mexico)):es-MX:local",
- "Grandma (Finnish (Finland)):fi-FI:local",
- "Grandma (French (Canada)):fr-CA:local",
- "Grandma (French (France)):fr-FR:local",
- "Grandma (Italian (Italy)):it-IT:local",
- "Grandma (Japanese (Japan)):ja-JP:local",
- "Grandma (Korean (South Korea)):ko-KR:local",
- "Grandma (Portuguese (Brazil)):pt-BR:local",
- "Grandma (Chinese (China mainland)):zh-CN:local",
- "Grandma (Chinese (Taiwan)):zh-TW:local",
- "Grandpa (German (Germany)):de-DE:local",
- "Grandpa (English (UK)):en-GB:local",
- "Grandpa (English (US)):en-US:local",
- "Grandpa (Spanish (Spain)):es-ES:local",
- "Grandpa (Spanish (Mexico)):es-MX:local",
- "Grandpa (Finnish (Finland)):fi-FI:local",
- "Grandpa (French (Canada)):fr-CA:local",
- "Grandpa (French (France)):fr-FR:local",
- "Grandpa (Italian (Italy)):it-IT:local",
- "Grandpa (Japanese (Japan)):ja-JP:local",
- "Grandpa (Korean (South Korea)):ko-KR:local",
- "Grandpa (Portuguese (Brazil)):pt-BR:local",
- "Grandpa (Chinese (China mainland)):zh-CN:local",
- "Grandpa (Chinese (Taiwan)):zh-TW:local",
- "Jester:en-US:local",
- "Ioana:ro-RO:local",
- "Jacques:fr-FR:local",
- "Joana:pt-PT:local",
- "Junior:en-US:local",
- "Kanya:th-TH:local",
- "Karen:en-AU:local",
- "Kathy:en-US:local",
- "Kyoko:ja-JP:local",
- "Lana:hr-HR:local",
- "Laura:sk-SK:local",
- "Lekha:hi-IN:local",
- "Lesya:uk-UA:local",
- "Linh:vi-VN:local",
- "Luciana:pt-BR:local",
- "Majed:ar-001:local",
- "Tünde:hu-HU:local",
- "Meijia:zh-TW:local",
- "Melina:el-GR:local",
- "Milena:ru-RU:local",
- "Moira:en-IE:local",
- "Mónica:es-ES:local",
- "Montse:ca-ES:local",
- "Nora:nb-NO:local",
- "Ona:lt-LT:local",
- "Organ:en-US:local",
- "Paulina:es-MX:local",
- "Piya:bn-IN:local",
- "Superstar:en-US:local",
- "Ralph:en-US:local",
- "Reed (German (Germany)):de-DE:local",
- "Reed (English (UK)):en-GB:local",
- "Reed (English (US)):en-US:local",
- "Reed (Spanish (Spain)):es-ES:local",
- "Reed (Spanish (Mexico)):es-MX:local",
- "Reed (Finnish (Finland)):fi-FI:local",
- "Reed (French (Canada)):fr-CA:local",
- "Reed (Italian (Italy)):it-IT:local",
- "Reed (Japanese (Japan)):ja-JP:local",
- "Reed (Korean (South Korea)):ko-KR:local",
- "Reed (Portuguese (Brazil)):pt-BR:local",
- "Reed (Chinese (China mainland)):zh-CN:local",
- "Reed (Chinese (Taiwan)):zh-TW:local",
- "Rishi:en-IN:local",
- "Rocko (German (Germany)):de-DE:local",
- "Rocko (English (UK)):en-GB:local",
- "Rocko (English (US)):en-US:local",
- "Rocko (Spanish (Spain)):es-ES:local",
- "Rocko (Spanish (Mexico)):es-MX:local",
- "Rocko (Finnish (Finland)):fi-FI:local",
- "Rocko (French (Canada)):fr-CA:local",
- "Rocko (French (France)):fr-FR:local",
- "Rocko (Italian (Italy)):it-IT:local",
- "Rocko (Japanese (Japan)):ja-JP:local",
- "Rocko (Korean (South Korea)):ko-KR:local",
- "Rocko (Portuguese (Brazil)):pt-BR:local",
- "Rocko (Chinese (China mainland)):zh-CN:local",
- "Rocko (Chinese (Taiwan)):zh-TW:local",
- "Samantha:en-US:local",
- "Sandy (German (Germany)):de-DE:local",
- "Sandy (English (UK)):en-GB:local",
- "Sandy (English (US)):en-US:local",
- "Sandy (Spanish (Spain)):es-ES:local",
- "Sandy (Spanish (Mexico)):es-MX:local",
- "Sandy (Finnish (Finland)):fi-FI:local",
- "Sandy (French (Canada)):fr-CA:local",
- "Sandy (French (France)):fr-FR:local",
- "Sandy (Italian (Italy)):it-IT:local",
- "Sandy (Japanese (Japan)):ja-JP:local",
- "Sandy (Korean (South Korea)):ko-KR:local",
- "Sandy (Portuguese (Brazil)):pt-BR:local",
- "Sandy (Chinese (China mainland)):zh-CN:local",
- "Sandy (Chinese (Taiwan)):zh-TW:local",
- "Sara:da-DK:local",
- "Satu:fi-FI:local",
- "Shelley (German (Germany)):de-DE:local",
- "Shelley (English (UK)):en-GB:local",
- "Shelley (English (US)):en-US:local",
- "Shelley (Spanish (Spain)):es-ES:local",
- "Shelley (Spanish (Mexico)):es-MX:local",
- "Shelley (Finnish (Finland)):fi-FI:local",
- "Shelley (French (Canada)):fr-CA:local",
- "Shelley (French (France)):fr-FR:local",
- "Shelley (Italian (Italy)):it-IT:local",
- "Shelley (Japanese (Japan)):ja-JP:local",
- "Shelley (Korean (South Korea)):ko-KR:local",
- "Shelley (Portuguese (Brazil)):pt-BR:local",
- "Shelley (Chinese (China mainland)):zh-CN:local",
- "Shelley (Chinese (Taiwan)):zh-TW:local",
- "Sinji:zh-HK:local",
- "Tara:en-IN:local",
- "Tessa:en-ZA:local",
- "Thomas:fr-FR:local",
- "Tina:sl-SI:local",
- "Tingting:zh-CN:local",
- "Trinoids:en-US:local",
- "Vani:ta-IN:local",
- "Whisper:en-US:local",
- "Xander:nl-NL:local",
- "Yelda:tr-TR:local",
- "Yuna:ko-KR:local",
- "Zarvox:en-US:local",
- "Zosia:pl-PL:local",
- "Zuzana:cs-CZ:local"
- ]
- },
- {
- "navigator": {
- "userAgent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:148.0) Gecko/20100101 Firefox/148.0",
- "platform": "MacIntel",
- "hardwareConcurrency": 10,
- "maxTouchPoints": 0
- },
- "screen": {
- "width": 1470,
- "height": 956,
- "colorDepth": 30,
- "availWidth": 1470,
- "availHeight": 923,
- "devicePixelRatio": 2
- },
- "webgl": {
- "unmaskedVendor": "Apple",
- "unmaskedRenderer": "Apple M1, or similar"
- }
- },
- {
- "navigator": {
- "userAgent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:133.0) Gecko/20100101 Firefox/133.0",
- "platform": "MacIntel",
- "hardwareConcurrency": 6,
- "maxTouchPoints": 0
- },
- "screen": {
- "width": 1710,
- "height": 1107,
- "colorDepth": 30,
- "availWidth": 1710,
- "availHeight": 1068,
- "devicePixelRatio": 2
- },
- "webgl": {
- "unmaskedVendor": "Apple",
- "unmaskedRenderer": "Apple M1, or similar"
- }
- },
- {
- "navigator": {
- "userAgent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:133.0) Gecko/20100101 Firefox/133.0",
- "platform": "MacIntel",
- "hardwareConcurrency": 8,
- "maxTouchPoints": 0
- },
- "screen": {
- "width": 2560,
- "height": 1440,
- "colorDepth": 30,
- "availWidth": 2560,
- "availHeight": 1440
- },
- "webgl": {
- "unmaskedVendor": "ATI Technologies Inc.",
- "unmaskedRenderer": "Radeon R9 200 Series, or similar"
- }
- },
- {
- "navigator": {
- "userAgent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:133.0) Gecko/20100101 Firefox/133.0",
- "platform": "MacIntel",
- "hardwareConcurrency": 8,
- "maxTouchPoints": 0
- },
- "screen": {
- "width": 1920,
- "height": 1080,
- "colorDepth": 30,
- "availWidth": 1920,
- "availHeight": 1055,
- "devicePixelRatio": 2
- },
- "webgl": {
- "unmaskedVendor": "Apple",
- "unmaskedRenderer": "Apple M1, or similar"
- }
- },
- {
- "navigator": {
- "userAgent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:109.0) Gecko/20100101 Firefox/119.0",
- "platform": "MacIntel",
- "hardwareConcurrency": 2,
- "maxTouchPoints": 0
- },
- "screen": {
- "width": 1440,
- "height": 900,
- "colorDepth": 30,
- "availWidth": 1440,
- "availHeight": 827,
- "devicePixelRatio": 2
- },
- "webgl": {
- "unmaskedVendor": "Intel Inc.",
- "unmaskedRenderer": "Intel(R) HD Graphics 400, or similar"
- }
- },
- {
- "navigator": {
- "userAgent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:133.0) Gecko/20100101 Firefox/133.0",
- "platform": "MacIntel",
- "hardwareConcurrency": 14,
- "maxTouchPoints": 0
- },
- "screen": {
- "width": 2560,
- "height": 1440,
- "colorDepth": 30,
- "availWidth": 2560,
- "availHeight": 1355,
- "devicePixelRatio": 2
- },
- "webgl": {
- "unmaskedVendor": "Apple",
- "unmaskedRenderer": "Apple M1, or similar"
- }
- },
- {
- "navigator": {
- "userAgent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:133.0) Gecko/20100101 Firefox/133.0",
- "platform": "MacIntel",
- "hardwareConcurrency": 8,
- "maxTouchPoints": 0
- },
- "screen": {
- "width": 1920,
- "height": 1080,
- "colorDepth": 30,
- "availWidth": 1920,
- "availHeight": 987
- },
- "webgl": {
- "unmaskedVendor": "Intel Inc.",
- "unmaskedRenderer": "Intel(R) HD Graphics 400, or similar"
- }
- },
- {
- "navigator": {
- "userAgent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:148.0) Gecko/20100101 Firefox/148.0",
- "platform": "MacIntel",
- "hardwareConcurrency": 2,
- "maxTouchPoints": 0
- },
- "screen": {
- "width": 3440,
- "height": 1440,
- "colorDepth": 24,
- "availWidth": 3440,
- "availHeight": 1440
- },
- "webgl": {
- "unmaskedVendor": "ATI Technologies Inc.",
- "unmaskedRenderer": "Radeon HD 3200 Graphics, or similar"
- },
- "speechVoices": [
- "Albert:en-US:local",
- "Alice:it-IT:local",
- "Soumya:kn-IN:local",
- "Alva:sv-SE:local",
- "Amélie:fr-CA:local",
- "Amira:ms-MY:local",
- "Anna:de-DE:local",
- "Bad News:en-US:local",
- "Bahh:en-US:local",
- "Bells:en-US:local",
- "Boing:en-US:local",
- "Bubbles:en-US:local",
- "Carmit:he-IL:local",
- "Cellos:en-US:local",
- "Damayanti:id-ID:local",
- "Daniel:en-GB:local",
- "Daria:bg-BG:local",
- "Wobble:en-US:local",
- "Eddy (German (Germany)):de-DE:local",
- "Eddy (English (UK)):en-GB:local",
- "Eddy (English (US)):en-US:local",
- "Eddy (Spanish (Spain)):es-ES:local",
- "Eddy (Spanish (Mexico)):es-MX:local",
- "Eddy (Finnish (Finland)):fi-FI:local",
- "Eddy (French (Canada)):fr-CA:local",
- "Eddy (French (France)):fr-FR:local",
- "Eddy (Italian (Italy)):it-IT:local",
- "Eddy (Japanese (Japan)):ja-JP:local",
- "Eddy (Korean (South Korea)):ko-KR:local",
- "Eddy (Portuguese (Brazil)):pt-BR:local",
- "Eddy (Chinese (China mainland)):zh-CN:local",
- "Eddy (Chinese (Taiwan)):zh-TW:local",
- "Ellen:nl-BE:local",
- "Flo (German (Germany)):de-DE:local",
- "Flo (English (UK)):en-GB:local",
- "Flo (English (US)):en-US:local",
- "Flo (Spanish (Spain)):es-ES:local",
- "Flo (Spanish (Mexico)):es-MX:local",
- "Flo (Finnish (Finland)):fi-FI:local",
- "Flo (French (Canada)):fr-CA:local",
- "Flo (French (France)):fr-FR:local",
- "Flo (Italian (Italy)):it-IT:local",
- "Flo (Japanese (Japan)):ja-JP:local",
- "Flo (Korean (South Korea)):ko-KR:local",
- "Flo (Portuguese (Brazil)):pt-BR:local",
- "Flo (Chinese (China mainland)):zh-CN:local",
- "Flo (Chinese (Taiwan)):zh-TW:local",
- "Fred:en-US:local",
- "Geeta:te-IN:local",
- "Good News:en-US:local",
- "Grandma (German (Germany)):de-DE:local",
- "Grandma (English (UK)):en-GB:local",
- "Grandma (English (US)):en-US:local",
- "Grandma (Spanish (Spain)):es-ES:local",
- "Grandma (Spanish (Mexico)):es-MX:local",
- "Grandma (Finnish (Finland)):fi-FI:local",
- "Grandma (French (Canada)):fr-CA:local",
- "Grandma (French (France)):fr-FR:local",
- "Grandma (Italian (Italy)):it-IT:local",
- "Grandma (Japanese (Japan)):ja-JP:local",
- "Grandma (Korean (South Korea)):ko-KR:local",
- "Grandma (Portuguese (Brazil)):pt-BR:local",
- "Grandma (Chinese (China mainland)):zh-CN:local",
- "Grandma (Chinese (Taiwan)):zh-TW:local",
- "Grandpa (German (Germany)):de-DE:local",
- "Grandpa (English (UK)):en-GB:local",
- "Grandpa (English (US)):en-US:local",
- "Grandpa (Spanish (Spain)):es-ES:local",
- "Grandpa (Spanish (Mexico)):es-MX:local",
- "Grandpa (Finnish (Finland)):fi-FI:local",
- "Grandpa (French (Canada)):fr-CA:local",
- "Grandpa (French (France)):fr-FR:local",
- "Grandpa (Italian (Italy)):it-IT:local",
- "Grandpa (Japanese (Japan)):ja-JP:local",
- "Grandpa (Korean (South Korea)):ko-KR:local",
- "Grandpa (Portuguese (Brazil)):pt-BR:local",
- "Grandpa (Chinese (China mainland)):zh-CN:local",
- "Grandpa (Chinese (Taiwan)):zh-TW:local",
- "Jester:en-US:local",
- "Ioana:ro-RO:local",
- "Jacques:fr-FR:local",
- "Joana:pt-PT:local",
- "Junior:en-US:local",
- "Kanya:th-TH:local",
- "Karen:en-AU:local",
- "Kathy:en-US:local",
- "Kyoko:ja-JP:local",
- "Lana:hr-HR:local",
- "Laura:sk-SK:local",
- "Lekha:hi-IN:local",
- "Lesya:uk-UA:local",
- "Linh:vi-VN:local",
- "Luciana:pt-BR:local",
- "Majed:ar-001:local",
- "Tünde:hu-HU:local",
- "Meijia:zh-TW:local",
- "Melina:el-GR:local",
- "Milena:ru-RU:local",
- "Moira:en-IE:local",
- "Mónica:es-ES:local",
- "Montse:ca-ES:local",
- "Nora:nb-NO:local",
- "Organ:en-US:local",
- "Paulina:es-MX:local",
- "Piya:bn-IN:local",
- "Superstar:en-US:local",
- "Ralph:en-US:local",
- "Reed (German (Germany)):de-DE:local",
- "Reed (English (UK)):en-GB:local",
- "Reed (English (US)):en-US:local",
- "Reed (Spanish (Spain)):es-ES:local",
- "Reed (Spanish (Mexico)):es-MX:local",
- "Reed (Finnish (Finland)):fi-FI:local",
- "Reed (French (Canada)):fr-CA:local",
- "Reed (Italian (Italy)):it-IT:local",
- "Reed (Japanese (Japan)):ja-JP:local",
- "Reed (Korean (South Korea)):ko-KR:local",
- "Reed (Portuguese (Brazil)):pt-BR:local",
- "Reed (Chinese (China mainland)):zh-CN:local",
- "Reed (Chinese (Taiwan)):zh-TW:local",
- "Rishi:en-IN:local",
- "Rocko (German (Germany)):de-DE:local",
- "Rocko (English (UK)):en-GB:local",
- "Rocko (English (US)):en-US:local",
- "Rocko (Spanish (Spain)):es-ES:local",
- "Rocko (Spanish (Mexico)):es-MX:local",
- "Rocko (Finnish (Finland)):fi-FI:local",
- "Rocko (French (Canada)):fr-CA:local",
- "Rocko (French (France)):fr-FR:local",
- "Rocko (Italian (Italy)):it-IT:local",
- "Rocko (Japanese (Japan)):ja-JP:local",
- "Rocko (Korean (South Korea)):ko-KR:local",
- "Rocko (Portuguese (Brazil)):pt-BR:local",
- "Rocko (Chinese (China mainland)):zh-CN:local",
- "Rocko (Chinese (Taiwan)):zh-TW:local",
- "Samantha:en-US:local",
- "Sandy (German (Germany)):de-DE:local",
- "Sandy (English (UK)):en-GB:local",
- "Sandy (English (US)):en-US:local",
- "Sandy (Spanish (Spain)):es-ES:local",
- "Sandy (Spanish (Mexico)):es-MX:local",
- "Sandy (Finnish (Finland)):fi-FI:local",
- "Sandy (French (Canada)):fr-CA:local",
- "Sandy (French (France)):fr-FR:local",
- "Sandy (Italian (Italy)):it-IT:local",
- "Sandy (Japanese (Japan)):ja-JP:local",
- "Sandy (Korean (South Korea)):ko-KR:local",
- "Sandy (Portuguese (Brazil)):pt-BR:local",
- "Sandy (Chinese (China mainland)):zh-CN:local",
- "Sandy (Chinese (Taiwan)):zh-TW:local",
- "Sara:da-DK:local",
- "Satu:fi-FI:local",
- "Shelley (German (Germany)):de-DE:local",
- "Shelley (English (UK)):en-GB:local",
- "Shelley (English (US)):en-US:local",
- "Shelley (Spanish (Spain)):es-ES:local",
- "Shelley (Spanish (Mexico)):es-MX:local",
- "Shelley (Finnish (Finland)):fi-FI:local",
- "Shelley (French (Canada)):fr-CA:local",
- "Shelley (French (France)):fr-FR:local",
- "Shelley (Italian (Italy)):it-IT:local",
- "Shelley (Japanese (Japan)):ja-JP:local",
- "Shelley (Korean (South Korea)):ko-KR:local",
- "Shelley (Portuguese (Brazil)):pt-BR:local",
- "Shelley (Chinese (China mainland)):zh-CN:local",
- "Shelley (Chinese (Taiwan)):zh-TW:local",
- "Sinji:zh-HK:local",
- "Tessa:en-ZA:local",
- "Thomas:fr-FR:local",
- "Tina:sl-SI:local",
- "Tingting:zh-CN:local",
- "Trinoids:en-US:local",
- "Vani:ta-IN:local",
- "Whisper:en-US:local",
+ "Veena:en-IN:local",
+ "Victoria:en-US:local",
"Xander:nl-NL:local",
"Yelda:tr-TR:local",
"Yuna:ko-KR:local",
- "Zarvox:en-US:local",
+ "Yuri:ru-RU:local",
"Zosia:pl-PL:local",
"Zuzana:cs-CZ:local"
]
},
{
"navigator": {
- "userAgent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:148.0) Gecko/20100101 Firefox/148.0",
+ "userAgent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0",
"platform": "MacIntel",
- "hardwareConcurrency": 16,
+ "hardwareConcurrency": 14,
"maxTouchPoints": 0
},
"screen": {
- "width": 2560,
- "height": 1440,
+ "width": 1512,
+ "height": 982,
"colorDepth": 30,
- "availWidth": 2560,
- "availHeight": 1330,
+ "availWidth": 1512,
+ "availHeight": 886,
"devicePixelRatio": 2
},
"webgl": {
@@ -1871,13 +428,10 @@
"speechVoices": [
"Albert:en-US:local",
"Alice:it-IT:local",
- "Soumya:kn-IN:local",
"Alva:sv-SE:local",
- "Aman:en-IN:local",
"Amélie:fr-CA:local",
"Amira:ms-MY:local",
"Anna:de-DE:local",
- "Aru:kk-KZ:local",
"Bad News:en-US:local",
"Bahh:en-US:local",
"Bells:en-US:local",
@@ -1919,7 +473,6 @@
"Flo (Chinese (China mainland)):zh-CN:local",
"Flo (Chinese (Taiwan)):zh-TW:local",
"Fred:en-US:local",
- "Geeta:te-IN:local",
"Good News:en-US:local",
"Grandma (German (Germany)):de-DE:local",
"Grandma (English (UK)):en-GB:local",
@@ -1973,10 +526,8 @@
"Mónica:es-ES:local",
"Montse:ca-ES:local",
"Nora:nb-NO:local",
- "Ona:lt-LT:local",
"Organ:en-US:local",
"Paulina:es-MX:local",
- "Piya:bn-IN:local",
"Superstar:en-US:local",
"Ralph:en-US:local",
"Reed (German (Germany)):de-DE:local",
@@ -2039,7 +590,6 @@
"Shelley (Chinese (China mainland)):zh-CN:local",
"Shelley (Chinese (Taiwan)):zh-TW:local",
"Sinji:zh-HK:local",
- "Tara:en-IN:local",
"Tessa:en-ZA:local",
"Thomas:fr-FR:local",
"Tina:sl-SI:local",
@@ -2059,15 +609,15 @@
"navigator": {
"userAgent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:148.0) Gecko/20100101 Firefox/148.0",
"platform": "MacIntel",
- "hardwareConcurrency": 16,
+ "hardwareConcurrency": 8,
"maxTouchPoints": 0
},
"screen": {
- "width": 2560,
- "height": 1440,
+ "width": 1920,
+ "height": 1080,
"colorDepth": 30,
- "availWidth": 2560,
- "availHeight": 1415
+ "availWidth": 1920,
+ "availHeight": 1050
},
"webgl": {
"unmaskedVendor": "Apple",
@@ -2076,10 +626,13 @@
"speechVoices": [
"Albert:en-US:local",
"Alice:it-IT:local",
+ "Soumya:kn-IN:local",
"Alva:sv-SE:local",
+ "Aman:en-IN:local",
"Amélie:fr-CA:local",
"Amira:ms-MY:local",
"Anna:de-DE:local",
+ "Aru:kk-KZ:local",
"Bad News:en-US:local",
"Bahh:en-US:local",
"Bells:en-US:local",
@@ -2121,6 +674,7 @@
"Flo (Chinese (China mainland)):zh-CN:local",
"Flo (Chinese (Taiwan)):zh-TW:local",
"Fred:en-US:local",
+ "Geeta:te-IN:local",
"Good News:en-US:local",
"Grandma (German (Germany)):de-DE:local",
"Grandma (English (UK)):en-GB:local",
@@ -2174,8 +728,10 @@
"Mónica:es-ES:local",
"Montse:ca-ES:local",
"Nora:nb-NO:local",
+ "Ona:lt-LT:local",
"Organ:en-US:local",
"Paulina:es-MX:local",
+ "Piya:bn-IN:local",
"Superstar:en-US:local",
"Ralph:en-US:local",
"Reed (German (Germany)):de-DE:local",
@@ -2238,6 +794,7 @@
"Shelley (Chinese (China mainland)):zh-CN:local",
"Shelley (Chinese (Taiwan)):zh-TW:local",
"Sinji:zh-HK:local",
+ "Tara:en-IN:local",
"Tessa:en-ZA:local",
"Thomas:fr-FR:local",
"Tina:sl-SI:local",
@@ -2257,24 +814,84 @@
"navigator": {
"userAgent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:148.0) Gecko/20100101 Firefox/148.0",
"platform": "MacIntel",
- "hardwareConcurrency": 16,
+ "hardwareConcurrency": 10,
"maxTouchPoints": 0
},
"screen": {
- "width": 1680,
- "height": 1050,
+ "width": 1470,
+ "height": 956,
"colorDepth": 30,
- "availWidth": 1680,
- "availHeight": 947,
+ "availWidth": 1470,
+ "availHeight": 923,
"devicePixelRatio": 2
},
"webgl": {
- "unmaskedVendor": "Intel Inc.",
- "unmaskedRenderer": "Intel(R) HD Graphics 400, or similar"
+ "unmaskedVendor": "Apple",
+ "unmaskedRenderer": "Apple M1, or similar"
+ }
+ },
+ {
+ "navigator": {
+ "userAgent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:133.0) Gecko/20100101 Firefox/133.0",
+ "platform": "MacIntel",
+ "hardwareConcurrency": 8,
+ "maxTouchPoints": 0
+ },
+ "screen": {
+ "width": 1920,
+ "height": 1080,
+ "colorDepth": 30,
+ "availWidth": 1920,
+ "availHeight": 1055,
+ "devicePixelRatio": 2
+ },
+ "webgl": {
+ "unmaskedVendor": "Apple",
+ "unmaskedRenderer": "Apple M1, or similar"
+ }
+ },
+ {
+ "navigator": {
+ "userAgent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:133.0) Gecko/20100101 Firefox/133.0",
+ "platform": "MacIntel",
+ "hardwareConcurrency": 14,
+ "maxTouchPoints": 0
+ },
+ "screen": {
+ "width": 2560,
+ "height": 1440,
+ "colorDepth": 30,
+ "availWidth": 2560,
+ "availHeight": 1355,
+ "devicePixelRatio": 2
+ },
+ "webgl": {
+ "unmaskedVendor": "Apple",
+ "unmaskedRenderer": "Apple M1, or similar"
+ }
+ },
+ {
+ "navigator": {
+ "userAgent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:148.0) Gecko/20100101 Firefox/148.0",
+ "platform": "MacIntel",
+ "hardwareConcurrency": 2,
+ "maxTouchPoints": 0
+ },
+ "screen": {
+ "width": 3440,
+ "height": 1440,
+ "colorDepth": 24,
+ "availWidth": 3440,
+ "availHeight": 1440
+ },
+ "webgl": {
+ "unmaskedVendor": "ATI Technologies Inc.",
+ "unmaskedRenderer": "Radeon HD 3200 Graphics, or similar"
},
"speechVoices": [
"Albert:en-US:local",
"Alice:it-IT:local",
+ "Soumya:kn-IN:local",
"Alva:sv-SE:local",
"Amélie:fr-CA:local",
"Amira:ms-MY:local",
@@ -2320,6 +937,7 @@
"Flo (Chinese (China mainland)):zh-CN:local",
"Flo (Chinese (Taiwan)):zh-TW:local",
"Fred:en-US:local",
+ "Geeta:te-IN:local",
"Good News:en-US:local",
"Grandma (German (Germany)):de-DE:local",
"Grandma (English (UK)):en-GB:local",
@@ -2375,6 +993,7 @@
"Nora:nb-NO:local",
"Organ:en-US:local",
"Paulina:es-MX:local",
+ "Piya:bn-IN:local",
"Superstar:en-US:local",
"Ralph:en-US:local",
"Reed (German (Germany)):de-DE:local",
@@ -2456,85 +1075,15 @@
"navigator": {
"userAgent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:148.0) Gecko/20100101 Firefox/148.0",
"platform": "MacIntel",
- "hardwareConcurrency": 2,
- "maxTouchPoints": 0
- },
- "screen": {
- "width": 1440,
- "height": 900,
- "colorDepth": 30,
- "availWidth": 1440,
- "availHeight": 900,
- "devicePixelRatio": 2
- },
- "webgl": {
- "unmaskedVendor": "Intel Inc.",
- "unmaskedRenderer": "Intel(R) HD Graphics 400, or similar"
- },
- "speechVoices": [
- "Alex:en-US:local",
- "Alice:it-IT:local",
- "Alva:sv-SE:local",
- "Amelie:fr-CA:local",
- "Anna:de-DE:local",
- "Carmit:he-IL:local",
- "Damayanti:id-ID:local",
- "Daniel:en-GB:local",
- "Diego:es-AR:local",
- "Ellen:nl-BE:local",
- "Fiona:en-scotland:local",
- "Fred:en-US:local",
- "Ioana:ro-RO:local",
- "Joana:pt-PT:local",
- "Jorge:es-ES:local",
- "Juan:es-MX:local",
- "Kanya:th-TH:local",
- "Karen:en-AU:local",
- "Kyoko:ja-JP:local",
- "Laura:sk-SK:local",
- "Lekha:hi-IN:local",
- "Luca:it-IT:local",
- "Luciana:pt-BR:local",
- "Maged:ar-SA:local",
- "Mariska:hu-HU:local",
- "Mei-Jia:zh-TW:local",
- "Melina:el-GR:local",
- "Milena:ru-RU:local",
- "Moira:en-IE:local",
- "Monica:es-ES:local",
- "Nora:nb-NO:local",
- "Paulina:es-MX:local",
- "Rishi:en-IN:local",
- "Samantha:en-US:local",
- "Sara:da-DK:local",
- "Satu:fi-FI:local",
- "Sin-ji:zh-HK:local",
- "Tessa:en-ZA:local",
- "Thomas:fr-FR:local",
- "Ting-Ting:zh-CN:local",
- "Veena:en-IN:local",
- "Victoria:en-US:local",
- "Xander:nl-NL:local",
- "Yelda:tr-TR:local",
- "Yuna:ko-KR:local",
- "Yuri:ru-RU:local",
- "Zosia:pl-PL:local",
- "Zuzana:cs-CZ:local"
- ]
- },
- {
- "navigator": {
- "userAgent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:148.0) Gecko/20100101 Firefox/148.0",
- "platform": "MacIntel",
- "hardwareConcurrency": 8,
+ "hardwareConcurrency": 16,
"maxTouchPoints": 0
},
"screen": {
- "width": 1440,
- "height": 900,
+ "width": 2560,
+ "height": 1440,
"colorDepth": 30,
- "availWidth": 1440,
- "availHeight": 870,
+ "availWidth": 2560,
+ "availHeight": 1330,
"devicePixelRatio": 2
},
"webgl": {
@@ -2732,25 +1281,23 @@
"navigator": {
"userAgent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:148.0) Gecko/20100101 Firefox/148.0",
"platform": "MacIntel",
- "hardwareConcurrency": 6,
+ "hardwareConcurrency": 16,
"maxTouchPoints": 0
},
"screen": {
- "width": 1792,
- "height": 1120,
+ "width": 2560,
+ "height": 1440,
"colorDepth": 30,
- "availWidth": 1792,
- "availHeight": 1090,
- "devicePixelRatio": 2
+ "availWidth": 2560,
+ "availHeight": 1415
},
"webgl": {
- "unmaskedVendor": "Intel Inc.",
- "unmaskedRenderer": "Intel(R) HD Graphics 400, or similar"
+ "unmaskedVendor": "Apple",
+ "unmaskedRenderer": "Apple M1, or similar"
},
"speechVoices": [
"Albert:en-US:local",
"Alice:it-IT:local",
- "Soumya:kn-IN:local",
"Alva:sv-SE:local",
"Amélie:fr-CA:local",
"Amira:ms-MY:local",
@@ -2796,7 +1343,6 @@
"Flo (Chinese (China mainland)):zh-CN:local",
"Flo (Chinese (Taiwan)):zh-TW:local",
"Fred:en-US:local",
- "Geeta:te-IN:local",
"Good News:en-US:local",
"Grandma (German (Germany)):de-DE:local",
"Grandma (English (UK)):en-GB:local",
@@ -2852,7 +1398,6 @@
"Nora:nb-NO:local",
"Organ:en-US:local",
"Paulina:es-MX:local",
- "Piya:bn-IN:local",
"Superstar:en-US:local",
"Ralph:en-US:local",
"Reed (German (Germany)):de-DE:local",
@@ -2932,17 +1477,17 @@
},
{
"navigator": {
- "userAgent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0",
+ "userAgent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:148.0) Gecko/20100101 Firefox/148.0",
"platform": "MacIntel",
- "hardwareConcurrency": 2,
+ "hardwareConcurrency": 8,
"maxTouchPoints": 0
},
"screen": {
- "width": 2560,
- "height": 1440,
- "colorDepth": 24,
- "availWidth": 2560,
- "availHeight": 1440,
+ "width": 1440,
+ "height": 900,
+ "colorDepth": 30,
+ "availWidth": 1440,
+ "availHeight": 870,
"devicePixelRatio": 2
},
"webgl": {
@@ -4615,26 +3160,6 @@
"Microsoft Zira Desktop - English (United States):en-US:local"
]
},
- {
- "navigator": {
- "userAgent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:147.0) Gecko/20100101 Firefox/147.0",
- "platform": "Win32",
- "hardwareConcurrency": 4,
- "maxTouchPoints": 10
- },
- "screen": {
- "width": 1536,
- "height": 875,
- "colorDepth": 24,
- "availWidth": 1536,
- "availHeight": 875,
- "devicePixelRatio": 2
- },
- "webgl": {
- "unmaskedVendor": "Mozilla",
- "unmaskedRenderer": "Mozilla"
- }
- },
{
"navigator": {
"userAgent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:148.0) Gecko/20100101 Firefox/148.0",
@@ -4914,26 +3439,6 @@
"unmaskedRenderer": "ANGLE (NVIDIA, NVIDIA GeForce GTX 480 Direct3D11 vs_5_0 ps_5_0), or similar"
}
},
- {
- "navigator": {
- "userAgent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:140.0) Gecko/20100101 Firefox/140.0",
- "platform": "Win32",
- "hardwareConcurrency": 4,
- "maxTouchPoints": 10
- },
- "screen": {
- "width": 2400,
- "height": 1200,
- "colorDepth": 24,
- "availWidth": 2400,
- "availHeight": 1200,
- "devicePixelRatio": 2
- },
- "webgl": {
- "unmaskedVendor": "Mozilla",
- "unmaskedRenderer": "Mozilla"
- }
- },
{
"navigator": {
"userAgent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:133.0) Gecko/20100101 Firefox/133.0",
diff --git a/pythonlib/camoufox/fingerprints.py b/pythonlib/camoufox/fingerprints.py
index b283d2978..c3d414e8a 100644
--- a/pythonlib/camoufox/fingerprints.py
+++ b/pythonlib/camoufox/fingerprints.py
@@ -1,24 +1,71 @@
+import hashlib
import json
import os
import re
-from dataclasses import asdict, dataclass
+import secrets
+import unicodedata
+from dataclasses import asdict, dataclass, is_dataclass
from pathlib import Path
-from random import choice, randint, randrange, random, sample, shuffle
-from typing import Any, Dict, FrozenSet, List, Optional, Tuple
-
-from browserforge.fingerprints import (
- Fingerprint,
- FingerprintGenerator,
- ScreenFingerprint,
-)
+from random import Random, choice, randint, randrange, random, sample, shuffle
+from typing import Any, Dict, FrozenSet, List, Optional, Set, Tuple
from camoufox.pkgman import load_yaml
from camoufox.webgl import sample_webgl
-# Load the browserforge.yaml file
-BROWSERFORGE_DATA = load_yaml('browserforge.yml')
+# Load the fpgen mapping file
+FPGEN_DATA = load_yaml('fpgen.yml')
+
+# fpgen's OS names, from Camoufox's.
+_FPGEN_OS = {'lin': 'Linux', 'linux': 'Linux', 'mac': 'macOS', 'macos': 'macOS',
+ 'win': 'Windows', 'windows': 'Windows'}
+
+# fpgen unpacks ~7 MB of model data on first use, so the generator is built on
+# demand rather than at import: `import camoufox` must stay cheap for callers
+# who never generate a fingerprint (they passed their own, or a preset).
+_FP_GENERATOR = None
+
+
+def _generator():
+ global _FP_GENERATOR
+ if _FP_GENERATOR is None:
+ from fpgen import Generator
+
+ _FP_GENERATOR = Generator()
+ return _FP_GENERATOR
-FP_GENERATOR = FingerprintGenerator(browser='firefox', os=('linux', 'macos', 'windows'))
+
+@dataclass
+class Screen:
+ """A bound on the screen a generated fingerprint may claim.
+
+ Replaces browserforge.fingerprints.Screen, which left with the BrowserForge
+ dependency. Same four fields, same meaning: the generated screen must fit
+ inside them.
+ """
+
+ min_width: Optional[int] = None
+ max_width: Optional[int] = None
+ min_height: Optional[int] = None
+ max_height: Optional[int] = None
+
+ def as_conditions(self) -> Dict[str, Any]:
+ """The bound, as fpgen conditions.
+
+ fpgen takes a predicate per field and rejects a value the predicate
+ refuses, so a range is a closure rather than a list of allowed values.
+ """
+ conditions: Dict[str, Any] = {}
+ lo_w, hi_w = self.min_width, self.max_width
+ lo_h, hi_h = self.min_height, self.max_height
+ if lo_w is not None or hi_w is not None:
+ conditions['screen.width'] = lambda w: (
+ isinstance(w, int) and (lo_w is None or w >= lo_w) and (hi_w is None or w <= hi_w)
+ )
+ if lo_h is not None or hi_h is not None:
+ conditions['screen.height'] = lambda h: (
+ isinstance(h, int) and (lo_h is None or h >= lo_h) and (hi_h is None or h <= hi_h)
+ )
+ return conditions
# Bundled real fingerprint presets
PRESETS_FILE = Path(__file__).parent / 'fingerprint-presets.json'
@@ -27,12 +74,20 @@
PRESETS_V150_MIN_FF = 149
_PRESETS_CACHE: Dict[Path, Dict] = {}
-# CreepJS OS marker fonts used for OS detection
+# CreepJS OS marker fonts used for OS detection. Twin of MARKER_FONTS in
+# scripts/gen-fonts-json.py. Every name must be in fonts.json for its OS
+# (scripts/verify-fonts.py checks): a marker the bundle cannot render would be a
+# reverse leak. That is why PingFang HK/SC/TC are no longer macOS markers -- the
+# bundle carries no PingFang file. On Linux the first three are also
+# the families bundle/fontconfig/linux/fonts.conf resolves sans-serif / serif /
+# monospace to, so an identity without them would have no face behind any CSS
+# generic; Arimo / Cousine / Tinos stay because a real Ubuntu answers "present"
+# for them via its metric aliases.
_MACOS_MARKER_FONTS = [
- 'Helvetica Neue', 'PingFang HK', 'PingFang SC', 'PingFang TC',
+ 'Helvetica Neue',
]
_LINUX_MARKER_FONTS = [
- 'Arimo', 'Cousine', 'Tinos', 'Twemoji Mozilla',
+ 'Noto Sans', 'Noto Serif', 'DejaVu Sans Mono', 'Arimo', 'Cousine', 'Tinos', 'Twemoji Mozilla',
]
_WINDOWS_MARKER_FONTS = [
'Segoe UI', 'Tahoma', 'Cambria Math', 'Nirmala UI',
@@ -62,30 +117,405 @@ def _load_os_fonts() -> Dict[str, List[str]]:
return _OS_FONTS_CACHE
-# Essential fonts per OS that must always be included in subsets
+# Essential fonts per OS that must always be included in subsets.
+#
+# These are the OS BASE font sets: every family a real machine of that OS ships
+# by default. A real machine has ALL of its OS defaults -- only the additions
+# (Office, LibreOffice, Adobe CC, developer and web fonts) vary from box to box --
+# so the base is never subsetted; the random 30-78% draw below applies to the
+# additions only (fonts.json minus the base).
+#
+# Source: the per-OS bases in scripts/data/font-manifests.json (Windows 10 with
+# the stock CJK families; macOS Sonoma; Ubuntu and its Mint variant),
+# intersected with fonts.json so only names the bundle can
+# render are listed (Sonoma's PingFang / Kefa / Hiragino families are in the real
+# base but not bundled, so they are absent here). Regenerate together with
+# fonts.json: `python3 scripts/gen-fonts-json.py --print-bases`.
+#
+# Windows: the seven GDI-substitution names (Courier, Helvetica, MS Sans Serif,
+# MS Serif, Roman, Small Fonts, Times) and the six Light/Semilight names have no
+# file of their own; bundle/fontconfig/windows/fonts.conf rewrites each to its
+# bundled target unconditionally, so they MUST stay in this always-reported set
+# (an identity that did not report Helvetica would still render it otherwise).
_ESSENTIAL_FONTS_MACOS = [
- 'Arial', 'Helvetica', 'Times New Roman', 'Courier New', 'Verdana',
- 'Georgia', 'Trebuchet MS', 'Tahoma', 'Helvetica Neue', 'Lucida Grande',
- 'Menlo', 'Monaco', 'Geneva', 'PingFang HK', 'PingFang SC', 'PingFang TC',
+ 'Academy Engraved LET', 'Al Bayan', 'Al Nile', 'Al Tarikh', 'American Typewriter', 'American Typewriter Semibold',
+ 'Andale Mono', 'Apple Braille', 'Apple Chancery', 'Apple Color Emoji', 'Apple SD Gothic Neo',
+ 'Apple SD Gothic Neo ExtraBold', 'Apple Symbols', 'AppleGothic', 'AppleMyungjo', 'Arial',
+ 'Arial Black', 'Arial Hebrew', 'Arial Hebrew Scholar', 'Arial Narrow', 'Arial Rounded MT Bold',
+ 'Arial Unicode MS', 'Athelas', 'Avenir', 'Avenir Black', 'Avenir Black Oblique', 'Avenir Book',
+ 'Avenir Heavy', 'Avenir Light', 'Avenir Medium', 'Avenir Next', 'Avenir Next Demi Bold',
+ 'Avenir Next Heavy', 'Avenir Next Medium', 'Avenir Next Ultra Light', 'Ayuthaya', 'Baghdad',
+ 'Bangla MN', 'Bangla Sangam MN', 'Baskerville', 'Beirut', 'Big Caslon', 'Bodoni 72', 'Bodoni 72 Oldstyle',
+ 'Bodoni 72 Smallcaps', 'Bodoni Ornaments', 'Bradley Hand', 'Brush Script MT', 'Chalkboard',
+ 'Chalkboard SE', 'Chalkduster', 'Charter', 'Charter Black', 'Cochin', 'Comic Sans MS',
+ 'Copperplate', 'Corsiva Hebrew', 'Courier', 'Courier New', 'DIN Alternate', 'DIN Condensed',
+ 'Damascus', 'DecoType Naskh', 'Devanagari MT', 'Devanagari Sangam MN', 'Didot', 'Diwan Kufi',
+ 'Diwan Thuluth', 'Euphemia UCAS', 'Farah', 'Farisi', 'Futura', 'Futura Bold', 'GB18030 Bitmap',
+ 'Galvji', 'Geeza Pro', 'Geneva', 'Georgia', 'Gill Sans', 'Grantha Sangam MN', 'Gujarati MT',
+ 'Gujarati Sangam MN', 'Gurmukhi MN', 'Gurmukhi MT', 'Gurmukhi Sangam MN', 'Heiti SC', 'Heiti TC',
+ 'Helvetica', 'Helvetica Neue', 'Hiragino Kaku Gothic Pro', 'Hiragino Kaku Gothic Std',
+ 'Hiragino Kaku Gothic StdN', 'Hiragino Maru Gothic Pro', 'Hiragino Maru Gothic ProN', 'Hiragino Maru Gothic ProN W4',
+ 'Hiragino Mincho Pro', 'Hiragino Mincho ProN', 'Hiragino Mincho ProN W3', 'Hiragino Mincho ProN W6',
+ 'Hiragino Sans', 'Hiragino Sans GB', 'Hiragino Sans GB W3', 'Hiragino Sans GB W6', 'Hiragino Sans W0',
+ 'Hiragino Sans W1', 'Hiragino Sans W2', 'Hiragino Sans W3', 'Hiragino Sans W4', 'Hiragino Sans W5',
+ 'Hiragino Sans W6', 'Hiragino Sans W7', 'Hiragino Sans W8', 'Hiragino Sans W9', 'Hoefler Text',
+ 'Hoefler Text Ornaments', 'ITF Devanagari', 'ITF Devanagari Marathi', 'Impact', 'InaiMathi',
+ 'InaiMathi Bold', 'Iowan Old Style', 'Kailasa', 'Kannada MN', 'Kannada Sangam MN', 'Khmer MN',
+ 'Khmer Sangam MN', 'Kohinoor Bangla', 'Kohinoor Devanagari', 'Kohinoor Devanagari Medium',
+ 'Kohinoor Gujarati', 'Kohinoor Telugu', 'Kokonor', 'Krungthep', 'KufiStandardGK', 'Lao MN',
+ 'Lao Sangam MN', 'Lucida Grande', 'Luminari', 'Malayalam MN', 'Malayalam Sangam MN', 'Marker Felt',
+ 'Menlo', 'Microsoft Sans Serif', 'Mishafi', 'Mishafi Gold', 'Monaco', 'Mshtakan', 'MuktaMahee Bold',
+ 'MuktaMahee ExtraBold', 'MuktaMahee ExtraLight', 'MuktaMahee Light', 'MuktaMahee Medium',
+ 'MuktaMahee Regular', 'MuktaMahee SemiBold', 'Muna', 'Myanmar MN', 'Myanmar Sangam MN',
+ 'Nadeem', 'New Peninim MT', 'Noteworthy', 'Noto Nastaliq Urdu', 'Noto Sans Adlam', 'Noto Sans Armenian',
+ 'Noto Sans Armenian Blk', 'Noto Sans Armenian ExtBd', 'Noto Sans Armenian ExtLt', 'Noto Sans Armenian Light',
+ 'Noto Sans Armenian Med', 'Noto Sans Armenian SemBd', 'Noto Sans Armenian Thin', 'Noto Sans Avestan',
+ 'Noto Sans Bamum', 'Noto Sans Bassa Vah', 'Noto Sans Batak', 'Noto Sans Bhaiksuki', 'Noto Sans Buginese',
+ 'Noto Sans Buhid', 'Noto Sans Canadian Aboriginal Regular', 'Noto Sans Carian', 'Noto Sans CaucAlban',
+ 'Noto Sans Chakma', 'Noto Sans Cham', 'Noto Sans Coptic', 'Noto Sans Cuneiform', 'Noto Sans Cypriot',
+ 'Noto Sans Duployan', 'Noto Sans EgyptHiero', 'Noto Sans Elbasan', 'Noto Sans Glagolitic',
+ 'Noto Sans Gothic', 'Noto Sans Gunjala Gondi', 'Noto Sans HanifiRohg', 'Noto Sans Hanunoo',
+ 'Noto Sans Hatran', 'Noto Sans ImpAramaic', 'Noto Sans InsPahlavi', 'Noto Sans InsParthi',
+ 'Noto Sans Javanese', 'Noto Sans Kaithi', 'Noto Sans Kannada', 'Noto Sans Kannada Black',
+ 'Noto Sans Kannada ExtraBold', 'Noto Sans Kannada ExtraLight', 'Noto Sans Kannada Light',
+ 'Noto Sans Kannada Medium', 'Noto Sans Kannada SemiBold', 'Noto Sans Kannada Thin', 'Noto Sans Kayah Li',
+ 'Noto Sans Kharoshthi', 'Noto Sans Khojki', 'Noto Sans Khudawadi', 'Noto Sans Lepcha',
+ 'Noto Sans Limbu', 'Noto Sans Linear A', 'Noto Sans Linear B', 'Noto Sans Lisu', 'Noto Sans Lycian',
+ 'Noto Sans Lydian', 'Noto Sans Mahajani', 'Noto Sans Mandaic', 'Noto Sans Manichaean',
+ 'Noto Sans Marchen', 'Noto Sans Masaram Gondi', 'Noto Sans Mende Kikakui', 'Noto Sans Meroitic',
+ 'Noto Sans Miao', 'Noto Sans Modi', 'Noto Sans Mongolian', 'Noto Sans Mro', 'Noto Sans Multani',
+ 'Noto Sans Myanmar', 'Noto Sans Myanmar Blk', 'Noto Sans Myanmar ExtBd', 'Noto Sans Myanmar ExtLt',
+ 'Noto Sans Myanmar Light', 'Noto Sans Myanmar Med', 'Noto Sans Myanmar SemBd', 'Noto Sans Myanmar Thin',
+ 'Noto Sans NKo', 'Noto Sans Nabataean', 'Noto Sans Newa', 'Noto Sans Ol Chiki', 'Noto Sans Old Italic',
+ 'Noto Sans Old Permic', 'Noto Sans Old Turkic', 'Noto Sans OldHung', 'Noto Sans OldNorArab',
+ 'Noto Sans OldSouArab', 'Noto Sans Oriya', 'Noto Sans Osage', 'Noto Sans Osmanya', 'Noto Sans Pahawh Hmong',
+ 'Noto Sans Palmyrene', 'Noto Sans PhagsPa', 'Noto Sans Phoenician', 'Noto Sans PsaPahlavi',
+ 'Noto Sans Rejang', 'Noto Sans Samaritan', 'Noto Sans Saurashtra', 'Noto Sans Sharada',
+ 'Noto Sans Siddham', 'Noto Sans SoraSomp', 'Noto Sans Sundanese', 'Noto Sans Syloti Nagri',
+ 'Noto Sans Syriac', 'Noto Sans Tagalog', 'Noto Sans Tagbanwa', 'Noto Sans Tai Le', 'Noto Sans Tai Tham',
+ 'Noto Sans Tai Viet', 'Noto Sans Takri', 'Noto Sans Thaana', 'Noto Sans Tifinagh', 'Noto Sans Tirhuta',
+ 'Noto Sans Ugaritic', 'Noto Sans Vai', 'Noto Sans Wancho', 'Noto Sans Yi', 'Noto Sans Zawgyi',
+ 'Noto Sans Zawgyi Blk', 'Noto Sans Zawgyi ExtBd', 'Noto Sans Zawgyi ExtLt', 'Noto Sans Zawgyi Light',
+ 'Noto Sans Zawgyi Med', 'Noto Sans Zawgyi SemBd', 'Noto Sans Zawgyi Thin', 'Noto Serif Ahom',
+ 'Noto Serif Balinese', 'Noto Serif Hmong Nyiakeng', 'Noto Serif Myanmar', 'Noto Serif Myanmar Blk',
+ 'Noto Serif Myanmar ExtBd', 'Noto Serif Myanmar ExtLt', 'Noto Serif Myanmar Light', 'Noto Serif Myanmar Med',
+ 'Noto Serif Myanmar SemBd', 'Noto Serif Myanmar Thin', 'Noto Serif Yezidi', 'Optima', 'Oriya MN',
+ 'Oriya Sangam MN', 'PT Mono', 'PT Sans', 'PT Sans Caption', 'PT Sans Narrow', 'PT Serif',
+ 'PT Serif Caption', 'Palatino', 'Papyrus', 'Party LET', 'Phosphate', 'PingFang HK', 'PingFang SC',
+ 'PingFang TC', 'Plantagenet Cherokee', 'Raanana', 'Rockwell', 'STIX Two Math', 'STIX Two Math Regular',
+ 'STIX Two Text', 'STIX Two Text Regular', 'STIXGeneral', 'STIXIntegralsD', 'STIXIntegralsSm',
+ 'STIXIntegralsUp', 'STIXIntegralsUpD', 'STIXIntegralsUpSm', 'STIXNonUnicode', 'STIXSizeFiveSym',
+ 'STIXSizeFourSym', 'STIXSizeOneSym', 'STIXSizeThreeSym', 'STIXSizeTwoSym', 'STIXVariants',
+ 'STSong', 'Sana', 'Sathu', 'Savoye LET', 'Shree Devanagari 714', 'SignPainter-HouseScript',
+ 'Silom', 'Sinhala MN', 'Sinhala Sangam MN', 'Skia', 'Snell Roundhand', 'Songti SC', 'Songti TC',
+ 'Sukhumvit Set', 'Superclarendon', 'Symbol', 'System Font', 'Tahoma', 'Tamil MN', 'Tamil Sangam MN',
+ 'Telugu MN', 'Telugu Sangam MN', 'Thonburi', 'Times', 'Times New Roman', 'Trattatello',
+ 'Trebuchet MS', 'Verdana', 'Waseem', 'Webdings', 'Wingdings', 'Wingdings 2', 'Wingdings 3',
+ 'Zapf Dingbats', 'Zapfino',
]
_ESSENTIAL_FONTS_WINDOWS = [
- 'Arial', 'Times New Roman', 'Courier New', 'Verdana', 'Georgia',
- 'Trebuchet MS', 'Tahoma', 'Segoe UI', 'Calibri', 'Cambria Math',
- 'Nirmala UI', 'Consolas',
+ 'Arial', 'Arial Black', 'Bahnschrift', 'Calibri', 'Calibri Light', 'Cambria', 'Cambria Math',
+ 'Candara', 'Candara Light', 'Comic Sans MS', 'Consolas', 'Constantia', 'Corbel', 'Corbel Light',
+ 'Courier', 'Courier New', 'Ebrima', 'Franklin Gothic Medium', 'Gabriola', 'Gadugi', 'Georgia',
+ 'Helvetica', 'Impact', 'Ink Free', 'Javanese Text', 'Leelawadee UI', 'Leelawadee UI Semilight',
+ 'Lucida Console', 'Lucida Sans Unicode', 'MS Gothic', 'MS PGothic', 'MS Sans Serif', 'MS Serif',
+ 'MS UI Gothic', 'MV Boli', 'Malgun Gothic', 'Malgun Gothic Semilight', 'Marlett', 'Microsoft Himalaya',
+ 'Microsoft JhengHei', 'Microsoft JhengHei Light', 'Microsoft JhengHei UI', 'Microsoft JhengHei UI Light',
+ 'Microsoft New Tai Lue', 'Microsoft PhagsPa', 'Microsoft Sans Serif', 'Microsoft Tai Le',
+ 'Microsoft YaHei', 'Microsoft YaHei Light', 'Microsoft YaHei UI', 'Microsoft YaHei UI Light',
+ 'Microsoft Yi Baiti', 'MingLiU-ExtB', 'MingLiU_HKSCS-ExtB', 'MingLiU_MSCS-ExtB', 'Mongolian Baiti',
+ 'Myanmar Text', 'NSimSun', 'Nirmala Text', 'Nirmala Text Semilight', 'Nirmala UI', 'Nirmala UI Semilight',
+ 'PMingLiU-ExtB', 'Palatino Linotype', 'Roman', 'Sans Serif Collection', 'Segoe Fluent Icons',
+ 'Segoe MDL2 Assets', 'Segoe Print', 'Segoe Script', 'Segoe UI', 'Segoe UI Black', 'Segoe UI Emoji',
+ 'Segoe UI Historic', 'Segoe UI Light', 'Segoe UI Semibold', 'Segoe UI Semilight', 'Segoe UI Symbol',
+ 'Segoe UI Variable', 'Segoe UI Variable Display', 'Segoe UI Variable Small', 'Segoe UI Variable Text',
+ 'SimSun', 'SimSun-ExtB', 'Sitka Banner', 'Sitka Display', 'Sitka Heading', 'Sitka Small',
+ 'Sitka Subheading', 'Sitka Text', 'Small Fonts', 'Sylfaen', 'Symbol', 'Tahoma', 'Times',
+ 'Times New Roman', 'Trebuchet MS', 'Twemoji Mozilla', 'Verdana', 'Webdings', 'Wingdings',
+ 'Yu Gothic', 'Yu Gothic Light', 'Yu Gothic Medium', 'Yu Gothic UI', 'Yu Gothic UI Light',
+ 'Yu Gothic UI Semibold', 'Yu Gothic UI Semilight', '宋体', '微軟正黑體', '微軟正黑體 Light', '微软雅黑',
+ '微软雅黑 Light', '新宋体', '新細明體-ExtB', '游ゴシック', '游ゴシック Light', '游ゴシック Medium', '細明體-ExtB', '細明體_HKSCS-ExtB',
+ '細明體_MSCS-ExtB', '맑은 고딕', '맑은 고딕 Semilight', 'MS ゴシック', 'MS Pゴシック',
]
_ESSENTIAL_FONTS_LINUX = [
- 'Arimo', 'Cousine', 'Tinos', 'Twemoji Mozilla',
- 'Noto Sans Devanagari', 'Noto Sans JP', 'Noto Sans KR',
- 'Noto Sans SC', 'Noto Sans TC',
+ 'AR PL UKai CN', 'AR PL UKai HK', 'AR PL UKai TW', 'AR PL UKai TW MBE', 'AR PL UMing CN',
+ 'AR PL UMing HK', 'AR PL UMing TW', 'AR PL UMing TW MBE', 'Arial', 'Arial Narrow', 'Avant Garde',
+ 'Bookman Old Style', 'C059', 'Calibri', 'Cambria', 'Century Schoolbook', 'Courier', 'Courier New',
+ 'D050000L', 'DejaVu Sans', 'DejaVu Sans Mono', 'DejaVu Serif', 'Droid Sans Fallback', 'Helvetica',
+ 'Helvetica Narrow', 'Liberation Mono', 'Liberation Sans', 'Liberation Sans Narrow', 'Liberation Serif',
+ 'Nimbus Mono PS', 'Nimbus Roman', 'Nimbus Sans', 'Nimbus Sans Narrow', 'Noto Color Emoji',
+ 'Noto Kufi Arabic', 'Noto Looped Lao', 'Noto Looped Lao Bold', 'Noto Looped Lao Regular',
+ 'Noto Looped Thai', 'Noto Looped Thai Bold', 'Noto Looped Thai Regular', 'Noto Mono', 'Noto Music',
+ 'Noto Naskh Arabic', 'Noto Nastaliq Urdu', 'Noto Rashi Hebrew', 'Noto Sans', 'Noto Sans Adlam',
+ 'Noto Sans Adlam Unjoined', 'Noto Sans AnatoHiero', 'Noto Sans Anatolian Hieroglyphs',
+ 'Noto Sans Arabic', 'Noto Sans Armenian', 'Noto Sans Avestan', 'Noto Sans Balinese', 'Noto Sans Bamum',
+ 'Noto Sans Bassa Vah', 'Noto Sans Batak', 'Noto Sans Bengali', 'Noto Sans Bhaiksuki', 'Noto Sans Brahmi',
+ 'Noto Sans Buginese', 'Noto Sans Buhid', 'Noto Sans CJK HK', 'Noto Sans CJK JP', 'Noto Sans CJK KR',
+ 'Noto Sans CJK SC', 'Noto Sans CJK TC', 'Noto Sans CanAborig', 'Noto Sans Canadian Aboriginal',
+ 'Noto Sans Carian', 'Noto Sans CaucAlban', 'Noto Sans Caucasian Albanian', 'Noto Sans Chakma',
+ 'Noto Sans Cham', 'Noto Sans Cherokee', 'Noto Sans Coptic', 'Noto Sans Cuneiform', 'Noto Sans Cypriot',
+ 'Noto Sans Deseret', 'Noto Sans Devanagari', 'Noto Sans Display', 'Noto Sans Duployan',
+ 'Noto Sans EgyptHiero', 'Noto Sans Egyptian Hieroglyphs', 'Noto Sans Elbasan', 'Noto Sans Elymaic',
+ 'Noto Sans Ethiopic', 'Noto Sans Georgian', 'Noto Sans Glagolitic', 'Noto Sans Gothic',
+ 'Noto Sans Grantha', 'Noto Sans Gujarati', 'Noto Sans Gunjala Gondi', 'Noto Sans Gurmukhi',
+ 'Noto Sans Hanifi Rohingya', 'Noto Sans Hanunoo', 'Noto Sans Hatran', 'Noto Sans Hebrew',
+ 'Noto Sans ImpAramaic', 'Noto Sans Imperial Aramaic', 'Noto Sans Indic Siyaq Numbers',
+ 'Noto Sans InsPahlavi', 'Noto Sans InsParthi', 'Noto Sans Inscriptional Pahlavi', 'Noto Sans Inscriptional Parthian',
+ 'Noto Sans Javanese', 'Noto Sans Kaithi', 'Noto Sans Kannada', 'Noto Sans Kayah Li', 'Noto Sans Kharoshthi',
+ 'Noto Sans Khmer', 'Noto Sans Khojki', 'Noto Sans Khudawadi', 'Noto Sans Lao', 'Noto Sans Lepcha',
+ 'Noto Sans Limbu', 'Noto Sans Linear A', 'Noto Sans Linear B', 'Noto Sans Lisu', 'Noto Sans Lycian',
+ 'Noto Sans Lydian', 'Noto Sans Mahajani', 'Noto Sans Malayalam', 'Noto Sans Mandaic', 'Noto Sans Manichaean',
+ 'Noto Sans Marchen', 'Noto Sans Masaram Gondi', 'Noto Sans Math', 'Noto Sans Mayan Numerals',
+ 'Noto Sans Medefaidrin', 'Noto Sans Meetei Mayek', 'Noto Sans Mende Kikakui', 'Noto Sans Meroitic',
+ 'Noto Sans Miao', 'Noto Sans Modi', 'Noto Sans Mongolian', 'Noto Sans Mono', 'Noto Sans Mono CJK HK',
+ 'Noto Sans Mono CJK JP', 'Noto Sans Mono CJK KR', 'Noto Sans Mono CJK SC', 'Noto Sans Mono CJK TC',
+ 'Noto Sans Mro', 'Noto Sans Multani', 'Noto Sans Myanmar', 'Noto Sans NKo', 'Noto Sans Nabataean',
+ 'Noto Sans New Tai Lue', 'Noto Sans Newa', 'Noto Sans Nushu', 'Noto Sans Ogham', 'Noto Sans Ol Chiki',
+ 'Noto Sans Old Hungarian', 'Noto Sans Old Italic', 'Noto Sans Old North Arabian', 'Noto Sans Old Permic',
+ 'Noto Sans Old Persian', 'Noto Sans Old Sogdian', 'Noto Sans Old South Arabian', 'Noto Sans Old Turkic',
+ 'Noto Sans OldHung', 'Noto Sans OldNorArab', 'Noto Sans OldSouArab', 'Noto Sans Oriya',
+ 'Noto Sans Osage', 'Noto Sans Osmanya', 'Noto Sans Pahawh Hmong', 'Noto Sans Palmyrene',
+ 'Noto Sans Pau Cin Hau', 'Noto Sans PhagsPa', 'Noto Sans Phoenician', 'Noto Sans PsaPahlavi',
+ 'Noto Sans Psalter Pahlavi', 'Noto Sans Rejang', 'Noto Sans Runic', 'Noto Sans Samaritan',
+ 'Noto Sans Saurashtra', 'Noto Sans Sharada', 'Noto Sans Shavian', 'Noto Sans Siddham',
+ 'Noto Sans SignWrit', 'Noto Sans SignWriting', 'Noto Sans Sinhala', 'Noto Sans Sogdian',
+ 'Noto Sans Sora Sompeng', 'Noto Sans Soyombo', 'Noto Sans Sundanese', 'Noto Sans Syloti Nagri',
+ 'Noto Sans Symbols', 'Noto Sans Symbols2', 'Noto Sans Syriac', 'Noto Sans Tagalog', 'Noto Sans Tagbanwa',
+ 'Noto Sans Tai Le', 'Noto Sans Tai Tham', 'Noto Sans Tai Viet', 'Noto Sans Takri', 'Noto Sans Tamil',
+ 'Noto Sans Tamil Supplement', 'Noto Sans Telugu', 'Noto Sans Thaana', 'Noto Sans Thai',
+ 'Noto Sans Tifinagh', 'Noto Sans Tifinagh APT', 'Noto Sans Tifinagh Adrar', 'Noto Sans Tifinagh Agraw Imazighen',
+ 'Noto Sans Tifinagh Ahaggar', 'Noto Sans Tifinagh Air', 'Noto Sans Tifinagh Azawagh', 'Noto Sans Tifinagh Ghat',
+ 'Noto Sans Tifinagh Hawad', 'Noto Sans Tifinagh Rhissa Ixa', 'Noto Sans Tifinagh SIL',
+ 'Noto Sans Tifinagh Tawellemmet', 'Noto Sans Tirhuta', 'Noto Sans Ugaritic', 'Noto Sans Vai',
+ 'Noto Sans Wancho', 'Noto Sans Warang Citi', 'Noto Sans Yi', 'Noto Sans Zanabazar', 'Noto Sans Zanabazar Square',
+ 'Noto Serif', 'Noto Serif Ahom', 'Noto Serif Armenian', 'Noto Serif Balinese', 'Noto Serif Bengali',
+ 'Noto Serif CJK HK', 'Noto Serif CJK JP', 'Noto Serif CJK KR', 'Noto Serif CJK SC', 'Noto Serif CJK TC',
+ 'Noto Serif Devanagari', 'Noto Serif Display', 'Noto Serif Dogra', 'Noto Serif Ethiopic',
+ 'Noto Serif Georgian', 'Noto Serif Grantha', 'Noto Serif Gujarati', 'Noto Serif Gurmukhi',
+ 'Noto Serif Hebrew', 'Noto Serif Hmong Nyiakeng', 'Noto Serif Kannada', 'Noto Serif Khmer',
+ 'Noto Serif Khojki', 'Noto Serif Lao', 'Noto Serif Malayalam', 'Noto Serif Myanmar', 'Noto Serif Sinhala',
+ 'Noto Serif Tamil', 'Noto Serif Tamil Slanted', 'Noto Serif Tangut', 'Noto Serif Telugu',
+ 'Noto Serif Thai', 'Noto Serif Tibetan', 'Noto Serif Yezidi', 'Noto Traditional Nushu',
+ 'OpenSymbol', 'P052', 'Palatino', 'Palatino Linotype', 'Standard Symbols PS', 'Symbol',
+ 'Times', 'Times New Roman', 'URW Bookman', 'URW Gothic', 'Ubuntu', 'Ubuntu Mono', 'Ubuntu Sans',
+ 'Ubuntu Sans Mono', 'Z003', 'Zapf Chancery',
]
+# OS-version variants of the base, drawn ALL-OR-NOTHING on top of the essential
+# core with the real-world share of that version (the manifest's base weights). A
+# Windows 11 machine (65%) has every one of the Win11 additions and a Windows 10
+# machine none of them; Ubuntu (65%) ships Liberation Sans Narrow, Mint (35%)
+# does not. macOS has a single bundled base (Sonoma). Format: (probability, fonts).
+_BASE_VARIANT_FONTS_MACOS = (0.0, [])
+_BASE_VARIANT_FONTS_WINDOWS = (1.0, [
+ # Verified present on win-i9 (real Windows 11 build 26200.9457). Windows 10
+ # was dropped 2026-09-22 (end of support Oct 2025), so every Windows identity
+ # is Windows 11 and these are always drawn. Cascadia Code/Mono are NOT here:
+ # they are not on a stock Windows 11 and are modelled as an addition.
+ 'Sans Serif Collection', 'Segoe Fluent Icons', 'Segoe UI Variable',
+ 'Segoe UI Variable Display', 'Segoe UI Variable Small', 'Segoe UI Variable Text',
+])
+# Linux needs no variant: both shipped bases are exact, whole font sets taken
+# from the official Ubuntu 24.04 / 26.04 desktop ISO manifests, and
+# fonts-liberation-sans-narrow is in both of them.
+_BASE_VARIANT_FONTS_LINUX = (0.0, [])
+
+# Fonts only a Windows 11 base has: a Windows identity whose font list contains
+# them presents Windows 11, and the rest of the identity (overlay scrollbars,
+# utils.launch_options) must agree.
+WINDOWS_11_MARKER_FONTS = frozenset(_BASE_VARIANT_FONTS_WINDOWS[1])
+
+
+
+def identity_salt(pinned: Any = None) -> int:
+ """The entropy that makes identity_seed() belong to ONE identity.
+
+ The presented values identity_seed() hashes are shared by many unrelated
+ launches: browserforge gives each OS only a handful of screens and UAs, so
+ over 500 launches per OS the unsalted seed took 12-30 distinct values, and
+ every Camoufox install everywhere drew its fonts, voices, GPU, media devices
+ and canvas/audio noise seeds from that same short list.
+
+ Pass whatever the caller pinned the identity with -- a browserforge
+ Fingerprint, a preset dict, the caller's own config -- to get a salt that
+ is stable across launches of that identity (daijro/camoufox#442, #765);
+ pass nothing for a fresh identity, which gets a random salt.
+ """
+ if pinned is None:
+ return secrets.randbits(64)
+ if is_dataclass(pinned) and not isinstance(pinned, type):
+ pinned = asdict(pinned)
+ import orjson
+
+ blob = orjson.dumps(pinned, option=orjson.OPT_SORT_KEYS | orjson.OPT_NON_STR_KEYS, default=str)
+ return int.from_bytes(hashlib.sha256(blob).digest()[:8], 'big')
+
+
+def identity_seed(config: Dict[str, Any], salt: int = 0) -> int:
+ """A seed for the per-identity draws (fonts, voices, GPU, media devices,
+ noise seeds): a pure function of the presented identity and its salt.
+
+ Two launches that present the same identity must present the same font and
+ voice lists: a page that keeps cookies across launches and sees the font
+ set or the voice list change under an otherwise identical device reads it
+ as a spoofed browser (daijro/camoufox#442, #765, #378). The presented
+ values alone are far too common to tell identities apart, so callers mix in
+ identity_salt() (see there).
+ """
+ import zlib
+ parts = [
+ str(config.get('navigator.userAgent', '')),
+ str(config.get('navigator.platform', '')),
+ str(config.get('screen.width', '')),
+ str(config.get('screen.height', '')),
+ str(config.get('navigator.hardwareConcurrency', '')),
+ # not the GPU: it is sampled after the font draw in launch_options
+ str(salt),
+ ]
+ return zlib.crc32('|'.join(parts).encode('utf-8')) & 0xFFFFFFFF
+
+
+def _rng(seed: Optional[int]) -> Random:
+ """Seeded generator for a draw, or the module-level one when unseeded."""
+ return Random(seed) if seed is not None else Random()
+
+
+_FONT_GROUPS_CACHE: Optional[Dict[str, List[Dict[str, Any]]]] = None
+
+
+def _load_font_groups() -> Dict[str, List[Dict[str, Any]]]:
+ """The addition units per OS (font-groups.json, generated from the manifest
+ by scripts/gen-font-groups.py). Each entry is
+
+ {"id", "kind", "prob", "fonts", ["requiresLocale"], ["sizes"]}
+
+ and carries its OWN real-world probability, because that is what makes a
+ drawn machine plausible: Office is on ~60% of Windows boxes and the
+ Pan-European supplemental pack on ~2.8%, and a draw that treated them alike
+ would put a font nobody has on a third of its identities."""
+ global _FONT_GROUPS_CACHE
+ if _FONT_GROUPS_CACHE is None:
+ path = os.path.join(os.path.dirname(__file__), 'font-groups.json')
+ try:
+ with open(path, 'rb') as f:
+ _FONT_GROUPS_CACHE = json.loads(f.read())
+ except (OSError, ValueError):
+ _FONT_GROUPS_CACHE = {}
+ return _FONT_GROUPS_CACHE
-def _generate_random_font_subset(target_os: str) -> List[str]:
+
+_FONT_BASES_CACHE: Optional[Dict[str, List[Dict[str, Any]]]] = None
+
+
+def _load_font_bases() -> Dict[str, List[Dict[str, Any]]]:
+ """The OS-VERSION bases per OS (font-bases.json, same generator).
+
+ One machine runs one OS version and has that version's whole default font
+ set, so a base is drawn entire, by weight, and never subsetted. Windows 11's
+ base happens to be Windows 10's plus a few families, but macOS 26's is not a
+ superset of Sonoma's -- Apple renamed Kefa to "Kefa III", added PingFang MO
+ and respelled several Noto families (measured on macOS 26.6.2, build 25G83)
+ -- so they are alternatives, not a core plus extras."""
+ global _FONT_BASES_CACHE
+ if _FONT_BASES_CACHE is None:
+ path = os.path.join(os.path.dirname(__file__), 'font-bases.json')
+ try:
+ with open(path, 'rb') as f:
+ _FONT_BASES_CACHE = json.loads(f.read())
+ except (OSError, ValueError):
+ _FONT_BASES_CACHE = {}
+ return _FONT_BASES_CACHE
+
+
+def _pick_base(os_key: str, rng: Any) -> List[str]:
+ """Draw one OS-version base by its real-world weight."""
+ bases = _load_font_bases().get(os_key) or []
+ if not bases:
+ return []
+ roll = rng.random()
+ cumulative = 0.0
+ for base in bases:
+ cumulative += base.get('weight', 0.0)
+ if roll < cumulative:
+ return list(base['fonts'])
+ return list(bases[-1]['fonts'])
+
+
+def _draw_units(os_key: str, rng: Any, exclude: Set[str],
+ locale: Optional[str] = None) -> List[str]:
+ """The additions this machine has, each unit judged on its own probability.
+
+ A "bundle" unit is all-or-nothing: the software either installed its fonts
+ or it did not. An "alacarte" unit is a category people install piecemeal, so
+ it first has to be present at all and then contributes `sizes` of its
+ members -- which is what stops a draw from reporting all 32 web fonts or
+ none, neither of which is what a real machine looks like.
"""
- Generate a random subset of fonts for the given OS.
- Picks a random percentage between 30-78% of non-essential fonts,
- always includes essential + marker fonts.
+ out: List[str] = []
+ for unit in _load_font_groups().get(os_key, []):
+ required = unit.get('requiresLocale')
+ if required and not (locale or '').lower().startswith(required.lower()):
+ # e.g. the Traditional-Chinese supplemental pack is on ~90% of zh-TW
+ # machines and essentially no others; claiming it on an en-US
+ # identity is the kind of mismatch a WAF checks for.
+ continue
+ if rng.random() >= unit.get('prob', 0.0):
+ continue
+ members = [f for f in unit['fonts'] if f not in exclude]
+ if not members:
+ continue
+ if unit['kind'] == 'alacarte':
+ sizes = unit.get('sizes') or [{'n': len(members), 'w': 1.0}]
+ roll = rng.random() * sum(s['w'] for s in sizes)
+ cumulative = 0.0
+ count = sizes[-1]['n']
+ for size in sizes:
+ cumulative += size['w']
+ if roll < cumulative:
+ count = size['n']
+ break
+ count = max(1, min(count, len(members)))
+ members = rng.sample(members, count)
+ out.extend(members)
+ return out
+
+
+def _host_has_variant_fonts(target_os: str) -> bool:
+ """Whether the host itself ships the OS-version font variant (native identities only)."""
+ if target_os != 'windows':
+ return False
+ import os
+ fonts_dir = os.path.join(os.environ.get('WINDIR', r'C:\Windows'), 'Fonts')
+ # SegUIVar.ttf is Segoe UI Variable, present on every Windows 11 install and on no Windows 10.
+ return os.path.exists(os.path.join(fonts_dir, 'SegUIVar.ttf'))
+
+
+def _generate_random_font_subset(
+ target_os: str,
+ seed: Optional[int] = None,
+ native: bool = False,
+ locale: Optional[str] = None,
+) -> List[str]:
+ """
+ Generate the font list of one plausible machine of the given OS.
+
+ A real machine is one OS-version base plus whatever software the owner
+ installed, so that is how this draws: one base by weight, in full and never
+ subsetted, then each addition unit independently at its own measured
+ probability (font-groups.json). The marker fonts are ensured last.
+
+ `locale` gates the units a manifest marks `requiresLocale` -- the
+ Traditional-Chinese supplemental pack is on ~90% of zh-TW machines and
+ almost no others, so claiming it on an en-US identity is a mismatch a WAF
+ can check.
+
+ `native`: the identity is the host's own OS (macOS / Windows), where the
+ browser uses the real system fonts and not the bundle. Only the OS base
+ is claimed then: an "addition" the host does not have would be listed but
+ fall back when measured, which a page can see (measured 2026-09-14 on a
+ stock Mac mini: Fira Code / Lato claimed, rendered as Menlo).
"""
+ rng = _rng(seed)
os_fonts_data = _load_os_fonts()
os_key = {'macos': 'mac', 'windows': 'win', 'linux': 'lin'}.get(target_os, 'mac')
full_list = os_fonts_data.get(os_key, os_fonts_data.get('mac', []))
@@ -93,27 +523,71 @@ def _generate_random_font_subset(target_os: str) -> List[str]:
if target_os == 'windows':
essential = set(_ESSENTIAL_FONTS_WINDOWS)
markers = _WINDOWS_MARKER_FONTS
+ variant_prob, variant_fonts = _BASE_VARIANT_FONTS_WINDOWS
elif target_os == 'linux':
essential = set(_ESSENTIAL_FONTS_LINUX)
markers = _LINUX_MARKER_FONTS
+ variant_prob, variant_fonts = _BASE_VARIANT_FONTS_LINUX
else:
essential = set(_ESSENTIAL_FONTS_MACOS)
markers = _MACOS_MARKER_FONTS
-
- # Split into essential and non-essential
- result = [f for f in full_list if f in essential]
- non_essential = [f for f in full_list if f not in essential]
-
- # Random percentage between 30-78%
- pct = 30 + int(random() * 49)
- count = round((pct / 100) * len(non_essential))
-
- # Randomly select non-essential fonts
- if count < len(non_essential):
- selected = sample(non_essential, count)
- else:
- selected = non_essential
- result.extend(selected)
+ variant_prob, variant_fonts = _BASE_VARIANT_FONTS_MACOS
+ variant = set(variant_fonts)
+
+ if native:
+ # The host's own OS: the browser is using the real system fonts, so the
+ # claim is the base and nothing else. An "addition" the host does not
+ # have would be listed and then fall back when measured, which a page
+ # can see (measured 2026-09-14 on a stock Mac mini: Fira Code / Lato
+ # claimed, rendered as Menlo).
+ result = [f for f in full_list if f in essential]
+ result.extend(sorted(f for f in essential if f not in set(full_list)))
+ # The OS-version variant is real system fonts too: claim it exactly when
+ # the host has it. A Windows 11 host presented as Windows 10 hides Segoe UI
+ # Variable etc. and, with the matching classic scrollbars, differs from the
+ # stock Firefox on the same machine (Windows 11 test host, 2026-09-16:
+ # 0 px overlay).
+ # Windows 10 was dropped as a spoofing target on 2026-09-22 (end of
+ # support Oct 2025), so the drawn base IS Windows 11 and already carries
+ # the Win11-only families. A native identity is different: camoufox may
+ # be RUNNING on a Windows 10 host, and that host cannot render them, so
+ # they are removed when the host lacks them rather than added when it
+ # has them.
+ if variant and not _host_has_variant_fonts(target_os):
+ absent = set(variant_fonts)
+ result = [f for f in result if f not in absent]
+ return result
+
+ # One machine runs one OS version, and has that version's default font set
+ # in full -- so the base is drawn whole, by weight, and never subsetted.
+ base = _pick_base(os_key, rng)
+ if not base:
+ # No generated base data: fall back to the always-present core so a
+ # draw is still coherent rather than empty.
+ base = [f for f in full_list if f in essential]
+ result = list(base)
+ chosen = set(result)
+
+ # _ESSENTIAL_FONTS_* is the guaranteed floor underneath whichever base was
+ # drawn: the GDI-substitution names on Windows and the alias names fonts.conf
+ # rewrites unconditionally have no file of their own, so they render for
+ # every identity and must be reported by every identity.
+ for font in full_list:
+ if font in essential and font not in chosen:
+ result.append(font)
+ chosen.add(font)
+
+ # Everything else is an addition, and each unit is judged on its own
+ # real-world probability rather than by a flat sample: Office lands on ~60%
+ # of Windows machines, the Pan-European pack on ~2.8%, msttcorefonts on
+ # ~13.9% of Linux ones (all measured against the fpgen corpus). Units are
+ # atomic, so a draw never produces a partial group -- a partial group is a
+ # synthetic artifact no real machine shows (sundial "co-shipped families
+ # not split").
+ for font in _draw_units(os_key, rng, exclude=chosen, locale=locale):
+ if font not in chosen:
+ result.append(font)
+ chosen.add(font)
# Ensure marker fonts are present
_ensure_marker_fonts(result, markers)
@@ -200,12 +674,113 @@ def _voice_uri(os_key: str, name: str, lang: str) -> str:
else:
escaped.append(''.join(f'%{b:02X}' for b in ch.encode('utf-8')))
return f"{_VOICE_URI_PREFIX['lin']}{''.join(escaped)}?{lang}"
+ if os_key == 'win':
+ # SapiService.cpp: "urn:moz-tts:sapi:" + name + "?" + lang, verbatim
+ # (measured 2026-09-14 on a stock Windows 11: spaces and parentheses
+ # unescaped, e.g. "...sapi:Microsoft David - English (United States)?en-US").
+ return f"{_VOICE_URI_PREFIX['win']}{name}?{lang}"
+ if os_key == 'mac':
+ # OSXSpeechSynthesizerService: "urn:moz-tts:osx:" + AVSpeechSynthesisVoice
+ # identifier. Catalogue captured from a stock macOS (voice-uris.json);
+ # voices outside it follow Apple's identifier families.
+ uri = _load_voice_uris().get('mac', {}).get(f'{name}|{lang}')
+ if uri:
+ return uri
+ ascii_name = re.sub(r'[^A-Za-z0-9]', '', unicodedata.normalize('NFKD', name))
+ if name in _MAC_NOVELTY_VOICES:
+ # e.g. com.apple.speech.synthesis.voice.Albert / .Fred / .Victoria
+ # (capitalised as the voice name; multi-word names are joined)
+ return f"{_VOICE_URI_PREFIX['mac']}com.apple.speech.synthesis.voice.{ascii_name}"
+ if name in _MAC_ELOQUENCE_VOICES:
+ return f"{_VOICE_URI_PREFIX['mac']}com.apple.eloquence.{lang}.{ascii_name}"
+ return f"{_VOICE_URI_PREFIX['mac']}com.apple.voice.compact.{lang}.{ascii_name}"
return f"{_VOICE_URI_PREFIX.get(os_key, '')}{_voice_uri_slug(name)}"
+_MAC_NOVELTY_VOICES = frozenset(
+ {'Albert', 'Bad News', 'Bahh', 'Bells', 'Boing', 'Bubbles', 'Cellos', 'Wobble', 'Good News', 'Jester',
+ 'Organ', 'Superstar', 'Trinoids', 'Whisper', 'Zarvox', 'Fred', 'Junior', 'Kathy', 'Ralph',
+ 'Bruce', 'Vicki', 'Victoria', 'Agnes', 'Princess', 'Hysterical', 'Pipe Organ', 'Deranged',
+ # not a novelty voice, but the same MacinTalk identifier family
+ 'Alex'}
+)
+_MAC_ELOQUENCE_VOICES = frozenset({'Eddy', 'Flo', 'Grandma', 'Grandpa', 'Reed', 'Rocko', 'Sandy', 'Shelley'})
+_VOICE_URIS_CACHE: Optional[Dict[str, Dict[str, str]]] = None
+
+
+def _load_voice_uris() -> Dict[str, Dict[str, str]]:
+ """Real voiceURI per "Name|lang" as a stock browser reports it (voice-uris.json)."""
+ global _VOICE_URIS_CACHE
+ if _VOICE_URIS_CACHE is None:
+ path = os.path.join(os.path.dirname(__file__), 'voice-uris.json')
+ try:
+ with open(path, 'rb') as f:
+ _VOICE_URIS_CACHE = json.loads(f.read())
+ except OSError:
+ _VOICE_URIS_CACHE = {}
+ return _VOICE_URIS_CACHE
+
+
+def _load_voice_manifests() -> Dict[str, Any]:
+ """The per-OS installed-voice model (voice-manifests.json): a base the OS
+ always ships, Windows language packs keyed by display locale, and additions
+ drawn as atomic bundles / a-la-carte voices / whole language packs."""
+ global _VOICE_MANIFESTS_CACHE
+ if _VOICE_MANIFESTS_CACHE is None:
+ path = os.path.join(os.path.dirname(__file__), 'voice-manifests.json')
+ with open(path, 'rb') as f:
+ _VOICE_MANIFESTS_CACHE = json.loads(f.read())
+ return _VOICE_MANIFESTS_CACHE
+
+
+_VOICE_MANIFESTS_CACHE: Optional[Dict[str, Any]] = None
+
+
+def _split_voice_entry(entry: str) -> Tuple[str, str, str]:
+ name, lang, vtype = entry.rsplit(':', 2)
+ return name, lang, vtype
+
+
+def _weighted_pick(rng: Random, items: List[Dict[str, Any]], wkey: str = 'w') -> Dict[str, Any]:
+ total = sum(float(i.get(wkey, 0)) for i in items)
+ r = rng.random() * total
+ for i in items:
+ r -= float(i.get(wkey, 0))
+ if r <= 0:
+ return i
+ return items[-1]
+
+
+def _weighted_sample(rng: Random, items: List[Any], k: int, weight) -> List[Any]:
+ pool = list(items)
+ out: List[Any] = []
+ while pool and len(out) < k:
+ total = sum(weight(x) for x in pool)
+ r = rng.random() * total
+ for x in pool:
+ r -= weight(x)
+ if r <= 0:
+ out.append(x)
+ pool.remove(x)
+ break
+ else:
+ out.append(pool.pop())
+ return out
+
+
+def _resolve_display_pack(packs: Dict[str, Any], fallback: str, locale: Optional[str]) -> str:
+ if locale:
+ if locale in packs:
+ return locale
+ lang = locale.split('-')[0].lower()
+ for key in packs:
+ if key.split('-')[0].lower() == lang:
+ return key
+ return fallback if fallback in packs else next(iter(packs))
+
+
def _generate_random_voice_subset(
- target_os: str, locale: Optional[str] = None
-) -> List[Dict[str, Any]]:
+ target_os: str, locale: Optional[str] = None, seed: Optional[int] = None) -> List[Dict[str, Any]]:
"""Generate the speech voice list for the given OS as MaskConfig objects.
Returns a list of {lang, name, voiceUri, isDefault, isLocalService} dicts,
@@ -214,35 +789,77 @@ def _generate_random_voice_subset(
Without this override, Firefox registers the HOST machine's
speech-dispatcher / SAPI / NSSpeech voices, leaking the OS the wrapper
- actually runs on. We therefore emit a list for EVERY target OS:
- macOS: essential voices + a random 40-80% of the rest.
- Windows: full SAPI set (subsetting a fixed list reads as suspicious).
- Linux: full espeak-ng base-language set (~131 voices) as enumerated
- by speech-dispatcher — the fixed list a Linux Firefox exposes.
+ actually runs on. The list follows a measured model of what a stock
+ machine exposes (voice-manifests.json):
+ Windows: the display language's OneCore pack (en-US: David/Mark/Zira),
+ its legacy "Desktop" tokens, and occasionally extra packs;
+ macOS: the compact + Eloquence base (~184 voices) plus rare downloads;
+ Linux: speech-dispatcher's fixed espeak-ng list (131 voices).
+ Seeded by the identity so the same identity always reports the same list.
"""
- os_voices_data = _load_os_voices()
+ rng = _rng(seed)
os_key = {'macos': 'mac', 'windows': 'win', 'linux': 'lin'}.get(target_os, 'mac')
- full_list = os_voices_data.get(os_key, [])
+ manifest = _load_voice_manifests().get(os_key) or _load_voice_manifests()['mac']
+
+ out: List[str] = []
+ seen = set()
+
+ def add(entries):
+ for e in entries or []:
+ if e not in seen:
+ seen.add(e)
+ out.append(e)
+
+ legacy: List[str] = []
+ packs = manifest.get('langPacks') or {}
+
+ def take_pack(pack):
+ add(pack.get('oneCore'))
+ if pack.get('desktop') and rng.random() < float(pack.get('desktopProb') or 0):
+ for e in pack['desktop']:
+ if e not in legacy:
+ legacy.append(e)
+
+ add(manifest.get('base'))
+ chosen = set()
+ if packs:
+ key = _resolve_display_pack(packs, manifest.get('fallbackLocale') or 'en-US', locale)
+ chosen.add(key)
+ take_pack(packs[key])
+
+ for addition in manifest.get('additions', []):
+ if addition.get('deferred'):
+ continue
+ req = addition.get('requiresLocale')
+ if req and not (locale or '').lower().startswith(req.lower()):
+ continue
+ if rng.random() >= float(addition.get('prob') or 0):
+ continue
+ kind = addition.get('kind')
+ if kind == 'bundle':
+ add(addition.get('voices'))
+ elif kind == 'alacarte':
+ sizes = addition.get('sizes') or [{'n': 1, 'w': 1}]
+ k = int(_weighted_pick(rng, sizes)['n'])
+ for e in _weighted_sample(rng, addition.get('voices') or [], k, lambda x: 1.0):
+ if e not in seen:
+ seen.add(e)
+ # a downloaded voice sits in its alphabetical place
+ idx = next((i for i, v in enumerate(out) if v.lower() > e.lower()), len(out))
+ out.insert(idx, e)
+ elif kind == 'groups' and packs:
+ eligible = [g for g in addition.get('groups') or [] if g in packs and g not in chosen]
+ if not eligible:
+ continue
+ k = int(_weighted_pick(rng, addition['sizes'])['n']) if addition.get('sizes') else len(eligible)
+ for g in _weighted_sample(rng, eligible, k, lambda g: float(packs[g].get('weight') or 0.01)):
+ chosen.add(g)
+ take_pack(packs[g])
- if not full_list:
+ selected = [_split_voice_entry(e) for e in out + legacy]
+ if not selected:
return []
- if os_key in ('win', 'lin'):
- # Fixed lists across installs (SAPI / espeak-ng) — ship the whole set.
- selected = list(full_list)
- else:
- # macOS: essential voices + random 40-80% of the rest.
- essential = set(_ESSENTIAL_VOICES_MACOS)
- result = [v for v in full_list if v[0] in essential]
- non_essential = [v for v in full_list if v[0] not in essential]
- pct = 40 + int(random() * 41) # 40-80%
- count = round((pct / 100) * len(non_essential))
- if count < len(non_essential):
- result.extend(sample(non_essential, count))
- else:
- result.extend(non_essential)
- selected = result
-
voices: List[Dict[str, Any]] = [
{
'name': name,
@@ -254,24 +871,9 @@ def _generate_random_voice_subset(
for (name, lang, vtype) in selected
]
- # Mark a default voice matching the spoofed locale prefix so it lines up
- # with Intl.DateTimeFormat().resolvedOptions().locale (CreepJS flags a
- # voiceLangMismatch otherwise).
- if voices:
- prefix = locale.split('-')[0].lower() if locale else 'en'
- idx = next(
- (i for i, v in enumerate(voices) if locale and v['lang'].lower() == locale.lower()),
- -1,
- )
- if idx < 0:
- idx = next(
- (i for i, v in enumerate(voices) if v['lang'].split('-')[0].lower() == prefix),
- -1,
- )
- if idx < 0:
- idx = 0
- voices[idx]['isDefault'] = True
-
+ # No voice carries default=true: stock Firefox 152 marks none on Windows
+ # (SAPI), macOS or Linux (measured 2026-09-14 on all three), so a spoofed
+ # default would be the odd one out.
return voices
@@ -316,6 +918,110 @@ def _normalize_preset_voices(
return result
+def host_cpu_count() -> Optional[int]:
+ """Logical CPUs this process may actually run on (cgroup/affinity aware)."""
+ try:
+ return len(os.sched_getaffinity(0)) or None # type: ignore[attr-defined]
+ except (AttributeError, OSError):
+ return os.cpu_count()
+
+
+# Core counts real desktop machines ship with, taken from the RECORDED
+# fingerprint corpus rather than invented: fingerprint-presets.json and
+# -v150.json between them contain 2, 4, 6, 8, 10, 12, 14, 16, 18, 20, 22, 24,
+# 28 and 32 (18: macOS 2/67; 22: Windows 6/180, Linux 2/65; 28: Windows 2/180,
+# Linux 1/65; 32: Linux 1/65 -- all in -v150). Leaving any of them out snapped
+# genuine machines with that count down to the next entry for no reason.
+#
+# 2 is EXCLUDED, and stays excluded -- but not for the reason first written
+# here. That reason ("2 is what Firefox reports under resistFingerprinting") is
+# false and has been for years: RuntimeService::ClampedHardwareConcurrency
+# (dom/workers/RuntimeService.cpp, read in the 152 tree on 2026-09-17) hardcodes
+# 4 under RFP, and 8 on macOS -- both already in this table.
+#
+# The real reason is coherence with the rest of the identity. 85% of macOS
+# identities draw "Apple M1, or similar" as the WebGL renderer, and no Apple
+# Silicon part has ever had 2 cores; the lowest is 8. A page reading
+# navigator.hardwareConcurrency and UNMASKED_RENDERER_WEBGL together -- two
+# property reads -- would see a machine that does not exist.
+#
+# The recorded corpus does contain 2 (11/67 macOS presets, 17/180 Windows,
+# 6/65 Linux), and that is not a reason to ship it: those rows report 2 more
+# often than 4 on macOS, which no real hardware population does. The corpus is
+# scraped from live traffic, so it carries other people's privacy-hardened
+# browsers, 2-vCPU VMs and bots. "The corpus says so" settles what real MACHINES
+# report only where the field is hardware; this one is a number the browser can
+# be made to say.
+#
+# A host outside this table would hand its own oddity to the fingerprint: a
+# 64-thread build box reports 32, anything under 4 threads reports 4. Odd
+# counts (5, 7, 9, 11, 13, 15) never appear in the corpus -- they are
+# browserforge Bayesian synthesis -- so they keep getting snapped down.
+PLAUSIBLE_CORE_COUNTS = (4, 6, 8, 10, 12, 14, 16, 18, 20, 22, 24, 28, 32)
+
+
+def fix_hardware_concurrency(config: Dict[str, Any], can_pin: Optional[bool] = None) -> None:
+ """navigator.hardwareConcurrency = the host's parallelism, snapped DOWN
+ into PLAUSIBLE_CORE_COUNTS.
+
+ A drawn value that differs from the machine the browser runs on is
+ measurable from a page: timing N parallel workers reveals how many cores
+ are really usable, and both "more usable than reported" and "fewer usable
+ than reported" are flagged by WebCPU-style checks (sundial "CPU: reported
+ vs measured cores"; daijro/camoufox#442 for the drift across launches).
+ So the drawn value is discarded, not clamped: min(drawn, host) still lets
+ a draw of 2 be measured as 16.
+
+ Stock Firefox 152 reports the true count in a normal window (capped by
+ dom.maxHardwareConcurrency = 128; measured 2026-09-14: 16-thread Linux and
+ Windows hosts -> 16, a 10-core Mac mini -> 10). Its 8/4 tiering
+ (RFPTarget NavigatorHWConcurrencyTiered: >= 8 -> 8, else 4) applies only
+ with fingerprinting protection on, i.e. private windows and ETP strict,
+ and resistFingerprinting hardcodes 4 (8 on macOS) -- neither is a normal
+ window's behaviour, so nothing is rounded here beyond the table snap.
+ The two tails (host > 20 or < 4) are the residual where reported and
+ measurable can disagree; closing them needs CPU affinity pinning, not a
+ launcher value. A caller that sets navigator.hardwareConcurrency
+ themselves is left alone (see the _user_set_navigator guard).
+ """
+ n = host_cpu_count()
+ if not n:
+ return
+ # The fingerprint's own value survives when the browser can be pinned to
+ # that many cores (cpu_affinity: Linux, Windows): reported and measurable
+ # then agree by construction, and the identity keeps its diversity. A draw
+ # the host cannot honour (more cores than it has), a host that cannot pin
+ # (macOS), or pin_cpu_cores left off -- the default since 2026-09-17 --
+ # falls back to the snapped host count, which is equally coherent.
+ from .cpu_affinity import supported as _can_pin
+
+ # can_pin=False: the caller launches the browser itself and nothing will
+ # pin it (launch_server, launch_options used directly), so a kept draw
+ # would be measured as the host count. None: whatever the host supports.
+ pinnable = _can_pin() and can_pin is not False
+
+ cap = int(n)
+ host_allowed = [c for c in PLAUSIBLE_CORE_COUNTS if c <= cap]
+ host_value = host_allowed[-1] if host_allowed else PLAUSIBLE_CORE_COUNTS[0]
+
+ drawn = config.get('navigator.hardwareConcurrency')
+ if pinnable and isinstance(drawn, int) and drawn >= 1:
+ # The fingerprint's value is kept for diversity, but it still has to be
+ # a count a real desktop ships with. Accepting any 1..host let
+ # browserforge's synthetic odd draws through (5, 7, 9, 11, 13, 15 --
+ # counts the corpus never records). Snap the draw DOWN into the table
+ # instead, capped by the host so pinning can honour it.
+ target = min(drawn, cap)
+ allowed = [c for c in PLAUSIBLE_CORE_COUNTS if c <= target]
+ # The floor is the table's even on a 1-3 core host: reporting the host's
+ # own 1, 2 or 3 would contradict the drawn GPU (see the table above).
+ config['navigator.hardwareConcurrency'] = (
+ allowed[-1] if allowed else PLAUSIBLE_CORE_COUNTS[0]
+ )
+ return
+ config['navigator.hardwareConcurrency'] = host_value
+
+
def fix_navigator_arch(config: Dict[str, Any], target_os: str) -> None:
"""Force navigator.platform AND navigator.oscpu to match the UA's arch.
@@ -348,16 +1054,25 @@ def fix_screen_no_taskbar(config: Dict[str, Any], target_os: str) -> None:
(screen.height == availHeight and screen.width == availWidth) doesn't flip.
Every desktop OS keeps some chrome visible (Mac menu bar ~25px, Win taskbar
- ~40px, Linux panel ~27px); the BrowserForge pool occasionally ships
- fingerprints with identical screen/avail values which leak as a headless
- tell. Also clamp window.outerHeight (and innerHeight) to the new avail so
- the window isn't taller than the available area.
+ ~40px, Linux panel ~27px); the pool occasionally ships fingerprints with
+ identical screen/avail values which leak as a headless tell. Also clamp
+ window.outerHeight (and innerHeight) to the new avail so the window isn't
+ taller than the available area.
+
+ The trigger is the HEIGHT alone, not both axes. Requiring `aw == sw` too
+ missed the shape `availWidth < width, availHeight == height` -- a Windows
+ taskbar docked left or right. That is a real geometry, but a rare one, and
+ letting it through means claiming no vertical chrome at all: no menu bar on
+ a Mac, no bottom taskbar on Windows, no panel on Linux. Those defaults are
+ overwhelmingly more common than a side dock, so the vertical delta is worth
+ more than the handful of genuine side-docked machines it overwrites. fpgen's
+ 2026 model surfaced this: conditioned on a small display it produced that
+ shape in ~30% of draws, where the unconditioned rate is under 1%.
"""
sw = config.get('screen.width')
sh = config.get('screen.height')
- aw = config.get('screen.availWidth')
ah = config.get('screen.availHeight')
- if not (sw and sh and aw == sw and ah == sh):
+ if not (sw and sh and ah == sh):
return
taskbar = 40 if target_os == 'win' else 25 if target_os == 'mac' else 27
new_avail = sh - taskbar
@@ -452,22 +1167,140 @@ def clamp_window_position(config: Dict[str, Any]) -> None:
config[pos_key] = max(0, min(pos, screen - outer))
-def set_media_devices_defaults(config: Dict[str, Any]) -> None:
- """Spoof navigator.mediaDevices.enumerateDevices() so headless contexts
- expose a plausible device list.
+def set_media_devices_defaults(config: Dict[str, Any], salt: int = 0) -> None:
+ """Give the identity a plausible set of media devices.
- A real desktop browser without explicit mic permission reports one
- audioinput + one videoinput; an empty list is a headless tell. The patched
- MediaDevices::FilterExposedDevices reads mediaDevices:{enabled,micros,
- webcams,speakers}. Default to one of each input kind unless the caller
- already set any mediaDevices: key.
+ The patched media backend (media-device-spoofing.patch) enumerates and
+ captures exactly the devices described by mediaDevices:{enabled, micros,
+ webcams, speakers} and the aligned mediaDevices:{microphone,webcam,
+ speaker}{Labels,Groups} lists, and Firefox's own pre-/post-grant exposure
+ rules apply to them. Nothing is drawn when the caller already set any
+ mediaDevices: key.
"""
if any(k.startswith('mediaDevices:') for k in config):
return
- config['mediaDevices:enabled'] = True
- config['mediaDevices:micros'] = 1
- config['mediaDevices:webcams'] = 1
- config['mediaDevices:speakers'] = 0
+ # Before any getUserMedia grant Firefox exposes at most ONE device per
+ # input kind and no audiooutput; after a grant it lists every device with
+ # the OS's own labels ("Microphone Array (Realtek(R) Audio)", "MacBook Pro
+ # Microphone", "Built-in Audio Analog Stereo"...). Draw a whole machine's
+ # worth from the common desktop population for the claimed OS
+ # (media-devices.json), seeded by the identity so the same identity
+ # always reports the same devices. The browser applies the stock
+ # pre-/post-grant exposure rules to this list.
+ plat = str(config.get('navigator.platform', ''))
+ if plat.startswith('Win'):
+ os_key = 'win'
+ elif plat.startswith('Mac'):
+ os_key = 'mac'
+ else:
+ os_key = 'lin'
+ config.update(draw_media_devices(os_key, identity_seed(config, salt)))
+
+
+_MEDIA_DEVICES_CACHE: Optional[Dict[str, Any]] = None
+
+
+def _load_media_devices() -> Dict[str, Any]:
+ """Per-OS catalogue of common sound cards / headsets / display audio /
+ cameras with their post-grant labels (media-devices.json)."""
+ global _MEDIA_DEVICES_CACHE
+ if _MEDIA_DEVICES_CACHE is None:
+ path = os.path.join(os.path.dirname(__file__), 'media-devices.json')
+ with open(path, 'rb') as f:
+ _MEDIA_DEVICES_CACHE = json.loads(f.read())
+ return _MEDIA_DEVICES_CACHE
+
+
+def _weighted_choice(rng: Random, items: List[Dict[str, Any]]) -> Dict[str, Any]:
+ total = float(sum(item.get('w', 1) for item in items))
+ r = rng.random() * total
+ for item in items:
+ r -= item.get('w', 1)
+ if r < 0:
+ return item
+ return items[-1]
+
+
+# Share of machines with no microphone at all (a desktop tower with only a
+# line-out) and with a built-in camera, per OS. macOS is modelled by the
+# machine line itself (Mac mini / Mac Studio have neither).
+_MEDIA_P_NO_MIC = {'win': 0.08, 'mac': 0.0, 'lin': 0.20}
+_MEDIA_P_BUILTIN_CAM = {'win': 0.78, 'mac': 0.0, 'lin': 0.45}
+
+
+def draw_media_devices(os_key: str, seed: Optional[int]) -> Dict[str, Any]:
+ """Draw one machine's media devices for `os_key` ('win'|'mac'|'lin').
+
+ Returns the mediaDevices:* config keys: counts plus aligned label and
+ group lists. Devices of one piece of hardware (a sound card's microphone
+ and speakers, a webcam and its microphone) share a group, as their
+ groupId does on a real machine; Linux additionally lists the PulseAudio
+ "Monitor of ..." source of every output as a microphone, as Firefox does.
+ """
+ rng = _rng(seed)
+ cat = _load_media_devices().get(os_key) or _load_media_devices()['win']
+ mics: List[Tuple[str, str]] = []
+ outs: List[Tuple[str, str]] = []
+ cams: List[Tuple[str, str]] = []
+ counter = [0]
+
+ def group() -> str:
+ counter[0] += 1
+ return f'hw-{counter[0]}'
+
+ def add(item: Dict[str, Any], grp: str) -> None:
+ for m in item.get('mics', []):
+ mics.append((m, grp))
+ for o in item.get('outs', []):
+ outs.append((o, grp))
+ if item.get('cam'):
+ cams.append((item['cam'], group()))
+
+ # 1. the machine's own sound card (+ built-in camera on macOS models)
+ card = _weighted_choice(rng, cat['cards'])
+ no_mic = rng.random() < _MEDIA_P_NO_MIC.get(os_key, 0.0)
+ card_grp = group()
+ if no_mic:
+ add({**card, 'mics': []}, card_grp)
+ else:
+ add(card, card_grp)
+ # 2. a built-in laptop camera (Windows/Linux); rare on a mic-less tower
+ p_cam = _MEDIA_P_BUILTIN_CAM.get(os_key, 0.0)
+ if rng.random() < (p_cam * 0.3 if no_mic else p_cam):
+ builtin = [c for c in cat['cameras'] if not c.get('mic')]
+ if builtin:
+ cams.append((_weighted_choice(rng, builtin)['cam'], group()))
+ # 3. a headset / USB microphone
+ if rng.random() < cat.get('p_headset', 0.0):
+ add(_weighted_choice(rng, cat['headsets']), group())
+ # 4. display audio (HDMI/DP) -- occasionally a display with mic + camera
+ if rng.random() < cat.get('p_display', 0.0):
+ add(_weighted_choice(rng, cat['displays']), group())
+ # 5. an external webcam, usually with its own microphone
+ if rng.random() < cat.get('p_extra_camera', 0.0):
+ external = [c for c in cat['cameras'] if c.get('mic')] or cat['cameras']
+ cam = _weighted_choice(rng, external)
+ grp = group()
+ cams.append((cam['cam'], grp))
+ if cam.get('mic'):
+ mics.append((cam['mic'], grp))
+ # 6. PulseAudio exposes a monitor source per output as a capture device
+ if cat.get('monitor_sources'):
+ for label, grp in list(outs):
+ mics.append((f'Monitor of {label}', grp))
+
+ return {
+ 'mediaDevices:enabled': True,
+ 'mediaDevices:micros': len(mics),
+ 'mediaDevices:webcams': len(cams),
+ 'mediaDevices:speakers': len(outs),
+ 'mediaDevices:microphoneLabels': [m for m, _ in mics],
+ 'mediaDevices:microphoneGroups': [g for _, g in mics],
+ 'mediaDevices:webcamLabels': [c for c, _ in cams],
+ 'mediaDevices:webcamGroups': [g for _, g in cams],
+ 'mediaDevices:speakerLabels': [o for o, _ in outs],
+ 'mediaDevices:speakerGroups': [g for _, g in outs],
+ }
# -- WebGL <-> screen coherence (#729) ---------------------------------------
@@ -629,6 +1462,7 @@ def sample_webgl_for_screen(
width: Optional[int] = None,
height: Optional[int] = None,
attempts: int = 32,
+ seed: Optional[int] = None,
) -> Dict[str, str]:
"""Sample a WebGL profile that is coherent with the screen already chosen.
@@ -640,29 +1474,38 @@ def sample_webgl_for_screen(
and widening it here to flatter the GPU would push a headful window back
off the monitor it is drawn on (#499).
- The first draw settles hardware-vs-software at the pool's natural rate and
- is never resampled once it lands on a rasterizer. Rejecting only hardware
- draws would renormalise the survivors onto llvmpipe / WARP / SwiftShader:
- on a small screen that turns a 1.5% software rate into a 40% one, trading
- a weak incoherence for the strongest VM/headless tell there is.
+ Software rasterisers are the one exception to keeping the pool's rate: a
+ draw that lands on llvmpipe / WARP / SwiftShader is resampled, so they
+ never present as the GPU (see below). That does cost fidelity -- the corpus
+ records them at ~1.5%, because real users do run without working drivers --
+ but "no consumer machine reports llvmpipe" is a live, standard check on a
+ string every fingerprint script already reads, so the trade is worth it.
+ Reviewed against the JS-detectability bar on 2026-09-17 and kept.
Falls back to that first draw when the pool holds nothing coherent, so an
unusual screen degrades to today's behaviour rather than raising.
"""
- first = sample_webgl(target_os)
+ # A software rasteriser (llvmpipe / SwiftShader / WARP) as the presented
+ # GPU is what every consumer-hardware check flags first ("no consumer
+ # machine reports llvmpipe" -- sundial, measured 2026-09-14), so the draw
+ # never settles on one: keep drawing until a hardware renderer that fits
+ # the screen comes up, and only fall back to the first draw if the pool
+ # holds nothing better.
+ first = sample_webgl(target_os, seed=seed)
renderer = first.get('webGl:renderer')
- if is_software_renderer(renderer) or gpu_screen_is_plausible(renderer, width, height):
+ if not is_software_renderer(renderer) and gpu_screen_is_plausible(renderer, width, height):
return first
- for _ in range(attempts - 1):
- candidate = sample_webgl(target_os)
+ fallback = None if is_software_renderer(renderer) else first
+ for attempt in range(attempts - 1):
+ candidate = sample_webgl(target_os, seed=None if seed is None else seed + 1 + attempt)
renderer = candidate.get('webGl:renderer')
- # Skip rather than accept: the class was settled by the first draw.
if is_software_renderer(renderer):
continue
if gpu_screen_is_plausible(renderer, width, height):
return candidate
- return first
+ fallback = fallback or candidate
+ return fallback or first
def _select_presets_file(ff_version: Optional[Any] = None) -> Path:
@@ -765,10 +1608,15 @@ def _app_version_from_user_agent(user_agent: str) -> Optional[str]:
return f"5.0 ({'; '.join(kept)})" if kept else None
-def from_preset(preset: Dict, ff_version: Optional[str] = None) -> Dict[str, Any]:
+def from_preset(preset: Dict, ff_version: Optional[str] = None, salt: Optional[int] = None) -> Dict[str, Any]:
"""
Convert a real fingerprint preset to CAMOU_CONFIG format.
+
+ `salt` (identity_salt) keys the font/voice draws; None draws a fresh one, so
+ two users of the same recorded device do not also share its font list.
"""
+ if salt is None:
+ salt = identity_salt()
config: Dict[str, Any] = {}
nav = preset.get('navigator', {})
@@ -835,7 +1683,9 @@ def from_preset(preset: Dict, ff_version: Optional[str] = None) -> Dict[str, Any
config['webGl:renderer'] = webgl['unmaskedRenderer']
# Generate unique random seeds per launch (1 to 2^32-1, excluding 0 which is a no-op in C++)
- config['fonts:spacing_seed'] = randint(1, 4_294_967_295) # nosec
+ # fonts:spacing_seed stays 0 (off): glyph-advance perturbation produces text
+ # widths no real machine emits (see launch_options in utils.py).
+ config['fonts:spacing_seed'] = 0
config['audio:seed'] = randint(1, 4_294_967_295) # nosec
config['canvas:seed'] = randint(1, 4_294_967_295) # nosec
@@ -853,7 +1703,7 @@ def from_preset(preset: Dict, ff_version: Optional[str] = None) -> Dict[str, Any
else:
target_os = 'macos'
try:
- config['fonts'] = _generate_random_font_subset(target_os)
+ config['fonts'] = _generate_random_font_subset(target_os, seed=identity_seed(config, salt))
except Exception:
# Fallback to preset fonts if font generation fails
if preset.get('fonts'):
@@ -866,7 +1716,7 @@ def from_preset(preset: Dict, ff_version: Optional[str] = None) -> Dict[str, Any
config['fonts'] = fonts
# Generate a unique random voice subset from the OS voice list
try:
- config['voices'] = _generate_random_voice_subset(target_os)
+ config['voices'] = _generate_random_voice_subset(target_os, seed=identity_seed(config, salt))
except Exception:
if preset.get('speechVoices'):
config['voices'] = _normalize_preset_voices(
@@ -998,12 +1848,15 @@ def generate_context_fingerprint(
screen = preset.get('screen', {})
webgl = preset.get('webgl', {})
else:
- # Fall back to BrowserForge synthetic generation
+ # Fall back to synthetic generation
fp = generate_fingerprint(os=os)
- config = from_browserforge(fp, ff_version)
+ config = from_fpgen(fp, ff_version)
- # Add seeds (BrowserForge doesn't generate these)
- config.setdefault('fonts:spacing_seed', randint(1, 4_294_967_295)) # nosec
+ # A fresh identity: every seeded draw below gets its own salt.
+ _salt = identity_salt()
+
+ # Add seeds (the generator doesn't produce these)
+ config.setdefault('fonts:spacing_seed', 0) # perturbation off; see utils.launch_options
config.setdefault('audio:seed', randint(1, 4_294_967_295)) # nosec
config.setdefault('canvas:seed', randint(1, 4_294_967_295)) # nosec
@@ -1018,14 +1871,14 @@ def generate_context_fingerprint(
# Add fonts (BrowserForge doesn't generate these)
if 'fonts' not in config:
try:
- config['fonts'] = _generate_random_font_subset(os_name)
+ config['fonts'] = _generate_random_font_subset(os_name, seed=identity_seed(config, _salt))
except Exception:
pass
# Add voices (BrowserForge doesn't generate these)
if 'voices' not in config:
try:
- config['voices'] = _generate_random_voice_subset(os_name)
+ config['voices'] = _generate_random_voice_subset(os_name, seed=identity_seed(config, _salt))
except Exception:
pass
@@ -1152,15 +2005,6 @@ def generate_context_fingerprint(
}
-@dataclass
-class ExtendedScreen(ScreenFingerprint):
- """
- An extended version of Browserforge's ScreenFingerprint class
- """
-
- screenY: Optional[int] = None
-
-
def _cast_to_properties(
camoufox_data: Dict[str, Any],
cast_enum: Dict[str, Any],
@@ -1182,6 +2026,14 @@ def _cast_to_properties(
if isinstance(data, dict):
_cast_to_properties(camoufox_data, type_key, data, ff_version)
continue
+ # fpgen carries header values as a list of the values seen for that
+ # header; a single one is the header itself, and the config wants the
+ # string. More than one is ambiguous, so take none of them.
+ if isinstance(data, list):
+ if len(data) == 1 and isinstance(data[0], str):
+ data = data[0]
+ else:
+ continue
# Fix values that are out of bounds
if type_key.startswith("screen.") and isinstance(data, int) and data < 0:
data = 0
@@ -1191,15 +2043,17 @@ def _cast_to_properties(
camoufox_data[type_key] = data
-def handle_screenXY(camoufox_data: Dict[str, Any], fp_screen: ScreenFingerprint) -> None:
+def handle_screenXY(camoufox_data: Dict[str, Any], fingerprint: Dict[str, Any]) -> None:
"""
- Helper method to set window.screenY based on Browserforge's screenX value.
+ Helper method to set window.screenY based on the generated screenX value.
"""
# Skip if manually provided
if 'window.screenY' in camoufox_data:
return
+ screen = fingerprint.get('screen') or {}
+ window = fingerprint.get('window') or {}
# Default screenX to 0 if not provided
- screenX = fp_screen.screenX
+ screenX = window.get('screenX')
if not screenX:
camoufox_data['window.screenX'] = 0
camoufox_data['window.screenY'] = 0
@@ -1210,8 +2064,8 @@ def handle_screenXY(camoufox_data: Dict[str, Any], fp_screen: ScreenFingerprint)
camoufox_data['window.screenY'] = screenX
return
- # Browserforge thinks the browser is windowed. # Randomly generate a screenY value.
- screenY = fp_screen.availHeight - fp_screen.outerHeight
+ # The generator thinks the browser is windowed. Randomly generate a screenY.
+ screenY = (screen.get('availHeight') or 0) - (window.get('outerHeight') or 0)
if screenY == 0:
camoufox_data['window.screenY'] = 0
elif screenY > 0:
@@ -1220,58 +2074,92 @@ def handle_screenXY(camoufox_data: Dict[str, Any], fp_screen: ScreenFingerprint)
camoufox_data['window.screenY'] = randrange(screenY, 0) # nosec
-def from_browserforge(fingerprint: Fingerprint, ff_version: Optional[str] = None) -> Dict[str, Any]:
+def from_fpgen(fingerprint: Dict[str, Any], ff_version: Optional[str] = None) -> Dict[str, Any]:
"""
- Converts a Browserforge fingerprint to a Camoufox config.
+ Converts an fpgen fingerprint to a Camoufox config.
"""
camoufox_data: Dict[str, Any] = {}
_cast_to_properties(
camoufox_data,
- cast_enum=BROWSERFORGE_DATA,
- bf_dict=asdict(fingerprint),
+ cast_enum=FPGEN_DATA,
+ bf_dict=fingerprint,
ff_version=ff_version,
)
- handle_screenXY(camoufox_data, fingerprint.screen)
+ handle_screenXY(camoufox_data, fingerprint)
return camoufox_data
-def handle_window_size(fp: Fingerprint, outer_width: int, outer_height: int) -> None:
+def handle_window_size(fp: Dict[str, Any], outer_width: int, outer_height: int) -> None:
"""
Helper method to set a custom outer window size, and center it in the screen
"""
- # Cast the screen to an ExtendedScreen
- fp.screen = ExtendedScreen(**asdict(fp.screen))
- sc = fp.screen
+ screen = fp.setdefault('screen', {})
+ window = fp.setdefault('window', {})
# Center the window on the screen
- sc.screenX += (sc.width - outer_width) // 2
- sc.screenY = (sc.height - outer_height) // 2
+ window['screenX'] = (window.get('screenX') or 0) + (
+ (screen.get('width') or outer_width) - outer_width
+ ) // 2
+ window['screenY'] = ((screen.get('height') or outer_height) - outer_height) // 2
# Update inner dimensions if set
- if sc.innerWidth:
- sc.innerWidth = max(outer_width - sc.outerWidth + sc.innerWidth, 0)
- if sc.innerHeight:
- sc.innerHeight = max(outer_height - sc.outerHeight + sc.innerHeight, 0)
+ if window.get('innerWidth'):
+ window['innerWidth'] = max(
+ outer_width - (window.get('outerWidth') or 0) + window['innerWidth'], 0
+ )
+ if window.get('innerHeight'):
+ window['innerHeight'] = max(
+ outer_height - (window.get('outerHeight') or 0) + window['innerHeight'], 0
+ )
# Set outer dimensions
- sc.outerWidth = outer_width
- sc.outerHeight = outer_height
+ window['outerWidth'] = outer_width
+ window['outerHeight'] = outer_height
-def generate_fingerprint(window: Optional[Tuple[int, int]] = None, **config) -> Fingerprint:
+def generate_fingerprint(
+ window: Optional[Tuple[int, int]] = None,
+ screen: Optional[Screen] = None,
+ os: Optional[Any] = None,
+ **conditions: Any,
+) -> Dict[str, Any]:
"""
- Generates a Firefox fingerprint with Browserforge.
+ Generates a Firefox fingerprint with fpgen.
+
+ `screen` bounds the generated screen; `window` overrides the outer window
+ size afterwards. `os` is Camoufox's name for the platform ('linux', 'macos',
+ 'windows', or several); anything else is passed to fpgen as a condition.
"""
+ if os:
+ names = [os] if isinstance(os, str) else list(os)
+ try:
+ resolved = [_FPGEN_OS[str(n).lower()] for n in names]
+ except KeyError as exc:
+ raise ValueError(f'Unknown OS for fingerprint generation: {exc.args[0]!r}') from None
+ # fpgen takes one value or a predicate, not a list of alternatives.
+ conditions['os'] = resolved[0] if len(resolved) == 1 else (lambda v: v in set(resolved))
+ screen_conditions = screen.as_conditions() if screen is not None else {}
+ try:
+ fingerprint = _generator().generate(browser='Firefox', **conditions, **screen_conditions)
+ except Exception as exc: # fpgen.exceptions.InvalidConstraints
+ if not screen_conditions or type(exc).__name__ != 'InvalidConstraints':
+ raise
+ # The screen bound is best-effort, as it was under BrowserForge, which
+ # dropped a constraint that filtered its pool empty instead of raising.
+ # It comes from the real display (get_screen_cons), and a display the
+ # pool has nothing to fit -- a 1x1 Xvfb, an unusually small panel --
+ # must not stop a fingerprint being generated. clamp_screen_to_display()
+ # still bounds the result afterwards.
+ fingerprint = _generator().generate(browser='Firefox', **conditions)
+
if window: # User-specified outer window size
- fingerprint = FP_GENERATOR.generate(**config)
handle_window_size(fingerprint, *window)
- return fingerprint
- return FP_GENERATOR.generate(**config)
+ return fingerprint
if __name__ == "__main__":
from pprint import pprint
fp = generate_fingerprint()
- pprint(from_browserforge(fp))
+ pprint(from_fpgen(fp))
diff --git a/pythonlib/camoufox/font-bases.json b/pythonlib/camoufox/font-bases.json
new file mode 100644
index 000000000..d08faf880
--- /dev/null
+++ b/pythonlib/camoufox/font-bases.json
@@ -0,0 +1,1916 @@
+{
+ "win": [
+ {
+ "id": "win11",
+ "weight": 1.0,
+ "fonts": [
+ "Arial",
+ "Arial Black",
+ "Bahnschrift",
+ "Calibri",
+ "Calibri Light",
+ "Cambria",
+ "Cambria Math",
+ "Candara",
+ "Candara Light",
+ "Comic Sans MS",
+ "Consolas",
+ "Constantia",
+ "Corbel",
+ "Corbel Light",
+ "Courier",
+ "Courier New",
+ "Ebrima",
+ "Franklin Gothic Medium",
+ "Gabriola",
+ "Gadugi",
+ "Georgia",
+ "Helvetica",
+ "Impact",
+ "Ink Free",
+ "Javanese Text",
+ "Leelawadee UI",
+ "Leelawadee UI Semilight",
+ "Lucida Console",
+ "Lucida Sans Unicode",
+ "MS Gothic",
+ "MS PGothic",
+ "MS Sans Serif",
+ "MS Serif",
+ "MS UI Gothic",
+ "MV Boli",
+ "Malgun Gothic",
+ "Malgun Gothic Semilight",
+ "Marlett",
+ "Microsoft Himalaya",
+ "Microsoft JhengHei",
+ "Microsoft JhengHei Light",
+ "Microsoft JhengHei UI",
+ "Microsoft JhengHei UI Light",
+ "Microsoft New Tai Lue",
+ "Microsoft PhagsPa",
+ "Microsoft Sans Serif",
+ "Microsoft Tai Le",
+ "Microsoft YaHei",
+ "Microsoft YaHei Light",
+ "Microsoft YaHei UI",
+ "Microsoft YaHei UI Light",
+ "Microsoft Yi Baiti",
+ "MingLiU-ExtB",
+ "MingLiU_HKSCS-ExtB",
+ "MingLiU_MSCS-ExtB",
+ "Mongolian Baiti",
+ "Myanmar Text",
+ "NSimSun",
+ "Nirmala Text",
+ "Nirmala Text Semilight",
+ "Nirmala UI",
+ "Nirmala UI Semilight",
+ "PMingLiU-ExtB",
+ "Palatino Linotype",
+ "Roman",
+ "Sans Serif Collection",
+ "Segoe Fluent Icons",
+ "Segoe MDL2 Assets",
+ "Segoe Print",
+ "Segoe Script",
+ "Segoe UI",
+ "Segoe UI Black",
+ "Segoe UI Emoji",
+ "Segoe UI Historic",
+ "Segoe UI Light",
+ "Segoe UI Semibold",
+ "Segoe UI Semilight",
+ "Segoe UI Symbol",
+ "Segoe UI Variable",
+ "Segoe UI Variable Display",
+ "Segoe UI Variable Small",
+ "Segoe UI Variable Text",
+ "SimSun",
+ "SimSun-ExtB",
+ "Sitka Banner",
+ "Sitka Display",
+ "Sitka Heading",
+ "Sitka Small",
+ "Sitka Subheading",
+ "Sitka Text",
+ "Small Fonts",
+ "Sylfaen",
+ "Symbol",
+ "Tahoma",
+ "Times",
+ "Times New Roman",
+ "Trebuchet MS",
+ "Twemoji Mozilla",
+ "Verdana",
+ "Webdings",
+ "Wingdings",
+ "Yu Gothic",
+ "Yu Gothic Light",
+ "Yu Gothic Medium",
+ "Yu Gothic UI",
+ "Yu Gothic UI Light",
+ "Yu Gothic UI Semibold",
+ "Yu Gothic UI Semilight",
+ "宋体",
+ "微軟正黑體",
+ "微軟正黑體 Light",
+ "微软雅黑",
+ "微软雅黑 Light",
+ "新宋体",
+ "新細明體-ExtB",
+ "游ゴシック",
+ "游ゴシック Light",
+ "游ゴシック Medium",
+ "細明體-ExtB",
+ "細明體_HKSCS-ExtB",
+ "細明體_MSCS-ExtB",
+ "맑은 고딕",
+ "맑은 고딕 Semilight",
+ "MS ゴシック",
+ "MS Pゴシック"
+ ]
+ }
+ ],
+ "mac": [
+ {
+ "id": "sonoma",
+ "weight": 0.2,
+ "fonts": [
+ "Academy Engraved LET",
+ "Al Bayan",
+ "Al Nile",
+ "Al Tarikh",
+ "American Typewriter",
+ "American Typewriter Semibold",
+ "Andale Mono",
+ "Apple Braille",
+ "Apple Chancery",
+ "Apple Color Emoji",
+ "Apple SD Gothic Neo",
+ "Apple SD Gothic Neo ExtraBold",
+ "Apple SD 산돌고딕 Neo",
+ "Apple Symbols",
+ "AppleGothic",
+ "AppleMyungjo",
+ "Arial",
+ "Arial Black",
+ "Arial Hebrew",
+ "Arial Hebrew Scholar",
+ "Arial Narrow",
+ "Arial Rounded MT Bold",
+ "Arial Unicode MS",
+ "Athelas",
+ "Avenir",
+ "Avenir Black",
+ "Avenir Black Oblique",
+ "Avenir Book",
+ "Avenir Heavy",
+ "Avenir Light",
+ "Avenir Medium",
+ "Avenir Next",
+ "Avenir Next Demi Bold",
+ "Avenir Next Heavy",
+ "Avenir Next Medium",
+ "Avenir Next Ultra Light",
+ "Ayuthaya",
+ "Baghdad",
+ "Bangla MN",
+ "Bangla Sangam MN",
+ "Baskerville",
+ "Beirut",
+ "Big Caslon",
+ "Bodoni 72",
+ "Bodoni 72 Oldstyle",
+ "Bodoni 72 Smallcaps",
+ "Bodoni Ornaments",
+ "Bradley Hand",
+ "Brush Script MT",
+ "Chalkboard",
+ "Chalkboard SE",
+ "Chalkduster",
+ "Charter",
+ "Charter Black",
+ "Cochin",
+ "Comic Sans MS",
+ "Copperplate",
+ "Corsiva Hebrew",
+ "Courier",
+ "Courier New",
+ "Czcionka systemowa",
+ "DIN Alternate",
+ "DIN Condensed",
+ "Damascus",
+ "DecoType Naskh",
+ "Devanagari MT",
+ "Devanagari Sangam MN",
+ "Didot",
+ "Diwan Kufi",
+ "Diwan Thuluth",
+ "Euphemia UCAS",
+ "Farah",
+ "Farisi",
+ "Font Sistem",
+ "Font de sistem",
+ "Font di sistema",
+ "Font sustava",
+ "Fonte do Sistema",
+ "Futura",
+ "Futura Bold",
+ "GB18030 Bitmap",
+ "Galvji",
+ "Geeza Pro",
+ "Geneva",
+ "Georgia",
+ "Gill Sans",
+ "Grantha Sangam MN",
+ "Gujarati MT",
+ "Gujarati Sangam MN",
+ "Gurmukhi MN",
+ "Gurmukhi MT",
+ "Gurmukhi Sangam MN",
+ "Heiti SC",
+ "Heiti TC",
+ "Heiti-간체",
+ "Heiti-번체",
+ "Helvetica",
+ "Helvetica Neue",
+ "Hiragino Kaku Gothic Pro",
+ "Hiragino Kaku Gothic Std",
+ "Hiragino Kaku Gothic StdN",
+ "Hiragino Maru Gothic Pro",
+ "Hiragino Maru Gothic ProN",
+ "Hiragino Maru Gothic ProN W4",
+ "Hiragino Mincho Pro",
+ "Hiragino Mincho ProN",
+ "Hiragino Mincho ProN W3",
+ "Hiragino Mincho ProN W6",
+ "Hiragino Sans",
+ "Hiragino Sans GB",
+ "Hiragino Sans GB W3",
+ "Hiragino Sans GB W6",
+ "Hiragino Sans W0",
+ "Hiragino Sans W1",
+ "Hiragino Sans W2",
+ "Hiragino Sans W3",
+ "Hiragino Sans W4",
+ "Hiragino Sans W5",
+ "Hiragino Sans W6",
+ "Hiragino Sans W7",
+ "Hiragino Sans W8",
+ "Hiragino Sans W9",
+ "Hoefler Text",
+ "Hoefler Text Ornaments",
+ "ITF Devanagari",
+ "ITF Devanagari Marathi",
+ "Impact",
+ "InaiMathi",
+ "InaiMathi Bold",
+ "Iowan Old Style",
+ "Järjestelmäfontti",
+ "Kailasa",
+ "Kannada MN",
+ "Kannada Sangam MN",
+ "Kefa",
+ "Khmer MN",
+ "Khmer Sangam MN",
+ "Kohinoor Bangla",
+ "Kohinoor Devanagari",
+ "Kohinoor Devanagari Medium",
+ "Kohinoor Gujarati",
+ "Kohinoor Telugu",
+ "Kokonor",
+ "Krungthep",
+ "KufiStandardGK",
+ "Lao MN",
+ "Lao Sangam MN",
+ "Lucida Grande",
+ "Luminari",
+ "Malayalam MN",
+ "Malayalam Sangam MN",
+ "Marker Felt",
+ "Menlo",
+ "Microsoft Sans Serif",
+ "Mishafi",
+ "Mishafi Gold",
+ "Monaco",
+ "Mshtakan",
+ "Mukta Mahee",
+ "MuktaMahee Bold",
+ "MuktaMahee ExtraBold",
+ "MuktaMahee ExtraLight",
+ "MuktaMahee Light",
+ "MuktaMahee Medium",
+ "MuktaMahee Regular",
+ "MuktaMahee SemiBold",
+ "Muna",
+ "Myanmar MN",
+ "Myanmar Sangam MN",
+ "Nadeem",
+ "New Peninim MT",
+ "Noteworthy",
+ "Noto Nastaliq Urdu",
+ "Noto Sans Adlam",
+ "Noto Sans Armenian",
+ "Noto Sans Armenian Blk",
+ "Noto Sans Armenian ExtBd",
+ "Noto Sans Armenian ExtLt",
+ "Noto Sans Armenian Light",
+ "Noto Sans Armenian Med",
+ "Noto Sans Armenian SemBd",
+ "Noto Sans Armenian Thin",
+ "Noto Sans Avestan",
+ "Noto Sans Bamum",
+ "Noto Sans Bassa Vah",
+ "Noto Sans Batak",
+ "Noto Sans Bhaiksuki",
+ "Noto Sans Brahmi",
+ "Noto Sans Buginese",
+ "Noto Sans Buhid",
+ "Noto Sans CanAborig",
+ "Noto Sans Canadian Aboriginal",
+ "Noto Sans Canadian Aboriginal Regular",
+ "Noto Sans Carian",
+ "Noto Sans CaucAlban",
+ "Noto Sans Caucasian Albanian",
+ "Noto Sans Chakma",
+ "Noto Sans Cham",
+ "Noto Sans Coptic",
+ "Noto Sans Cuneiform",
+ "Noto Sans Cypriot",
+ "Noto Sans Duployan",
+ "Noto Sans EgyptHiero",
+ "Noto Sans Egyptian Hieroglyphs",
+ "Noto Sans Elbasan",
+ "Noto Sans Glagolitic",
+ "Noto Sans Gothic",
+ "Noto Sans Gunjala Gondi",
+ "Noto Sans Hanifi Rohingya",
+ "Noto Sans HanifiRohg",
+ "Noto Sans Hanunoo",
+ "Noto Sans Hatran",
+ "Noto Sans ImpAramaic",
+ "Noto Sans Imperial Aramaic",
+ "Noto Sans InsPahlavi",
+ "Noto Sans InsParthi",
+ "Noto Sans Inscriptional Pahlavi",
+ "Noto Sans Inscriptional Parthian",
+ "Noto Sans Javanese",
+ "Noto Sans Kaithi",
+ "Noto Sans Kannada",
+ "Noto Sans Kannada Black",
+ "Noto Sans Kannada ExtraBold",
+ "Noto Sans Kannada ExtraLight",
+ "Noto Sans Kannada Light",
+ "Noto Sans Kannada Medium",
+ "Noto Sans Kannada SemiBold",
+ "Noto Sans Kannada Thin",
+ "Noto Sans Kayah Li",
+ "Noto Sans Kharoshthi",
+ "Noto Sans Khojki",
+ "Noto Sans Khudawadi",
+ "Noto Sans Lepcha",
+ "Noto Sans Limbu",
+ "Noto Sans Linear A",
+ "Noto Sans Linear B",
+ "Noto Sans Lisu",
+ "Noto Sans Lycian",
+ "Noto Sans Lydian",
+ "Noto Sans Mahajani",
+ "Noto Sans Mandaic",
+ "Noto Sans Manichaean",
+ "Noto Sans Marchen",
+ "Noto Sans Masaram Gondi",
+ "Noto Sans Meetei Mayek",
+ "Noto Sans Mende Kikakui",
+ "Noto Sans Meroitic",
+ "Noto Sans Miao",
+ "Noto Sans Modi",
+ "Noto Sans Mongolian",
+ "Noto Sans Mro",
+ "Noto Sans Multani",
+ "Noto Sans Myanmar",
+ "Noto Sans Myanmar Blk",
+ "Noto Sans Myanmar ExtBd",
+ "Noto Sans Myanmar ExtLt",
+ "Noto Sans Myanmar Light",
+ "Noto Sans Myanmar Med",
+ "Noto Sans Myanmar SemBd",
+ "Noto Sans Myanmar Thin",
+ "Noto Sans NKo",
+ "Noto Sans Nabataean",
+ "Noto Sans New Tai Lue",
+ "Noto Sans Newa",
+ "Noto Sans Ol Chiki",
+ "Noto Sans Old Hungarian",
+ "Noto Sans Old Italic",
+ "Noto Sans Old North Arabian",
+ "Noto Sans Old Permic",
+ "Noto Sans Old Persian",
+ "Noto Sans Old South Arabian",
+ "Noto Sans Old Turkic",
+ "Noto Sans OldHung",
+ "Noto Sans OldNorArab",
+ "Noto Sans OldSouArab",
+ "Noto Sans Oriya",
+ "Noto Sans Osage",
+ "Noto Sans Osmanya",
+ "Noto Sans Pahawh Hmong",
+ "Noto Sans Palmyrene",
+ "Noto Sans Pau Cin Hau",
+ "Noto Sans PhagsPa",
+ "Noto Sans Phoenician",
+ "Noto Sans PsaPahlavi",
+ "Noto Sans Psalter Pahlavi",
+ "Noto Sans Rejang",
+ "Noto Sans Samaritan",
+ "Noto Sans Saurashtra",
+ "Noto Sans Sharada",
+ "Noto Sans Siddham",
+ "Noto Sans Sora Sompeng",
+ "Noto Sans SoraSomp",
+ "Noto Sans Sundanese",
+ "Noto Sans Syloti Nagri",
+ "Noto Sans Syriac",
+ "Noto Sans Tagalog",
+ "Noto Sans Tagbanwa",
+ "Noto Sans Tai Le",
+ "Noto Sans Tai Tham",
+ "Noto Sans Tai Viet",
+ "Noto Sans Takri",
+ "Noto Sans Thaana",
+ "Noto Sans Tifinagh",
+ "Noto Sans Tirhuta",
+ "Noto Sans Ugaritic",
+ "Noto Sans Vai",
+ "Noto Sans Wancho",
+ "Noto Sans Warang Citi",
+ "Noto Sans Yi",
+ "Noto Sans Zawgyi",
+ "Noto Sans Zawgyi Blk",
+ "Noto Sans Zawgyi ExtBd",
+ "Noto Sans Zawgyi ExtLt",
+ "Noto Sans Zawgyi Light",
+ "Noto Sans Zawgyi Med",
+ "Noto Sans Zawgyi SemBd",
+ "Noto Sans Zawgyi Thin",
+ "Noto Serif Ahom",
+ "Noto Serif Balinese",
+ "Noto Serif Hmong Nyiakeng",
+ "Noto Serif Myanmar",
+ "Noto Serif Myanmar Blk",
+ "Noto Serif Myanmar ExtBd",
+ "Noto Serif Myanmar ExtLt",
+ "Noto Serif Myanmar Light",
+ "Noto Serif Myanmar Med",
+ "Noto Serif Myanmar SemBd",
+ "Noto Serif Myanmar Thin",
+ "Noto Serif Yezidi",
+ "Optima",
+ "Oriya MN",
+ "Oriya Sangam MN",
+ "PT Mono",
+ "PT Sans",
+ "PT Sans Caption",
+ "PT Sans Narrow",
+ "PT Serif",
+ "PT Serif Caption",
+ "Palatino",
+ "Papyrus",
+ "Party LET",
+ "Phosphate",
+ "Phông chữ Hệ thống",
+ "PingFang HK",
+ "PingFang SC",
+ "PingFang TC",
+ "Plantagenet Cherokee",
+ "Police système",
+ "Raanana",
+ "Rendszerbetűtípus",
+ "Rockwell",
+ "STIX Two Math",
+ "STIX Two Math Regular",
+ "STIX Two Text",
+ "STIX Two Text Regular",
+ "STIXGeneral",
+ "STIXIntegralsD",
+ "STIXIntegralsSm",
+ "STIXIntegralsUp",
+ "STIXIntegralsUpD",
+ "STIXIntegralsUpSm",
+ "STIXNonUnicode",
+ "STIXSizeFiveSym",
+ "STIXSizeFourSym",
+ "STIXSizeOneSym",
+ "STIXSizeThreeSym",
+ "STIXSizeTwoSym",
+ "STIXVariants",
+ "STSong",
+ "Sana",
+ "Sathu",
+ "Savoye LET",
+ "Shree Devanagari 714",
+ "SignPainter",
+ "SignPainter-HouseScript",
+ "Silom",
+ "Sinhala MN",
+ "Sinhala Sangam MN",
+ "Sistem Fontu",
+ "Skia",
+ "Snell Roundhand",
+ "Songti SC",
+ "Songti TC",
+ "Sukhumvit Set",
+ "Superclarendon",
+ "Symbol",
+ "Systeemlettertype",
+ "System Font",
+ "Systemschrift",
+ "Systemskrift",
+ "Systemtypsnitt",
+ "Systémové písmo",
+ "Tahoma",
+ "Tamil MN",
+ "Tamil Sangam MN",
+ "Telugu MN",
+ "Telugu Sangam MN",
+ "Thonburi",
+ "Times",
+ "Times New Roman",
+ "Tipo de letra del sistema",
+ "Tipo de letra do sistema",
+ "Tipus de lletra del sistema",
+ "Trattatello",
+ "Trebuchet MS",
+ "Verdana",
+ "Waseem",
+ "Webdings",
+ "Wingdings",
+ "Wingdings 2",
+ "Wingdings 3",
+ "Zapf Dingbats",
+ "Zapfino",
+ "Γραμματοσειρά συστήματος",
+ "Системний шрифт",
+ "Системный шрифт",
+ "גופן מערכת",
+ "البيان",
+ "التاريخ",
+ "النيل",
+ "بغداد",
+ "بيروت",
+ "جيزة",
+ "خط النظام",
+ "دمشق",
+ "ديوان ثلث",
+ "ديوان كوفي",
+ "صنعاء",
+ "فارسي",
+ "فرح",
+ "كوفي",
+ "منى",
+ "مِصحفي",
+ "مِصحفي ذهبي",
+ "نديم",
+ "نسخ",
+ "وسيم",
+ "कोहिनूर देवनागरी",
+ "แบบอักษรระบบ",
+ "システムフォント",
+ "ヒラギノ丸ゴ Pro",
+ "ヒラギノ丸ゴ Pro W4",
+ "ヒラギノ丸ゴ ProN",
+ "ヒラギノ丸ゴ ProN W4",
+ "ヒラギノ明朝 Pro",
+ "ヒラギノ明朝 Pro W3",
+ "ヒラギノ明朝 Pro W6",
+ "ヒラギノ明朝 ProN",
+ "ヒラギノ明朝 ProN W3",
+ "ヒラギノ明朝 ProN W6",
+ "ヒラギノ角ゴ Pro",
+ "ヒラギノ角ゴ Pro W3",
+ "ヒラギノ角ゴ Pro W6",
+ "ヒラギノ角ゴ ProN",
+ "ヒラギノ角ゴ ProN W3",
+ "ヒラギノ角ゴ ProN W6",
+ "ヒラギノ角ゴ Std",
+ "ヒラギノ角ゴ Std W8",
+ "ヒラギノ角ゴ StdN",
+ "ヒラギノ角ゴ StdN W8",
+ "ヒラギノ角ゴ 簡体中文",
+ "ヒラギノ角ゴ 簡体中文 W3",
+ "ヒラギノ角ゴ 簡体中文 W6",
+ "ヒラギノ角ゴシック",
+ "ヒラギノ角ゴシック W0",
+ "ヒラギノ角ゴシック W1",
+ "ヒラギノ角ゴシック W2",
+ "ヒラギノ角ゴシック W3",
+ "ヒラギノ角ゴシック W4",
+ "ヒラギノ角ゴシック W5",
+ "ヒラギノ角ゴシック W6",
+ "ヒラギノ角ゴシック W7",
+ "ヒラギノ角ゴシック W8",
+ "ヒラギノ角ゴシック W9",
+ "冬青黑体简体中文",
+ "冬青黑体简体中文 W3",
+ "冬青黑体简体中文 W6",
+ "冬青黑體簡體中文",
+ "冬青黑體簡體中文 W3",
+ "冬青黑體簡體中文 W6",
+ "宋体-简",
+ "宋体-繁",
+ "宋體-簡",
+ "宋體-繁",
+ "系統字體",
+ "系统字体",
+ "苹方-港",
+ "苹方-简",
+ "苹方-繁",
+ "蘋方-港",
+ "蘋方-簡",
+ "蘋方-繁",
+ "黑体-简",
+ "黑体-繁",
+ "黑體-簡",
+ "黑體-繁",
+ "黒体-簡",
+ "黒体-繁",
+ "시스템 서체"
+ ]
+ },
+ {
+ "id": "tahoe26",
+ "weight": 0.65,
+ "fonts": [
+ "Academy Engraved LET",
+ "Al Bayan",
+ "Al Nile",
+ "Al Tarikh",
+ "American Typewriter",
+ "Andale Mono",
+ "Apple Braille",
+ "Apple Chancery",
+ "Apple Color Emoji",
+ "Apple SD Gothic Neo",
+ "Apple Symbols",
+ "AppleGothic",
+ "AppleMyungjo",
+ "Arial",
+ "Arial Black",
+ "Arial Hebrew",
+ "Arial Hebrew Scholar",
+ "Arial Narrow",
+ "Arial Rounded MT Bold",
+ "Arial Unicode MS",
+ "Athelas",
+ "Avenir",
+ "Avenir Black",
+ "Avenir Black Oblique",
+ "Avenir Book",
+ "Avenir Heavy",
+ "Avenir Light",
+ "Avenir Medium",
+ "Avenir Next",
+ "Avenir Next Demi Bold",
+ "Avenir Next Heavy",
+ "Avenir Next Medium",
+ "Avenir Next Ultra Light",
+ "Ayuthaya",
+ "Baghdad",
+ "Bangla MN",
+ "Bangla Sangam MN",
+ "Baskerville",
+ "Beirut",
+ "Big Caslon",
+ "Bodoni 72",
+ "Bodoni 72 Oldstyle",
+ "Bodoni 72 Smallcaps",
+ "Bodoni Ornaments",
+ "Bradley Hand",
+ "Brush Script MT",
+ "Chalkboard",
+ "Chalkboard SE",
+ "Chalkduster",
+ "Charter",
+ "Charter Black",
+ "Cochin",
+ "Comic Sans MS",
+ "Copperplate",
+ "Corsiva Hebrew",
+ "Courier",
+ "Courier New",
+ "DIN Alternate",
+ "DIN Condensed",
+ "Damascus",
+ "DecoType Naskh",
+ "Devanagari MT",
+ "Devanagari Sangam MN",
+ "Didot",
+ "Diwan Kufi",
+ "Diwan Thuluth",
+ "Euphemia UCAS",
+ "Farah",
+ "Farisi",
+ "Futura",
+ "GB18030 Bitmap",
+ "Galvji",
+ "Geeza Pro",
+ "Geneva",
+ "Georgia",
+ "Gill Sans",
+ "Grantha Sangam MN",
+ "Gujarati MT",
+ "Gujarati Sangam MN",
+ "Gurmukhi MN",
+ "Gurmukhi MT",
+ "Gurmukhi Sangam MN",
+ "Heiti SC",
+ "Heiti TC",
+ "Helvetica",
+ "Helvetica Neue",
+ "Hiragino Kaku Gothic Pro",
+ "Hiragino Kaku Gothic Std",
+ "Hiragino Kaku Gothic StdN",
+ "Hiragino Maru Gothic Pro",
+ "Hiragino Maru Gothic ProN",
+ "Hiragino Maru Gothic ProN W4",
+ "Hiragino Mincho Pro",
+ "Hiragino Mincho ProN",
+ "Hiragino Mincho ProN W3",
+ "Hiragino Mincho ProN W6",
+ "Hiragino Sans",
+ "Hiragino Sans GB",
+ "Hiragino Sans GB W3",
+ "Hiragino Sans GB W6",
+ "Hiragino Sans W0",
+ "Hiragino Sans W1",
+ "Hiragino Sans W2",
+ "Hiragino Sans W3",
+ "Hiragino Sans W4",
+ "Hiragino Sans W5",
+ "Hiragino Sans W6",
+ "Hiragino Sans W7",
+ "Hiragino Sans W8",
+ "Hiragino Sans W9",
+ "Hoefler Text",
+ "Hoefler Text Ornaments",
+ "ITF Devanagari",
+ "ITF Devanagari Marathi",
+ "Impact",
+ "InaiMathi",
+ "Iowan Old Style",
+ "Kailasa",
+ "Kannada MN",
+ "Kannada Sangam MN",
+ "Khmer MN",
+ "Khmer Sangam MN",
+ "Kohinoor Bangla",
+ "Kohinoor Devanagari",
+ "Kohinoor Devanagari Medium",
+ "Kohinoor Gujarati",
+ "Kohinoor Telugu",
+ "Kokonor",
+ "Krungthep",
+ "KufiStandardGK",
+ "Lao MN",
+ "Lao Sangam MN",
+ "Lucida Grande",
+ "Luminari",
+ "Malayalam MN",
+ "Malayalam Sangam MN",
+ "Marker Felt",
+ "Menlo",
+ "Microsoft Sans Serif",
+ "Mishafi",
+ "Mishafi Gold",
+ "Monaco",
+ "Mshtakan",
+ "MuktaMahee Bold",
+ "MuktaMahee ExtraBold",
+ "MuktaMahee ExtraLight",
+ "MuktaMahee Light",
+ "MuktaMahee Medium",
+ "MuktaMahee Regular",
+ "MuktaMahee SemiBold",
+ "Muna",
+ "Myanmar MN",
+ "Myanmar Sangam MN",
+ "Nadeem",
+ "New Peninim MT",
+ "Noteworthy",
+ "Noto Nastaliq Urdu",
+ "Noto Sans Adlam",
+ "Noto Sans Armenian",
+ "Noto Sans Armenian Blk",
+ "Noto Sans Armenian ExtBd",
+ "Noto Sans Armenian ExtLt",
+ "Noto Sans Armenian Light",
+ "Noto Sans Armenian Med",
+ "Noto Sans Armenian SemBd",
+ "Noto Sans Armenian Thin",
+ "Noto Sans Avestan",
+ "Noto Sans Bamum",
+ "Noto Sans Bassa Vah",
+ "Noto Sans Batak",
+ "Noto Sans Bhaiksuki",
+ "Noto Sans Brahmi",
+ "Noto Sans Buginese",
+ "Noto Sans Buhid",
+ "Noto Sans CanAborig",
+ "Noto Sans Carian",
+ "Noto Sans CaucAlban",
+ "Noto Sans Chakma",
+ "Noto Sans Cham",
+ "Noto Sans Coptic",
+ "Noto Sans Cuneiform",
+ "Noto Sans Cypriot",
+ "Noto Sans Duployan",
+ "Noto Sans EgyptHiero",
+ "Noto Sans Elbasan",
+ "Noto Sans Glagolitic",
+ "Noto Sans Gothic",
+ "Noto Sans Gunjala Gondi",
+ "Noto Sans HanifiRohg",
+ "Noto Sans Hanunoo",
+ "Noto Sans Hatran",
+ "Noto Sans ImpAramaic",
+ "Noto Sans InsPahlavi",
+ "Noto Sans InsParthi",
+ "Noto Sans Javanese",
+ "Noto Sans Kaithi",
+ "Noto Sans Kannada",
+ "Noto Sans Kannada Black",
+ "Noto Sans Kannada ExtraBold",
+ "Noto Sans Kannada ExtraLight",
+ "Noto Sans Kannada Light",
+ "Noto Sans Kannada Medium",
+ "Noto Sans Kannada SemiBold",
+ "Noto Sans Kannada Thin",
+ "Noto Sans Kayah Li",
+ "Noto Sans Kharoshthi",
+ "Noto Sans Khojki",
+ "Noto Sans Khudawadi",
+ "Noto Sans Lepcha",
+ "Noto Sans Limbu",
+ "Noto Sans Linear A",
+ "Noto Sans Linear B",
+ "Noto Sans Lisu",
+ "Noto Sans Lycian",
+ "Noto Sans Lydian",
+ "Noto Sans Mahajani",
+ "Noto Sans Mandaic",
+ "Noto Sans Manichaean",
+ "Noto Sans Marchen",
+ "Noto Sans Masaram Gondi",
+ "Noto Sans Mende Kikakui",
+ "Noto Sans Meroitic",
+ "Noto Sans Miao",
+ "Noto Sans Modi",
+ "Noto Sans Mongolian",
+ "Noto Sans Mro",
+ "Noto Sans Multani",
+ "Noto Sans Myanmar",
+ "Noto Sans Myanmar Blk",
+ "Noto Sans Myanmar ExtBd",
+ "Noto Sans Myanmar ExtLt",
+ "Noto Sans Myanmar Light",
+ "Noto Sans Myanmar Med",
+ "Noto Sans Myanmar SemBd",
+ "Noto Sans Myanmar Thin",
+ "Noto Sans NKo",
+ "Noto Sans Nabataean",
+ "Noto Sans Newa",
+ "Noto Sans Ol Chiki",
+ "Noto Sans Old Italic",
+ "Noto Sans Old Permic",
+ "Noto Sans Old Turkic",
+ "Noto Sans OldHung",
+ "Noto Sans OldNorArab",
+ "Noto Sans OldSouArab",
+ "Noto Sans Oriya",
+ "Noto Sans Osage",
+ "Noto Sans Osmanya",
+ "Noto Sans Pahawh Hmong",
+ "Noto Sans Palmyrene",
+ "Noto Sans PhagsPa",
+ "Noto Sans Phoenician",
+ "Noto Sans PsaPahlavi",
+ "Noto Sans Rejang",
+ "Noto Sans Samaritan",
+ "Noto Sans Saurashtra",
+ "Noto Sans Sharada",
+ "Noto Sans Siddham",
+ "Noto Sans SoraSomp",
+ "Noto Sans Sundanese",
+ "Noto Sans Syloti Nagri",
+ "Noto Sans Syriac",
+ "Noto Sans Tagalog",
+ "Noto Sans Tagbanwa",
+ "Noto Sans Tai Le",
+ "Noto Sans Tai Tham",
+ "Noto Sans Tai Viet",
+ "Noto Sans Takri",
+ "Noto Sans Thaana",
+ "Noto Sans Tifinagh",
+ "Noto Sans Tirhuta",
+ "Noto Sans Ugaritic",
+ "Noto Sans Vai",
+ "Noto Sans Wancho",
+ "Noto Sans Yi",
+ "Noto Sans Zawgyi",
+ "Noto Sans Zawgyi Blk",
+ "Noto Sans Zawgyi ExtBd",
+ "Noto Sans Zawgyi ExtLt",
+ "Noto Sans Zawgyi Light",
+ "Noto Sans Zawgyi Med",
+ "Noto Sans Zawgyi SemBd",
+ "Noto Sans Zawgyi Thin",
+ "Noto Serif Ahom",
+ "Noto Serif Balinese",
+ "Noto Serif Hmong Nyiakeng",
+ "Noto Serif Myanmar",
+ "Noto Serif Myanmar Blk",
+ "Noto Serif Myanmar ExtBd",
+ "Noto Serif Myanmar ExtLt",
+ "Noto Serif Myanmar Light",
+ "Noto Serif Myanmar Med",
+ "Noto Serif Myanmar SemBd",
+ "Noto Serif Myanmar Thin",
+ "Noto Serif Yezidi",
+ "Optima",
+ "Oriya MN",
+ "Oriya Sangam MN",
+ "PT Mono",
+ "PT Sans",
+ "PT Sans Caption",
+ "PT Sans Narrow",
+ "PT Serif",
+ "PT Serif Caption",
+ "Palatino",
+ "Papyrus",
+ "Party LET",
+ "Phosphate",
+ "PingFang HK",
+ "PingFang SC",
+ "PingFang TC",
+ "Plantagenet Cherokee",
+ "Raanana",
+ "Rockwell",
+ "STIX Two Math",
+ "STIX Two Text",
+ "STIXGeneral",
+ "STIXIntegralsD",
+ "STIXIntegralsSm",
+ "STIXIntegralsUp",
+ "STIXIntegralsUpD",
+ "STIXIntegralsUpSm",
+ "STIXNonUnicode",
+ "STIXSizeFiveSym",
+ "STIXSizeFourSym",
+ "STIXSizeOneSym",
+ "STIXSizeThreeSym",
+ "STIXSizeTwoSym",
+ "STIXVariants",
+ "STSong",
+ "Sana",
+ "Sathu",
+ "Savoye LET",
+ "Shree Devanagari 714",
+ "SignPainter-HouseScript",
+ "Silom",
+ "Sinhala MN",
+ "Sinhala Sangam MN",
+ "Skia",
+ "Snell Roundhand",
+ "Songti SC",
+ "Songti TC",
+ "Sukhumvit Set",
+ "Superclarendon",
+ "Symbol",
+ "System Font",
+ "Tahoma",
+ "Tamil MN",
+ "Tamil Sangam MN",
+ "Telugu MN",
+ "Telugu Sangam MN",
+ "Thonburi",
+ "Times",
+ "Times New Roman",
+ "Trattatello",
+ "Trebuchet MS",
+ "Verdana",
+ "Waseem",
+ "Webdings",
+ "Wingdings",
+ "Wingdings 2",
+ "Wingdings 3",
+ "Zapf Dingbats",
+ "Zapfino"
+ ]
+ },
+ {
+ "id": "macos27",
+ "weight": 0.15,
+ "fonts": [
+ "Academy Engraved LET",
+ "Al Bayan",
+ "Al Nile",
+ "Al Tarikh",
+ "American Typewriter",
+ "Andale Mono",
+ "Apple Braille",
+ "Apple Chancery",
+ "Apple Color Emoji",
+ "Apple SD Gothic Neo",
+ "Apple Symbols",
+ "AppleGothic",
+ "AppleMyungjo",
+ "Arial",
+ "Arial Black",
+ "Arial Hebrew",
+ "Arial Hebrew Scholar",
+ "Arial Narrow",
+ "Arial Rounded MT Bold",
+ "Arial Unicode MS",
+ "Athelas",
+ "Avenir",
+ "Avenir Black",
+ "Avenir Black Oblique",
+ "Avenir Book",
+ "Avenir Heavy",
+ "Avenir Light",
+ "Avenir Medium",
+ "Avenir Next",
+ "Avenir Next Demi Bold",
+ "Avenir Next Heavy",
+ "Avenir Next Medium",
+ "Avenir Next Ultra Light",
+ "Ayuthaya",
+ "Baghdad",
+ "Bangla MN",
+ "Bangla Sangam MN",
+ "Baskerville",
+ "Beirut",
+ "Big Caslon",
+ "Bodoni 72",
+ "Bodoni 72 Oldstyle",
+ "Bodoni 72 Smallcaps",
+ "Bodoni Ornaments",
+ "Bradley Hand",
+ "Brush Script MT",
+ "Chalkboard",
+ "Chalkboard SE",
+ "Chalkduster",
+ "Charter",
+ "Charter Black",
+ "Cochin",
+ "Comic Sans MS",
+ "Copperplate",
+ "Corsiva Hebrew",
+ "Courier",
+ "Courier New",
+ "DIN Alternate",
+ "DIN Condensed",
+ "Damascus",
+ "DecoType Naskh",
+ "Devanagari MT",
+ "Devanagari Sangam MN",
+ "Didot",
+ "Diwan Kufi",
+ "Diwan Thuluth",
+ "Euphemia UCAS",
+ "Farah",
+ "Farisi",
+ "Futura",
+ "GB18030 Bitmap",
+ "Galvji",
+ "Geeza Pro",
+ "Geneva",
+ "Georgia",
+ "Gill Sans",
+ "Grantha Sangam MN",
+ "Gujarati MT",
+ "Gujarati Sangam MN",
+ "Gurmukhi MN",
+ "Gurmukhi MT",
+ "Gurmukhi Sangam MN",
+ "Heiti SC",
+ "Heiti TC",
+ "Helvetica",
+ "Helvetica Neue",
+ "Hiragino Kaku Gothic Pro",
+ "Hiragino Kaku Gothic Std",
+ "Hiragino Kaku Gothic StdN",
+ "Hiragino Maru Gothic Pro",
+ "Hiragino Maru Gothic ProN",
+ "Hiragino Maru Gothic ProN W4",
+ "Hiragino Mincho Pro",
+ "Hiragino Mincho ProN",
+ "Hiragino Mincho ProN W3",
+ "Hiragino Mincho ProN W6",
+ "Hiragino Sans",
+ "Hiragino Sans GB",
+ "Hiragino Sans GB W3",
+ "Hiragino Sans GB W6",
+ "Hiragino Sans W0",
+ "Hiragino Sans W1",
+ "Hiragino Sans W2",
+ "Hiragino Sans W3",
+ "Hiragino Sans W4",
+ "Hiragino Sans W5",
+ "Hiragino Sans W6",
+ "Hiragino Sans W7",
+ "Hiragino Sans W8",
+ "Hiragino Sans W9",
+ "Hoefler Text",
+ "Hoefler Text Ornaments",
+ "ITF Devanagari",
+ "ITF Devanagari Marathi",
+ "Impact",
+ "InaiMathi",
+ "Iowan Old Style",
+ "Kailasa",
+ "Kannada MN",
+ "Kannada Sangam MN",
+ "Khmer MN",
+ "Khmer Sangam MN",
+ "Kohinoor Bangla",
+ "Kohinoor Devanagari",
+ "Kohinoor Gujarati",
+ "Kohinoor Telugu",
+ "Kokonor",
+ "Krungthep",
+ "KufiStandardGK",
+ "Lao MN",
+ "Lao Sangam MN",
+ "Lucida Grande",
+ "Luminari",
+ "Malayalam MN",
+ "Malayalam Sangam MN",
+ "Marker Felt",
+ "Menlo",
+ "Microsoft Sans Serif",
+ "Mishafi",
+ "Mishafi Gold",
+ "Monaco",
+ "Mshtakan",
+ "MuktaMahee Bold",
+ "MuktaMahee ExtraBold",
+ "MuktaMahee ExtraLight",
+ "MuktaMahee Light",
+ "MuktaMahee Medium",
+ "MuktaMahee Regular",
+ "MuktaMahee SemiBold",
+ "Muna",
+ "Myanmar MN",
+ "Myanmar Sangam MN",
+ "Nadeem",
+ "New Peninim MT",
+ "Noteworthy",
+ "Noto Nastaliq Urdu",
+ "Noto Sans Adlam",
+ "Noto Sans Armenian",
+ "Noto Sans Armenian Blk",
+ "Noto Sans Armenian ExtBd",
+ "Noto Sans Armenian ExtLt",
+ "Noto Sans Armenian Light",
+ "Noto Sans Armenian Med",
+ "Noto Sans Armenian SemBd",
+ "Noto Sans Armenian Thin",
+ "Noto Sans Avestan",
+ "Noto Sans Bamum",
+ "Noto Sans Bassa Vah",
+ "Noto Sans Batak",
+ "Noto Sans Bhaiksuki",
+ "Noto Sans Buginese",
+ "Noto Sans Buhid",
+ "Noto Sans Carian",
+ "Noto Sans CaucAlban",
+ "Noto Sans Chakma",
+ "Noto Sans Cham",
+ "Noto Sans Coptic",
+ "Noto Sans Cuneiform",
+ "Noto Sans Cypriot",
+ "Noto Sans Duployan",
+ "Noto Sans EgyptHiero",
+ "Noto Sans Elbasan",
+ "Noto Sans Glagolitic",
+ "Noto Sans Gothic",
+ "Noto Sans Gunjala Gondi",
+ "Noto Sans HanifiRohg",
+ "Noto Sans Hanunoo",
+ "Noto Sans Hatran",
+ "Noto Sans ImpAramaic",
+ "Noto Sans InsPahlavi",
+ "Noto Sans InsParthi",
+ "Noto Sans Javanese",
+ "Noto Sans Kaithi",
+ "Noto Sans Kannada",
+ "Noto Sans Kannada Black",
+ "Noto Sans Kannada ExtraBold",
+ "Noto Sans Kannada ExtraLight",
+ "Noto Sans Kannada Light",
+ "Noto Sans Kannada Medium",
+ "Noto Sans Kannada SemiBold",
+ "Noto Sans Kannada Thin",
+ "Noto Sans Kayah Li",
+ "Noto Sans Kharoshthi",
+ "Noto Sans Khojki",
+ "Noto Sans Khudawadi",
+ "Noto Sans Lepcha",
+ "Noto Sans Limbu",
+ "Noto Sans Linear A",
+ "Noto Sans Linear B",
+ "Noto Sans Lisu",
+ "Noto Sans Lycian",
+ "Noto Sans Lydian",
+ "Noto Sans Mahajani",
+ "Noto Sans Mandaic",
+ "Noto Sans Manichaean",
+ "Noto Sans Marchen",
+ "Noto Sans Masaram Gondi",
+ "Noto Sans Mende Kikakui",
+ "Noto Sans Meroitic",
+ "Noto Sans Miao",
+ "Noto Sans Modi",
+ "Noto Sans Mongolian",
+ "Noto Sans Mro",
+ "Noto Sans Multani",
+ "Noto Sans Myanmar",
+ "Noto Sans Myanmar Blk",
+ "Noto Sans Myanmar ExtBd",
+ "Noto Sans Myanmar ExtLt",
+ "Noto Sans Myanmar Light",
+ "Noto Sans Myanmar Med",
+ "Noto Sans Myanmar SemBd",
+ "Noto Sans Myanmar Thin",
+ "Noto Sans NKo",
+ "Noto Sans Nabataean",
+ "Noto Sans Newa",
+ "Noto Sans Ol Chiki",
+ "Noto Sans Old Italic",
+ "Noto Sans Old Permic",
+ "Noto Sans Old Turkic",
+ "Noto Sans OldHung",
+ "Noto Sans OldNorArab",
+ "Noto Sans OldSouArab",
+ "Noto Sans Oriya",
+ "Noto Sans Osage",
+ "Noto Sans Osmanya",
+ "Noto Sans Pahawh Hmong",
+ "Noto Sans Palmyrene",
+ "Noto Sans PhagsPa",
+ "Noto Sans Phoenician",
+ "Noto Sans PsaPahlavi",
+ "Noto Sans Rejang",
+ "Noto Sans Samaritan",
+ "Noto Sans Saurashtra",
+ "Noto Sans Sharada",
+ "Noto Sans Siddham",
+ "Noto Sans SoraSomp",
+ "Noto Sans Sundanese",
+ "Noto Sans Syloti Nagri",
+ "Noto Sans Syriac",
+ "Noto Sans Tagalog",
+ "Noto Sans Tagbanwa",
+ "Noto Sans Tai Le",
+ "Noto Sans Tai Tham",
+ "Noto Sans Tai Viet",
+ "Noto Sans Takri",
+ "Noto Sans Thaana",
+ "Noto Sans Tifinagh",
+ "Noto Sans Tirhuta",
+ "Noto Sans Ugaritic",
+ "Noto Sans Vai",
+ "Noto Sans Wancho",
+ "Noto Sans Yi",
+ "Noto Sans Zawgyi",
+ "Noto Sans Zawgyi Blk",
+ "Noto Sans Zawgyi ExtBd",
+ "Noto Sans Zawgyi ExtLt",
+ "Noto Sans Zawgyi Light",
+ "Noto Sans Zawgyi Med",
+ "Noto Sans Zawgyi SemBd",
+ "Noto Sans Zawgyi Thin",
+ "Noto Serif Ahom",
+ "Noto Serif Balinese",
+ "Noto Serif Hmong Nyiakeng",
+ "Noto Serif Myanmar",
+ "Noto Serif Myanmar Blk",
+ "Noto Serif Myanmar ExtBd",
+ "Noto Serif Myanmar ExtLt",
+ "Noto Serif Myanmar Light",
+ "Noto Serif Myanmar Med",
+ "Noto Serif Myanmar SemBd",
+ "Noto Serif Myanmar Thin",
+ "Noto Serif Yezidi",
+ "Optima",
+ "Oriya MN",
+ "Oriya Sangam MN",
+ "PT Mono",
+ "PT Sans",
+ "PT Sans Caption",
+ "PT Sans Narrow",
+ "PT Serif",
+ "PT Serif Caption",
+ "Palatino",
+ "Papyrus",
+ "Party LET",
+ "Phosphate",
+ "PingFang HK",
+ "PingFang SC",
+ "PingFang TC",
+ "Plantagenet Cherokee",
+ "Raanana",
+ "Rockwell",
+ "STIX Two Math",
+ "STIX Two Text",
+ "STIXGeneral",
+ "STIXIntegralsD",
+ "STIXIntegralsSm",
+ "STIXIntegralsUp",
+ "STIXIntegralsUpD",
+ "STIXIntegralsUpSm",
+ "STIXNonUnicode",
+ "STIXSizeFiveSym",
+ "STIXSizeFourSym",
+ "STIXSizeOneSym",
+ "STIXSizeThreeSym",
+ "STIXSizeTwoSym",
+ "STIXVariants",
+ "STSong",
+ "Sana",
+ "Sathu",
+ "Savoye LET",
+ "Shree Devanagari 714",
+ "SignPainter-HouseScript",
+ "Silom",
+ "Sinhala MN",
+ "Sinhala Sangam MN",
+ "Skia",
+ "Snell Roundhand",
+ "Songti SC",
+ "Songti TC",
+ "Sukhumvit Set",
+ "Superclarendon",
+ "Symbol",
+ "System Font",
+ "Tahoma",
+ "Tamil MN",
+ "Tamil Sangam MN",
+ "Telugu MN",
+ "Telugu Sangam MN",
+ "Thonburi",
+ "Times",
+ "Times New Roman",
+ "Trattatello",
+ "Trebuchet MS",
+ "Verdana",
+ "Waseem",
+ "Webdings",
+ "Wingdings",
+ "Wingdings 2",
+ "Wingdings 3",
+ "Zapf Dingbats",
+ "Zapfino"
+ ]
+ }
+ ],
+ "lin": [
+ {
+ "id": "ubuntu2404",
+ "weight": 0.45,
+ "fonts": [
+ "AR PL UKai CN",
+ "AR PL UKai HK",
+ "AR PL UKai TW",
+ "AR PL UKai TW MBE",
+ "AR PL UMing CN",
+ "AR PL UMing HK",
+ "AR PL UMing TW",
+ "AR PL UMing TW MBE",
+ "C059",
+ "D050000L",
+ "DejaVu Sans",
+ "DejaVu Sans Mono",
+ "DejaVu Serif",
+ "Droid Sans Fallback",
+ "Liberation Mono",
+ "Liberation Sans",
+ "Liberation Sans Narrow",
+ "Liberation Serif",
+ "Nimbus Mono PS",
+ "Nimbus Roman",
+ "Nimbus Sans",
+ "Nimbus Sans Narrow",
+ "Noto Color Emoji",
+ "Noto Kufi Arabic",
+ "Noto Looped Lao",
+ "Noto Looped Lao Bold",
+ "Noto Looped Lao Regular",
+ "Noto Looped Thai",
+ "Noto Looped Thai Bold",
+ "Noto Looped Thai Regular",
+ "Noto Mono",
+ "Noto Music",
+ "Noto Naskh Arabic",
+ "Noto Nastaliq Urdu",
+ "Noto Rashi Hebrew",
+ "Noto Sans",
+ "Noto Sans Adlam",
+ "Noto Sans Adlam Unjoined",
+ "Noto Sans AnatoHiero",
+ "Noto Sans Anatolian Hieroglyphs",
+ "Noto Sans Arabic",
+ "Noto Sans Armenian",
+ "Noto Sans Avestan",
+ "Noto Sans Balinese",
+ "Noto Sans Bamum",
+ "Noto Sans Bassa Vah",
+ "Noto Sans Batak",
+ "Noto Sans Bengali",
+ "Noto Sans Bhaiksuki",
+ "Noto Sans Brahmi",
+ "Noto Sans Buginese",
+ "Noto Sans Buhid",
+ "Noto Sans CJK HK",
+ "Noto Sans CJK JP",
+ "Noto Sans CJK KR",
+ "Noto Sans CJK SC",
+ "Noto Sans CJK TC",
+ "Noto Sans CanAborig",
+ "Noto Sans Canadian Aboriginal",
+ "Noto Sans Carian",
+ "Noto Sans CaucAlban",
+ "Noto Sans Caucasian Albanian",
+ "Noto Sans Chakma",
+ "Noto Sans Cham",
+ "Noto Sans Cherokee",
+ "Noto Sans Coptic",
+ "Noto Sans Cuneiform",
+ "Noto Sans Cypriot",
+ "Noto Sans Deseret",
+ "Noto Sans Devanagari",
+ "Noto Sans Display",
+ "Noto Sans Duployan",
+ "Noto Sans EgyptHiero",
+ "Noto Sans Egyptian Hieroglyphs",
+ "Noto Sans Elbasan",
+ "Noto Sans Elymaic",
+ "Noto Sans Ethiopic",
+ "Noto Sans Georgian",
+ "Noto Sans Glagolitic",
+ "Noto Sans Gothic",
+ "Noto Sans Grantha",
+ "Noto Sans Gujarati",
+ "Noto Sans Gunjala Gondi",
+ "Noto Sans Gurmukhi",
+ "Noto Sans Hanifi Rohingya",
+ "Noto Sans Hanunoo",
+ "Noto Sans Hatran",
+ "Noto Sans Hebrew",
+ "Noto Sans ImpAramaic",
+ "Noto Sans Imperial Aramaic",
+ "Noto Sans Indic Siyaq Numbers",
+ "Noto Sans InsPahlavi",
+ "Noto Sans InsParthi",
+ "Noto Sans Inscriptional Pahlavi",
+ "Noto Sans Inscriptional Parthian",
+ "Noto Sans Javanese",
+ "Noto Sans Kaithi",
+ "Noto Sans Kannada",
+ "Noto Sans Kayah Li",
+ "Noto Sans Kharoshthi",
+ "Noto Sans Khmer",
+ "Noto Sans Khojki",
+ "Noto Sans Khudawadi",
+ "Noto Sans Lao",
+ "Noto Sans Lepcha",
+ "Noto Sans Limbu",
+ "Noto Sans Linear A",
+ "Noto Sans Linear B",
+ "Noto Sans Lisu",
+ "Noto Sans Lycian",
+ "Noto Sans Lydian",
+ "Noto Sans Mahajani",
+ "Noto Sans Malayalam",
+ "Noto Sans Mandaic",
+ "Noto Sans Manichaean",
+ "Noto Sans Marchen",
+ "Noto Sans Masaram Gondi",
+ "Noto Sans Math",
+ "Noto Sans Mayan Numerals",
+ "Noto Sans Medefaidrin",
+ "Noto Sans Meetei Mayek",
+ "Noto Sans Mende Kikakui",
+ "Noto Sans Meroitic",
+ "Noto Sans Miao",
+ "Noto Sans Modi",
+ "Noto Sans Mongolian",
+ "Noto Sans Mono",
+ "Noto Sans Mono CJK HK",
+ "Noto Sans Mono CJK JP",
+ "Noto Sans Mono CJK KR",
+ "Noto Sans Mono CJK SC",
+ "Noto Sans Mono CJK TC",
+ "Noto Sans Mro",
+ "Noto Sans Multani",
+ "Noto Sans Myanmar",
+ "Noto Sans NKo",
+ "Noto Sans Nabataean",
+ "Noto Sans New Tai Lue",
+ "Noto Sans Newa",
+ "Noto Sans Nushu",
+ "Noto Sans Ogham",
+ "Noto Sans Ol Chiki",
+ "Noto Sans Old Hungarian",
+ "Noto Sans Old Italic",
+ "Noto Sans Old North Arabian",
+ "Noto Sans Old Permic",
+ "Noto Sans Old Persian",
+ "Noto Sans Old Sogdian",
+ "Noto Sans Old South Arabian",
+ "Noto Sans Old Turkic",
+ "Noto Sans OldHung",
+ "Noto Sans OldNorArab",
+ "Noto Sans OldSouArab",
+ "Noto Sans Oriya",
+ "Noto Sans Osage",
+ "Noto Sans Osmanya",
+ "Noto Sans Pahawh Hmong",
+ "Noto Sans Palmyrene",
+ "Noto Sans Pau Cin Hau",
+ "Noto Sans PhagsPa",
+ "Noto Sans Phoenician",
+ "Noto Sans PsaPahlavi",
+ "Noto Sans Psalter Pahlavi",
+ "Noto Sans Rejang",
+ "Noto Sans Runic",
+ "Noto Sans Samaritan",
+ "Noto Sans Saurashtra",
+ "Noto Sans Sharada",
+ "Noto Sans Shavian",
+ "Noto Sans Siddham",
+ "Noto Sans SignWrit",
+ "Noto Sans SignWriting",
+ "Noto Sans Sinhala",
+ "Noto Sans Sogdian",
+ "Noto Sans Sora Sompeng",
+ "Noto Sans Soyombo",
+ "Noto Sans Sundanese",
+ "Noto Sans Syloti Nagri",
+ "Noto Sans Symbols",
+ "Noto Sans Symbols2",
+ "Noto Sans Syriac",
+ "Noto Sans Tagalog",
+ "Noto Sans Tagbanwa",
+ "Noto Sans Tai Le",
+ "Noto Sans Tai Tham",
+ "Noto Sans Tai Viet",
+ "Noto Sans Takri",
+ "Noto Sans Tamil",
+ "Noto Sans Tamil Supplement",
+ "Noto Sans Telugu",
+ "Noto Sans Thaana",
+ "Noto Sans Thai",
+ "Noto Sans Tifinagh",
+ "Noto Sans Tifinagh APT",
+ "Noto Sans Tifinagh Adrar",
+ "Noto Sans Tifinagh Agraw Imazighen",
+ "Noto Sans Tifinagh Ahaggar",
+ "Noto Sans Tifinagh Air",
+ "Noto Sans Tifinagh Azawagh",
+ "Noto Sans Tifinagh Ghat",
+ "Noto Sans Tifinagh Hawad",
+ "Noto Sans Tifinagh Rhissa Ixa",
+ "Noto Sans Tifinagh SIL",
+ "Noto Sans Tifinagh Tawellemmet",
+ "Noto Sans Tirhuta",
+ "Noto Sans Ugaritic",
+ "Noto Sans Vai",
+ "Noto Sans Wancho",
+ "Noto Sans Warang Citi",
+ "Noto Sans Yi",
+ "Noto Sans Zanabazar",
+ "Noto Sans Zanabazar Square",
+ "Noto Serif",
+ "Noto Serif Ahom",
+ "Noto Serif Armenian",
+ "Noto Serif Balinese",
+ "Noto Serif Bengali",
+ "Noto Serif CJK HK",
+ "Noto Serif CJK JP",
+ "Noto Serif CJK KR",
+ "Noto Serif CJK SC",
+ "Noto Serif CJK TC",
+ "Noto Serif Devanagari",
+ "Noto Serif Display",
+ "Noto Serif Dogra",
+ "Noto Serif Ethiopic",
+ "Noto Serif Georgian",
+ "Noto Serif Grantha",
+ "Noto Serif Gujarati",
+ "Noto Serif Gurmukhi",
+ "Noto Serif Hebrew",
+ "Noto Serif Hmong Nyiakeng",
+ "Noto Serif Kannada",
+ "Noto Serif Khmer",
+ "Noto Serif Khojki",
+ "Noto Serif Lao",
+ "Noto Serif Malayalam",
+ "Noto Serif Myanmar",
+ "Noto Serif Sinhala",
+ "Noto Serif Tamil",
+ "Noto Serif Tamil Slanted",
+ "Noto Serif Tangut",
+ "Noto Serif Telugu",
+ "Noto Serif Thai",
+ "Noto Serif Tibetan",
+ "Noto Serif Yezidi",
+ "Noto Traditional Nushu",
+ "OpenSymbol",
+ "P052",
+ "Standard Symbols PS",
+ "URW Bookman",
+ "URW Gothic",
+ "Ubuntu",
+ "Ubuntu Mono",
+ "Ubuntu Sans",
+ "Ubuntu Sans Mono",
+ "Z003"
+ ]
+ },
+ {
+ "id": "ubuntu2604",
+ "weight": 0.55,
+ "fonts": [
+ "AR PL UKai CN",
+ "AR PL UKai HK",
+ "AR PL UKai TW",
+ "AR PL UKai TW MBE",
+ "AR PL UMing CN",
+ "AR PL UMing HK",
+ "AR PL UMing TW",
+ "AR PL UMing TW MBE",
+ "C059",
+ "D050000L",
+ "DejaVu Sans",
+ "DejaVu Sans Mono",
+ "DejaVu Serif",
+ "Droid Sans Fallback",
+ "FontAwesome",
+ "Lato",
+ "Lato Black",
+ "Lato Hairline",
+ "Lato Heavy",
+ "Lato Light",
+ "Lato Medium",
+ "Lato Semibold",
+ "Lato Thin",
+ "Liberation Mono",
+ "Liberation Sans",
+ "Liberation Sans Narrow",
+ "Liberation Serif",
+ "Nimbus Mono PS",
+ "Nimbus Roman",
+ "Nimbus Sans",
+ "Nimbus Sans Narrow",
+ "Noto Color Emoji",
+ "Noto Kufi Arabic",
+ "Noto Looped Lao",
+ "Noto Looped Lao Bold",
+ "Noto Looped Lao Regular",
+ "Noto Looped Thai",
+ "Noto Looped Thai Bold",
+ "Noto Looped Thai Regular",
+ "Noto Mono",
+ "Noto Music",
+ "Noto Naskh Arabic",
+ "Noto Nastaliq Urdu",
+ "Noto Rashi Hebrew",
+ "Noto Sans",
+ "Noto Sans Adlam",
+ "Noto Sans Adlam Unjoined",
+ "Noto Sans AnatoHiero",
+ "Noto Sans Anatolian Hieroglyphs",
+ "Noto Sans Arabic",
+ "Noto Sans Armenian",
+ "Noto Sans Avestan",
+ "Noto Sans Balinese",
+ "Noto Sans Bamum",
+ "Noto Sans Bassa Vah",
+ "Noto Sans Batak",
+ "Noto Sans Bengali",
+ "Noto Sans Bhaiksuki",
+ "Noto Sans Brahmi",
+ "Noto Sans Buginese",
+ "Noto Sans Buhid",
+ "Noto Sans CJK HK",
+ "Noto Sans CJK JP",
+ "Noto Sans CJK KR",
+ "Noto Sans CJK SC",
+ "Noto Sans CJK TC",
+ "Noto Sans CanAborig",
+ "Noto Sans Canadian Aboriginal",
+ "Noto Sans Carian",
+ "Noto Sans CaucAlban",
+ "Noto Sans Caucasian Albanian",
+ "Noto Sans Chakma",
+ "Noto Sans Cham",
+ "Noto Sans Cherokee",
+ "Noto Sans Coptic",
+ "Noto Sans Cuneiform",
+ "Noto Sans Cypriot",
+ "Noto Sans Deseret",
+ "Noto Sans Devanagari",
+ "Noto Sans Display",
+ "Noto Sans Duployan",
+ "Noto Sans EgyptHiero",
+ "Noto Sans Egyptian Hieroglyphs",
+ "Noto Sans Elbasan",
+ "Noto Sans Elymaic",
+ "Noto Sans Ethiopic",
+ "Noto Sans Georgian",
+ "Noto Sans Glagolitic",
+ "Noto Sans Gothic",
+ "Noto Sans Grantha",
+ "Noto Sans Gujarati",
+ "Noto Sans Gunjala Gondi",
+ "Noto Sans Gurmukhi",
+ "Noto Sans Hanifi Rohingya",
+ "Noto Sans Hanunoo",
+ "Noto Sans Hatran",
+ "Noto Sans Hebrew",
+ "Noto Sans ImpAramaic",
+ "Noto Sans Imperial Aramaic",
+ "Noto Sans Indic Siyaq Numbers",
+ "Noto Sans InsPahlavi",
+ "Noto Sans InsParthi",
+ "Noto Sans Inscriptional Pahlavi",
+ "Noto Sans Inscriptional Parthian",
+ "Noto Sans Javanese",
+ "Noto Sans Kaithi",
+ "Noto Sans Kannada",
+ "Noto Sans Kayah Li",
+ "Noto Sans Kharoshthi",
+ "Noto Sans Khmer",
+ "Noto Sans Khojki",
+ "Noto Sans Khudawadi",
+ "Noto Sans Lao",
+ "Noto Sans Lepcha",
+ "Noto Sans Limbu",
+ "Noto Sans Linear A",
+ "Noto Sans Linear B",
+ "Noto Sans Lisu",
+ "Noto Sans Lycian",
+ "Noto Sans Lydian",
+ "Noto Sans Mahajani",
+ "Noto Sans Malayalam",
+ "Noto Sans Mandaic",
+ "Noto Sans Manichaean",
+ "Noto Sans Marchen",
+ "Noto Sans Masaram Gondi",
+ "Noto Sans Math",
+ "Noto Sans Mayan Numerals",
+ "Noto Sans Medefaidrin",
+ "Noto Sans Meetei Mayek",
+ "Noto Sans Mende Kikakui",
+ "Noto Sans Meroitic",
+ "Noto Sans Miao",
+ "Noto Sans Modi",
+ "Noto Sans Mongolian",
+ "Noto Sans Mono",
+ "Noto Sans Mono CJK HK",
+ "Noto Sans Mono CJK JP",
+ "Noto Sans Mono CJK KR",
+ "Noto Sans Mono CJK SC",
+ "Noto Sans Mono CJK TC",
+ "Noto Sans Mro",
+ "Noto Sans Multani",
+ "Noto Sans Myanmar",
+ "Noto Sans NKo",
+ "Noto Sans Nabataean",
+ "Noto Sans New Tai Lue",
+ "Noto Sans Newa",
+ "Noto Sans Nushu",
+ "Noto Sans Ogham",
+ "Noto Sans Ol Chiki",
+ "Noto Sans Old Hungarian",
+ "Noto Sans Old Italic",
+ "Noto Sans Old North Arabian",
+ "Noto Sans Old Permic",
+ "Noto Sans Old Persian",
+ "Noto Sans Old Sogdian",
+ "Noto Sans Old South Arabian",
+ "Noto Sans Old Turkic",
+ "Noto Sans OldHung",
+ "Noto Sans OldNorArab",
+ "Noto Sans OldSouArab",
+ "Noto Sans Oriya",
+ "Noto Sans Osage",
+ "Noto Sans Osmanya",
+ "Noto Sans Pahawh Hmong",
+ "Noto Sans Palmyrene",
+ "Noto Sans Pau Cin Hau",
+ "Noto Sans PhagsPa",
+ "Noto Sans Phoenician",
+ "Noto Sans PsaPahlavi",
+ "Noto Sans Psalter Pahlavi",
+ "Noto Sans Rejang",
+ "Noto Sans Runic",
+ "Noto Sans Samaritan",
+ "Noto Sans Saurashtra",
+ "Noto Sans Sharada",
+ "Noto Sans Shavian",
+ "Noto Sans Siddham",
+ "Noto Sans SignWrit",
+ "Noto Sans SignWriting",
+ "Noto Sans Sinhala",
+ "Noto Sans Sogdian",
+ "Noto Sans Sora Sompeng",
+ "Noto Sans Soyombo",
+ "Noto Sans Sundanese",
+ "Noto Sans Syloti Nagri",
+ "Noto Sans Symbols",
+ "Noto Sans Symbols2",
+ "Noto Sans Syriac",
+ "Noto Sans Tagalog",
+ "Noto Sans Tagbanwa",
+ "Noto Sans Tai Le",
+ "Noto Sans Tai Tham",
+ "Noto Sans Tai Viet",
+ "Noto Sans Takri",
+ "Noto Sans Tamil",
+ "Noto Sans Tamil Supplement",
+ "Noto Sans Telugu",
+ "Noto Sans Thaana",
+ "Noto Sans Thai",
+ "Noto Sans Tifinagh",
+ "Noto Sans Tifinagh APT",
+ "Noto Sans Tifinagh Adrar",
+ "Noto Sans Tifinagh Agraw Imazighen",
+ "Noto Sans Tifinagh Ahaggar",
+ "Noto Sans Tifinagh Air",
+ "Noto Sans Tifinagh Azawagh",
+ "Noto Sans Tifinagh Ghat",
+ "Noto Sans Tifinagh Hawad",
+ "Noto Sans Tifinagh Rhissa Ixa",
+ "Noto Sans Tifinagh SIL",
+ "Noto Sans Tifinagh Tawellemmet",
+ "Noto Sans Tirhuta",
+ "Noto Sans Ugaritic",
+ "Noto Sans Vai",
+ "Noto Sans Wancho",
+ "Noto Sans Warang Citi",
+ "Noto Sans Yi",
+ "Noto Sans Zanabazar",
+ "Noto Sans Zanabazar Square",
+ "Noto Serif",
+ "Noto Serif Ahom",
+ "Noto Serif Armenian",
+ "Noto Serif Balinese",
+ "Noto Serif Bengali",
+ "Noto Serif CJK HK",
+ "Noto Serif CJK JP",
+ "Noto Serif CJK KR",
+ "Noto Serif CJK SC",
+ "Noto Serif CJK TC",
+ "Noto Serif Devanagari",
+ "Noto Serif Display",
+ "Noto Serif Dogra",
+ "Noto Serif Ethiopic",
+ "Noto Serif Georgian",
+ "Noto Serif Grantha",
+ "Noto Serif Gujarati",
+ "Noto Serif Gurmukhi",
+ "Noto Serif Hebrew",
+ "Noto Serif Hmong Nyiakeng",
+ "Noto Serif Kannada",
+ "Noto Serif Khmer",
+ "Noto Serif Khojki",
+ "Noto Serif Lao",
+ "Noto Serif Malayalam",
+ "Noto Serif Myanmar",
+ "Noto Serif Sinhala",
+ "Noto Serif Tamil",
+ "Noto Serif Tamil Slanted",
+ "Noto Serif Tangut",
+ "Noto Serif Telugu",
+ "Noto Serif Thai",
+ "Noto Serif Tibetan",
+ "Noto Serif Yezidi",
+ "Noto Traditional Nushu",
+ "OpenSymbol",
+ "P052",
+ "Standard Symbols PS",
+ "URW Bookman",
+ "URW Gothic",
+ "Ubuntu",
+ "Ubuntu Mono",
+ "Ubuntu Sans",
+ "Ubuntu Sans Mono",
+ "Z003"
+ ]
+ }
+ ]
+}
diff --git a/pythonlib/camoufox/font-groups.json b/pythonlib/camoufox/font-groups.json
new file mode 100644
index 000000000..c6420dc28
--- /dev/null
+++ b/pythonlib/camoufox/font-groups.json
@@ -0,0 +1,716 @@
+{
+ "win": [
+ {
+ "id": "office",
+ "kind": "bundle",
+ "prob": 0.602,
+ "fonts": [
+ "Bodoni MT Condensed",
+ "Stencil",
+ "Perpetua Titling MT",
+ "Haettenschweiler",
+ "Matura MT Script Capitals",
+ "Elephant",
+ "Gill Sans MT Ext Condensed Bold",
+ "Palace Script MT",
+ "Modern No. 20",
+ "Perpetua",
+ "Wide Latin",
+ "Kunstler Script",
+ "Rockwell Extra Bold",
+ "Bell MT",
+ "Harrington",
+ "Vivaldi",
+ "Gill Sans Ultra Bold",
+ "Bookshelf Symbol 7",
+ "Rage Italic",
+ "Agency FB",
+ "Eras Bold ITC",
+ "Old English Text MT",
+ "Broadway",
+ "Copperplate Gothic Light",
+ "Snap ITC",
+ "Forte",
+ "Gigi",
+ "Rockwell Condensed",
+ "Colonna MT",
+ "Bauhaus 93",
+ "Poor Richard",
+ "Gill Sans MT",
+ "Centaur",
+ "MS Reference Specialty",
+ "Imprint MT Shadow",
+ "Copperplate Gothic Bold",
+ "Playbill",
+ "Harlow Solid Italic",
+ "Footlight MT Light",
+ "Viner Hand ITC",
+ "Bradley Hand ITC",
+ "Calisto MT",
+ "Eras Light ITC",
+ "Parchment",
+ "Bodoni MT Black",
+ "Engravers MT",
+ "Mistral",
+ "Goudy Stout",
+ "Pristina",
+ "Brush Script MT",
+ "High Tower Text",
+ "Niagara Solid",
+ "Ravie",
+ "Gill Sans MT Condensed",
+ "Informal Roman",
+ "Algerian",
+ "Maiandra GD",
+ "Tw Cen MT Condensed",
+ "Edwardian Script ITC",
+ "Britannic Bold",
+ "OCR A Extended",
+ "Bodoni MT Poster Compressed",
+ "Tempus Sans ITC",
+ "Eras Demi ITC",
+ "Jokerman",
+ "Niagara Engraved",
+ "Magneto",
+ "French Script MT",
+ "Tw Cen MT",
+ "Berlin Sans FB Demi",
+ "Tw Cen MT Condensed Extra Bold",
+ "Castellar",
+ "Script MT Bold",
+ "Freestyle Script",
+ "Blackadder ITC",
+ "Gloucester MT Extra Condensed",
+ "Bernard MT Condensed",
+ "Curlz MT",
+ "Felix Titling",
+ "Baskerville Old Face",
+ "Vladimir Script",
+ "Rockwell",
+ "Onyx",
+ "Kristen ITC",
+ "Bodoni MT",
+ "Cooper Black",
+ "Eras Medium ITC",
+ "Californian FB",
+ "Goudy Old Style",
+ "Gill Sans Ultra Bold Condensed",
+ "Papyrus",
+ "Chiller",
+ "Showcard Gothic",
+ "Juice ITC",
+ "Berlin Sans FB",
+ "MT Extra",
+ "Book Antiqua",
+ "Bookman Old Style",
+ "Century",
+ "Century Gothic",
+ "Century Schoolbook",
+ "Dubai",
+ "Franklin Gothic Book",
+ "Franklin Gothic Demi",
+ "Franklin Gothic Demi Cond",
+ "Franklin Gothic Heavy",
+ "Garamond",
+ "Lucida Bright",
+ "Lucida Calligraphy",
+ "Lucida Fax",
+ "Lucida Handwriting",
+ "Lucida Sans Typewriter",
+ "Monotype Corsiva",
+ "MS Outlook",
+ "MS Reference Sans Serif"
+ ]
+ },
+ {
+ "id": "pan-euro",
+ "kind": "bundle",
+ "prob": 0.028,
+ "fonts": [
+ "Arial Nova",
+ "Georgia Pro",
+ "Gill Sans Nova",
+ "Neue Haas Grotesk Text Pro",
+ "Rockwell Nova",
+ "Verdana Pro"
+ ]
+ },
+ {
+ "id": "libreoffice",
+ "kind": "bundle",
+ "prob": 0.066,
+ "fonts": [
+ "Caladea",
+ "Carlito",
+ "Liberation Sans",
+ "Liberation Serif",
+ "Liberation Mono",
+ "Liberation Sans Narrow",
+ "DejaVu Sans",
+ "DejaVu Serif",
+ "DejaVu Sans Mono",
+ "DejaVu Sans Condensed",
+ "DejaVu Serif Condensed",
+ "DejaVu Sans Light",
+ "DejaVu Math TeX Gyre",
+ "Source Sans 3",
+ "Source Serif 4",
+ "Source Code Pro",
+ "Noto Sans",
+ "Noto Serif",
+ "Noto Mono",
+ "Noto Sans Arabic",
+ "Noto Naskh Arabic",
+ "Noto Kufi Arabic",
+ "Noto Sans Hebrew",
+ "Noto Serif Hebrew",
+ "Noto Sans Armenian",
+ "Noto Serif Armenian",
+ "Noto Sans Georgian",
+ "Noto Serif Georgian",
+ "Noto Sans Lao",
+ "Noto Serif Lao",
+ "Noto Sans Lisu",
+ "Gentium Basic",
+ "Gentium Book Basic",
+ "Amiri",
+ "Amiri Quran",
+ "Scheherazade",
+ "Reem Kufi",
+ "David Libre",
+ "Alef",
+ "OpenSymbol",
+ "Rubik"
+ ]
+ },
+ {
+ "id": "cascadia",
+ "kind": "bundle",
+ "prob": 0.1,
+ "fonts": [
+ "Cascadia Code",
+ "Cascadia Mono"
+ ]
+ },
+ {
+ "id": "meslo",
+ "kind": "bundle",
+ "prob": 0.04,
+ "fonts": [
+ "Meslo LG S",
+ "Meslo LG M",
+ "Meslo LG L"
+ ]
+ },
+ {
+ "id": "dev",
+ "kind": "alacarte",
+ "prob": 0.038,
+ "fonts": [
+ "Fira Code",
+ "Fira Mono",
+ "JetBrains Mono",
+ "Source Code Pro",
+ "Inconsolata",
+ "Hack",
+ "IBM Plex Mono",
+ "Roboto Mono",
+ "Anonymous Pro",
+ "Iosevka",
+ "Space Mono",
+ "Victor Mono",
+ "PT Mono",
+ "Overpass Mono"
+ ],
+ "sizes": [
+ {
+ "n": 1,
+ "w": 0.321608
+ },
+ {
+ "n": 2,
+ "w": 0.241206
+ },
+ {
+ "n": 3,
+ "w": 0.170854
+ },
+ {
+ "n": 4,
+ "w": 0.110553
+ },
+ {
+ "n": 5,
+ "w": 0.070352
+ },
+ {
+ "n": 6,
+ "w": 0.045226
+ },
+ {
+ "n": 7,
+ "w": 0.025126
+ },
+ {
+ "n": 8,
+ "w": 0.015075
+ }
+ ]
+ },
+ {
+ "id": "web",
+ "kind": "alacarte",
+ "prob": 0.088,
+ "fonts": [
+ "Roboto",
+ "Open Sans",
+ "Lato",
+ "Montserrat",
+ "Poppins",
+ "Oswald",
+ "Raleway",
+ "Nunito",
+ "Nunito Sans",
+ "Inter",
+ "Roboto Condensed",
+ "Roboto Slab",
+ "Merriweather",
+ "Work Sans",
+ "Rubik",
+ "Mukta",
+ "PT Sans",
+ "PT Serif",
+ "Fira Sans",
+ "Josefin Sans",
+ "Bebas Neue",
+ "Barlow",
+ "Karla",
+ "DM Sans",
+ "Manrope",
+ "Quicksand",
+ "Playfair Display",
+ "Titillium Web",
+ "Cabin",
+ "Heebo",
+ "Source Sans 3",
+ "Source Serif 4"
+ ],
+ "sizes": [
+ {
+ "n": 1,
+ "w": 0.321608
+ },
+ {
+ "n": 2,
+ "w": 0.241206
+ },
+ {
+ "n": 3,
+ "w": 0.170854
+ },
+ {
+ "n": 4,
+ "w": 0.110553
+ },
+ {
+ "n": 5,
+ "w": 0.070352
+ },
+ {
+ "n": 6,
+ "w": 0.045226
+ },
+ {
+ "n": 7,
+ "w": 0.025126
+ },
+ {
+ "n": 8,
+ "w": 0.015075
+ }
+ ]
+ },
+ {
+ "id": "hololens",
+ "kind": "bundle",
+ "prob": 0.592,
+ "fonts": [
+ "HoloLens MDL2 Assets"
+ ]
+ }
+ ],
+ "mac": [
+ {
+ "id": "apple-optional",
+ "kind": "bundle",
+ "prob": 0.818,
+ "fonts": [
+ "Avenir Next Condensed",
+ "Avenir Next Condensed Demi Bold",
+ "Avenir Next Condensed Heavy",
+ "Avenir Next Condensed Medium",
+ "Avenir Next Condensed Ultra Light",
+ "Herculanum",
+ "Hiragino Kaku Gothic Pro W3",
+ "Hiragino Kaku Gothic Pro W6",
+ "Hiragino Kaku Gothic ProN",
+ "Hiragino Kaku Gothic ProN W3",
+ "Hiragino Kaku Gothic ProN W6",
+ "Hiragino Kaku Gothic Std W8",
+ "Hiragino Kaku Gothic StdN W8",
+ "Hiragino Maru Gothic Pro W4",
+ "Hiragino Mincho Pro W3",
+ "Hiragino Mincho Pro W6",
+ "Iowan Old Style Black",
+ "Marion",
+ "Seravek",
+ "Seravek ExtraLight",
+ "Seravek Light",
+ "Seravek Medium"
+ ]
+ },
+ {
+ "id": "meslo",
+ "kind": "bundle",
+ "prob": 0.04,
+ "fonts": [
+ "Meslo LG S",
+ "Meslo LG M",
+ "Meslo LG L"
+ ]
+ },
+ {
+ "id": "dev",
+ "kind": "alacarte",
+ "prob": 0.07,
+ "fonts": [
+ "Fira Code",
+ "Fira Mono",
+ "JetBrains Mono",
+ "Source Code Pro",
+ "Inconsolata",
+ "Hack",
+ "IBM Plex Mono",
+ "Roboto Mono",
+ "Anonymous Pro",
+ "Iosevka",
+ "Space Mono",
+ "Victor Mono",
+ "PT Mono",
+ "Overpass Mono"
+ ],
+ "sizes": [
+ {
+ "n": 1,
+ "w": 0.321608
+ },
+ {
+ "n": 2,
+ "w": 0.241206
+ },
+ {
+ "n": 3,
+ "w": 0.170854
+ },
+ {
+ "n": 4,
+ "w": 0.110553
+ },
+ {
+ "n": 5,
+ "w": 0.070352
+ },
+ {
+ "n": 6,
+ "w": 0.045226
+ },
+ {
+ "n": 7,
+ "w": 0.025126
+ },
+ {
+ "n": 8,
+ "w": 0.015075
+ }
+ ]
+ },
+ {
+ "id": "web",
+ "kind": "alacarte",
+ "prob": 0.27,
+ "fonts": [
+ "Roboto",
+ "Open Sans",
+ "Lato",
+ "Montserrat",
+ "Poppins",
+ "Oswald",
+ "Raleway",
+ "Nunito",
+ "Nunito Sans",
+ "Inter",
+ "Roboto Condensed",
+ "Roboto Slab",
+ "Merriweather",
+ "Work Sans",
+ "Rubik",
+ "Mukta",
+ "PT Sans",
+ "PT Serif",
+ "Fira Sans",
+ "Josefin Sans",
+ "Bebas Neue",
+ "Barlow",
+ "Karla",
+ "DM Sans",
+ "Manrope",
+ "Quicksand",
+ "Playfair Display",
+ "Titillium Web",
+ "Cabin",
+ "Heebo",
+ "Source Sans 3",
+ "Source Serif 4"
+ ],
+ "sizes": [
+ {
+ "n": 1,
+ "w": 0.321608
+ },
+ {
+ "n": 2,
+ "w": 0.241206
+ },
+ {
+ "n": 3,
+ "w": 0.170854
+ },
+ {
+ "n": 4,
+ "w": 0.110553
+ },
+ {
+ "n": 5,
+ "w": 0.070352
+ },
+ {
+ "n": 6,
+ "w": 0.045226
+ },
+ {
+ "n": 7,
+ "w": 0.025126
+ },
+ {
+ "n": 8,
+ "w": 0.015075
+ }
+ ]
+ }
+ ],
+ "lin": [
+ {
+ "id": "libreoffice",
+ "kind": "bundle",
+ "prob": 0.112,
+ "fonts": [
+ "Caladea",
+ "Carlito",
+ "Liberation Sans",
+ "Liberation Serif",
+ "Liberation Mono",
+ "Liberation Sans Narrow",
+ "DejaVu Sans",
+ "DejaVu Serif",
+ "DejaVu Sans Mono",
+ "DejaVu Sans Condensed",
+ "DejaVu Serif Condensed",
+ "DejaVu Sans Light",
+ "DejaVu Math TeX Gyre",
+ "Source Sans 3",
+ "Source Serif 4",
+ "Source Code Pro",
+ "Noto Sans",
+ "Noto Serif",
+ "Noto Mono",
+ "Noto Sans Arabic",
+ "Noto Naskh Arabic",
+ "Noto Kufi Arabic",
+ "Noto Sans Hebrew",
+ "Noto Serif Hebrew",
+ "Noto Sans Armenian",
+ "Noto Serif Armenian",
+ "Noto Sans Georgian",
+ "Noto Serif Georgian",
+ "Noto Sans Lao",
+ "Noto Serif Lao",
+ "Noto Sans Lisu",
+ "Gentium Basic",
+ "Gentium Book Basic",
+ "Amiri",
+ "Amiri Quran",
+ "Scheherazade",
+ "Reem Kufi",
+ "David Libre",
+ "Alef",
+ "OpenSymbol",
+ "Rubik"
+ ]
+ },
+ {
+ "id": "distro-i18n",
+ "kind": "bundle",
+ "prob": 0.372,
+ "fonts": [
+ "KacstBook",
+ "KacstOffice",
+ "Frank Ruehl CLM",
+ "Miriam CLM",
+ "Miriam Mono CLM",
+ "David CLM",
+ "Linux Libertine O",
+ "Linux Biolinum O",
+ "Linux Libertine Display O"
+ ]
+ },
+ {
+ "id": "meslo",
+ "kind": "bundle",
+ "prob": 0.06,
+ "fonts": [
+ "Meslo LG S",
+ "Meslo LG M",
+ "Meslo LG L"
+ ]
+ },
+ {
+ "id": "dev",
+ "kind": "alacarte",
+ "prob": 0.174,
+ "fonts": [
+ "Fira Code",
+ "Fira Mono",
+ "JetBrains Mono",
+ "Source Code Pro",
+ "Inconsolata",
+ "Hack",
+ "IBM Plex Mono",
+ "Roboto Mono",
+ "Anonymous Pro",
+ "Iosevka",
+ "Space Mono",
+ "Victor Mono",
+ "PT Mono",
+ "Overpass Mono",
+ "Ubuntu Mono"
+ ],
+ "sizes": [
+ {
+ "n": 1,
+ "w": 0.321608
+ },
+ {
+ "n": 2,
+ "w": 0.241206
+ },
+ {
+ "n": 3,
+ "w": 0.170854
+ },
+ {
+ "n": 4,
+ "w": 0.110553
+ },
+ {
+ "n": 5,
+ "w": 0.070352
+ },
+ {
+ "n": 6,
+ "w": 0.045226
+ },
+ {
+ "n": 7,
+ "w": 0.025126
+ },
+ {
+ "n": 8,
+ "w": 0.015075
+ }
+ ]
+ },
+ {
+ "id": "web",
+ "kind": "alacarte",
+ "prob": 0.195,
+ "fonts": [
+ "Roboto",
+ "Open Sans",
+ "Lato",
+ "Montserrat",
+ "Poppins",
+ "Oswald",
+ "Raleway",
+ "Nunito",
+ "Nunito Sans",
+ "Inter",
+ "Roboto Condensed",
+ "Roboto Slab",
+ "Merriweather",
+ "Work Sans",
+ "Rubik",
+ "Mukta",
+ "PT Sans",
+ "PT Serif",
+ "Fira Sans",
+ "Josefin Sans",
+ "Bebas Neue",
+ "Barlow",
+ "Karla",
+ "DM Sans",
+ "Manrope",
+ "Quicksand",
+ "Playfair Display",
+ "Titillium Web",
+ "Cabin",
+ "Heebo",
+ "Source Sans 3",
+ "Source Serif 4"
+ ],
+ "sizes": [
+ {
+ "n": 1,
+ "w": 0.321608
+ },
+ {
+ "n": 2,
+ "w": 0.241206
+ },
+ {
+ "n": 3,
+ "w": 0.170854
+ },
+ {
+ "n": 4,
+ "w": 0.110553
+ },
+ {
+ "n": 5,
+ "w": 0.070352
+ },
+ {
+ "n": 6,
+ "w": 0.045226
+ },
+ {
+ "n": 7,
+ "w": 0.025126
+ },
+ {
+ "n": 8,
+ "w": 0.015075
+ }
+ ]
+ }
+ ]
+}
diff --git a/pythonlib/camoufox/fontprobe.py b/pythonlib/camoufox/fontprobe.py
new file mode 100644
index 000000000..316569abb
--- /dev/null
+++ b/pythonlib/camoufox/fontprobe.py
@@ -0,0 +1,297 @@
+"""What fonts are actually installed on THIS machine.
+
+Camoufox ships its own font bundle and spoofs the claimed OS's font list from
+it, so nothing in a normal launch depends on the host's fonts. This module is
+the diagnostic half: it answers "what does this machine really have", which is
+what a user needs to know when deciding whether a claimed identity is plausible
+here, and what `camoufox fonts` reports.
+
+Enumeration is per platform because the authoritative list is:
+
+ Linux fontconfig (`fc-list`), which is what Gecko itself asks
+ Windows the font registry, plus the per-user font directory that
+ Windows 10 1809 and later install into without touching HKLM
+ macOS the three font directories CoreText reads
+
+The result is cached under the Camoufox cache directory and invalidated by the
+(path, mtime, size) of every directory scanned, so a call after the first costs
+a handful of stats.
+"""
+
+import json
+import os
+import platform
+import subprocess
+import sys
+import time
+from typing import Any, Dict, Iterable, List, Optional, Set, Tuple
+
+CACHE_VERSION = 1
+FONT_EXT = (".ttf", ".otf", ".ttc", ".otc", ".dfont", ".pfb")
+
+# fc-list can be slow on a machine with thousands of fonts, and a launch should
+# never hang on it.
+PROBE_TIMEOUT_S = 20
+
+
+def host_os() -> str:
+ """'linux', 'macos' or 'windows' -- the keys the font data is filed under."""
+ return {"Linux": "linux", "Darwin": "macos", "Windows": "windows"}.get(
+ platform.system(), "linux")
+
+
+def normalise(name: str) -> str:
+ """The form two family names are compared in.
+
+ Case and surrounding space only. Nothing clever: "Segoe UI" and
+ "Segoe UI Semibold" are different families to DirectWrite and must stay
+ different here, or a host with one would be credited with the other.
+ """
+ return " ".join(name.split()).lower()
+
+
+# --------------------------------------------------------------------------
+# per-platform enumeration
+# --------------------------------------------------------------------------
+
+def _linux_font_dirs() -> List[str]:
+ dirs = ["/usr/share/fonts", "/usr/local/share/fonts",
+ os.path.expanduser("~/.local/share/fonts"),
+ os.path.expanduser("~/.fonts")]
+ return [d for d in dirs if os.path.isdir(d)]
+
+
+def _windows_font_dirs() -> List[str]:
+ dirs = [os.path.join(os.environ.get("WINDIR", r"C:\Windows"), "Fonts")]
+ local = os.environ.get("LOCALAPPDATA")
+ if local:
+ dirs.append(os.path.join(local, "Microsoft", "Windows", "Fonts"))
+ return [d for d in dirs if os.path.isdir(d)]
+
+
+def _macos_font_dirs() -> List[str]:
+ dirs = ["/System/Library/Fonts", "/Library/Fonts",
+ os.path.expanduser("~/Library/Fonts"),
+ "/System/Library/Fonts/Supplemental"]
+ return [d for d in dirs if os.path.isdir(d)]
+
+
+def font_dirs() -> List[str]:
+ return {"linux": _linux_font_dirs, "windows": _windows_font_dirs,
+ "macos": _macos_font_dirs}[host_os()]()
+
+
+def _from_fc_list() -> Optional[Set[str]]:
+ """Ask fontconfig, which is the same source Gecko uses on Linux.
+
+ Deliberately run with the caller's own environment stripped of Camoufox's
+ FONTCONFIG_FILE: that variable points at the bundle, and the question here
+ is what the HOST has.
+ """
+ env = dict(os.environ)
+ env.pop("FONTCONFIG_FILE", None)
+ env.pop("FONTCONFIG_PATH", None)
+ try:
+ out = subprocess.run(["fc-list", "--format", "%{family}\\n"],
+ capture_output=True, timeout=PROBE_TIMEOUT_S,
+ env=env)
+ except (OSError, subprocess.SubprocessError):
+ return None
+ if out.returncode != 0:
+ return None
+ families: Set[str] = set()
+ for line in out.stdout.decode("utf-8", "replace").splitlines():
+ # fontconfig prints every alias of a family, comma separated.
+ for name in line.split(","):
+ name = name.strip()
+ if name:
+ families.add(name)
+ return families or None
+
+
+def _from_windows_registry() -> Optional[Set[str]]:
+ """The font registry: what GDI and DirectWrite enumerate."""
+ try:
+ import winreg # noqa: WPS433
+ except ImportError:
+ return None
+ families: Set[str] = set()
+ keys = [(winreg.HKEY_LOCAL_MACHINE,
+ r"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Fonts"),
+ (winreg.HKEY_CURRENT_USER,
+ r"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Fonts")]
+ for root, path in keys:
+ try:
+ handle = winreg.OpenKey(root, path)
+ except OSError:
+ continue
+ try:
+ index = 0
+ while True:
+ try:
+ name, _value, _kind = winreg.EnumValue(handle, index)
+ except OSError:
+ break
+ index += 1
+ # Values read "Segoe UI Bold (TrueType)" or
+ # "MS Gothic & MS PGothic & MS UI Gothic (TrueType)".
+ for part in name.split("(")[0].split("&"):
+ part = part.strip()
+ if part:
+ families.add(part)
+ finally:
+ winreg.CloseKey(handle)
+ return families or None
+
+
+def _from_font_files(dirs: Iterable[str], limit: int = 0) -> Set[str]:
+ """Read the name table of every font file. The portable fallback."""
+ try:
+ from fontTools.ttLib import TTCollection, TTFont # noqa: WPS433
+ except ImportError:
+ return set()
+
+ families: Set[str] = set()
+ seen = 0
+ for directory in dirs:
+ for root, _subdirs, names in os.walk(directory):
+ for name in sorted(names):
+ if not name.lower().endswith(FONT_EXT):
+ continue
+ path = os.path.join(root, name)
+ seen += 1
+ if limit and seen > limit:
+ return families
+ try:
+ if name.lower().endswith((".ttc", ".otc")):
+ with TTCollection(path, lazy=True) as collection:
+ fonts = list(collection.fonts)
+ else:
+ fonts = [TTFont(path, lazy=True,
+ ignoreDecompileErrors=True)]
+ except Exception:
+ continue
+ for font in fonts:
+ try:
+ table = font["name"] if "name" in font else None
+ if table is None:
+ continue
+ for name_id in (16, 1):
+ value = table.getDebugName(name_id)
+ if value:
+ families.add(value.strip())
+ except Exception:
+ pass
+ finally:
+ try:
+ font.close()
+ except Exception:
+ pass
+ return families
+
+
+# --------------------------------------------------------------------------
+# the cached inventory
+# --------------------------------------------------------------------------
+
+def _signature(dirs: Iterable[str]) -> str:
+ """Cheap invalidation: the directories and their mtimes.
+
+ Installing or removing a font changes the mtime of the directory it is in,
+ which is enough -- and costs four stats instead of reading 3000 name
+ tables.
+ """
+ parts = []
+ for directory in sorted(dirs):
+ try:
+ stat = os.stat(directory)
+ parts.append("%s:%d:%d" % (directory, int(stat.st_mtime), stat.st_size))
+ except OSError:
+ parts.append("%s:-" % directory)
+ return "|".join(parts)
+
+
+def _cache_path() -> Optional[str]:
+ try:
+ from .pkgman import INSTALL_DIR # noqa: WPS433
+ base = str(INSTALL_DIR)
+ except Exception:
+ base = os.path.join(os.path.expanduser("~"), ".cache", "camoufox")
+ try:
+ os.makedirs(os.path.join(base, "fontcache"), exist_ok=True)
+ except OSError:
+ return None
+ return os.path.join(base, "fontcache", "host-fonts.json")
+
+
+def installed_families(refresh: bool = False,
+ use_cache: bool = True) -> Dict[str, Any]:
+ """Every font family this machine has, with where the answer came from.
+
+ Returns {"os", "families": [...], "source", "dirs", "seconds", "cached"}.
+ """
+ dirs = font_dirs()
+ signature = _signature(dirs)
+ path = _cache_path() if use_cache else None
+
+ if path and not refresh and os.path.exists(path):
+ try:
+ with open(path, "rb") as fh:
+ cached = json.loads(fh.read())
+ if (cached.get("version") == CACHE_VERSION
+ and cached.get("signature") == signature):
+ cached["cached"] = True
+ return cached
+ except (OSError, ValueError):
+ pass
+
+ started = time.time()
+ families: Optional[Set[str]] = None
+ source = "files"
+ system = host_os()
+ if system == "linux":
+ families = _from_fc_list()
+ source = "fontconfig"
+ elif system == "windows":
+ families = _from_windows_registry()
+ source = "registry"
+ if not families:
+ families = _from_font_files(dirs)
+ source = "files"
+
+ result = {
+ "version": CACHE_VERSION,
+ "signature": signature,
+ "os": system,
+ "source": source,
+ "dirs": dirs,
+ "families": sorted(families),
+ "seconds": round(time.time() - started, 3),
+ "cached": False,
+ }
+ if path:
+ try:
+ tmp = path + ".tmp%d" % os.getpid()
+ with open(tmp, "w") as fh:
+ json.dump(result, fh)
+ os.replace(tmp, path)
+ except OSError:
+ pass
+ return result
+
+
+def family_index(inventory: Optional[Dict[str, Any]] = None) -> Set[str]:
+ """The installed families, normalised for comparison."""
+ inventory = inventory or installed_families()
+ return {normalise(name) for name in inventory.get("families", [])}
+
+
+def partition(claimed: Iterable[str],
+ inventory: Optional[Dict[str, Any]] = None
+ ) -> Tuple[List[str], List[str]]:
+ """Split the families an identity claims into (on this host, not on it)."""
+ index = family_index(inventory)
+ real, missing = [], []
+ for name in claimed:
+ (real if normalise(name) in index else missing).append(name)
+ return real, missing
diff --git a/pythonlib/camoufox/fonts.json b/pythonlib/camoufox/fonts.json
index e89aab8ed..40509a690 100644
--- a/pythonlib/camoufox/fonts.json
+++ b/pythonlib/camoufox/fonts.json
@@ -1,11 +1,240 @@
{
"win": [
- "Arial", "Arial Black", "Bahnschrift", "Calibri", "Calibri Light", "Cambria", "Cambria Math", "Candara", "Candara Light", "Comic Sans MS", "Consolas", "Constantia", "Corbel", "Corbel Light", "Courier New", "Ebrima", "Franklin Gothic Medium", "Gabriola", "Gadugi", "Georgia", "HoloLens MDL2 Assets", "Impact", "Ink Free", "Javanese Text", "Leelawadee UI", "Leelawadee UI Semilight", "Lucida Console", "Lucida Sans Unicode", "MS Gothic", "MS PGothic", "MS UI Gothic", "MV Boli", "Malgun Gothic", "Malgun Gothic Semilight", "Marlett", "Microsoft Himalaya", "Microsoft JhengHei", "Microsoft JhengHei Light", "Microsoft JhengHei UI", "Microsoft JhengHei UI Light", "Microsoft New Tai Lue", "Microsoft PhagsPa", "Microsoft Sans Serif", "Microsoft Tai Le", "Microsoft YaHei", "Microsoft YaHei Light", "Microsoft YaHei UI", "Microsoft YaHei UI Light", "Microsoft Yi Baiti", "MingLiU-ExtB", "MingLiU_HKSCS-ExtB", "Mongolian Baiti", "Myanmar Text", "NSimSun", "Nirmala UI", "Nirmala UI Semilight", "PMingLiU-ExtB", "Palatino Linotype", "Segoe Fluent Icons", "Segoe MDL2 Assets", "Segoe Print", "Segoe Script", "Segoe UI", "Segoe UI Black", "Segoe UI Emoji", "Segoe UI Historic", "Segoe UI Light", "Segoe UI Semibold", "Segoe UI Semilight", "Segoe UI Symbol", "Segoe UI Variable", "SimSun", "SimSun-ExtB", "Sitka", "Sitka Text", "Sylfaen", "Symbol", "Tahoma", "Times New Roman", "Trebuchet MS", "Twemoji Mozilla", "Verdana", "Webdings", "Wingdings", "Yu Gothic", "Yu Gothic Light", "Yu Gothic Medium", "Yu Gothic UI", "Yu Gothic UI Light", "Yu Gothic UI Semibold", "Yu Gothic UI Semilight", "\u5b8b\u4f53", "\u5fae\u8edf\u6b63\u9ed1\u9ad4", "\u5fae\u8edf\u6b63\u9ed1\u9ad4 Light", "\u5fae\u8f6f\u96c5\u9ed1", "\u5fae\u8f6f\u96c5\u9ed1 Light", "\u65b0\u5b8b\u4f53", "\u65b0\u7d30\u660e\u9ad4-ExtB", "\u6e38\u30b4\u30b7\u30c3\u30af", "\u6e38\u30b4\u30b7\u30c3\u30af Light", "\u6e38\u30b4\u30b7\u30c3\u30af Medium", "\u7d30\u660e\u9ad4-ExtB", "\u7d30\u660e\u9ad4_HKSCS-ExtB", "\ub9d1\uc740 \uace0\ub515", "\ub9d1\uc740 \uace0\ub515 Semilight", "\uff2d\uff33 \u30b4\u30b7\u30c3\u30af", "\uff2d\uff33 \uff30\u30b4\u30b7\u30c3\u30af"
+ "Agency FB", "Alef", "Algerian", "Amiri", "Amiri Quran", "Anonymous Pro", "Arial", "Arial Black",
+ "Arial Nova", "Bahnschrift", "Barlow", "Baskerville Old Face", "Bauhaus 93", "Bebas Neue",
+ "Bell MT", "Berlin Sans FB", "Berlin Sans FB Demi", "Bernard MT Condensed", "Blackadder ITC",
+ "Bodoni MT", "Bodoni MT Black", "Bodoni MT Condensed", "Bodoni MT Poster Compressed", "Book Antiqua",
+ "Bookman Old Style", "Bookshelf Symbol 7", "Bradley Hand ITC", "Britannic Bold", "Broadway",
+ "Brush Script MT", "Cabin", "Caladea", "Calibri", "Calibri Light", "Californian FB", "Calisto MT",
+ "Cambria", "Cambria Math", "Candara", "Candara Light", "Carlito", "Cascadia Code", "Cascadia Mono",
+ "Castellar", "Centaur", "Century", "Century Gothic", "Century Schoolbook", "Chiller", "Colonna MT",
+ "Comic Sans MS", "Consolas", "Constantia", "Cooper Black", "Copperplate Gothic Bold", "Copperplate Gothic Light",
+ "Corbel", "Corbel Light", "Courier", "Courier New", "Curlz MT", "DM Sans", "David Libre", "DejaVu Math TeX Gyre",
+ "DejaVu Sans", "DejaVu Sans Condensed", "DejaVu Sans Light", "DejaVu Sans Mono", "DejaVu Serif",
+ "DejaVu Serif Condensed", "Dubai", "Ebrima", "Edwardian Script ITC", "Elephant", "Engravers MT",
+ "Eras Bold ITC", "Eras Demi ITC", "Eras Light ITC", "Eras Medium ITC", "Felix Titling", "Fira Code",
+ "Fira Mono", "Fira Sans", "Footlight MT Light", "Forte", "Franklin Gothic Book", "Franklin Gothic Demi",
+ "Franklin Gothic Demi Cond", "Franklin Gothic Heavy", "Franklin Gothic Medium", "Freestyle Script",
+ "French Script MT", "Gabriola", "Gadugi", "Garamond", "Gentium Basic", "Gentium Book Basic",
+ "Georgia", "Georgia Pro", "Gigi", "Gill Sans MT", "Gill Sans MT Condensed", "Gill Sans MT Ext Condensed Bold",
+ "Gill Sans Nova", "Gill Sans Ultra Bold", "Gill Sans Ultra Bold Condensed", "Gloucester MT Extra Condensed",
+ "Goudy Old Style", "Goudy Stout", "Hack", "Haettenschweiler", "Harlow Solid Italic", "Harrington",
+ "Heebo", "Helvetica", "High Tower Text", "HoloLens MDL2 Assets", "IBM Plex Mono", "Impact",
+ "Imprint MT Shadow", "Inconsolata", "Informal Roman", "Ink Free", "Inter", "Iosevka", "Javanese Text",
+ "JetBrains Mono", "Jokerman", "Josefin Sans", "Juice ITC", "Karla", "Kristen ITC", "Kunstler Script",
+ "Lato", "Leelawadee UI", "Leelawadee UI Semilight", "Liberation Mono", "Liberation Sans", "Liberation Sans Narrow",
+ "Liberation Serif", "Lucida Bright", "Lucida Calligraphy", "Lucida Console", "Lucida Fax",
+ "Lucida Handwriting", "Lucida Sans Typewriter", "Lucida Sans Unicode", "MS Gothic", "MS Outlook",
+ "MS PGothic", "MS Reference Sans Serif", "MS Reference Specialty", "MS Sans Serif", "MS Serif",
+ "MS UI Gothic", "MT Extra", "MV Boli", "Magneto", "Maiandra GD", "Malgun Gothic", "Malgun Gothic Semilight",
+ "Manrope", "Marlett", "Matura MT Script Capitals", "Merriweather", "Meslo LG L", "Meslo LG M",
+ "Meslo LG S", "Microsoft Himalaya", "Microsoft JhengHei", "Microsoft JhengHei Light", "Microsoft JhengHei UI",
+ "Microsoft JhengHei UI Light", "Microsoft New Tai Lue", "Microsoft PhagsPa", "Microsoft Sans Serif",
+ "Microsoft Tai Le", "Microsoft YaHei", "Microsoft YaHei Light", "Microsoft YaHei UI", "Microsoft YaHei UI Light",
+ "Microsoft Yi Baiti", "MingLiU-ExtB", "MingLiU_HKSCS-ExtB", "MingLiU_MSCS-ExtB", "Mistral",
+ "Modern No. 20", "Mongolian Baiti", "Monotype Corsiva", "Montserrat", "Mukta", "Myanmar Text",
+ "NSimSun", "Neue Haas Grotesk Text Pro", "Niagara Engraved", "Niagara Solid", "Nirmala Text",
+ "Nirmala Text Semilight", "Nirmala UI", "Nirmala UI Semilight", "Noto Kufi Arabic", "Noto Mono",
+ "Noto Naskh Arabic", "Noto Sans", "Noto Sans Arabic", "Noto Sans Armenian", "Noto Sans Georgian",
+ "Noto Sans Hebrew", "Noto Sans Lao", "Noto Sans Lisu", "Noto Serif", "Noto Serif Armenian",
+ "Noto Serif Georgian", "Noto Serif Hebrew", "Noto Serif Lao", "Nunito", "Nunito Sans", "OCR A Extended",
+ "Old English Text MT", "Onyx", "Open Sans", "OpenSymbol", "Oswald", "Overpass Mono", "PMingLiU-ExtB",
+ "PT Mono", "PT Sans", "PT Serif", "Palace Script MT", "Palatino Linotype", "Papyrus", "Parchment",
+ "Perpetua", "Perpetua Titling MT", "Playbill", "Playfair Display", "Poor Richard", "Poppins",
+ "Pristina", "Quicksand", "Rage Italic", "Raleway", "Ravie", "Reem Kufi", "Roboto", "Roboto Condensed",
+ "Roboto Mono", "Roboto Slab", "Rockwell", "Rockwell Condensed", "Rockwell Extra Bold", "Rockwell Nova",
+ "Roman", "Rubik", "Sans Serif Collection", "Scheherazade", "Script MT Bold", "Segoe Fluent Icons",
+ "Segoe MDL2 Assets", "Segoe Print", "Segoe Script", "Segoe UI", "Segoe UI Black", "Segoe UI Emoji",
+ "Segoe UI Historic", "Segoe UI Light", "Segoe UI Semibold", "Segoe UI Semilight", "Segoe UI Symbol",
+ "Segoe UI Variable", "Segoe UI Variable Display", "Segoe UI Variable Small", "Segoe UI Variable Text",
+ "Showcard Gothic", "SimSun", "SimSun-ExtB", "Sitka Banner", "Sitka Display", "Sitka Heading",
+ "Sitka Small", "Sitka Subheading", "Sitka Text", "Small Fonts", "Snap ITC", "Source Code Pro",
+ "Source Sans 3", "Source Serif 4", "Space Mono", "Stencil", "Sylfaen", "Symbol", "Tahoma",
+ "Tempus Sans ITC", "Times", "Times New Roman", "Titillium Web", "Trebuchet MS", "Tw Cen MT",
+ "Tw Cen MT Condensed", "Tw Cen MT Condensed Extra Bold", "Twemoji Mozilla", "Verdana", "Verdana Pro",
+ "Victor Mono", "Viner Hand ITC", "Vivaldi", "Vladimir Script", "Webdings", "Wide Latin", "Wingdings",
+ "Work Sans", "Yu Gothic", "Yu Gothic Light", "Yu Gothic Medium", "Yu Gothic UI", "Yu Gothic UI Light",
+ "Yu Gothic UI Semibold", "Yu Gothic UI Semilight", "宋体", "微軟正黑體", "微軟正黑體 Light", "微软雅黑", "微软雅黑 Light",
+ "新宋体", "新細明體-ExtB", "游ゴシック", "游ゴシック Light", "游ゴシック Medium", "細明體-ExtB", "細明體_HKSCS-ExtB", "細明體_MSCS-ExtB",
+ "맑은 고딕", "맑은 고딕 Semilight", "MS ゴシック", "MS Pゴシック"
],
"mac": [
- ".Al Bayan PUA", ".Al Nile PUA", ".Al Tarikh PUA", ".Apple Color Emoji UI", ".Apple SD Gothic NeoI", ".Aqua Kana", ".Aqua Kana Bold", ".Aqua \u304b\u306a", ".Aqua \u304b\u306a \u30dc\u30fc\u30eb\u30c9", ".Arial Hebrew Desk Interface", ".Baghdad PUA", ".Beirut PUA", ".Damascus PUA", ".DecoType Naskh PUA", ".Diwan Kufi PUA", ".Farah PUA", ".Geeza Pro Interface", ".Geeza Pro PUA", ".Helvetica LT MM", ".Hiragino Kaku Gothic Interface", ".Hiragino Sans GB Interface", ".Keyboard", ".KufiStandardGK PUA", ".LastResort", ".Lucida Grande UI", ".Muna PUA", ".Nadeem PUA", ".New York", ".Noto Nastaliq Urdu UI", ".PingFang HK", ".PingFang SC", ".PingFang TC", ".SF Arabic", ".SF Arabic Rounded", ".SF Compact", ".SF Compact Rounded", ".SF NS", ".SF NS Mono", ".SF NS Rounded", ".Sana PUA", ".Savoye LET CC.", ".ThonburiUI", ".ThonburiUIWatch", ".\u82f9\u65b9-\u6e2f", ".\u82f9\u65b9-\u7b80", ".\u82f9\u65b9-\u7e41", ".\u860b\u65b9-\u6e2f", ".\u860b\u65b9-\u7c21", ".\u860b\u65b9-\u7e41", "Academy Engraved LET", "Al Bayan", "Al Nile", "Al Tarikh", "American Typewriter", "Andale Mono", "Apple Braille", "Apple Chancery", "Apple Color Emoji", "Apple SD Gothic Neo", "Apple SD \uc0b0\ub3cc\uace0\ub515 Neo", "Apple Symbols", "AppleGothic", "AppleMyungjo", "Arial", "Arial Black", "Arial Hebrew", "Arial Hebrew Scholar", "Arial Narrow", "Arial Rounded MT Bold", "Arial Unicode MS", "Athelas", "Avenir", "Avenir Black", "Avenir Black Oblique", "Avenir Book", "Avenir Heavy", "Avenir Light", "Avenir Medium", "Avenir Next", "Avenir Next Condensed", "Avenir Next Condensed Demi Bold", "Avenir Next Condensed Heavy", "Avenir Next Condensed Medium", "Avenir Next Condensed Ultra Light", "Avenir Next Demi Bold", "Avenir Next Heavy", "Avenir Next Medium", "Avenir Next Ultra Light", "Ayuthaya", "Baghdad", "Bangla MN", "Bangla Sangam MN", "Baskerville", "Beirut", "Big Caslon", "Bodoni 72", "Bodoni 72 Oldstyle", "Bodoni 72 Smallcaps", "Bodoni Ornaments", "Bradley Hand", "Brush Script MT", "Chakra Petch", "Chalkboard", "Chalkboard SE", "Chalkduster", "Charter", "Charter Black", "Cochin", "Comic Sans MS", "Copperplate", "Corsiva Hebrew", "Courier", "Courier New", "Czcionka systemowa", "DIN Alternate", "DIN Condensed", "Damascus", "DecoType Naskh", "Devanagari MT", "Devanagari Sangam MN", "Didot", "Diwan Kufi", "Diwan Thuluth", "Euphemia UCAS", "Farah", "Farisi", "Font Sistem", "Font de sistem", "Font di sistema", "Font sustava", "Fonte do Sistema", "Futura", "GB18030 Bitmap", "Galvji", "Geeza Pro", "Geneva", "Georgia", "Gill Sans", "Grantha Sangam MN", "Gujarati MT", "Gujarati Sangam MN", "Gurmukhi MN", "Gurmukhi MT", "Gurmukhi Sangam MN", "Heiti SC", "Heiti TC", "Heiti-\uac04\uccb4", "Heiti-\ubc88\uccb4", "Helvetica", "Helvetica Neue", "Herculanum", "Hiragino Kaku Gothic Pro", "Hiragino Kaku Gothic Pro W3", "Hiragino Kaku Gothic Pro W6", "Hiragino Kaku Gothic ProN", "Hiragino Kaku Gothic ProN W3", "Hiragino Kaku Gothic ProN W6", "Hiragino Kaku Gothic Std", "Hiragino Kaku Gothic Std W8", "Hiragino Kaku Gothic StdN", "Hiragino Kaku Gothic StdN W8", "Hiragino Maru Gothic Pro", "Hiragino Maru Gothic Pro W4", "Hiragino Maru Gothic ProN", "Hiragino Maru Gothic ProN W4", "Hiragino Mincho Pro", "Hiragino Mincho Pro W3", "Hiragino Mincho Pro W6", "Hiragino Mincho ProN", "Hiragino Mincho ProN W3", "Hiragino Mincho ProN W6", "Hiragino Sans", "Hiragino Sans GB", "Hiragino Sans GB W3", "Hiragino Sans GB W6", "Hiragino Sans W0", "Hiragino Sans W1", "Hiragino Sans W2", "Hiragino Sans W3", "Hiragino Sans W4", "Hiragino Sans W5", "Hiragino Sans W6", "Hiragino Sans W7", "Hiragino Sans W8", "Hiragino Sans W9", "Hoefler Text", "Hoefler Text Ornaments", "ITF Devanagari", "ITF Devanagari Marathi", "Impact", "InaiMathi", "Iowan Old Style", "Iowan Old Style Black", "J\u00e4rjestelm\u00e4fontti", "Kailasa", "Kannada MN", "Kannada Sangam MN", "Kefa", "Khmer MN", "Khmer Sangam MN", "Kohinoor Bangla", "Kohinoor Devanagari", "Kohinoor Gujarati", "Kohinoor Telugu", "Kokonor", "Krungthep", "KufiStandardGK", "Lao MN", "Lao Sangam MN", "Lucida Grande", "Luminari", "Malayalam MN", "Malayalam Sangam MN", "Marion", "Marker Felt", "Menlo", "Microsoft Sans Serif", "Mishafi", "Mishafi Gold", "Monaco", "Mshtakan", "Mukta Mahee", "MuktaMahee Bold", "MuktaMahee ExtraBold", "MuktaMahee ExtraLight", "MuktaMahee Light", "MuktaMahee Medium", "MuktaMahee Regular", "MuktaMahee SemiBold", "Muna", "Myanmar MN", "Myanmar Sangam MN", "Nadeem", "New Peninim MT", "Noteworthy", "Noto Nastaliq Urdu", "Noto Sans Adlam", "Noto Sans Armenian", "Noto Sans Armenian Blk", "Noto Sans Armenian ExtBd", "Noto Sans Armenian ExtLt", "Noto Sans Armenian Light", "Noto Sans Armenian Med", "Noto Sans Armenian SemBd", "Noto Sans Armenian Thin", "Noto Sans Avestan", "Noto Sans Bamum", "Noto Sans Bassa Vah", "Noto Sans Batak", "Noto Sans Bhaiksuki", "Noto Sans Brahmi", "Noto Sans Buginese", "Noto Sans Buhid", "Noto Sans CanAborig", "Noto Sans Canadian Aboriginal", "Noto Sans Carian", "Noto Sans CaucAlban", "Noto Sans Caucasian Albanian", "Noto Sans Chakma", "Noto Sans Cham", "Noto Sans Coptic", "Noto Sans Cuneiform", "Noto Sans Cypriot", "Noto Sans Duployan", "Noto Sans EgyptHiero", "Noto Sans Egyptian Hieroglyphs", "Noto Sans Elbasan", "Noto Sans Glagolitic", "Noto Sans Gothic", "Noto Sans Gunjala Gondi", "Noto Sans Hanifi Rohingya", "Noto Sans HanifiRohg", "Noto Sans Hanunoo", "Noto Sans Hatran", "Noto Sans ImpAramaic", "Noto Sans Imperial Aramaic", "Noto Sans InsPahlavi", "Noto Sans InsParthi", "Noto Sans Inscriptional Pahlavi", "Noto Sans Inscriptional Parthian", "Noto Sans Javanese", "Noto Sans Kaithi", "Noto Sans Kannada", "Noto Sans Kannada Black", "Noto Sans Kannada ExtraBold", "Noto Sans Kannada ExtraLight", "Noto Sans Kannada Light", "Noto Sans Kannada Medium", "Noto Sans Kannada SemiBold", "Noto Sans Kannada Thin", "Noto Sans Kayah Li", "Noto Sans Kharoshthi", "Noto Sans Khojki", "Noto Sans Khudawadi", "Noto Sans Lepcha", "Noto Sans Limbu", "Noto Sans Linear A", "Noto Sans Linear B", "Noto Sans Lisu", "Noto Sans Lycian", "Noto Sans Lydian", "Noto Sans Mahajani", "Noto Sans Mandaic", "Noto Sans Manichaean", "Noto Sans Marchen", "Noto Sans Masaram Gondi", "Noto Sans Meetei Mayek", "Noto Sans Mende Kikakui", "Noto Sans Meroitic", "Noto Sans Miao", "Noto Sans Modi", "Noto Sans Mongolian", "Noto Sans Mro", "Noto Sans Multani", "Noto Sans Myanmar", "Noto Sans Myanmar Blk", "Noto Sans Myanmar ExtBd", "Noto Sans Myanmar ExtLt", "Noto Sans Myanmar Light", "Noto Sans Myanmar Med", "Noto Sans Myanmar SemBd", "Noto Sans Myanmar Thin", "Noto Sans NKo", "Noto Sans Nabataean", "Noto Sans New Tai Lue", "Noto Sans Newa", "Noto Sans Ol Chiki", "Noto Sans Old Hungarian", "Noto Sans Old Italic", "Noto Sans Old North Arabian", "Noto Sans Old Permic", "Noto Sans Old Persian", "Noto Sans Old South Arabian", "Noto Sans Old Turkic", "Noto Sans OldHung", "Noto Sans OldNorArab", "Noto Sans OldSouArab", "Noto Sans Oriya", "Noto Sans Osage", "Noto Sans Osmanya", "Noto Sans Pahawh Hmong", "Noto Sans Palmyrene", "Noto Sans Pau Cin Hau", "Noto Sans PhagsPa", "Noto Sans Phoenician", "Noto Sans PsaPahlavi", "Noto Sans Psalter Pahlavi", "Noto Sans Rejang", "Noto Sans Samaritan", "Noto Sans Saurashtra", "Noto Sans Sharada", "Noto Sans Siddham", "Noto Sans Sora Sompeng", "Noto Sans SoraSomp", "Noto Sans Sundanese", "Noto Sans Syloti Nagri", "Noto Sans Syriac", "Noto Sans Tagalog", "Noto Sans Tagbanwa", "Noto Sans Tai Le", "Noto Sans Tai Tham", "Noto Sans Tai Viet", "Noto Sans Takri", "Noto Sans Thaana", "Noto Sans Tifinagh", "Noto Sans Tirhuta", "Noto Sans Ugaritic", "Noto Sans Vai", "Noto Sans Wancho", "Noto Sans Warang Citi", "Noto Sans Yi", "Noto Sans Zawgyi", "Noto Sans Zawgyi Blk", "Noto Sans Zawgyi ExtBd", "Noto Sans Zawgyi ExtLt", "Noto Sans Zawgyi Light", "Noto Sans Zawgyi Med", "Noto Sans Zawgyi SemBd", "Noto Sans Zawgyi Thin", "Noto Serif Ahom", "Noto Serif Balinese", "Noto Serif Hmong Nyiakeng", "Noto Serif Myanmar", "Noto Serif Myanmar Blk", "Noto Serif Myanmar ExtBd", "Noto Serif Myanmar ExtLt", "Noto Serif Myanmar Light", "Noto Serif Myanmar Med", "Noto Serif Myanmar SemBd", "Noto Serif Myanmar Thin", "Noto Serif Yezidi", "Optima", "Oriya MN", "Oriya Sangam MN", "PT Mono", "PT Sans", "PT Sans Caption", "PT Sans Narrow", "PT Serif", "PT Serif Caption", "Palatino", "Papyrus", "Party LET", "Phosphate", "Ph\u00f4ng ch\u1eef H\u1ec7 th\u1ed1ng", "PingFang HK", "PingFang SC", "PingFang TC", "Plantagenet Cherokee", "Police syst\u00e8me", "Raanana", "Rendszerbet\u0171t\u00edpus", "Rockwell", "STIX Two Math", "STIX Two Text", "STIXGeneral", "STIXIntegralsD", "STIXIntegralsSm", "STIXIntegralsUp", "STIXIntegralsUpD", "STIXIntegralsUpSm", "STIXNonUnicode", "STIXSizeFiveSym", "STIXSizeFourSym", "STIXSizeOneSym", "STIXSizeThreeSym", "STIXSizeTwoSym", "STIXVariants", "STSong", "Sana", "Sathu", "Savoye LET", "Seravek", "Seravek ExtraLight", "Seravek Light", "Seravek Medium", "Shree Devanagari 714", "SignPainter", "SignPainter-HouseScript", "Silom", "Sinhala MN", "Sinhala Sangam MN", "Sistem Fontu", "Skia", "Snell Roundhand", "Songti SC", "Songti TC", "Sukhumvit Set", "Superclarendon", "Symbol", "Systeemlettertype", "System Font", "Systemschrift", "Systemskrift", "Systemtypsnitt", "Syst\u00e9mov\u00e9 p\u00edsmo", "Tahoma", "Tamil MN", "Tamil Sangam MN", "Telugu MN", "Telugu Sangam MN", "Thonburi", "Times", "Times New Roman", "Tipo de letra del sistema", "Tipo de letra do sistema", "Tipus de lletra del sistema", "Trattatello", "Trebuchet MS", "Verdana", "Waseem", "Webdings", "Wingdings", "Wingdings 2", "Wingdings 3", "Zapf Dingbats", "Zapfino", "\u0393\u03c1\u03b1\u03bc\u03bc\u03b1\u03c4\u03bf\u03c3\u03b5\u03b9\u03c1\u03ac \u03c3\u03c5\u03c3\u03c4\u03ae\u03bc\u03b1\u03c4\u03bf\u03c2", "\u0421\u0438\u0441\u0442\u0435\u043c\u043d\u0438\u0439 \u0448\u0440\u0438\u0444\u0442", "\u0421\u0438\u0441\u0442\u0435\u043c\u043d\u044b\u0439 \u0448\u0440\u0438\u0444\u0442", "\u05d2\u05d5\u05e4\u05df \u05de\u05e2\u05e8\u05db\u05ea", "\u0627\u0644\u0628\u064a\u0627\u0646", "\u0627\u0644\u062a\u0627\u0631\u064a\u062e", "\u0627\u0644\u0646\u064a\u0644", "\u0628\u063a\u062f\u0627\u062f", "\u0628\u064a\u0631\u0648\u062a", "\u062c\u064a\u0632\u0629", "\u062e\u0637 \u0627\u0644\u0646\u0638\u0627\u0645", "\u062f\u0645\u0634\u0642", "\u062f\u064a\u0648\u0627\u0646 \u062b\u0644\u062b", "\u062f\u064a\u0648\u0627\u0646 \u0643\u0648\u0641\u064a", "\u0635\u0646\u0639\u0627\u0621", "\u0641\u0627\u0631\u0633\u064a", "\u0641\u0631\u062d", "\u0643\u0648\u0641\u064a", "\u0645\u0646\u0649", "\u0645\u0650\u0635\u062d\u0641\u064a", "\u0645\u0650\u0635\u062d\u0641\u064a \u0630\u0647\u0628\u064a", "\u0646\u062f\u064a\u0645", "\u0646\u0633\u062e", "\u0648\u0633\u064a\u0645", "\u0906\u0908\u0970\u091f\u0940\u0970\u090f\u092b\u093c\u0970 \u0926\u0947\u0935\u0928\u093e\u0917\u0930\u0940", "\u0906\u0908\u0970\u091f\u0940\u0970\u090f\u092b\u093c\u0970 \u0926\u0947\u0935\u0928\u093e\u0917\u0930\u0940 \u092e\u0930\u093e\u0920\u0940", "\u0915\u094b\u0939\u093f\u0928\u0942\u0930 \u0926\u0947\u0935\u0928\u093e\u0917\u0930\u0940", "\u0926\u0947\u0935\u0928\u093e\u0917\u0930\u0940 \u090f\u092e\u0970\u091f\u0940\u0970", "\u0926\u0947\u0935\u0928\u093e\u0917\u0930\u0940 \u0938\u0902\u0917\u092e \u090f\u092e\u0970\u090f\u0928\u0970", "\u0936\u094d\u0930\u0940 \u0926\u0947\u0935\u0928\u093e\u0917\u0930\u0940 \u096d\u0967\u096a", "\u0e41\u0e1a\u0e1a\u0e2d\u0e31\u0e01\u0e29\u0e23\u0e23\u0e30\u0e1a\u0e1a", "\u2e41\u7175\u6120\u82a9\u82c8", "\u30b7\u30b9\u30c6\u30e0\u30d5\u30a9\u30f3\u30c8", "\u30d2\u30e9\u30ae\u30ce\u4e38\u30b4 Pro", "\u30d2\u30e9\u30ae\u30ce\u4e38\u30b4 Pro W4", "\u30d2\u30e9\u30ae\u30ce\u4e38\u30b4 ProN", "\u30d2\u30e9\u30ae\u30ce\u4e38\u30b4 ProN W4", "\u30d2\u30e9\u30ae\u30ce\u660e\u671d Pro", "\u30d2\u30e9\u30ae\u30ce\u660e\u671d Pro W3", "\u30d2\u30e9\u30ae\u30ce\u660e\u671d Pro W6", "\u30d2\u30e9\u30ae\u30ce\u660e\u671d ProN", "\u30d2\u30e9\u30ae\u30ce\u660e\u671d ProN W3", "\u30d2\u30e9\u30ae\u30ce\u660e\u671d ProN W6", "\u30d2\u30e9\u30ae\u30ce\u89d2\u30b4 Pro", "\u30d2\u30e9\u30ae\u30ce\u89d2\u30b4 Pro W3", "\u30d2\u30e9\u30ae\u30ce\u89d2\u30b4 Pro W6", "\u30d2\u30e9\u30ae\u30ce\u89d2\u30b4 ProN", "\u30d2\u30e9\u30ae\u30ce\u89d2\u30b4 ProN W3", "\u30d2\u30e9\u30ae\u30ce\u89d2\u30b4 ProN W6", "\u30d2\u30e9\u30ae\u30ce\u89d2\u30b4 Std", "\u30d2\u30e9\u30ae\u30ce\u89d2\u30b4 Std W8", "\u30d2\u30e9\u30ae\u30ce\u89d2\u30b4 StdN", "\u30d2\u30e9\u30ae\u30ce\u89d2\u30b4 StdN W8", "\u30d2\u30e9\u30ae\u30ce\u89d2\u30b4 \u7c21\u4f53\u4e2d\u6587", "\u30d2\u30e9\u30ae\u30ce\u89d2\u30b4 \u7c21\u4f53\u4e2d\u6587 W3", "\u30d2\u30e9\u30ae\u30ce\u89d2\u30b4 \u7c21\u4f53\u4e2d\u6587 W6", "\u30d2\u30e9\u30ae\u30ce\u89d2\u30b4\u30b7\u30c3\u30af", "\u30d2\u30e9\u30ae\u30ce\u89d2\u30b4\u30b7\u30c3\u30af W0", "\u30d2\u30e9\u30ae\u30ce\u89d2\u30b4\u30b7\u30c3\u30af W1", "\u30d2\u30e9\u30ae\u30ce\u89d2\u30b4\u30b7\u30c3\u30af W2", "\u30d2\u30e9\u30ae\u30ce\u89d2\u30b4\u30b7\u30c3\u30af W3", "\u30d2\u30e9\u30ae\u30ce\u89d2\u30b4\u30b7\u30c3\u30af W4", "\u30d2\u30e9\u30ae\u30ce\u89d2\u30b4\u30b7\u30c3\u30af W5", "\u30d2\u30e9\u30ae\u30ce\u89d2\u30b4\u30b7\u30c3\u30af W6", "\u30d2\u30e9\u30ae\u30ce\u89d2\u30b4\u30b7\u30c3\u30af W7", "\u30d2\u30e9\u30ae\u30ce\u89d2\u30b4\u30b7\u30c3\u30af W8", "\u30d2\u30e9\u30ae\u30ce\u89d2\u30b4\u30b7\u30c3\u30af W9", "\u51ac\u9752\u9ed1\u4f53\u7b80\u4f53\u4e2d\u6587", "\u51ac\u9752\u9ed1\u4f53\u7b80\u4f53\u4e2d\u6587 W3", "\u51ac\u9752\u9ed1\u4f53\u7b80\u4f53\u4e2d\u6587 W6", "\u51ac\u9752\u9ed1\u9ad4\u7c21\u9ad4\u4e2d\u6587", "\u51ac\u9752\u9ed1\u9ad4\u7c21\u9ad4\u4e2d\u6587 W3", "\u51ac\u9752\u9ed1\u9ad4\u7c21\u9ad4\u4e2d\u6587 W6", "\u5b8b\u4f53-\u7b80", "\u5b8b\u4f53-\u7e41", "\u5b8b\u9ad4-\u7c21", "\u5b8b\u9ad4-\u7e41", "\u7cfb\u7d71\u5b57\u9ad4", "\u7cfb\u7edf\u5b57\u4f53", "\u82f9\u65b9-\u6e2f", "\u82f9\u65b9-\u7b80", "\u82f9\u65b9-\u7e41", "\u8371\u8389\u834d\u836d\u8a70\u8353\u2050\u726f", "\u8371\u8389\u834d\u836d\u8a70\u8353\u2053\u7464", "\u8371\u8389\u834d\u836d\u8a70\u8353\u8356\u8362\u834e", "\u8371\u8389\u834d\u836d\u8adb\u8353\u2050\u726f", "\u8371\u8389\u834d\u836d\u96be\u92a9\u2050\u726f", "\u860b\u65b9-\u6e2f", "\u860b\u65b9-\u7c21", "\u860b\u65b9-\u7e41", "\u9ed1\u4f53-\u7b80", "\u9ed1\u4f53-\u7e41", "\u9ed1\u9ad4-\u7c21", "\u9ed1\u9ad4-\u7e41", "\u9ed2\u4f53-\u7c21", "\u9ed2\u4f53-\u7e41", "\uc2dc\uc2a4\ud15c \uc11c\uccb4"
+ "Academy Engraved LET", "Al Bayan", "Al Nile", "Al Tarikh", "American Typewriter", "American Typewriter Semibold",
+ "Andale Mono", "Anonymous Pro", "Apple Braille", "Apple Chancery", "Apple Color Emoji", "Apple SD Gothic Neo",
+ "Apple SD Gothic Neo ExtraBold", "Apple SD 산돌고딕 Neo", "Apple Symbols", "AppleGothic", "AppleMyungjo",
+ "Arial", "Arial Black", "Arial Hebrew", "Arial Hebrew Scholar", "Arial Narrow", "Arial Rounded MT Bold",
+ "Arial Unicode MS", "Athelas", "Avenir", "Avenir Black", "Avenir Black Oblique", "Avenir Book",
+ "Avenir Heavy", "Avenir Light", "Avenir Medium", "Avenir Next", "Avenir Next Condensed", "Avenir Next Condensed Demi Bold",
+ "Avenir Next Condensed Heavy", "Avenir Next Condensed Medium", "Avenir Next Condensed Ultra Light",
+ "Avenir Next Demi Bold", "Avenir Next Heavy", "Avenir Next Medium", "Avenir Next Ultra Light",
+ "Ayuthaya", "Baghdad", "Bangla MN", "Bangla Sangam MN", "Barlow", "Baskerville", "Bebas Neue",
+ "Beirut", "Big Caslon", "Bodoni 72", "Bodoni 72 Oldstyle", "Bodoni 72 Smallcaps", "Bodoni Ornaments",
+ "Bradley Hand", "Brush Script MT", "Cabin", "Chalkboard", "Chalkboard SE", "Chalkduster", "Charter",
+ "Charter Black", "Cochin", "Comic Sans MS", "Copperplate", "Corsiva Hebrew", "Courier", "Courier New",
+ "Czcionka systemowa", "DIN Alternate", "DIN Condensed", "DM Sans", "Damascus", "DecoType Naskh",
+ "Devanagari MT", "Devanagari Sangam MN", "Didot", "Diwan Kufi", "Diwan Thuluth", "Euphemia UCAS",
+ "Farah", "Farisi", "Fira Code", "Fira Mono", "Fira Sans", "Font Sistem", "Font de sistem",
+ "Font di sistema", "Font sustava", "Fonte do Sistema", "Futura", "Futura Bold", "GB18030 Bitmap",
+ "Galvji", "Geeza Pro", "Geneva", "Georgia", "Gill Sans", "Grantha Sangam MN", "Gujarati MT",
+ "Gujarati Sangam MN", "Gurmukhi MN", "Gurmukhi MT", "Gurmukhi Sangam MN", "Hack", "Heebo",
+ "Heiti SC", "Heiti TC", "Heiti-간체", "Heiti-번체", "Helvetica", "Helvetica Neue", "Herculanum",
+ "Hiragino Kaku Gothic Pro", "Hiragino Kaku Gothic Pro W3", "Hiragino Kaku Gothic Pro W6", "Hiragino Kaku Gothic ProN",
+ "Hiragino Kaku Gothic ProN W3", "Hiragino Kaku Gothic ProN W6", "Hiragino Kaku Gothic Std",
+ "Hiragino Kaku Gothic Std W8", "Hiragino Kaku Gothic StdN", "Hiragino Kaku Gothic StdN W8",
+ "Hiragino Maru Gothic Pro", "Hiragino Maru Gothic Pro W4", "Hiragino Maru Gothic ProN", "Hiragino Maru Gothic ProN W4",
+ "Hiragino Mincho Pro", "Hiragino Mincho Pro W3", "Hiragino Mincho Pro W6", "Hiragino Mincho ProN",
+ "Hiragino Mincho ProN W3", "Hiragino Mincho ProN W6", "Hiragino Sans", "Hiragino Sans GB",
+ "Hiragino Sans GB W3", "Hiragino Sans GB W6", "Hiragino Sans W0", "Hiragino Sans W1", "Hiragino Sans W2",
+ "Hiragino Sans W3", "Hiragino Sans W4", "Hiragino Sans W5", "Hiragino Sans W6", "Hiragino Sans W7",
+ "Hiragino Sans W8", "Hiragino Sans W9", "Hoefler Text", "Hoefler Text Ornaments", "IBM Plex Mono",
+ "ITF Devanagari", "ITF Devanagari Marathi", "Impact", "InaiMathi", "InaiMathi Bold", "Inconsolata",
+ "Inter", "Iosevka", "Iowan Old Style", "Iowan Old Style Black", "JetBrains Mono", "Josefin Sans",
+ "Järjestelmäfontti", "Kailasa", "Kannada MN", "Kannada Sangam MN", "Karla", "Kefa", "Khmer MN",
+ "Khmer Sangam MN", "Kohinoor Bangla", "Kohinoor Devanagari", "Kohinoor Devanagari Medium",
+ "Kohinoor Gujarati", "Kohinoor Telugu", "Kokonor", "Krungthep", "KufiStandardGK", "Lao MN",
+ "Lao Sangam MN", "Lato", "Lucida Grande", "Luminari", "Malayalam MN", "Malayalam Sangam MN",
+ "Manrope", "Marion", "Marker Felt", "Menlo", "Merriweather", "Meslo LG L", "Meslo LG M", "Meslo LG S",
+ "Microsoft Sans Serif", "Mishafi", "Mishafi Gold", "Monaco", "Montserrat", "Mshtakan", "Mukta",
+ "Mukta Mahee", "MuktaMahee Bold", "MuktaMahee ExtraBold", "MuktaMahee ExtraLight", "MuktaMahee Light",
+ "MuktaMahee Medium", "MuktaMahee Regular", "MuktaMahee SemiBold", "Muna", "Myanmar MN", "Myanmar Sangam MN",
+ "Nadeem", "New Peninim MT", "Noteworthy", "Noto Nastaliq Urdu", "Noto Sans Adlam", "Noto Sans Armenian",
+ "Noto Sans Armenian Blk", "Noto Sans Armenian ExtBd", "Noto Sans Armenian ExtLt", "Noto Sans Armenian Light",
+ "Noto Sans Armenian Med", "Noto Sans Armenian SemBd", "Noto Sans Armenian Thin", "Noto Sans Avestan",
+ "Noto Sans Bamum", "Noto Sans Bassa Vah", "Noto Sans Batak", "Noto Sans Bhaiksuki", "Noto Sans Brahmi",
+ "Noto Sans Buginese", "Noto Sans Buhid", "Noto Sans CanAborig", "Noto Sans Canadian Aboriginal",
+ "Noto Sans Canadian Aboriginal Regular", "Noto Sans Carian", "Noto Sans CaucAlban", "Noto Sans Caucasian Albanian",
+ "Noto Sans Chakma", "Noto Sans Cham", "Noto Sans Coptic", "Noto Sans Cuneiform", "Noto Sans Cypriot",
+ "Noto Sans Duployan", "Noto Sans EgyptHiero", "Noto Sans Egyptian Hieroglyphs", "Noto Sans Elbasan",
+ "Noto Sans Glagolitic", "Noto Sans Gothic", "Noto Sans Gunjala Gondi", "Noto Sans Hanifi Rohingya",
+ "Noto Sans HanifiRohg", "Noto Sans Hanunoo", "Noto Sans Hatran", "Noto Sans ImpAramaic", "Noto Sans Imperial Aramaic",
+ "Noto Sans InsPahlavi", "Noto Sans InsParthi", "Noto Sans Inscriptional Pahlavi", "Noto Sans Inscriptional Parthian",
+ "Noto Sans Javanese", "Noto Sans Kaithi", "Noto Sans Kannada", "Noto Sans Kannada Black", "Noto Sans Kannada ExtraBold",
+ "Noto Sans Kannada ExtraLight", "Noto Sans Kannada Light", "Noto Sans Kannada Medium", "Noto Sans Kannada SemiBold",
+ "Noto Sans Kannada Thin", "Noto Sans Kayah Li", "Noto Sans Kharoshthi", "Noto Sans Khojki",
+ "Noto Sans Khudawadi", "Noto Sans Lepcha", "Noto Sans Limbu", "Noto Sans Linear A", "Noto Sans Linear B",
+ "Noto Sans Lisu", "Noto Sans Lycian", "Noto Sans Lydian", "Noto Sans Mahajani", "Noto Sans Mandaic",
+ "Noto Sans Manichaean", "Noto Sans Marchen", "Noto Sans Masaram Gondi", "Noto Sans Meetei Mayek",
+ "Noto Sans Mende Kikakui", "Noto Sans Meroitic", "Noto Sans Miao", "Noto Sans Modi", "Noto Sans Mongolian",
+ "Noto Sans Mro", "Noto Sans Multani", "Noto Sans Myanmar", "Noto Sans Myanmar Blk", "Noto Sans Myanmar ExtBd",
+ "Noto Sans Myanmar ExtLt", "Noto Sans Myanmar Light", "Noto Sans Myanmar Med", "Noto Sans Myanmar SemBd",
+ "Noto Sans Myanmar Thin", "Noto Sans NKo", "Noto Sans Nabataean", "Noto Sans New Tai Lue",
+ "Noto Sans Newa", "Noto Sans Ol Chiki", "Noto Sans Old Hungarian", "Noto Sans Old Italic",
+ "Noto Sans Old North Arabian", "Noto Sans Old Permic", "Noto Sans Old Persian", "Noto Sans Old South Arabian",
+ "Noto Sans Old Turkic", "Noto Sans OldHung", "Noto Sans OldNorArab", "Noto Sans OldSouArab",
+ "Noto Sans Oriya", "Noto Sans Osage", "Noto Sans Osmanya", "Noto Sans Pahawh Hmong", "Noto Sans Palmyrene",
+ "Noto Sans Pau Cin Hau", "Noto Sans PhagsPa", "Noto Sans Phoenician", "Noto Sans PsaPahlavi",
+ "Noto Sans Psalter Pahlavi", "Noto Sans Rejang", "Noto Sans Samaritan", "Noto Sans Saurashtra",
+ "Noto Sans Sharada", "Noto Sans Siddham", "Noto Sans Sora Sompeng", "Noto Sans SoraSomp", "Noto Sans Sundanese",
+ "Noto Sans Syloti Nagri", "Noto Sans Syriac", "Noto Sans Tagalog", "Noto Sans Tagbanwa", "Noto Sans Tai Le",
+ "Noto Sans Tai Tham", "Noto Sans Tai Viet", "Noto Sans Takri", "Noto Sans Thaana", "Noto Sans Tifinagh",
+ "Noto Sans Tirhuta", "Noto Sans Ugaritic", "Noto Sans Vai", "Noto Sans Wancho", "Noto Sans Warang Citi",
+ "Noto Sans Yi", "Noto Sans Zawgyi", "Noto Sans Zawgyi Blk", "Noto Sans Zawgyi ExtBd", "Noto Sans Zawgyi ExtLt",
+ "Noto Sans Zawgyi Light", "Noto Sans Zawgyi Med", "Noto Sans Zawgyi SemBd", "Noto Sans Zawgyi Thin",
+ "Noto Serif Ahom", "Noto Serif Balinese", "Noto Serif Hmong Nyiakeng", "Noto Serif Myanmar",
+ "Noto Serif Myanmar Blk", "Noto Serif Myanmar ExtBd", "Noto Serif Myanmar ExtLt", "Noto Serif Myanmar Light",
+ "Noto Serif Myanmar Med", "Noto Serif Myanmar SemBd", "Noto Serif Myanmar Thin", "Noto Serif Yezidi",
+ "Nunito", "Nunito Sans", "Open Sans", "Optima", "Oriya MN", "Oriya Sangam MN", "Oswald", "Overpass Mono",
+ "PT Mono", "PT Sans", "PT Sans Caption", "PT Sans Narrow", "PT Serif", "PT Serif Caption",
+ "Palatino", "Papyrus", "Party LET", "Phosphate", "Phông chữ Hệ thống", "PingFang HK", "PingFang SC",
+ "PingFang TC", "Plantagenet Cherokee", "Playfair Display", "Police système", "Poppins", "Quicksand",
+ "Raanana", "Raleway", "Rendszerbetűtípus", "Roboto", "Roboto Condensed", "Roboto Mono", "Roboto Slab",
+ "Rockwell", "Rubik", "STIX Two Math", "STIX Two Math Regular", "STIX Two Text", "STIX Two Text Regular",
+ "STIXGeneral", "STIXIntegralsD", "STIXIntegralsSm", "STIXIntegralsUp", "STIXIntegralsUpD",
+ "STIXIntegralsUpSm", "STIXNonUnicode", "STIXSizeFiveSym", "STIXSizeFourSym", "STIXSizeOneSym",
+ "STIXSizeThreeSym", "STIXSizeTwoSym", "STIXVariants", "STSong", "Sana", "Sathu", "Savoye LET",
+ "Seravek", "Seravek ExtraLight", "Seravek Light", "Seravek Medium", "Shree Devanagari 714",
+ "SignPainter", "SignPainter-HouseScript", "Silom", "Sinhala MN", "Sinhala Sangam MN", "Sistem Fontu",
+ "Skia", "Snell Roundhand", "Songti SC", "Songti TC", "Source Code Pro", "Source Sans 3", "Source Serif 4",
+ "Space Mono", "Sukhumvit Set", "Superclarendon", "Symbol", "Systeemlettertype", "System Font",
+ "Systemschrift", "Systemskrift", "Systemtypsnitt", "Systémové písmo", "Tahoma", "Tamil MN",
+ "Tamil Sangam MN", "Telugu MN", "Telugu Sangam MN", "Thonburi", "Times", "Times New Roman",
+ "Tipo de letra del sistema", "Tipo de letra do sistema", "Tipus de lletra del sistema", "Titillium Web",
+ "Trattatello", "Trebuchet MS", "Verdana", "Victor Mono", "Waseem", "Webdings", "Wingdings",
+ "Wingdings 2", "Wingdings 3", "Work Sans", "Zapf Dingbats", "Zapfino", "Γραμματοσειρά συστήματος",
+ "Системний шрифт", "Системный шрифт", "גופן מערכת", "البيان", "التاريخ", "النيل", "بغداد",
+ "بيروت", "جيزة", "خط النظام", "دمشق", "ديوان ثلث", "ديوان كوفي", "صنعاء", "فارسي", "فرح", "كوفي",
+ "منى", "مِصحفي", "مِصحفي ذهبي", "نديم", "نسخ", "وسيم", "कोहिनूर देवनागरी", "แบบอักษรระบบ",
+ "システムフォント", "ヒラギノ丸ゴ Pro", "ヒラギノ丸ゴ Pro W4", "ヒラギノ丸ゴ ProN", "ヒラギノ丸ゴ ProN W4", "ヒラギノ明朝 Pro", "ヒラギノ明朝 Pro W3",
+ "ヒラギノ明朝 Pro W6", "ヒラギノ明朝 ProN", "ヒラギノ明朝 ProN W3", "ヒラギノ明朝 ProN W6", "ヒラギノ角ゴ Pro", "ヒラギノ角ゴ Pro W3",
+ "ヒラギノ角ゴ Pro W6", "ヒラギノ角ゴ ProN", "ヒラギノ角ゴ ProN W3", "ヒラギノ角ゴ ProN W6", "ヒラギノ角ゴ Std", "ヒラギノ角ゴ Std W8",
+ "ヒラギノ角ゴ StdN", "ヒラギノ角ゴ StdN W8", "ヒラギノ角ゴ 簡体中文", "ヒラギノ角ゴ 簡体中文 W3", "ヒラギノ角ゴ 簡体中文 W6", "ヒラギノ角ゴシック",
+ "ヒラギノ角ゴシック W0", "ヒラギノ角ゴシック W1", "ヒラギノ角ゴシック W2", "ヒラギノ角ゴシック W3", "ヒラギノ角ゴシック W4", "ヒラギノ角ゴシック W5",
+ "ヒラギノ角ゴシック W6", "ヒラギノ角ゴシック W7", "ヒラギノ角ゴシック W8", "ヒラギノ角ゴシック W9", "冬青黑体简体中文", "冬青黑体简体中文 W3",
+ "冬青黑体简体中文 W6", "冬青黑體簡體中文", "冬青黑體簡體中文 W3", "冬青黑體簡體中文 W6", "宋体-简", "宋体-繁", "宋體-簡", "宋體-繁", "系統字體",
+ "系统字体", "苹方-港", "苹方-简", "苹方-繁", "蘋方-港", "蘋方-簡", "蘋方-繁", "黑体-简", "黑体-繁", "黑體-簡", "黑體-繁", "黒体-簡",
+ "黒体-繁", "시스템 서체"
],
"lin": [
- "Arimo", "Cousine", "Noto Naskh Arabic", "Noto Sans Adlam", "Noto Sans Armenian", "Noto Sans Balinese", "Noto Sans Bamum", "Noto Sans Bassa Vah", "Noto Sans Batak", "Noto Sans Bengali", "Noto Sans Buginese", "Noto Sans Buhid", "Noto Sans Canadian Aboriginal", "Noto Sans Chakma", "Noto Sans Cham", "Noto Sans Cherokee", "Noto Sans Coptic", "Noto Sans Deseret", "Noto Sans Devanagari", "Noto Sans Elbasan", "Noto Sans Ethiopic", "Noto Sans Georgian", "Noto Sans Grantha", "Noto Sans Gujarati", "Noto Sans Gunjala Gondi", "Noto Sans Gurmukhi", "Noto Sans Hanifi Rohingya", "Noto Sans Hanunoo", "Noto Sans Hebrew", "Noto Sans JP", "Noto Sans Javanese", "Noto Sans KR", "Noto Sans Kannada", "Noto Sans Kayah Li", "Noto Sans Khmer", "Noto Sans Khojki", "Noto Sans Khudawadi", "Noto Sans Lao", "Noto Sans Lepcha", "Noto Sans Limbu", "Noto Sans Lisu", "Noto Sans Mahajani", "Noto Sans Malayalam", "Noto Sans Mandaic", "Noto Sans Masaram Gondi", "Noto Sans Medefaidrin", "Noto Sans Meetei Mayek", "Noto Sans Mende Kikakui", "Noto Sans Miao", "Noto Sans Modi", "Noto Sans Mongolian", "Noto Sans Mro", "Noto Sans Multani", "Noto Sans Myanmar", "Noto Sans NKo", "Noto Sans New Tai Lue", "Noto Sans Newa", "Noto Sans Ol Chiki", "Noto Sans Oriya", "Noto Sans Osage", "Noto Sans Osmanya", "Noto Sans Pahawh Hmong", "Noto Sans Pau Cin Hau", "Noto Sans Rejang", "Noto Sans Runic", "Noto Sans SC", "Noto Sans Samaritan", "Noto Sans Saurashtra", "Noto Sans Sharada", "Noto Sans Shavian", "Noto Sans Sinhala", "Noto Sans Sora Sompeng", "Noto Sans Soyombo", "Noto Sans Sundanese", "Noto Sans Syloti Nagri", "Noto Sans Symbols", "Noto Sans Symbols 2", "Noto Sans Syriac", "Noto Sans TC", "Noto Sans Tagalog", "Noto Sans Tagbanwa", "Noto Sans Tai Le", "Noto Sans Tai Tham", "Noto Sans Tai Viet", "Noto Sans Takri", "Noto Sans Tamil", "Noto Sans Telugu", "Noto Sans Thaana", "Noto Sans Thai", "Noto Sans Tifinagh", "Noto Sans Tifinagh APT", "Noto Sans Tifinagh Adrar", "Noto Sans Tifinagh Agraw Imazighen", "Noto Sans Tifinagh Ahaggar", "Noto Sans Tifinagh Air", "Noto Sans Tifinagh Azawagh", "Noto Sans Tifinagh Ghat", "Noto Sans Tifinagh Hawad", "Noto Sans Tifinagh Rhissa Ixa", "Noto Sans Tifinagh SIL", "Noto Sans Tifinagh Tawellemmet", "Noto Sans Tirhuta", "Noto Sans Vai", "Noto Sans Wancho", "Noto Sans Warang Citi", "Noto Sans Yi", "Noto Sans Zanabazar Square", "Noto Serif Armenian", "Noto Serif Balinese", "Noto Serif Bengali", "Noto Serif Devanagari", "Noto Serif Dogra", "Noto Serif Ethiopic", "Noto Serif Georgian", "Noto Serif Grantha", "Noto Serif Gujarati", "Noto Serif Gurmukhi", "Noto Serif Hebrew", "Noto Serif Kannada", "Noto Serif Khmer", "Noto Serif Khojki", "Noto Serif Lao", "Noto Serif Malayalam", "Noto Serif Myanmar", "Noto Serif NP Hmong", "Noto Serif Sinhala", "Noto Serif Tamil", "Noto Serif Telugu", "Noto Serif Thai", "Noto Serif Tibetan", "Noto Serif Yezidi", "STIX Two Math", "Tinos", "Twemoji Mozilla"
+ "AR PL UKai CN", "AR PL UKai HK", "AR PL UKai TW", "AR PL UKai TW MBE", "AR PL UMing CN", "AR PL UMing HK",
+ "AR PL UMing TW", "AR PL UMing TW MBE", "Alef", "Amiri", "Amiri Quran", "Anonymous Pro", "Arial",
+ "Arial Narrow", "Arimo", "Avant Garde", "Barlow", "Bebas Neue", "Bookman Old Style", "C059",
+ "Cabin", "Caladea", "Calibri", "Cambria", "Carlito", "Century Schoolbook", "Courier", "Courier New",
+ "Cousine", "D050000L", "DM Sans", "David CLM", "David Libre", "DejaVu Math TeX Gyre", "DejaVu Sans",
+ "DejaVu Sans Condensed", "DejaVu Sans Light", "DejaVu Sans Mono", "DejaVu Serif", "DejaVu Serif Condensed",
+ "Droid Sans Fallback", "Fira Code", "Fira Mono", "Fira Sans", "FontAwesome", "Frank Ruehl CLM",
+ "Gentium Basic", "Gentium Book Basic", "Hack", "Heebo", "Helvetica", "Helvetica Narrow", "IBM Plex Mono",
+ "Inconsolata", "Inter", "Iosevka", "JetBrains Mono", "Josefin Sans", "KacstBook", "KacstOffice",
+ "Karla", "Lato", "Lato Black", "Lato Hairline", "Lato Heavy", "Lato Light", "Lato Medium",
+ "Lato Semibold", "Lato Thin", "Liberation Mono", "Liberation Sans", "Liberation Sans Narrow",
+ "Liberation Serif", "Linux Biolinum O", "Linux Libertine Display O", "Linux Libertine O", "Manrope",
+ "Merriweather", "Meslo LG L", "Meslo LG M", "Meslo LG S", "Miriam CLM", "Miriam Mono CLM",
+ "Montserrat", "Mukta", "Nimbus Mono PS", "Nimbus Roman", "Nimbus Sans", "Nimbus Sans Narrow",
+ "Noto Color Emoji", "Noto Kufi Arabic", "Noto Looped Lao", "Noto Looped Lao Bold", "Noto Looped Lao Regular",
+ "Noto Looped Thai", "Noto Looped Thai Bold", "Noto Looped Thai Regular", "Noto Mono", "Noto Music",
+ "Noto Naskh Arabic", "Noto Nastaliq Urdu", "Noto Rashi Hebrew", "Noto Sans", "Noto Sans Adlam",
+ "Noto Sans Adlam Unjoined", "Noto Sans AnatoHiero", "Noto Sans Anatolian Hieroglyphs", "Noto Sans Arabic",
+ "Noto Sans Armenian", "Noto Sans Avestan", "Noto Sans Balinese", "Noto Sans Bamum", "Noto Sans Bassa Vah",
+ "Noto Sans Batak", "Noto Sans Bengali", "Noto Sans Bhaiksuki", "Noto Sans Brahmi", "Noto Sans Buginese",
+ "Noto Sans Buhid", "Noto Sans CJK HK", "Noto Sans CJK JP", "Noto Sans CJK KR", "Noto Sans CJK SC",
+ "Noto Sans CJK TC", "Noto Sans CanAborig", "Noto Sans Canadian Aboriginal", "Noto Sans Carian",
+ "Noto Sans CaucAlban", "Noto Sans Caucasian Albanian", "Noto Sans Chakma", "Noto Sans Cham",
+ "Noto Sans Cherokee", "Noto Sans Coptic", "Noto Sans Cuneiform", "Noto Sans Cypriot", "Noto Sans Deseret",
+ "Noto Sans Devanagari", "Noto Sans Display", "Noto Sans Duployan", "Noto Sans EgyptHiero",
+ "Noto Sans Egyptian Hieroglyphs", "Noto Sans Elbasan", "Noto Sans Elymaic", "Noto Sans Ethiopic",
+ "Noto Sans Georgian", "Noto Sans Glagolitic", "Noto Sans Gothic", "Noto Sans Grantha", "Noto Sans Gujarati",
+ "Noto Sans Gunjala Gondi", "Noto Sans Gurmukhi", "Noto Sans Hanifi Rohingya", "Noto Sans Hanunoo",
+ "Noto Sans Hatran", "Noto Sans Hebrew", "Noto Sans ImpAramaic", "Noto Sans Imperial Aramaic",
+ "Noto Sans Indic Siyaq Numbers", "Noto Sans InsPahlavi", "Noto Sans InsParthi", "Noto Sans Inscriptional Pahlavi",
+ "Noto Sans Inscriptional Parthian", "Noto Sans Javanese", "Noto Sans Kaithi", "Noto Sans Kannada",
+ "Noto Sans Kayah Li", "Noto Sans Kharoshthi", "Noto Sans Khmer", "Noto Sans Khojki", "Noto Sans Khudawadi",
+ "Noto Sans Lao", "Noto Sans Lepcha", "Noto Sans Limbu", "Noto Sans Linear A", "Noto Sans Linear B",
+ "Noto Sans Lisu", "Noto Sans Lycian", "Noto Sans Lydian", "Noto Sans Mahajani", "Noto Sans Malayalam",
+ "Noto Sans Mandaic", "Noto Sans Manichaean", "Noto Sans Marchen", "Noto Sans Masaram Gondi",
+ "Noto Sans Math", "Noto Sans Mayan Numerals", "Noto Sans Medefaidrin", "Noto Sans Meetei Mayek",
+ "Noto Sans Mende Kikakui", "Noto Sans Meroitic", "Noto Sans Miao", "Noto Sans Modi", "Noto Sans Mongolian",
+ "Noto Sans Mono", "Noto Sans Mono CJK HK", "Noto Sans Mono CJK JP", "Noto Sans Mono CJK KR",
+ "Noto Sans Mono CJK SC", "Noto Sans Mono CJK TC", "Noto Sans Mro", "Noto Sans Multani", "Noto Sans Myanmar",
+ "Noto Sans NKo", "Noto Sans Nabataean", "Noto Sans New Tai Lue", "Noto Sans Newa", "Noto Sans Nushu",
+ "Noto Sans Ogham", "Noto Sans Ol Chiki", "Noto Sans Old Hungarian", "Noto Sans Old Italic",
+ "Noto Sans Old North Arabian", "Noto Sans Old Permic", "Noto Sans Old Persian", "Noto Sans Old Sogdian",
+ "Noto Sans Old South Arabian", "Noto Sans Old Turkic", "Noto Sans OldHung", "Noto Sans OldNorArab",
+ "Noto Sans OldSouArab", "Noto Sans Oriya", "Noto Sans Osage", "Noto Sans Osmanya", "Noto Sans Pahawh Hmong",
+ "Noto Sans Palmyrene", "Noto Sans Pau Cin Hau", "Noto Sans PhagsPa", "Noto Sans Phoenician",
+ "Noto Sans PsaPahlavi", "Noto Sans Psalter Pahlavi", "Noto Sans Rejang", "Noto Sans Runic",
+ "Noto Sans Samaritan", "Noto Sans Saurashtra", "Noto Sans Sharada", "Noto Sans Shavian", "Noto Sans Siddham",
+ "Noto Sans SignWrit", "Noto Sans SignWriting", "Noto Sans Sinhala", "Noto Sans Sogdian", "Noto Sans Sora Sompeng",
+ "Noto Sans Soyombo", "Noto Sans Sundanese", "Noto Sans Syloti Nagri", "Noto Sans Symbols",
+ "Noto Sans Symbols2", "Noto Sans Syriac", "Noto Sans Tagalog", "Noto Sans Tagbanwa", "Noto Sans Tai Le",
+ "Noto Sans Tai Tham", "Noto Sans Tai Viet", "Noto Sans Takri", "Noto Sans Tamil", "Noto Sans Tamil Supplement",
+ "Noto Sans Telugu", "Noto Sans Thaana", "Noto Sans Thai", "Noto Sans Tifinagh", "Noto Sans Tifinagh APT",
+ "Noto Sans Tifinagh Adrar", "Noto Sans Tifinagh Agraw Imazighen", "Noto Sans Tifinagh Ahaggar",
+ "Noto Sans Tifinagh Air", "Noto Sans Tifinagh Azawagh", "Noto Sans Tifinagh Ghat", "Noto Sans Tifinagh Hawad",
+ "Noto Sans Tifinagh Rhissa Ixa", "Noto Sans Tifinagh SIL", "Noto Sans Tifinagh Tawellemmet",
+ "Noto Sans Tirhuta", "Noto Sans Ugaritic", "Noto Sans Vai", "Noto Sans Wancho", "Noto Sans Warang Citi",
+ "Noto Sans Yi", "Noto Sans Zanabazar", "Noto Sans Zanabazar Square", "Noto Serif", "Noto Serif Ahom",
+ "Noto Serif Armenian", "Noto Serif Balinese", "Noto Serif Bengali", "Noto Serif CJK HK", "Noto Serif CJK JP",
+ "Noto Serif CJK KR", "Noto Serif CJK SC", "Noto Serif CJK TC", "Noto Serif Devanagari", "Noto Serif Display",
+ "Noto Serif Dogra", "Noto Serif Ethiopic", "Noto Serif Georgian", "Noto Serif Grantha", "Noto Serif Gujarati",
+ "Noto Serif Gurmukhi", "Noto Serif Hebrew", "Noto Serif Hmong Nyiakeng", "Noto Serif Kannada",
+ "Noto Serif Khmer", "Noto Serif Khojki", "Noto Serif Lao", "Noto Serif Malayalam", "Noto Serif Myanmar",
+ "Noto Serif Sinhala", "Noto Serif Tamil", "Noto Serif Tamil Slanted", "Noto Serif Tangut",
+ "Noto Serif Telugu", "Noto Serif Thai", "Noto Serif Tibetan", "Noto Serif Yezidi", "Noto Traditional Nushu",
+ "Nunito", "Nunito Sans", "Open Sans", "OpenSymbol", "Oswald", "Overpass Mono", "P052", "PT Mono",
+ "PT Sans", "PT Serif", "Palatino", "Palatino Linotype", "Playfair Display", "Poppins", "Quicksand",
+ "Raleway", "Reem Kufi", "Roboto", "Roboto Condensed", "Roboto Mono", "Roboto Slab", "Rubik",
+ "Scheherazade", "Source Code Pro", "Source Sans 3", "Source Serif 4", "Space Mono", "Standard Symbols PS",
+ "Symbol", "Times", "Times New Roman", "Tinos", "Titillium Web", "Twemoji Mozilla", "URW Bookman",
+ "URW Gothic", "Ubuntu", "Ubuntu Mono", "Ubuntu Sans", "Ubuntu Sans Mono", "Victor Mono", "Work Sans",
+ "Z003", "Zapf Chancery"
]
}
diff --git a/pythonlib/camoufox/fpgen.yml b/pythonlib/camoufox/fpgen.yml
new file mode 100644
index 000000000..0d46c1124
--- /dev/null
+++ b/pythonlib/camoufox/fpgen.yml
@@ -0,0 +1,71 @@
+# Mappings of fpgen fingerprints to Camoufox config properties.
+#
+# fpgen (scrapfly/fingerprint-generator) replaced BrowserForge/Apify as the
+# generator. The field set below is the one BrowserForge used to supply -- the
+# rest of what fpgen carries (fonts, voices, WebGL parameters, system styles,
+# permissions, RTC capabilities, audio) is NOT mapped here yet; Camoufox still
+# draws those from its own catalogues. Wiring those through is the follow-up.
+#
+# Shape differences from browserforge.yml:
+# - window geometry is its own `window` node, not part of `screen`
+# - header values are lists
+# - there is no extraProperties.globalPrivacyControl; GPC is a pref Camoufox
+# owns (see utils.launch_options), so nothing maps to it
+# - doNotTrack is deliberately NOT mapped: Camoufox sets DNT from its own
+# config, and a drawn value is stripped unless the caller asked for one
+
+navigator:
+ # fpgen's UAs trail the current release; the version is rewritten to the
+ # Camoufox Firefox version in _cast_to_properties.
+ userAgent: navigator.userAgent
+ appCodeName: navigator.appCodeName
+ appName: navigator.appName
+ appVersion: navigator.appVersion
+ oscpu: navigator.oscpu
+ platform: navigator.platform
+ hardwareConcurrency: navigator.hardwareConcurrency
+ product: navigator.product
+ # Never override productSub (#105)
+ # deviceMemory is not in Firefox, and fpgen reports the string "undefined"
+ # Locale is handled separately (locale:*)
+ maxTouchPoints: navigator.maxTouchPoints
+
+screen:
+ availLeft: screen.availLeft
+ availTop: screen.availTop
+ availWidth: screen.availWidth
+ availHeight: screen.availHeight
+ height: screen.height
+ width: screen.width
+ colorDepth: screen.colorDepth
+ pixelDepth: screen.pixelDepth
+
+window:
+ outerHeight: window.outerHeight
+ outerWidth: window.outerWidth
+ # innerWidth/innerHeight are deliberately NOT mapped.
+ #
+ # Spoofing them deadlocks Playwright: setViewportSize resizes the window and
+ # then waits for the page to report the size it asked for, and a spoofed
+ # innerWidth/innerHeight never changes, so the wait never ends. Camoufox
+ # already defaults to no_viewport for this reason (#666); this is the same
+ # trap reached through an explicit set_viewport_size() call.
+ #
+ # BrowserForge hid it by accident -- its Firefox samples carry innerWidth and
+ # innerHeight as 0, and _cast_to_properties skips falsy values, so these were
+ # never spoofed there either. fpgen reports the real numbers, which turned an
+ # unmapped field into a hang (tests/patches/humanize-edge-deadlock.py, which
+ # calls set_viewport_size, timed out at 600s in CI).
+ #
+ # Leaving them real is also the more coherent answer: the content area a page
+ # measures is then the one it actually has, which is what makes input at the
+ # bottom edge land (see BROWSER_CHROME_HEIGHT in coherence.py).
+ screenX: window.screenX
+ screenY: window.screenY
+ pageYOffset: screen.pageYOffset
+ # devicePixelRatio is not mapped: any value but 1 is a spoofing tell unless
+ # the whole geometry is scaled with it.
+
+headers:
+ # accept-language is redundant with locale:*, user-agent with navigator.userAgent
+ accept-encoding: headers.Accept-Encoding
diff --git a/pythonlib/camoufox/gui/backend.py b/pythonlib/camoufox/gui/backend.py
index 366d3af93..7f2cfe4cc 100644
--- a/pythonlib/camoufox/gui/backend.py
+++ b/pythonlib/camoufox/gui/backend.py
@@ -505,8 +505,8 @@ def playwrightVersion(self):
return self._pkg_version('playwright')
@Property(str, notify=infoChanged)
- def browserforgeVersion(self):
- return self._pkg_version('browserforge')
+ def fpgenVersion(self):
+ return self._pkg_version('fpgen')
@Property(str, notify=infoChanged)
def fingerprintVersion(self):
diff --git a/pythonlib/camoufox/gui/qml/main.qml b/pythonlib/camoufox/gui/qml/main.qml
index 44c22252f..76e23d803 100644
--- a/pythonlib/camoufox/gui/qml/main.qml
+++ b/pythonlib/camoufox/gui/qml/main.qml
@@ -1195,8 +1195,8 @@ ApplicationWindow {
Muted { text: "Playwright" }
T { text: backend.playwrightVersion }
- Muted { text: "Browserforge" }
- T { text: backend.browserforgeVersion }
+ Muted { text: "fpgen" }
+ T { text: backend.fpgenVersion }
Muted { text: "Fingerprints" }
T { text: backend.fingerprintVersion }
diff --git a/pythonlib/camoufox/media-devices.json b/pythonlib/camoufox/media-devices.json
new file mode 100644
index 000000000..a6bad6de6
--- /dev/null
+++ b/pythonlib/camoufox/media-devices.json
@@ -0,0 +1,148 @@
+{
+ "_comment": "Common desktop media devices per OS, in the label format Firefox exposes after a getUserMedia grant (Windows: WASAPI friendly names; macOS: CoreAudio/AVFoundation names; Linux: PulseAudio/PipeWire descriptions and v4l2 card names). A 'card' is a sound device whose microphone and outputs share one groupId. Weights are relative draw weights.",
+ "win": {
+ "cards": [
+ {"w": 30, "mics": ["Microphone Array (Realtek(R) Audio)"], "outs": ["Speakers (Realtek(R) Audio)"]},
+ {"w": 18, "mics": ["Microphone (Realtek(R) Audio)"], "outs": ["Speakers (Realtek(R) Audio)"]},
+ {"w": 14, "mics": ["Microphone Array (Intel® Smart Sound Technology for Digital Microphones)"], "outs": ["Speaker (Realtek(R) Audio)"]},
+ {"w": 12, "mics": ["Microphone (Realtek High Definition Audio)"], "outs": ["Speakers (Realtek High Definition Audio)"]},
+ {"w": 6, "mics": ["Microphone (High Definition Audio Device)"], "outs": ["Speakers (High Definition Audio Device)"]},
+ {"w": 5, "mics": ["Microphone (2- High Definition Audio Device)"], "outs": ["Speakers (2- High Definition Audio Device)"]},
+ {"w": 5, "mics": ["Microphone Array (AMD Audio Device)"], "outs": ["Speakers (Realtek(R) Audio)"]},
+ {"w": 4, "mics": ["Microphone (Conexant ISST Audio)"], "outs": ["Speakers (Conexant ISST Audio)"]},
+ {"w": 3, "mics": ["Microphone (Synaptics Audio)"], "outs": ["Speakers (Synaptics Audio)"]},
+ {"w": 3, "mics": ["Microphone (Realtek USB Audio)"], "outs": ["Speakers (Realtek USB Audio)"]}
+ ],
+ "headsets": [
+ {"w": 6, "mics": ["Headset Microphone (Realtek(R) Audio)"], "outs": ["Headphones (Realtek(R) Audio)"]},
+ {"w": 5, "mics": ["Microphone (USB Audio Device)"], "outs": ["Speakers (USB Audio Device)"]},
+ {"w": 4, "mics": ["Microphone (HyperX Cloud II Wireless)"], "outs": ["Speakers (HyperX Cloud II Wireless)"]},
+ {"w": 4, "mics": ["Microphone (Logitech G PRO X Gaming Headset)"], "outs": ["Speakers (Logitech G PRO X Gaming Headset)"]},
+ {"w": 4, "mics": ["Headset (WH-1000XM4 Hands-Free AG Audio)"], "outs": ["Headphones (WH-1000XM4 Stereo)"]},
+ {"w": 3, "mics": ["Headset (AirPods Pro Hands-Free AG Audio)"], "outs": ["Headphones (AirPods Pro Stereo)"]},
+ {"w": 3, "mics": ["Microphone (Jabra Evolve2 65)"], "outs": ["Speakers (Jabra Evolve2 65)"]},
+ {"w": 3, "mics": ["Microphone (Yeti Stereo Microphone)"], "outs": ["Speakers (Yeti Stereo Microphone)"]},
+ {"w": 2, "mics": ["Microphone (SteelSeries Arctis 7)"], "outs": ["Speakers (SteelSeries Arctis 7)"]}
+ ],
+ "displays": [
+ {"w": 8, "outs": ["DELL U2723QE (NVIDIA High Definition Audio)"]},
+ {"w": 8, "outs": ["LG ULTRAGEAR (NVIDIA High Definition Audio)"]},
+ {"w": 6, "outs": ["Samsung (Intel(R) Display Audio)"]},
+ {"w": 6, "outs": ["Acer XV272U (AMD High Definition Audio Device)"]},
+ {"w": 5, "outs": ["ASUS VG279Q (NVIDIA High Definition Audio)"]},
+ {"w": 5, "outs": ["BenQ EX2780Q (Intel(R) Display Audio)"]},
+ {"w": 4, "outs": ["DELL S2721DGF (NVIDIA High Definition Audio)"]},
+ {"w": 4, "outs": ["Digital Audio (S/PDIF) (High Definition Audio Device)"]}
+ ],
+ "cameras": [
+ {"w": 22, "cam": "Integrated Camera", "mic": null},
+ {"w": 16, "cam": "Integrated Webcam", "mic": null},
+ {"w": 9, "cam": "HP TrueVision HD Camera", "mic": null},
+ {"w": 7, "cam": "HP Wide Vision HD Camera", "mic": null},
+ {"w": 6, "cam": "HD Webcam", "mic": null},
+ {"w": 5, "cam": "USB2.0 HD UVC WebCam", "mic": null},
+ {"w": 5, "cam": "Chicony USB2.0 Camera", "mic": null},
+ {"w": 4, "cam": "Lenovo EasyCamera", "mic": null},
+ {"w": 4, "cam": "FHD Webcam", "mic": null},
+ {"w": 4, "cam": "Integrated IR Camera", "mic": null},
+ {"w": 7, "cam": "HD Pro Webcam C920", "mic": "Microphone (HD Pro Webcam C920)"},
+ {"w": 5, "cam": "c922 Pro Stream Webcam", "mic": "Microphone (C922 Pro Stream Webcam)"},
+ {"w": 5, "cam": "Logitech HD Webcam C270", "mic": "Microphone (Logitech HD Webcam C270)"},
+ {"w": 3, "cam": "Logitech BRIO", "mic": "Microphone (Logitech BRIO)"},
+ {"w": 3, "cam": "Microsoft® LifeCam HD-3000", "mic": "Microphone (Microsoft® LifeCam HD-3000)"},
+ {"w": 2, "cam": "Razer Kiyo", "mic": "Microphone (Razer Kiyo)"}
+ ],
+ "p_headset": 0.22,
+ "p_display": 0.28,
+ "p_extra_camera": 0.06
+ },
+ "mac": {
+ "cards": [
+ {"w": 42, "model": "MacBook Pro", "mics": ["MacBook Pro Microphone"], "outs": ["MacBook Pro Speakers"], "cam": "FaceTime HD Camera"},
+ {"w": 30, "model": "MacBook Air", "mics": ["MacBook Air Microphone"], "outs": ["MacBook Air Speakers"], "cam": "FaceTime HD Camera"},
+ {"w": 10, "model": "iMac", "mics": ["iMac Microphone"], "outs": ["iMac Speakers"], "cam": "FaceTime HD Camera"},
+ {"w": 9, "model": "Mac mini", "mics": [], "outs": ["Mac mini Speakers"], "cam": null},
+ {"w": 5, "model": "Mac Studio", "mics": [], "outs": ["Mac Studio Speakers"], "cam": null},
+ {"w": 4, "model": "MacBook Pro", "mics": ["MacBook Pro Microphone"], "outs": ["MacBook Pro Speakers"], "cam": "FaceTime HD Camera (Built-in)"}
+ ],
+ "headsets": [
+ {"w": 10, "mics": ["AirPods Pro"], "outs": ["AirPods Pro"]},
+ {"w": 8, "mics": ["AirPods"], "outs": ["AirPods"]},
+ {"w": 5, "mics": ["AirPods Max"], "outs": ["AirPods Max"]},
+ {"w": 4, "mics": ["WH-1000XM4"], "outs": ["WH-1000XM4"]},
+ {"w": 4, "mics": ["External Microphone"], "outs": ["External Headphones"]},
+ {"w": 3, "mics": ["Jabra Evolve2 65"], "outs": ["Jabra Evolve2 65"]},
+ {"w": 3, "mics": ["Yeti Stereo Microphone"], "outs": ["Yeti Stereo Microphone"]},
+ {"w": 3, "mics": ["iPhone Microphone"], "outs": []}
+ ],
+ "displays": [
+ {"w": 8, "outs": ["Studio Display Speakers"], "mics": ["Studio Display Microphone"], "cam": "Studio Display Camera"},
+ {"w": 6, "outs": ["LG UltraFine Display Audio"]},
+ {"w": 6, "outs": ["DELL U2723QE"]},
+ {"w": 4, "outs": ["LG HDR 4K"]},
+ {"w": 4, "outs": ["Samsung"]}
+ ],
+ "cameras": [
+ {"w": 5, "cam": "HD Pro Webcam C920", "mic": "HD Pro Webcam C920"},
+ {"w": 4, "cam": "Logitech BRIO", "mic": "Logitech BRIO"},
+ {"w": 3, "cam": "C922 Pro Stream Webcam", "mic": "C922 Pro Stream Webcam"},
+ {"w": 3, "cam": "iPhone Camera", "mic": null},
+ {"w": 2, "cam": "OBSBOT Tiny 2", "mic": "OBSBOT Tiny 2"}
+ ],
+ "p_headset": 0.30,
+ "p_display": 0.18,
+ "p_extra_camera": 0.08
+ },
+ "lin": {
+ "cards": [
+ {"w": 40, "mics": ["Built-in Audio Analog Stereo"], "outs": ["Built-in Audio Analog Stereo"]},
+ {"w": 10, "mics": ["Family 17h/19h HD Audio Controller Analog Stereo"], "outs": ["Family 17h/19h HD Audio Controller Analog Stereo"]},
+ {"w": 8, "mics": ["Tiger Lake-LP Smart Sound Technology Audio Controller Analog Stereo"], "outs": ["Tiger Lake-LP Smart Sound Technology Audio Controller Analog Stereo"]},
+ {"w": 6, "mics": ["Raptor Lake-P/U/H cAVS Analog Stereo"], "outs": ["Raptor Lake-P/U/H cAVS Analog Stereo"]},
+ {"w": 6, "mics": ["Starship/Matisse HD Audio Controller Analog Stereo"], "outs": ["Starship/Matisse HD Audio Controller Analog Stereo"]},
+ {"w": 5, "mics": ["Alder Lake PCH-P High Definition Audio Controller Analog Stereo"], "outs": ["Alder Lake PCH-P High Definition Audio Controller Analog Stereo"]},
+ {"w": 5, "mics": ["Comet Lake PCH cAVS Analog Stereo"], "outs": ["Comet Lake PCH cAVS Analog Stereo"]},
+ {"w": 4, "mics": ["Cannon Lake PCH cAVS Analog Stereo"], "outs": ["Cannon Lake PCH cAVS Analog Stereo"]},
+ {"w": 4, "mics": ["Rembrandt Radeon High Definition Audio Controller Analog Stereo"], "outs": ["Rembrandt Radeon High Definition Audio Controller Analog Stereo"]},
+ {"w": 6, "mics": [], "outs": ["Built-in Audio Analog Stereo"]}
+ ],
+ "headsets": [
+ {"w": 6, "mics": ["USB Audio Device Analog Stereo"], "outs": ["USB Audio Device Analog Stereo"]},
+ {"w": 5, "mics": ["WH-1000XM4"], "outs": ["WH-1000XM4"]},
+ {"w": 4, "mics": ["Jabra Evolve2 65"], "outs": ["Jabra Evolve2 65"]},
+ {"w": 4, "mics": ["Yeti Stereo Microphone Analog Stereo"], "outs": ["Yeti Stereo Microphone Analog Stereo"]},
+ {"w": 3, "mics": ["HyperX Cloud II Wireless Analog Stereo"], "outs": ["HyperX Cloud II Wireless Analog Stereo"]},
+ {"w": 3, "mics": ["Scarlett Solo USB Analog Stereo"], "outs": ["Scarlett Solo USB Analog Stereo"]},
+ {"w": 3, "mics": ["AirPods Pro"], "outs": ["AirPods Pro"]}
+ ],
+ "displays": [
+ {"w": 10, "outs": ["HDA NVidia Digital Stereo (HDMI)"]},
+ {"w": 8, "outs": ["Navi 21/23 HDMI/DP Audio Controller Digital Stereo (HDMI)"]},
+ {"w": 8, "outs": ["Built-in Audio Digital Stereo (HDMI)"]},
+ {"w": 6, "outs": ["GA104 High Definition Audio Controller Digital Stereo (HDMI)"]},
+ {"w": 5, "outs": ["Navi 31 HDMI/DP Audio Digital Stereo (HDMI)"]},
+ {"w": 4, "outs": ["Raven/Raven2/Fenghuang HDMI/DP Audio Controller Digital Stereo (HDMI)"]},
+ {"w": 4, "outs": ["Built-in Audio Digital Stereo (IEC958)"]}
+ ],
+ "cameras": [
+ {"w": 20, "cam": "Integrated Camera: Integrated C (04f2:b6d9)", "mic": null},
+ {"w": 12, "cam": "Integrated_Webcam_HD: Integrate (0c45:6a06)", "mic": null},
+ {"w": 8, "cam": "USB2.0 HD UVC WebCam: USB2.0 HD (13d3:56a2)", "mic": null},
+ {"w": 8, "cam": "Chicony USB2.0 Camera: Chicony (04f2:b6ea)", "mic": null},
+ {"w": 6, "cam": "HP TrueVision HD Camera: HP TrueV (0408:5365)", "mic": null},
+ {"w": 6, "cam": "Integrated Camera: Integrated C (5986:2115)", "mic": null},
+ {"w": 5, "cam": "HP HD Camera: HP HD Camera (04ca:7080)", "mic": null},
+ {"w": 4, "cam": "Laptop_Integrated_Webcam_HD: In (0c45:64d0)", "mic": null},
+ {"w": 4, "cam": "Integrated RGB Camera: Integrat (30c9:0035)", "mic": null},
+ {"w": 8, "cam": "HD Pro Webcam C920 (046d:082d)", "mic": "HD Pro Webcam C920 Analog Stereo"},
+ {"w": 6, "cam": "C922 Pro Stream Webcam (046d:085c)", "mic": "C922 Pro Stream Webcam Analog Stereo"},
+ {"w": 5, "cam": "UVC Camera (046d:0825) (046d:0825)", "mic": "Webcam C270 Analog Mono"},
+ {"w": 3, "cam": "Logitech BRIO (046d:085e)", "mic": "Logitech BRIO Analog Stereo"},
+ {"w": 3, "cam": "Microsoft® LifeCam HD-3000: Mi (045e:0779)", "mic": "Microsoft® LifeCam HD-3000 Analog Mono"}
+ ],
+ "p_headset": 0.18,
+ "p_display": 0.55,
+ "p_extra_camera": 0.10,
+ "monitor_sources": true
+ }
+}
diff --git a/pythonlib/camoufox/sync_api.py b/pythonlib/camoufox/sync_api.py
index fde3a8889..aebc15d76 100644
--- a/pythonlib/camoufox/sync_api.py
+++ b/pythonlib/camoufox/sync_api.py
@@ -16,7 +16,9 @@
from .fingerprints import generate_context_fingerprint
from .utils import (
attach_no_viewport_default,
+ attach_stock_media_defaults,
launch_options,
+ STOCK_MEDIA_DEFAULTS,
spoofs_window_dimensions,
sync_attach_vd,
)
@@ -107,24 +109,51 @@ def NewBrowser(
virtual_display = None
if not from_options:
+ # Opt-in (2026-09-17). Pinning keeps the identity's core count by
+ # constraining the browser to that many cores; it costs real CPU, needs
+ # a launch lock, and does nothing on macOS. What it defends against is a
+ # page timing N parallel workers, which is expensive and noisy on a busy
+ # machine. Off, the host's own snapped count is reported, so reported
+ # and measurable still agree -- the identity just loses that one draw.
+ kwargs.setdefault('pin_cpu_cores', False)
from_options = launch_options(headless=headless, debug=debug, **kwargs)
# Playwright's default viewport deadlocks Juggler when the window is spoofed
# to a different size (daijro/camoufox#666), so default to no_viewport.
no_viewport_default = spoofs_window_dimensions(from_options)
- # Persistent context
- if persistent_context:
- if no_viewport_default and not ('viewport' in from_options or 'no_viewport' in from_options):
- from_options = {**from_options, 'no_viewport': True}
- context = playwright.firefox.launch_persistent_context(**from_options)
- return sync_attach_vd(context, virtual_display)
-
- # Browser
- browser = playwright.firefox.launch(**from_options)
- if no_viewport_default:
- attach_no_viewport_default(browser)
- return sync_attach_vd(browser, virtual_display)
+ # Pin the driver (and so the browser it is about to spawn) to as many
+ # cores as the identity reports, so measurable parallelism matches
+ # navigator.hardwareConcurrency; the driver gets its cores back afterwards.
+ from . import cpu_affinity
+ from .utils import driver_pid, pinned_core_count
+
+ pin_to = pinned_core_count(from_options)
+ pid = driver_pid(playwright) if pin_to else None
+ previous = cpu_affinity.pin(pid, pin_to) if pid else None
+ try:
+ # Persistent context
+ if persistent_context:
+ if no_viewport_default and not ('viewport' in from_options or 'no_viewport' in from_options):
+ from_options = {**from_options, 'no_viewport': True}
+ # The persistent context is created by the launch itself, so its media
+ # features come from these options rather than from new_context().
+ from_options = {
+ **{k: v for k, v in STOCK_MEDIA_DEFAULTS.items() if k not in from_options},
+ **from_options,
+ }
+ context = playwright.firefox.launch_persistent_context(**from_options)
+ return sync_attach_vd(context, virtual_display)
+
+ # Browser
+ browser = playwright.firefox.launch(**from_options)
+ if no_viewport_default:
+ attach_no_viewport_default(browser)
+ attach_stock_media_defaults(browser)
+ return sync_attach_vd(browser, virtual_display)
+ finally:
+ if pid:
+ cpu_affinity.restore(pid, previous)
def _proxy_url_with_creds(proxy: Dict[str, str]) -> str:
diff --git a/pythonlib/camoufox/utils.py b/pythonlib/camoufox/utils.py
index 07c28e0cb..4facf9497 100644
--- a/pythonlib/camoufox/utils.py
+++ b/pythonlib/camoufox/utils.py
@@ -1,4 +1,7 @@
+import json
import os
+import platform
+import shutil
import sys
from functools import wraps
from os import environ
@@ -10,7 +13,6 @@
import numpy as np
import orjson
-from browserforge.fingerprints import Fingerprint, Screen
from typing_extensions import TypeAlias
from ua_parser import user_agent_parser
@@ -21,7 +23,8 @@
InvalidPropertyType,
NonFirefoxFingerprint,
)
-from .fingerprints import from_browserforge, from_preset, generate_fingerprint, get_random_preset, _generate_random_font_subset, _generate_random_voice_subset, fix_navigator_arch, fix_screen_no_taskbar, clamp_screen_to_display, clamp_window_dimensions, clamp_window_position, raise_screen_to_modern_floor, sample_webgl_for_screen, set_media_devices_defaults
+from .fingerprints import Screen, from_fpgen, from_preset, generate_fingerprint, get_random_preset, _generate_random_font_subset, _generate_random_voice_subset, fix_navigator_arch, fix_hardware_concurrency, identity_salt, identity_seed, fix_screen_no_taskbar, clamp_screen_to_display, clamp_window_dimensions, clamp_window_position, raise_screen_to_modern_floor, sample_webgl_for_screen, set_media_devices_defaults, WINDOWS_11_MARKER_FONTS
+from . import coherence
from .geolocation import geoip_allowed, get_geolocation
from .ip import Proxy, public_ip, valid_ipv4, valid_ipv6
from .locales import handle_locales
@@ -53,7 +56,65 @@
}
-def _generate_fontconfig(fontconfig_path: str, path: Optional[Path] = None) -> str:
+def _host_os_key() -> Optional[str]:
+ """The host OS in fonts.json / target_os terms ('mac', 'win', 'lin')."""
+ return {'Darwin': 'mac', 'Windows': 'win', 'Linux': 'lin'}.get(platform.system())
+
+
+# navigator.storage.estimate().quota is not a constant: Gecko derives it from
+# the disk. GetTemporaryStorageLimit() (dom/quota/ActorsParent.cpp) takes
+# nsIFile::GetDiskCapacity() of the storage directory and halves it, then
+# QuotaManager::GetGroupLimitForLimit() reports min(that / 5, 10 GiB) to the
+# page -- so any disk of 100 GB or more reads back as exactly 10 GiB, and a
+# smaller one as its own capacity / 10.
+_QUOTA_FIXED_LIMIT_PREF = 'dom.quotaManager.temporaryStorage.fixedLimit'
+# The pref is a signed 32-bit int in KB. Any value above 50 GiB already reports
+# the 10 GiB group cap, so clamping a multi-terabyte disk changes nothing a page
+# can see.
+_INT32_MAX = 2**31 - 1
+
+
+def _stock_profile_disk_capacity_kb() -> Optional[int]:
+ """Half the capacity of the disk a stock Firefox profile would live on, in KB.
+
+ That is the number Gecko's own GetTemporaryStorageLimit() would compute on
+ this machine, and it is what `dom.quotaManager.temporaryStorage.fixedLimit`
+ takes. Capacity is always a multiple of the filesystem block size, so the
+ KB conversion is exact rather than a rounding of it.
+
+ The disk a stock profile lives on, not the one Playwright's throwaway
+ profile lands on: on a host whose temp directory is a tmpfs, that profile
+ sits on a RAM-sized volume no real Firefox profile would (measured here:
+ 3 189 253 734 from a 29.7 GiB /tmp, where the same machine's own Firefox
+ reports 10 737 418 240).
+ """
+ home = Path.home()
+ if OS_NAME == 'win':
+ appdata = os.environ.get('APPDATA')
+ candidates = [Path(appdata) / 'Mozilla' if appdata else home, home]
+ elif OS_NAME == 'mac':
+ candidates = [home / 'Library' / 'Application Support' / 'Firefox', home]
+ else:
+ candidates = [home / '.mozilla', home]
+
+ for candidate in candidates:
+ # The directory only exists if Firefox has ever run here; walk up to
+ # the first path that does, which is on the same filesystem anyway.
+ probe = candidate
+ while not probe.exists() and probe != probe.parent:
+ probe = probe.parent
+ try:
+ total = shutil.disk_usage(probe).total
+ except OSError:
+ continue
+ if total > 0:
+ return min(total // 2 // 1024, _INT32_MAX)
+ return None
+
+
+def _generate_fontconfig(
+ fontconfig_path: str, path: Optional[Path] = None, os_dir: Optional[str] = None
+) -> str:
"""
Generates a runtime fontconfig that resolves bundled font paths absolutely.
The bundled fonts.conf uses prefix="cwd" relative paths which break when
@@ -67,6 +128,42 @@ def _generate_fontconfig(fontconfig_path: str, path: Optional[Path] = None) -> s
# Beside the caller's own binary when they supplied one; see get_env_vars.
fonts_dir = str(path.parent / "fonts") if path else get_path("fonts")
+
+ # Which directories this identity's OS may see.
+ #
+ # fontconfig scans RECURSIVELY, so the parent must never be named: it
+ # would make every other OS's files reachable by the renderer -- hidden by
+ # the allowlist for direct lookups, but still candidates for glyph fallback
+ # (an emoji or CJK glyph from Segoe UI Emoji / PingFang on a machine
+ # claiming Linux).
+ #
+ # The bundle stores each face ONCE, in a directory named for the set of
+ # OSes that use it (L, M, W, LM, LW, MW, LMW) -- see bundle/fonts/groups.json
+ # and scripts/gen-font-groups.py. Storing per-OS instead meant 41% of the
+ # bundle was byte-identical copies. An OS reads the four groups its letter
+ # appears in, so nothing has to be hidden after the fact: a face Windows
+ # must not see is simply not in a group Windows reads.
+ scan_dirs = []
+ groups_path = os.path.join(fonts_dir, "groups.json")
+ os_key = {'linux': 'lin', 'macos': 'mac', 'windows': 'win'}.get(os_dir or '')
+ if os_key and os.path.exists(groups_path):
+ try:
+ with open(groups_path, 'rb') as fh:
+ read_by = json.loads(fh.read()).get('readBy', {}).get(os_key, [])
+ scan_dirs = [
+ os.path.join(fonts_dir, g)
+ for g in read_by
+ if os.path.isdir(os.path.join(fonts_dir, g))
+ ]
+ except (OSError, ValueError):
+ scan_dirs = []
+ if not scan_dirs:
+ # Older bundles ship fonts// with each OS's set duplicated in full.
+ if os_dir and os.path.isdir(os.path.join(fonts_dir, os_dir)):
+ scan_dirs = [os.path.join(fonts_dir, os_dir)]
+ else:
+ scan_dirs = [fonts_dir]
+
fonts_conf_src = os.path.join(fontconfig_path, "fonts.conf")
with open(fonts_conf_src, 'r') as f:
@@ -74,7 +171,7 @@ def _generate_fontconfig(fontconfig_path: str, path: Optional[Path] = None) -> s
conf_content = conf_content.replace(
'fonts',
- f'{fonts_dir}',
+ "\n\t".join(f'{d}' for d in scan_dirs),
)
# INSTALL_DIR is platformdirs' user_cache_dir("camoufox"); see pkgman.
@@ -141,6 +238,32 @@ def _resolved_playwright_version_str() -> str:
return 'the installed version'
+def get_pref_env_vars(prefs: Dict[str, Any]) -> Dict[str, str]:
+ """
+ Pass the launcher's Firefox prefs to settings/camoufox.cfg, which applies them
+ at STARTUP (CAMOU_PREFS_1..N, chunked like CAMOU_CONFIG).
+
+ Playwright's non-persistent launch writes no user.js: firefox_user_prefs only
+ reach the browser at runtime, through juggler's Browser.enable, after startup.
+ Anything Gecko reads during startup therefore raced or never applied -- e.g.
+ intl.locale.requested lost the race against the parent's pre-created
+ dom.properties string bundles on Windows (fr-FR validation messages English
+ in 3 of 4 launches), and mirror-once prefs such as
+ gfx.bundled-fonts.activate were ignored outright.
+ """
+ if not prefs:
+ return {}
+ # ASCII only: on Windows autoconfig's getenv() reads the environment through
+ # the ANSI code page, which would mangle a raw UTF-8 pref value (\u escapes
+ # survive it and JSON.parse restores them).
+ data = json.dumps(prefs, ensure_ascii=True, separators=(',', ':'))
+ chunk_size = 2047 if OS_NAME == 'win' else 32767
+ return {
+ f"CAMOU_PREFS_{(i // chunk_size) + 1}": data[i : i + chunk_size]
+ for i in range(0, len(data), chunk_size)
+ }
+
+
def get_env_vars(
config_map: Dict[str, str],
user_agent_os: str,
@@ -203,7 +326,7 @@ def _bundle_path(*parts: str) -> str:
f"fonts.conf not found in {fontconfig_path}! Something ain't right with your camoufox bundle."
)
- env_vars['FONTCONFIG_FILE'] = _generate_fontconfig(fontconfig_path, path=path)
+ env_vars['FONTCONFIG_FILE'] = _generate_fontconfig(fontconfig_path, path=path, os_dir=os_dir)
return env_vars
@@ -214,6 +337,12 @@ def _load_properties(path: Optional[Path] = None) -> Dict[str, str]:
"""
if path:
prop_file = str(path.parent / "properties.json")
+ if not os.path.exists(prop_file):
+ # macOS app bundle: the binary is Contents/MacOS/camoufox, the
+ # packaged settings live in Contents/Resources/.
+ bundled = path.parent.parent / "Resources" / "properties.json"
+ if bundled.exists():
+ prop_file = str(bundled)
else:
prop_file = get_path("properties.json")
with open(prop_file, "rb") as f:
@@ -352,15 +481,14 @@ def update_fonts(config: Dict[str, Any], target_os: str) -> None:
config['fonts'] = fonts
-def check_custom_fingerprint(fingerprint: Fingerprint) -> None:
+def check_custom_fingerprint(fingerprint: Dict[str, Any]) -> None:
"""
- Asserts that the passed BrowserForge fingerprint is a valid Firefox fingerprint.
+ Asserts that the passed fingerprint is a valid Firefox fingerprint,
and warns the user that passing their own fingerprint is not recommended.
"""
# Check what the browser is
- browser_name = user_agent_parser.ParseUserAgent(fingerprint.navigator.userAgent).get(
- 'family', 'Non-Firefox'
- )
+ user_agent = (fingerprint.get('navigator') or {}).get('userAgent') or ''
+ browser_name = user_agent_parser.ParseUserAgent(user_agent).get('family', 'Non-Firefox')
if browser_name != 'Firefox':
raise NonFirefoxFingerprint(
f'"{browser_name}" fingerprints are not supported in Camoufox. '
@@ -472,6 +600,42 @@ def warn_manual_config(config: Dict[str, Any]) -> None:
)
+def _camou_config_blob(from_options: Dict[str, Any]) -> str:
+ env = from_options.get('env') or {}
+ chunks = [(int(k.rsplit('_', 1)[1]), v) for k, v in env.items() if k.startswith('CAMOU_CONFIG_')]
+ return ''.join(v for _, v in sorted(chunks))
+
+
+def pinned_core_count(from_options: Dict[str, Any]) -> Optional[int]:
+ """The core count the browser must be pinned to for these launch options,
+ or None: the identity's navigator.hardwareConcurrency when this host can
+ honour it (see cpu_affinity), so a page measuring parallelism sees the
+ reported number."""
+ from .cpu_affinity import host_cores, supported
+
+ blob = _camou_config_blob(from_options)
+ if not blob or not supported():
+ return None
+ try:
+ value = orjson.loads(blob).get('navigator.hardwareConcurrency')
+ except (orjson.JSONDecodeError, AttributeError):
+ return None
+ cores = host_cores()
+ if isinstance(value, int) and cores and 1 <= value < len(cores):
+ return value
+ return None
+
+
+def driver_pid(playwright: Any) -> Optional[int]:
+ """PID of the Playwright driver that will spawn the browser (its children
+ inherit the CPU affinity we set on it)."""
+ try:
+ impl = getattr(playwright, '_impl_obj', playwright)
+ return int(impl._connection._transport._proc.pid)
+ except Exception:
+ return None
+
+
def spoofs_window_dimensions(from_options: Dict[str, Any]) -> bool:
"""
Whether the CAMOU_CONFIG in a set of launch options spoofs any window
@@ -486,6 +650,49 @@ def spoofs_window_dimensions(from_options: Dict[str, Any]) -> bool:
return any(key in blob for key in _WINDOW_DIM_KEYS)
+# Playwright emulates four media features on every context it creates, whether
+# or not the caller asked: `colorScheme` defaults to "light" and reducedMotion /
+# forcedColors / contrast to their no-preference values. That is an override, not
+# a passthrough -- the page then reports it whatever the host is set to, so a
+# desktop in dark mode still reads `(prefers-color-scheme: light)`, where stock
+# Firefox on that machine reads dark (measured 2026-09-18, headed on a private
+# Xvfb with GTK_THEME=Adwaita:dark: stock dark, camoufox light, camoufox with
+# these defaults dark). "no-override" is Playwright's own opt-out: it sends no
+# emulation at all and the browser answers from the host.
+STOCK_MEDIA_DEFAULTS = {
+ 'color_scheme': 'no-override',
+ 'reduced_motion': 'no-override',
+ 'forced_colors': 'no-override',
+ 'contrast': 'no-override',
+}
+
+
+def attach_stock_media_defaults(target: Any) -> Any:
+ """Default new_page()/new_context() to the host's own media features.
+
+ Explicit color_scheme= / reduced_motion= / forced_colors= / contrast= from
+ the caller always wins; this only replaces Playwright's silent defaults.
+ """
+ for name in ('new_page', 'new_context'):
+ original = getattr(target, name, None)
+ if original is None:
+ continue
+
+ def wrap(original: Any) -> Any:
+ @wraps(original)
+ def wrapper(*args: Any, **kwargs: Any) -> Any:
+ for option, value in STOCK_MEDIA_DEFAULTS.items():
+ kwargs.setdefault(option, value)
+ # Works for both sync and async: async returns the coroutine
+ # unawaited, and the caller awaits it as usual.
+ return original(*args, **kwargs)
+
+ return wrapper
+
+ setattr(target, name, wrap(original))
+ return target
+
+
def attach_no_viewport_default(target: Any) -> Any:
"""
Default new_page()/new_context() to no_viewport=True.
@@ -617,7 +824,7 @@ def launch_options(
exclude_addons: Optional[List[DefaultAddons]] = None,
screen: Optional[Screen] = None,
window: Optional[Tuple[int, int]] = None,
- fingerprint: Optional[Fingerprint] = None,
+ fingerprint: Optional[Dict[str, Any]] = None,
fingerprint_preset: Optional[Union[bool, Dict[str, Any]]] = None,
ff_version: Optional[int] = None,
headless: Optional[bool] = None,
@@ -633,6 +840,7 @@ def launch_options(
i_know_what_im_doing: Optional[bool] = None,
debug: Optional[bool] = None,
virtual_display: Optional[str] = None,
+ pin_cpu_cores: Optional[bool] = None,
**launch_options: Dict[str, Any],
) -> Dict[str, Any]:
"""
@@ -678,11 +886,11 @@ def launch_options(
Default addons to exclude. Passed as a list of camoufox.DefaultAddons enums.
screen (Optional[Screen]):
Constrains the screen dimensions of the generated fingerprint.
- Takes a browserforge.fingerprints.Screen instance.
+ Takes a camoufox.fingerprints.Screen instance.
window (Optional[Tuple[int, int]]):
Set a fixed window size instead of generating a random one
fingerprint (Optional[Fingerprint]):
- Use a custom BrowserForge fingerprint. Note: Not all values will be implemented.
+ Use a custom fpgen fingerprint. Note: Not all values will be implemented.
If not provided, a random fingerprint will be generated based on the provided
`os` & `screen` constraints.
fingerprint_preset (Optional[Union[bool, Dict[str, Any]]]):
@@ -724,6 +932,13 @@ def launch_options(
Prints the config being sent to Camoufox.
virtual_display (Optional[str]):
Virtual display number. Ex: ':99'. This is handled by Camoufox & AsyncCamoufox.
+ pin_cpu_cores (Optional[bool]):
+ Pin the browser to navigator.hardwareConcurrency cores
+ (Linux/Windows) so the fingerprint's own core count can be kept:
+ a page timing N parallel workers then measures the number it was
+ told. OFF by default -- it costs real CPU and serializes concurrent
+ launches. Without it the host's own (snapped) count is reported,
+ which is equally coherent, just less diverse.
webgl_config (Optional[Tuple[str, str]]):
Use a specific WebGL vendor/renderer pair. Passed as a tuple of (vendor, renderer).
**launch_options (Dict[str, Any]):
@@ -784,6 +999,25 @@ def launch_options(
_user_set_navigator = is_domain_set(config, 'navigator.')
_user_set_screen_window = is_domain_set(config, 'screen.', 'window.')
_user_set_media_devices = is_domain_set(config, 'mediaDevices:')
+ _user_set_fonts = bool(fonts) or is_domain_set(config, 'fonts')
+ _user_set_voices = is_domain_set(config, 'voices')
+ _user_set_dnt = 'navigator.doNotTrack' in config
+ _user_set_gpc = 'navigator.globalPrivacyControl' in config
+ _user_set_accept_encoding = 'headers.Accept-Encoding' in config
+ _user_set_noise_seeds = {k for k in ('audio:seed', 'canvas:seed') if k in config}
+
+ # The salt that makes every seeded draw belong to this identity (see
+ # fingerprints.identity_salt): stable when the caller pinned the identity
+ # -- a Fingerprint, a preset dict, or their own config naming the UA --
+ # and fresh otherwise.
+ if fingerprint is not None:
+ _identity_salt = identity_salt(fingerprint)
+ elif isinstance(fingerprint_preset, dict):
+ _identity_salt = identity_salt(fingerprint_preset)
+ elif 'navigator.userAgent' in config:
+ _identity_salt = identity_salt(dict(config))
+ else:
+ _identity_salt = identity_salt()
# Assert the target OS is valid
if os:
@@ -821,7 +1055,7 @@ def launch_options(
else:
preset = get_random_preset(os=os, ff_version=ff_version_str)
if preset:
- merge_into(config, from_preset(preset, ff_version_str))
+ merge_into(config, from_preset(preset, ff_version_str, salt=_identity_salt))
_used_preset = True
# Bound the geometry to the real display. BrowserForge only honours this when
@@ -832,7 +1066,7 @@ def launch_options(
screen_cons = screen or (get_screen_cons(headless) if has_display(env) else None)
if not _used_preset and fingerprint is None:
- # Default: BrowserForge synthetic generation (infinite unique fingerprints)
+ # Default: synthetic generation via fpgen (infinite unique fingerprints)
fingerprint = generate_fingerprint(
screen=screen_cons,
window=window,
@@ -840,18 +1074,29 @@ def launch_options(
)
if not _used_preset and fingerprint is not None:
- # Inject the BrowserForge fingerprint into the config
+ # Inject the generated fingerprint into the config
merge_into(
config,
- from_browserforge(fingerprint, ff_version_str),
+ from_fpgen(fingerprint, ff_version_str),
)
target_os = get_target_os(config)
- # Correct BrowserForge fingerprint inconsistencies that leak as headless /
+ # Drop values the source supplied that this identity cannot keep, before the
+ # pools below defer to them (a preset's own GPU pair wins over sampling).
+ coherence.drop_incoherent_source_values(config, target_os)
+ # A preset whose screen is a phone viewport is not a real desktop device;
+ # the floor is normally skipped for presets, on the assumption that a preset
+ # IS a real machine, which 736x414 disproves.
+ if not _user_set_screen_window and coherence.screen_is_implausible(config):
+ coherence.repair_screen_orientation(config)
+ raise_screen_to_modern_floor(config)
+
+ # Correct fingerprint inconsistencies that leak as headless /
# impossible-geometry tells, unless the user is driving these themselves.
if not _user_set_navigator:
fix_navigator_arch(config, target_os)
+ fix_hardware_concurrency(config, can_pin=bool(pin_cpu_cores))
if not _user_set_screen_window:
# Lift netbook-era geometry to something current hardware reports,
# before the display clamp below so a genuinely small real monitor
@@ -896,50 +1141,159 @@ def launch_options(
LeakWarning.warn('custom_fonts_only')
else:
raise ValueError('No custom fonts were passed, but `custom_fonts_only` is enabled.')
- elif 'fonts' not in config or not config.get('fonts'):
- # Generate a unique random font subset from the OS font list
+ elif not _user_set_fonts or not config.get('fonts'):
+ # Draw the font subset HERE, after every identity fix-up above, so the
+ # seed sees the final UA/screen/cores/GPU: the same presented identity
+ # always gets the same font list (#442/#765). A draw the fingerprint
+ # generator made earlier from a partial config is replaced.
os_name = {'win': 'windows', 'mac': 'macos', 'lin': 'linux'}.get(target_os, 'macos')
try:
- config['fonts'] = _generate_random_font_subset(os_name)
- except Exception:
- update_fonts(config, target_os)
-
- # Spoof the speech-synthesis voice list.
- #
- # This has to fail CLOSED. Firefox registers the host's speech-dispatcher /
- # SAPI / NSSpeech voices unless something stops it, and nsSynthVoiceRegistry
- # only stops it when Camoufox owns the list. Leaving `voices` unset -- which
- # the old `except Exception: pass` did on any generation failure -- exposed
- # every native voice on the box (14805 espeak-ng entries on a stock Linux
- # install) under a fingerprint claiming macOS or Windows: it both leaks the
- # real host OS and contradicts the rest of the profile (#731).
- if 'voices' not in config:
- os_name_v = {'win': 'windows', 'mac': 'macos', 'lin': 'linux'}.get(target_os, 'macos')
- try:
- config['voices'] = _generate_random_voice_subset(
- os_name_v, config.get('navigator.language')
+ config['fonts'] = _generate_random_font_subset(
+ os_name,
+ seed=identity_seed(config, _identity_salt),
+ # host's own OS on macOS/Windows: the real system fonts are used
+ # (font-hijacker.patch keeps the bundle inactive), so only the
+ # OS base is claimed
+ native=(target_os in ('mac', 'win') and _host_os_key() == target_os),
)
except Exception:
- # An empty list still blocks the host's voices (see below), so a
- # generation failure degrades to "no voices" rather than "all of
- # the host's".
- config['voices'] = []
-
- # Pin the block explicitly instead of relying on a non-empty list to imply
- # it, so an empty list -- or one whose entries the browser rejects as
- # malformed -- cannot fall through to the host's native voices. set_into
- # leaves an explicit caller value alone.
- set_into(config, 'voices:blockIfNotDefined', True)
+ update_fonts(config, target_os)
- # Default mediaDevices to one mic + one camera so headless contexts don't
- # expose an empty enumerateDevices() list (a headless tell).
+ # Draw the identity's media devices (counts + OS-style labels/groups from
+ # media-devices.json, seeded by the identity) unless the caller set any
+ # mediaDevices: key. An empty enumerateDevices() list is a headless tell;
+ # a wrong label after a grant is a spoof tell.
if not _user_set_media_devices:
- set_media_devices_defaults(config)
+ set_media_devices_defaults(config, _identity_salt)
+
+ # Scrollbars: a stock Firefox on a GNOME/KDE desktop and on macOS draws
+ # overlay scrollbars (no layout gutter, scrollbar-width "auto"). On Windows it
+ # follows the OS: Windows 11's default ("Always show scrollbars" off) is
+ # overlay -- stock 152.0.4 on a Win11 laptop measures 0 px -- while Windows 10
+ # draws classic 17 px ones. Headless Firefox reports the classic kind, and
+ # upstream Playwright hid them outright, which a page can read back. Pin the
+ # look-and-feel to the claimed OS so headless == headed == stock, and for
+ # Windows to the version the identity's font draw presents (the Win11-only
+ # fonts in _BASE_VARIANT_FONTS_WINDOWS): Win11 fonts with classic scrollbars
+ # is a pair no real machine produces.
+ if target_os == 'win':
+ presented_fonts = config.get('fonts') or []
+ windows_11 = not presented_fonts or any(
+ font in presented_fonts for font in WINDOWS_11_MARKER_FONTS
+ )
+ firefox_user_prefs.setdefault('ui.useOverlayScrollbars', 1 if windows_11 else 0)
+ else:
+ firefox_user_prefs.setdefault('ui.useOverlayScrollbars', 1)
+
+ # Per-character font fallback, LINUX ONLY. Gecko's GlobalFontFallback walks
+ # the shared font list for a family whose charmap covers the character; in a
+ # content process with async fallback on it hits the
+ # `!family.IsFullyInitialized()` branch, schedules a cmap load and SKIPS the
+ # family, so the first measurement of a character only one bundled family
+ # provides returns the primary family's .notdef. Linux takes that path for
+ # every fallback (gfxPlatformGtk::UseCmapsDuringSystemFallback is true), so
+ # the font-hijacker fix that restored this on macOS cannot reach it here.
+ # Measured 2026-09-15, 32px canvas `serif`, U+0870: .notdef 19.0 with async
+ # on, a real glyph (9.25) with it off; stock Firefox resolves it.
+ # macOS must NOT get this: it uses the platform (CoreText) fallback, where
+ # forcing the synchronous scan changed the face picked for U+1E9E in Futura
+ # (21.733 stock -> 27.267) -- measured on a stock Mac mini, 1/14 families
+ # regressed. Windows is untested until a Windows build exists.
+ if target_os == 'lin':
+ firefox_user_prefs.setdefault('gfx.font_rendering.fallback.async', False)
+
+ # Storage quota, from the host's own disk. A page reads the group limit
+ # through navigator.storage.estimate().quota; see
+ # _stock_profile_disk_capacity_kb for how Gecko derives it. Playwright's
+ # profile is a throwaway directory under the system temp dir, which on a
+ # tmpfs /tmp is a RAM-sized volume, so leaving Gecko to measure it reports a
+ # disk this machine does not have. Pinning the limit instead -- camoufox.cfg
+ # used to set 50 GiB, which is exactly nsRFPService::GetSpoofedStorageLimit()
+ # -- reports 10 GiB on every host, including hosts whose real disk is far
+ # smaller and whose stock Firefox therefore reports capacity / 10.
+ _quota_limit_kb = _stock_profile_disk_capacity_kb()
+ if _quota_limit_kb:
+ firefox_user_prefs.setdefault(_QUOTA_FIXED_LIMIT_PREF, _quota_limit_kb)
+
+ # Bundled fonts: on macOS and Windows the package's font bundle is
+ # registered on top of the system fonts, and a bundled face of a family
+ # the system also has (Papyrus, Helvetica, ...) wins the lookup with
+ # metrics that differ from the real one (measured 2026-09-14 on a stock
+ # Mac mini: bundled Papyrus 224.3 px vs the system's 247.3 px). When the
+ # identity is the host's own OS the real system fonts ARE the right ones.
+ # `gfx.bundled-fonts.activate` cannot do it from here (a `once` pref the
+ # font list reads before profile prefs apply), so font-hijacker.patch
+ # skips the activation itself whenever navigator.platform is the host's;
+ # the font draw above claims only the OS base in that case (`native`).
+
+ # navigator.doNotTrack and navigator.globalPrivacyControl are pref-backed
+ # in Firefox: the main-thread getter, the WorkerNavigator getter and the
+ # DNT / Sec-GPC request headers all derive from the same pref. Spoofing
+ # the value anywhere else leaves the wire (or the worker) contradicting
+ # the API (daijro/camoufox#760), so the config keys are applied as prefs.
+ #
+ # The BrowserForge data carries doNotTrack "1" on most Firefox samples, but
+ # a stock Firefox 152 reports "unspecified" (the DNT setting was removed in
+ # 135) and globalPrivacyControl false outside private windows; measured
+ # 2026-09-14: every camoufox run said "1"/true, every stock run
+ # "unspecified"/false. So the generated values are dropped and the stock
+ # defaults used unless the caller set them explicitly.
+ # screen.colorDepth is left exactly as the identity drew it.
+ #
+ # It was briefly pinned to 24 here on the theory that "Firefox reports 24 on
+ # every desktop OS" (from a single headless Mac reading, 2026-09-14). That
+ # is WRONG and the pin was a fingerprinting regression, not a fix:
+ # * the recorded real-device corpus says macOS is 30 in 90-96% of presets
+ # (fingerprint-presets.json 27/30, -v150 64/67) and Windows/Linux are 24
+ # in 100% (75/75, 180/180 / 18/18, 65/65);
+ # * stock Firefox 152.0.4 on a real 10-bit Mac reports 30 -- measured on
+ # a Mac mini headed, 8/8 runs (the earlier "stock Mac mini 24" was
+ # HEADLESS, where the virtual screen genuinely is 8-bit);
+ # * the draw itself is already clean per OS (120/120 macOS -> 30,
+ # 120/120 Windows -> 24, 120/120 Linux -> 24), so the pin protected
+ # against nothing and only pushed macOS identities into the 4-10%
+ # minority.
+ # It also created a second leak: 24 was applied at the WebIDL level only, so
+ # it contradicted the CSS `color` media feature on a 10-bit panel
+ # (24 + `(color: 10)`, a pair Gecko cannot produce). The media feature now
+ # follows the spoofed depth (screen-spoofing.patch,
+ # Gecko_MediaFeatures_GetColorDepth), which is what makes ANY spoofed value
+ # -- including a cross-OS one -- internally coherent.
+
+ if not _user_set_dnt:
+ config.pop('navigator.doNotTrack', None)
+ if not _user_set_gpc:
+ config.pop('navigator.globalPrivacyControl', None)
+ dnt = config.get('navigator.doNotTrack')
+ firefox_user_prefs['privacy.donottrackheader.enabled'] = dnt is not None and str(dnt) == '1'
+ gpc = config.get('navigator.globalPrivacyControl')
+ firefox_user_prefs['privacy.globalprivacycontrol.enabled'] = bool(gpc) if gpc is not None else False
+
+ # Accept-Encoding: stock Firefox advertises "gzip, deflate, br, zstd" over
+ # https and only "gzip, deflate" over http; a forced header value is sent
+ # on both (measured 2026-09-14: br/zstd on a plain-http echo). Firefox's
+ # own value is already what the identity claims, so the generated header
+ # is dropped unless the caller set it.
+ if not _user_set_accept_encoding:
+ config.pop('headers.Accept-Encoding', None)
# Set random seeds for fingerprint noise (per launch)
- set_into(config, 'fonts:spacing_seed', randint(1, 4_294_967_295)) # nosec
- set_into(config, 'audio:seed', randint(1, 4_294_967_295)) # nosec
- set_into(config, 'canvas:seed', randint(1, 4_294_967_295)) # nosec
+ # Glyph-advance perturbation is OFF by default (seed 0): it moves every
+ # measured text width off the value the same font produces on a real
+ # machine (measured 2026-09-14: +1 px per ~100 glyphs, fractional deltas
+ # on every measureText), which is a fingerprint no stock Firefox emits.
+ # Pass fonts:spacing_seed explicitly to opt back in.
+ set_into(config, 'fonts:spacing_seed', 0)
+ # audio/canvas noise seeds follow the identity: a returning "same device"
+ # must reproduce its audio and canvas hashes (#442/#765). Derived, not
+ # equal, so the two streams differ; never 0 (0 disables the noise).
+ # A preset draws its own random seeds; they are replaced here too so a
+ # pinned preset reproduces them, but a seed the caller set is kept.
+ _ident = identity_seed(config, _identity_salt)
+ if 'audio:seed' not in _user_set_noise_seeds:
+ config['audio:seed'] = ((_ident * 2654435761 + 97) & 0xFFFFFFFF) or 1
+ if 'canvas:seed' not in _user_set_noise_seeds:
+ config['canvas:seed'] = ((_ident * 40503 + 12345) & 0xFFFFFFFF) or 1
# Set geolocation
if geoip:
@@ -968,6 +1322,16 @@ def launch_options(
else:
config[key] = value
+ # A page that receives a position without a prompt must also see
+ # permissions.query({name: 'geolocation'}) report "granted" -- that is
+ # what a real Firefox with a stored site grant does. The C++ auto-grant
+ # alone delivers the fix while the Permissions API still says "prompt",
+ # which is an incoherence a page can test (daijro/camoufox#769). The
+ # allow-by-default pref is the same state a user creates by choosing
+ # "Always allow", so both APIs agree without any per-site permission.
+ if 'geolocation:latitude' in config and 'geolocation:longitude' in config:
+ firefox_user_prefs.setdefault('permissions.default.geo', 1)
+
# Raise a warning when a proxy is being used without spoofing geolocation.
# This is a very bad idea; the warning cannot be ignored with i_know_what_im_doing.
elif (
@@ -981,6 +1345,65 @@ def launch_options(
if locale:
handle_locales(locale, config)
+ # Select the browser's UI locale to match the Intl locale. Every
+ # package bakes in Firefox's language packs as packaged locales
+ # (scripts/inject-locales.py); without this pref the browser stays en-US, so
+ # a spoofed fr-FR localizes Intl/number/date formatting while
+ # input.validationMessage and XML parse errors stay English -- a mix no real
+ # Firefox produces (a Mozilla fr build localizes both). Gecko negotiates the
+ # value against the packaged locales exactly as a localized build does
+ # (fr-FR -> fr, pt-BR -> pt-BR), falling back to en-US. Always set: an EMPTY
+ # value would follow the host OS locale now that more than en-US is packaged.
+ if config.get('locale:language'):
+ requested = '-'.join(
+ part
+ for part in (
+ config['locale:language'],
+ config.get('locale:script'),
+ config.get('locale:region'),
+ )
+ if part
+ )
+ else:
+ requested = 'en-US'
+ firefox_user_prefs.setdefault('intl.locale.requested', requested)
+
+ # Spoof the speech-synthesis voice list.
+ #
+ # This has to fail CLOSED. Firefox registers the host's speech-dispatcher /
+ # SAPI / NSSpeech voices unless something stops it, and nsSynthVoiceRegistry
+ # only stops it when Camoufox owns the list. Leaving `voices` unset -- which
+ # the old `except Exception: pass` did on any generation failure -- exposed
+ # every native voice on the box (14805 espeak-ng entries on a stock Linux
+ # install) under a fingerprint claiming macOS or Windows: it both leaks the
+ # real host OS and contradicts the rest of the profile (#731).
+ #
+ # Drawn after the locale is resolved (locale= or geoip): the Windows voice
+ # list is the display language's pack, so an fr-FR identity has French
+ # voices, not the en-US ones.
+ if not _user_set_voices or 'voices' not in config:
+ os_name_v = {'win': 'windows', 'mac': 'macos', 'lin': 'linux'}.get(target_os, 'macos')
+ voice_locale = config.get('navigator.language')
+ if config.get('locale:language'):
+ voice_locale = '-'.join(
+ part for part in (config['locale:language'], config.get('locale:region')) if part
+ )
+ try:
+ config['voices'] = _generate_random_voice_subset(
+ os_name_v, voice_locale, seed=identity_seed(config, _identity_salt)
+ )
+ except Exception:
+ # An empty list still blocks the host's voices (see below), so a
+ # generation failure degrades to "no voices" rather than "all of
+ # the host's".
+ config['voices'] = []
+
+ # Pin the block explicitly instead of relying on a non-empty list to imply
+ # it, so an empty list -- or one whose entries the browser rejects as
+ # malformed -- cannot fall through to the host's native voices. set_into
+ # leaves an explicit caller value alone.
+ set_into(config, 'voices:blockIfNotDefined', True)
+
# Pass the humanize option
if humanize:
set_into(config, 'humanize', True)
@@ -1014,17 +1437,45 @@ def launch_options(
else:
# If the user has provided a specific WebGL vendor/renderer pair, use it
if webgl_config:
- webgl_fp = sample_webgl(target_os, *webgl_config)
+ webgl_fp = sample_webgl(target_os, *webgl_config, seed=identity_seed(config, _identity_salt))
elif config.get('webGl:vendor') and config.get('webGl:renderer'):
# Preset already set vendor/renderer — sample matching WebGL params
- webgl_fp = sample_webgl(target_os, config['webGl:vendor'], config['webGl:renderer'])
+ try:
+ webgl_fp = sample_webgl(target_os, config['webGl:vendor'], config['webGl:renderer'], seed=identity_seed(config, _identity_salt))
+ except ValueError:
+ # The pair is not in webgl_data.db, which holds 33 GPUs. 39 of the
+ # 435 bundled presets name one it does not have -- including rows
+ # that cannot be the OS they are filed under, e.g. a Windows
+ # preset claiming "ANGLE (Unknown, Adreno (TM) 650 ...)", a phone
+ # GPU. Raising here made launch_options() fail outright for ~9% of
+ # presets, and a caller passing their own preset dict had no way
+ # to know which pairs are supported.
+ #
+ # There is no way to keep the named GPU: the parameters, extension
+ # list and shader precisions all have to come from a real recorded
+ # device, and there is none for an unknown renderer. So draw a GPU
+ # that fits the screen and let it replace the pair -- the identity
+ # loses the preset's GPU string but stays internally coherent,
+ # which is the property that matters to a page reading both.
+ webgl_fp = sample_webgl_for_screen(
+ target_os, config.get('screen.width'), config.get('screen.height'),
+ seed=identity_seed(config, _identity_salt),
+ )
+ # merge_into does not overwrite keys that are already set, and the
+ # preset set these two. Drop them, or the page would read the
+ # preset's renderer string with another device's parameters,
+ # extensions and shader precisions behind it -- a mismatch louder
+ # than the unknown GPU we are replacing.
+ config.pop('webGl:vendor', None)
+ config.pop('webGl:renderer', None)
else:
# Synthetic path: keep the GPU coherent with the screen BrowserForge
# already picked. Sampling the two independently yields pairs no
# real machine ships -- a discrete desktop GPU behind a 1024x600
# panel -- which consistency checks read as masking (#729).
webgl_fp = sample_webgl_for_screen(
- target_os, config.get('screen.width'), config.get('screen.height')
+ target_os, config.get('screen.width'), config.get('screen.height'),
+ seed=identity_seed(config, _identity_salt),
)
enable_webgl2 = webgl_fp.pop('webGl2Enabled')
@@ -1039,6 +1490,17 @@ def launch_options(
},
)
+ # Every identity passes the whole-identity checks, whatever built it: a
+ # generated fingerprint, a bundled preset, or a config the caller wrote.
+ # The pools are sampled independently -- navigator and screen from the
+ # generator, GPU from webgl_data.db, fonts and voices from their own
+ # catalogues -- so a machine that never existed can be assembled from parts
+ # that are each fine on their own. See coherence.py.
+ _incoherent = coherence.apply(config, target_os)
+ if _incoherent and debug:
+ for _violation in _incoherent:
+ print(f'Incoherent identity ({_violation.rule}): {_violation.detail}')
+
# Cache previous pages, requests, etc (uses more memory)
if enable_cache:
merge_into(firefox_user_prefs, CACHE_PREFS)
@@ -1055,6 +1517,7 @@ def launch_options(
# Prepare environment variables to pass to Camoufox
env_vars = {
**get_env_vars(config, target_os, path=executable_path),
+ **get_pref_env_vars(firefox_user_prefs),
**env,
}
# Prepare the executable path
diff --git a/pythonlib/camoufox/voice-manifests.json b/pythonlib/camoufox/voice-manifests.json
new file mode 100644
index 000000000..9d6d42f8b
--- /dev/null
+++ b/pythonlib/camoufox/voice-manifests.json
@@ -0,0 +1,672 @@
+{
+ "win": {
+ "base": [],
+ "langPacks": {
+ "en-US": {
+ "oneCore": [
+ "Microsoft David - English (United States):en-US:local",
+ "Microsoft Mark - English (United States):en-US:local",
+ "Microsoft Zira - English (United States):en-US:local"
+ ],
+ "desktop": [
+ "Microsoft David Desktop - English (United States):en-US:local",
+ "Microsoft Zira Desktop - English (United States):en-US:local"
+ ],
+ "desktopProb": 1,
+ "weight": 0,
+ "provenance": "captured"
+ },
+ "en-GB": {
+ "oneCore": [
+ "Microsoft George - English (United Kingdom):en-GB:local",
+ "Microsoft Hazel - English (United Kingdom):en-GB:local",
+ "Microsoft Susan - English (United Kingdom):en-GB:local"
+ ],
+ "desktop": [
+ "Microsoft Hazel Desktop - English (Great Britain):en-GB:local"
+ ],
+ "desktopProb": 0.2,
+ "weight": 0.1,
+ "provenance": "captured"
+ },
+ "en-AU": {
+ "oneCore": [
+ "Microsoft Catherine - English (Australia):en-AU:local",
+ "Microsoft James - English (Australia):en-AU:local"
+ ],
+ "weight": 0.02,
+ "provenance": "captured"
+ },
+ "en-CA": {
+ "oneCore": [
+ "Microsoft Linda - English (Canada):en-CA:local",
+ "Microsoft Richard - English (Canada):en-CA:local"
+ ],
+ "weight": 0.02,
+ "provenance": "captured"
+ },
+ "en-IE": {
+ "oneCore": [
+ "Microsoft Sean - English (Ireland):en-IE:local"
+ ],
+ "weight": 0.01,
+ "provenance": "captured"
+ },
+ "en-IN": {
+ "oneCore": [
+ "Microsoft Heera - English (India):en-IN:local",
+ "Microsoft Ravi - English (India):en-IN:local"
+ ],
+ "weight": 0.04,
+ "provenance": "captured"
+ },
+ "de-DE": {
+ "oneCore": [
+ "Microsoft Hedda - German (Germany):de-DE:local",
+ "Microsoft Katja - German (Germany):de-DE:local",
+ "Microsoft Stefan - German (Germany):de-DE:local"
+ ],
+ "desktop": [
+ "Microsoft Hedda Desktop - German:de-DE:local"
+ ],
+ "desktopProb": 0.2,
+ "weight": 0.1,
+ "provenance": "captured"
+ },
+ "fr-FR": {
+ "oneCore": [
+ "Microsoft Hortense - French (France):fr-FR:local",
+ "Microsoft Julie - French (France):fr-FR:local",
+ "Microsoft Paul - French (France):fr-FR:local"
+ ],
+ "desktop": [
+ "Microsoft Hortense Desktop - French:fr-FR:local"
+ ],
+ "desktopProb": 0.2,
+ "weight": 0.1,
+ "provenance": "captured"
+ },
+ "es-ES": {
+ "oneCore": [
+ "Microsoft Helena - Spanish (Spain):es-ES:local",
+ "Microsoft Laura - Spanish (Spain):es-ES:local",
+ "Microsoft Pablo - Spanish (Spain):es-ES:local"
+ ],
+ "desktop": [
+ "Microsoft Helena Desktop - Spanish (Spain):es-ES:local"
+ ],
+ "desktopProb": 0.2,
+ "weight": 0.1,
+ "provenance": "captured"
+ },
+ "es-MX": {
+ "oneCore": [
+ "Microsoft Raul - Spanish (Mexico):es-MX:local",
+ "Microsoft Sabina - Spanish (Mexico):es-MX:local"
+ ],
+ "desktop": [
+ "Microsoft Sabina Desktop - Spanish (Mexico):es-MX:local"
+ ],
+ "desktopProb": 0.2,
+ "weight": 0.05,
+ "provenance": "captured"
+ },
+ "it-IT": {
+ "oneCore": [
+ "Microsoft Cosimo - Italian (Italy):it-IT:local",
+ "Microsoft Elsa - Italian (Italy):it-IT:local"
+ ],
+ "desktop": [
+ "Microsoft Elsa Desktop - Italian (Italy):it-IT:local"
+ ],
+ "desktopProb": 0.2,
+ "weight": 0.06,
+ "provenance": "captured"
+ },
+ "pt-BR": {
+ "oneCore": [
+ "Microsoft Daniel - Portuguese (Brazil):pt-BR:local",
+ "Microsoft Maria - Portuguese (Brazil):pt-BR:local"
+ ],
+ "desktop": [
+ "Microsoft Maria Desktop - Portuguese(Brazil):pt-BR:local"
+ ],
+ "desktopProb": 0.2,
+ "weight": 0.05,
+ "provenance": "captured"
+ },
+ "pt-PT": {
+ "oneCore": [
+ "Microsoft Helia - Portuguese (Portugal):pt-PT:local"
+ ],
+ "weight": 0.02,
+ "provenance": "captured"
+ },
+ "nl-NL": {
+ "oneCore": [
+ "Microsoft Frank - Dutch (Netherlands):nl-NL:local"
+ ],
+ "weight": 0.04,
+ "provenance": "captured"
+ },
+ "pl-PL": {
+ "oneCore": [
+ "Microsoft Adam - Polish (Poland):pl-PL:local",
+ "Microsoft Paulina - Polish (Poland):pl-PL:local"
+ ],
+ "desktop": [
+ "Microsoft Paulina Desktop - Polish:pl-PL:local"
+ ],
+ "desktopProb": 0.2,
+ "weight": 0.04,
+ "provenance": "captured"
+ },
+ "cs-CZ": {
+ "oneCore": [
+ "Microsoft Jakub - Czech (Czech Republic):cs-CZ:local"
+ ],
+ "weight": 0.02,
+ "provenance": "captured"
+ },
+ "el-GR": {
+ "oneCore": [
+ "Microsoft Stefanos - Greek (Greece):el-GR:local"
+ ],
+ "weight": 0.015,
+ "provenance": "captured"
+ },
+ "he-IL": {
+ "oneCore": [
+ "Microsoft Asaf - Hebrew (Israel):he-IL:local"
+ ],
+ "weight": 0.015,
+ "provenance": "captured"
+ },
+ "ar-SA": {
+ "oneCore": [
+ "Microsoft Naayf - Arabic (Saudi):ar-SA:local"
+ ],
+ "weight": 0.03,
+ "provenance": "captured"
+ },
+ "tr-TR": {
+ "oneCore": [
+ "Microsoft Tolga - Turkish (Turkey):tr-TR:local"
+ ],
+ "weight": 0.03,
+ "provenance": "captured"
+ },
+ "zh-CN": {
+ "oneCore": [
+ "Microsoft Huihui - Chinese (Simplified, PRC):zh-CN:local",
+ "Microsoft Kangkang - Chinese (Simplified, PRC):zh-CN:local",
+ "Microsoft Yaoyao - Chinese (Simplified, PRC):zh-CN:local"
+ ],
+ "desktop": [
+ "Microsoft Huihui Desktop - Chinese (Simplified):zh-CN:local"
+ ],
+ "desktopProb": 0.2,
+ "weight": 0,
+ "fontBundle": "cjk-sc",
+ "provenance": "captured"
+ },
+ "ja-JP": {
+ "oneCore": [
+ "Microsoft Ayumi - Japanese (Japan):ja-JP:local",
+ "Microsoft Haruka - Japanese (Japan):ja-JP:local",
+ "Microsoft Ichiro - Japanese (Japan):ja-JP:local"
+ ],
+ "weight": 0,
+ "fontBundle": "jp",
+ "provenance": "derived"
+ },
+ "ko-KR": {
+ "oneCore": [
+ "Microsoft Heami - Korean (Korea):ko-KR:local"
+ ],
+ "weight": 0,
+ "fontBundle": "kr",
+ "provenance": "derived"
+ },
+ "zh-TW": {
+ "oneCore": [
+ "Microsoft Hanhan - Chinese (Traditional, Taiwan):zh-TW:local",
+ "Microsoft Yating - Chinese (Traditional, Taiwan):zh-TW:local",
+ "Microsoft Zhiwei - Chinese (Traditional, Taiwan):zh-TW:local"
+ ],
+ "weight": 0,
+ "fontBundle": "cjk-tc",
+ "provenance": "derived"
+ }
+ },
+ "fallbackLocale": "en-US",
+ "additions": [
+ {
+ "id": "extra-english",
+ "kind": "groups",
+ "prob": 0.35,
+ "source": "os-language-pack",
+ "groups": [
+ "en-US"
+ ]
+ },
+ {
+ "id": "extra-languages",
+ "kind": "groups",
+ "prob": 0.14,
+ "source": "os-language-pack",
+ "sizes": [
+ {
+ "n": 1,
+ "w": 0.72
+ },
+ {
+ "n": 2,
+ "w": 0.22
+ },
+ {
+ "n": 3,
+ "w": 0.06
+ }
+ ],
+ "groups": [
+ "en-GB",
+ "en-AU",
+ "en-CA",
+ "en-IE",
+ "en-IN",
+ "de-DE",
+ "fr-FR",
+ "es-ES",
+ "es-MX",
+ "it-IT",
+ "pt-BR",
+ "pt-PT",
+ "nl-NL",
+ "pl-PL",
+ "cs-CZ",
+ "el-GR",
+ "he-IL",
+ "ar-SA",
+ "tr-TR"
+ ]
+ },
+ {
+ "id": "third-party-sapi",
+ "kind": "bundle",
+ "prob": 0,
+ "source": "third-party",
+ "deferred": true,
+ "voices": [],
+ "note": "Third-party SAPI5 engines (eSpeak NG's SAPI installer, RHVoice, CereProc, Acapela) do register tokens Firefox would enumerate, but they are rare enough to be near-unique identifiers on their own, and we have no captured display strings for them. Left at prob 0."
+ }
+ ]
+ },
+ "mac": {
+ "base": [
+ "Albert:en-US:local",
+ "Alice:it-IT:local",
+ "Alva:sv-SE:local",
+ "Amélie:fr-CA:local",
+ "Amira:ms-MY:local",
+ "Anna:de-DE:local",
+ "Bad News:en-US:local",
+ "Bahh:en-US:local",
+ "Bells:en-US:local",
+ "Boing:en-US:local",
+ "Bubbles:en-US:local",
+ "Carmit:he-IL:local",
+ "Cellos:en-US:local",
+ "Damayanti:id-ID:local",
+ "Daniel:en-GB:local",
+ "Daria:bg-BG:local",
+ "Wobble:en-US:local",
+ "Eddy (German (Germany)):de-DE:local",
+ "Eddy (English (UK)):en-GB:local",
+ "Eddy (English (US)):en-US:local",
+ "Eddy (Spanish (Spain)):es-ES:local",
+ "Eddy (Spanish (Mexico)):es-MX:local",
+ "Eddy (Finnish (Finland)):fi-FI:local",
+ "Eddy (French (Canada)):fr-CA:local",
+ "Eddy (French (France)):fr-FR:local",
+ "Eddy (Italian (Italy)):it-IT:local",
+ "Eddy (Japanese (Japan)):ja-JP:local",
+ "Eddy (Korean (South Korea)):ko-KR:local",
+ "Eddy (Portuguese (Brazil)):pt-BR:local",
+ "Eddy (Chinese (China mainland)):zh-CN:local",
+ "Eddy (Chinese (Taiwan)):zh-TW:local",
+ "Ellen:nl-BE:local",
+ "Flo (German (Germany)):de-DE:local",
+ "Flo (English (UK)):en-GB:local",
+ "Flo (English (US)):en-US:local",
+ "Flo (Spanish (Spain)):es-ES:local",
+ "Flo (Spanish (Mexico)):es-MX:local",
+ "Flo (Finnish (Finland)):fi-FI:local",
+ "Flo (French (Canada)):fr-CA:local",
+ "Flo (French (France)):fr-FR:local",
+ "Flo (Italian (Italy)):it-IT:local",
+ "Flo (Japanese (Japan)):ja-JP:local",
+ "Flo (Korean (South Korea)):ko-KR:local",
+ "Flo (Portuguese (Brazil)):pt-BR:local",
+ "Flo (Chinese (China mainland)):zh-CN:local",
+ "Flo (Chinese (Taiwan)):zh-TW:local",
+ "Fred:en-US:local",
+ "Good News:en-US:local",
+ "Grandma (German (Germany)):de-DE:local",
+ "Grandma (English (UK)):en-GB:local",
+ "Grandma (English (US)):en-US:local",
+ "Grandma (Spanish (Spain)):es-ES:local",
+ "Grandma (Spanish (Mexico)):es-MX:local",
+ "Grandma (Finnish (Finland)):fi-FI:local",
+ "Grandma (French (Canada)):fr-CA:local",
+ "Grandma (French (France)):fr-FR:local",
+ "Grandma (Italian (Italy)):it-IT:local",
+ "Grandma (Japanese (Japan)):ja-JP:local",
+ "Grandma (Korean (South Korea)):ko-KR:local",
+ "Grandma (Portuguese (Brazil)):pt-BR:local",
+ "Grandma (Chinese (China mainland)):zh-CN:local",
+ "Grandma (Chinese (Taiwan)):zh-TW:local",
+ "Grandpa (German (Germany)):de-DE:local",
+ "Grandpa (English (UK)):en-GB:local",
+ "Grandpa (English (US)):en-US:local",
+ "Grandpa (Spanish (Spain)):es-ES:local",
+ "Grandpa (Spanish (Mexico)):es-MX:local",
+ "Grandpa (Finnish (Finland)):fi-FI:local",
+ "Grandpa (French (Canada)):fr-CA:local",
+ "Grandpa (French (France)):fr-FR:local",
+ "Grandpa (Italian (Italy)):it-IT:local",
+ "Grandpa (Japanese (Japan)):ja-JP:local",
+ "Grandpa (Korean (South Korea)):ko-KR:local",
+ "Grandpa (Portuguese (Brazil)):pt-BR:local",
+ "Grandpa (Chinese (China mainland)):zh-CN:local",
+ "Grandpa (Chinese (Taiwan)):zh-TW:local",
+ "Jester:en-US:local",
+ "Ioana:ro-RO:local",
+ "Jacques:fr-FR:local",
+ "Joana:pt-PT:local",
+ "Junior:en-US:local",
+ "Kanya:th-TH:local",
+ "Karen:en-AU:local",
+ "Kathy:en-US:local",
+ "Kyoko:ja-JP:local",
+ "Lana:hr-HR:local",
+ "Laura:sk-SK:local",
+ "Lekha:hi-IN:local",
+ "Lesya:uk-UA:local",
+ "Linh:vi-VN:local",
+ "Luciana:pt-BR:local",
+ "Majed:ar-001:local",
+ "Tünde:hu-HU:local",
+ "Meijia:zh-TW:local",
+ "Melina:el-GR:local",
+ "Milena:ru-RU:local",
+ "Moira:en-IE:local",
+ "Mónica:es-ES:local",
+ "Montse:ca-ES:local",
+ "Nora:nb-NO:local",
+ "Organ:en-US:local",
+ "Paulina:es-MX:local",
+ "Superstar:en-US:local",
+ "Ralph:en-US:local",
+ "Reed (German (Germany)):de-DE:local",
+ "Reed (English (UK)):en-GB:local",
+ "Reed (English (US)):en-US:local",
+ "Reed (Spanish (Spain)):es-ES:local",
+ "Reed (Spanish (Mexico)):es-MX:local",
+ "Reed (Finnish (Finland)):fi-FI:local",
+ "Reed (French (Canada)):fr-CA:local",
+ "Reed (Italian (Italy)):it-IT:local",
+ "Reed (Japanese (Japan)):ja-JP:local",
+ "Reed (Korean (South Korea)):ko-KR:local",
+ "Reed (Portuguese (Brazil)):pt-BR:local",
+ "Reed (Chinese (China mainland)):zh-CN:local",
+ "Reed (Chinese (Taiwan)):zh-TW:local",
+ "Rishi:en-IN:local",
+ "Rocko (German (Germany)):de-DE:local",
+ "Rocko (English (UK)):en-GB:local",
+ "Rocko (English (US)):en-US:local",
+ "Rocko (Spanish (Spain)):es-ES:local",
+ "Rocko (Spanish (Mexico)):es-MX:local",
+ "Rocko (Finnish (Finland)):fi-FI:local",
+ "Rocko (French (Canada)):fr-CA:local",
+ "Rocko (French (France)):fr-FR:local",
+ "Rocko (Italian (Italy)):it-IT:local",
+ "Rocko (Japanese (Japan)):ja-JP:local",
+ "Rocko (Korean (South Korea)):ko-KR:local",
+ "Rocko (Portuguese (Brazil)):pt-BR:local",
+ "Rocko (Chinese (China mainland)):zh-CN:local",
+ "Rocko (Chinese (Taiwan)):zh-TW:local",
+ "Samantha:en-US:local",
+ "Sandy (German (Germany)):de-DE:local",
+ "Sandy (English (UK)):en-GB:local",
+ "Sandy (English (US)):en-US:local",
+ "Sandy (Spanish (Spain)):es-ES:local",
+ "Sandy (Spanish (Mexico)):es-MX:local",
+ "Sandy (Finnish (Finland)):fi-FI:local",
+ "Sandy (French (Canada)):fr-CA:local",
+ "Sandy (French (France)):fr-FR:local",
+ "Sandy (Italian (Italy)):it-IT:local",
+ "Sandy (Japanese (Japan)):ja-JP:local",
+ "Sandy (Korean (South Korea)):ko-KR:local",
+ "Sandy (Portuguese (Brazil)):pt-BR:local",
+ "Sandy (Chinese (China mainland)):zh-CN:local",
+ "Sandy (Chinese (Taiwan)):zh-TW:local",
+ "Sara:da-DK:local",
+ "Satu:fi-FI:local",
+ "Shelley (German (Germany)):de-DE:local",
+ "Shelley (English (UK)):en-GB:local",
+ "Shelley (English (US)):en-US:local",
+ "Shelley (Spanish (Spain)):es-ES:local",
+ "Shelley (Spanish (Mexico)):es-MX:local",
+ "Shelley (Finnish (Finland)):fi-FI:local",
+ "Shelley (French (Canada)):fr-CA:local",
+ "Shelley (French (France)):fr-FR:local",
+ "Shelley (Italian (Italy)):it-IT:local",
+ "Shelley (Japanese (Japan)):ja-JP:local",
+ "Shelley (Korean (South Korea)):ko-KR:local",
+ "Shelley (Portuguese (Brazil)):pt-BR:local",
+ "Shelley (Chinese (China mainland)):zh-CN:local",
+ "Shelley (Chinese (Taiwan)):zh-TW:local",
+ "Sinji:zh-HK:local",
+ "Tessa:en-ZA:local",
+ "Thomas:fr-FR:local",
+ "Tina:sl-SI:local",
+ "Tingting:zh-CN:local",
+ "Trinoids:en-US:local",
+ "Whisper:en-US:local",
+ "Xander:nl-NL:local",
+ "Yelda:tr-TR:local",
+ "Yuna:ko-KR:local",
+ "Zarvox:en-US:local",
+ "Zosia:pl-PL:local",
+ "Zuzana:cs-CZ:local"
+ ],
+ "additions": [
+ {
+ "id": "macintalk-download",
+ "kind": "alacarte",
+ "prob": 0.12,
+ "source": "os-download",
+ "sizes": [
+ {
+ "n": 1,
+ "w": 0.62
+ },
+ {
+ "n": 2,
+ "w": 0.26
+ },
+ {
+ "n": 3,
+ "w": 0.09
+ },
+ {
+ "n": 4,
+ "w": 0.03
+ }
+ ],
+ "voices": [
+ "Agnes:en-US:local",
+ "Alex:en-US:local",
+ "Bruce:en-US:local",
+ "Vicki:en-US:local"
+ ]
+ },
+ {
+ "id": "vocalizer-enhanced",
+ "kind": "alacarte",
+ "prob": 0,
+ "source": "os-download",
+ "deferred": true,
+ "voices": [],
+ "note": "The 41 Enhanced/Premium voices are deferred. Real names and languages are known from Apple's asset catalog; the runtime voiceURI identifier is not, and inventing it would be a tell."
+ }
+ ]
+ },
+ "lin": {
+ "base": [
+ "Afrikaans:af:local",
+ "Amharic:am:local",
+ "Aragonese:an:local",
+ "Arabic:ar:local",
+ "Assamese:as:local",
+ "Azerbaijani:az:local",
+ "Bashkir:ba:local",
+ "Belarusian:be:local",
+ "Bulgarian:bg:local",
+ "Bengali:bn:local",
+ "Bishnupriya Manipuri:bpy:local",
+ "Bosnian:bs:local",
+ "Catalan:ca:local",
+ "Cherokee:chr-US-QAAA-X-WEST:local",
+ "Chinese (Mandarin, latin as English):cmn:local",
+ "Chinese (Mandarin, latin as Pinyin):cmn-LATN-PINYIN:local",
+ "Czech:cs:local",
+ "Chuvash:cv:local",
+ "Welsh:cy:local",
+ "Danish:da:local",
+ "German:de:local",
+ "Greek:el:local",
+ "English (Caribbean):en-029:local",
+ "English (Great Britain):en-GB:local",
+ "English (Scotland):en-GB-SCOTLAND:local",
+ "English (Lancaster):en-GB-X-GBCLAN:local",
+ "English (West Midlands):en-GB-X-GBCWMD:local",
+ "English (Received Pronunciation):en-GB-X-RP:local",
+ "English (America):en-US:local",
+ "English (America, New York City):en-US-NYC:local",
+ "Esperanto:eo:local",
+ "Spanish (Spain):es:local",
+ "Spanish (Latin America):es-419:local",
+ "Estonian:et:local",
+ "Basque:eu:local",
+ "Persian:fa:local",
+ "Persian (Pinglish):fa-LATN:local",
+ "Finnish:fi:local",
+ "French (Belgium):fr-BE:local",
+ "French (Switzerland):fr-CH:local",
+ "French (France):fr-FR:local",
+ "Gaelic (Irish):ga:local",
+ "Gaelic (Scottish):gd:local",
+ "Guarani:gn:local",
+ "Greek (Ancient):grc:local",
+ "Gujarati:gu:local",
+ "Hakka Chinese:hak:local",
+ "Hawaiian:haw:local",
+ "Hebrew:he:local",
+ "Hindi:hi:local",
+ "Croatian:hr:local",
+ "Haitian Creole:ht:local",
+ "Hungarian:hu:local",
+ "Armenian (East Armenia):hy:local",
+ "Armenian (West Armenia):hyw:local",
+ "Interlingua:ia:local",
+ "Indonesian:id:local",
+ "Ido:io:local",
+ "Icelandic:is:local",
+ "Italian:it:local",
+ "Japanese:ja:local",
+ "Lojban:jbo:local",
+ "Georgian:ka:local",
+ "Kazakh:kk:local",
+ "Greenlandic:kl:local",
+ "Kannada:kn:local",
+ "Korean:ko:local",
+ "Konkani:kok:local",
+ "Kurdish:ku:local",
+ "Kyrgyz:ky:local",
+ "Latin:la:local",
+ "Luxembourgish:lb:local",
+ "Lingua Franca Nova:lfn:local",
+ "Lithuanian:lt:local",
+ "Latgalian:ltg:local",
+ "Latvian:lv:local",
+ "Māori:mi:local",
+ "Macedonian:mk:local",
+ "Malayalam:ml:local",
+ "Marathi:mr:local",
+ "Malay:ms:local",
+ "Maltese:mt:local",
+ "Myanmar (Burmese):my:local",
+ "Norwegian Bokmål:nb:local",
+ "Nahuatl (Classical):nci:local",
+ "Nepali:ne:local",
+ "Dutch:nl:local",
+ "Nogai:nog:local",
+ "Oromo:om:local",
+ "Oriya:or:local",
+ "Punjabi:pa:local",
+ "Papiamento:pap:local",
+ "Klingon:piqd:local",
+ "Polish:pl:local",
+ "Portuguese (Portugal):pt:local",
+ "Portuguese (Brazil):pt-BR:local",
+ "Pyash:py:local",
+ "Lang_Belta:qdb:local",
+ "Quechua:qu:local",
+ "K'iche':quc:local",
+ "Quenya:qya:local",
+ "Romanian:ro:local",
+ "Russian:ru:local",
+ "Russian (Latvia):ru-LV:local",
+ "Sindhi:sd:local",
+ "Shan (Tai Yai):shn:local",
+ "Sinhala:si:local",
+ "Sindarin:sjn:local",
+ "Slovak:sk:local",
+ "Slovenian:sl:local",
+ "Lule Saami:smj:local",
+ "Albanian:sq:local",
+ "Serbian:sr:local",
+ "Swedish:sv:local",
+ "Swahili:sw:local",
+ "Tamil:ta:local",
+ "Telugu:te:local",
+ "Thai:th:local",
+ "Turkmen:tk:local",
+ "Setswana:tn:local",
+ "Turkish:tr:local",
+ "Tatar:tt:local",
+ "Uyghur:ug:local",
+ "Ukrainian:uk:local",
+ "Urdu:ur:local",
+ "Uzbek:uz:local",
+ "Vietnamese (Northern):vi:local",
+ "Vietnamese (Central):vi-VN-X-CENTRAL:local",
+ "Vietnamese (Southern):vi-VN-X-SOUTH:local",
+ "Chinese (Cantonese):yue:local",
+ "Chinese (Cantonese, latin as Jyutping):yue:local"
+ ],
+ "additions": [
+ {
+ "id": "alt-speechd-modules",
+ "kind": "bundle",
+ "prob": 0,
+ "source": "third-party",
+ "deferred": true,
+ "voices": [],
+ "note": "Alternative speech-dispatcher modules (festival, flite, pico, RHVoice, mbrola) each add their own named voices. All are optional packages almost nobody installs on a desktop, and we have no captured names, so the espeak-ng list ships alone."
+ }
+ ]
+ }
+}
\ No newline at end of file
diff --git a/pythonlib/camoufox/voice-uris.json b/pythonlib/camoufox/voice-uris.json
new file mode 100644
index 000000000..732a70b1f
--- /dev/null
+++ b/pythonlib/camoufox/voice-uris.json
@@ -0,0 +1,188 @@
+{
+ "mac": {
+ "Albert|en-US": "urn:moz-tts:osx:com.apple.speech.synthesis.voice.Albert",
+ "Alice|it-IT": "urn:moz-tts:osx:com.apple.voice.compact.it-IT.Alice",
+ "Alva|sv-SE": "urn:moz-tts:osx:com.apple.voice.compact.sv-SE.Alva",
+ "Aman|en-IN": "urn:moz-tts:osx:com.apple.voice.Aman",
+ "Amira|ms-MY": "urn:moz-tts:osx:com.apple.voice.compact.ms-MY.Amira",
+ "Amélie|fr-CA": "urn:moz-tts:osx:com.apple.voice.compact.fr-CA.Amelie",
+ "Anna|de-DE": "urn:moz-tts:osx:com.apple.voice.compact.de-DE.Anna",
+ "Aru|kk-KZ": "urn:moz-tts:osx:com.apple.voice.Aru",
+ "Bad News|en-US": "urn:moz-tts:osx:com.apple.speech.synthesis.voice.BadNews",
+ "Bahh|en-US": "urn:moz-tts:osx:com.apple.speech.synthesis.voice.Bahh",
+ "Bells|en-US": "urn:moz-tts:osx:com.apple.speech.synthesis.voice.Bells",
+ "Boing|en-US": "urn:moz-tts:osx:com.apple.speech.synthesis.voice.Boing",
+ "Bubbles|en-US": "urn:moz-tts:osx:com.apple.speech.synthesis.voice.Bubbles",
+ "Carmit|he-IL": "urn:moz-tts:osx:com.apple.voice.compact.he-IL.Carmit",
+ "Cellos|en-US": "urn:moz-tts:osx:com.apple.speech.synthesis.voice.Cellos",
+ "Damayanti|id-ID": "urn:moz-tts:osx:com.apple.voice.compact.id-ID.Damayanti",
+ "Daniel|en-GB": "urn:moz-tts:osx:com.apple.voice.compact.en-GB.Daniel",
+ "Daria|bg-BG": "urn:moz-tts:osx:com.apple.voice.compact.bg-BG.Daria",
+ "Eddy (Chinese (China mainland))|zh-CN": "urn:moz-tts:osx:com.apple.eloquence.zh-CN.Eddy",
+ "Eddy (Chinese (Taiwan))|zh-TW": "urn:moz-tts:osx:com.apple.eloquence.zh-TW.Eddy",
+ "Eddy (English (UK))|en-GB": "urn:moz-tts:osx:com.apple.eloquence.en-GB.Eddy",
+ "Eddy (English (US))|en-US": "urn:moz-tts:osx:com.apple.eloquence.en-US.Eddy",
+ "Eddy (Finnish (Finland))|fi-FI": "urn:moz-tts:osx:com.apple.eloquence.fi-FI.Eddy",
+ "Eddy (French (Canada))|fr-CA": "urn:moz-tts:osx:com.apple.eloquence.fr-CA.Eddy",
+ "Eddy (French (France))|fr-FR": "urn:moz-tts:osx:com.apple.eloquence.fr-FR.Eddy",
+ "Eddy (German (Germany))|de-DE": "urn:moz-tts:osx:com.apple.eloquence.de-DE.Eddy",
+ "Eddy (Italian (Italy))|it-IT": "urn:moz-tts:osx:com.apple.eloquence.it-IT.Eddy",
+ "Eddy (Japanese (Japan))|ja-JP": "urn:moz-tts:osx:com.apple.eloquence.ja-JP.Eddy",
+ "Eddy (Korean (South Korea))|ko-KR": "urn:moz-tts:osx:com.apple.eloquence.ko-KR.Eddy",
+ "Eddy (Portuguese (Brazil))|pt-BR": "urn:moz-tts:osx:com.apple.eloquence.pt-BR.Eddy",
+ "Eddy (Spanish (Mexico))|es-MX": "urn:moz-tts:osx:com.apple.eloquence.es-MX.Eddy",
+ "Eddy (Spanish (Spain))|es-ES": "urn:moz-tts:osx:com.apple.eloquence.es-ES.Eddy",
+ "Ellen|nl-BE": "urn:moz-tts:osx:com.apple.voice.compact.nl-BE.Ellen",
+ "Flo (Chinese (China mainland))|zh-CN": "urn:moz-tts:osx:com.apple.eloquence.zh-CN.Flo",
+ "Flo (Chinese (Taiwan))|zh-TW": "urn:moz-tts:osx:com.apple.eloquence.zh-TW.Flo",
+ "Flo (English (UK))|en-GB": "urn:moz-tts:osx:com.apple.eloquence.en-GB.Flo",
+ "Flo (English (US))|en-US": "urn:moz-tts:osx:com.apple.eloquence.en-US.Flo",
+ "Flo (Finnish (Finland))|fi-FI": "urn:moz-tts:osx:com.apple.eloquence.fi-FI.Flo",
+ "Flo (French (Canada))|fr-CA": "urn:moz-tts:osx:com.apple.eloquence.fr-CA.Flo",
+ "Flo (French (France))|fr-FR": "urn:moz-tts:osx:com.apple.eloquence.fr-FR.Flo",
+ "Flo (German (Germany))|de-DE": "urn:moz-tts:osx:com.apple.eloquence.de-DE.Flo",
+ "Flo (Italian (Italy))|it-IT": "urn:moz-tts:osx:com.apple.eloquence.it-IT.Flo",
+ "Flo (Japanese (Japan))|ja-JP": "urn:moz-tts:osx:com.apple.eloquence.ja-JP.Flo",
+ "Flo (Korean (South Korea))|ko-KR": "urn:moz-tts:osx:com.apple.eloquence.ko-KR.Flo",
+ "Flo (Portuguese (Brazil))|pt-BR": "urn:moz-tts:osx:com.apple.eloquence.pt-BR.Flo",
+ "Flo (Spanish (Mexico))|es-MX": "urn:moz-tts:osx:com.apple.eloquence.es-MX.Flo",
+ "Flo (Spanish (Spain))|es-ES": "urn:moz-tts:osx:com.apple.eloquence.es-ES.Flo",
+ "Fred|en-US": "urn:moz-tts:osx:com.apple.speech.synthesis.voice.Fred",
+ "Geeta|te-IN": "urn:moz-tts:osx:com.apple.voice.compact.te-IN.Geeta",
+ "Good News|en-US": "urn:moz-tts:osx:com.apple.speech.synthesis.voice.GoodNews",
+ "Grandma (Chinese (China mainland))|zh-CN": "urn:moz-tts:osx:com.apple.eloquence.zh-CN.Grandma",
+ "Grandma (Chinese (Taiwan))|zh-TW": "urn:moz-tts:osx:com.apple.eloquence.zh-TW.Grandma",
+ "Grandma (English (UK))|en-GB": "urn:moz-tts:osx:com.apple.eloquence.en-GB.Grandma",
+ "Grandma (English (US))|en-US": "urn:moz-tts:osx:com.apple.eloquence.en-US.Grandma",
+ "Grandma (Finnish (Finland))|fi-FI": "urn:moz-tts:osx:com.apple.eloquence.fi-FI.Grandma",
+ "Grandma (French (Canada))|fr-CA": "urn:moz-tts:osx:com.apple.eloquence.fr-CA.Grandma",
+ "Grandma (French (France))|fr-FR": "urn:moz-tts:osx:com.apple.eloquence.fr-FR.Grandma",
+ "Grandma (German (Germany))|de-DE": "urn:moz-tts:osx:com.apple.eloquence.de-DE.Grandma",
+ "Grandma (Italian (Italy))|it-IT": "urn:moz-tts:osx:com.apple.eloquence.it-IT.Grandma",
+ "Grandma (Japanese (Japan))|ja-JP": "urn:moz-tts:osx:com.apple.eloquence.ja-JP.Grandma",
+ "Grandma (Korean (South Korea))|ko-KR": "urn:moz-tts:osx:com.apple.eloquence.ko-KR.Grandma",
+ "Grandma (Portuguese (Brazil))|pt-BR": "urn:moz-tts:osx:com.apple.eloquence.pt-BR.Grandma",
+ "Grandma (Spanish (Mexico))|es-MX": "urn:moz-tts:osx:com.apple.eloquence.es-MX.Grandma",
+ "Grandma (Spanish (Spain))|es-ES": "urn:moz-tts:osx:com.apple.eloquence.es-ES.Grandma",
+ "Grandpa (Chinese (China mainland))|zh-CN": "urn:moz-tts:osx:com.apple.eloquence.zh-CN.Grandpa",
+ "Grandpa (Chinese (Taiwan))|zh-TW": "urn:moz-tts:osx:com.apple.eloquence.zh-TW.Grandpa",
+ "Grandpa (English (UK))|en-GB": "urn:moz-tts:osx:com.apple.eloquence.en-GB.Grandpa",
+ "Grandpa (English (US))|en-US": "urn:moz-tts:osx:com.apple.eloquence.en-US.Grandpa",
+ "Grandpa (Finnish (Finland))|fi-FI": "urn:moz-tts:osx:com.apple.eloquence.fi-FI.Grandpa",
+ "Grandpa (French (Canada))|fr-CA": "urn:moz-tts:osx:com.apple.eloquence.fr-CA.Grandpa",
+ "Grandpa (French (France))|fr-FR": "urn:moz-tts:osx:com.apple.eloquence.fr-FR.Grandpa",
+ "Grandpa (German (Germany))|de-DE": "urn:moz-tts:osx:com.apple.eloquence.de-DE.Grandpa",
+ "Grandpa (Italian (Italy))|it-IT": "urn:moz-tts:osx:com.apple.eloquence.it-IT.Grandpa",
+ "Grandpa (Japanese (Japan))|ja-JP": "urn:moz-tts:osx:com.apple.eloquence.ja-JP.Grandpa",
+ "Grandpa (Korean (South Korea))|ko-KR": "urn:moz-tts:osx:com.apple.eloquence.ko-KR.Grandpa",
+ "Grandpa (Portuguese (Brazil))|pt-BR": "urn:moz-tts:osx:com.apple.eloquence.pt-BR.Grandpa",
+ "Grandpa (Spanish (Mexico))|es-MX": "urn:moz-tts:osx:com.apple.eloquence.es-MX.Grandpa",
+ "Grandpa (Spanish (Spain))|es-ES": "urn:moz-tts:osx:com.apple.eloquence.es-ES.Grandpa",
+ "Ioana|ro-RO": "urn:moz-tts:osx:com.apple.voice.compact.ro-RO.Ioana",
+ "Jacques|fr-FR": "urn:moz-tts:osx:com.apple.eloquence.fr-FR.Jacques",
+ "Jester|en-US": "urn:moz-tts:osx:com.apple.speech.synthesis.voice.Hysterical",
+ "Joana|pt-PT": "urn:moz-tts:osx:com.apple.voice.compact.pt-PT.Joana",
+ "Junior|en-US": "urn:moz-tts:osx:com.apple.speech.synthesis.voice.Junior",
+ "Kanya|th-TH": "urn:moz-tts:osx:com.apple.voice.compact.th-TH.Kanya",
+ "Karen|en-AU": "urn:moz-tts:osx:com.apple.voice.compact.en-AU.Karen",
+ "Kathy|en-US": "urn:moz-tts:osx:com.apple.speech.synthesis.voice.Kathy",
+ "Kyoko|ja-JP": "urn:moz-tts:osx:com.apple.voice.compact.ja-JP.Kyoko",
+ "Lana|hr-HR": "urn:moz-tts:osx:com.apple.voice.compact.hr-HR.Lana",
+ "Laura|sk-SK": "urn:moz-tts:osx:com.apple.voice.compact.sk-SK.Laura",
+ "Lekha|hi-IN": "urn:moz-tts:osx:com.apple.voice.compact.hi-IN.Lekha",
+ "Lesya|uk-UA": "urn:moz-tts:osx:com.apple.voice.compact.uk-UA.Lesya",
+ "Linh|vi-VN": "urn:moz-tts:osx:com.apple.voice.compact.vi-VN.Linh",
+ "Luciana|pt-BR": "urn:moz-tts:osx:com.apple.voice.compact.pt-BR.Luciana",
+ "Majed|ar-001": "urn:moz-tts:osx:com.apple.voice.compact.ar-001.Maged",
+ "Meijia|zh-TW": "urn:moz-tts:osx:com.apple.voice.compact.zh-TW.Meijia",
+ "Melina|el-GR": "urn:moz-tts:osx:com.apple.voice.compact.el-GR.Melina",
+ "Milena|ru-RU": "urn:moz-tts:osx:com.apple.voice.compact.ru-RU.Milena",
+ "Moira|en-IE": "urn:moz-tts:osx:com.apple.voice.compact.en-IE.Moira",
+ "Montse|ca-ES": "urn:moz-tts:osx:com.apple.voice.compact.ca-ES.Montserrat",
+ "Mónica|es-ES": "urn:moz-tts:osx:com.apple.voice.compact.es-ES.Monica",
+ "Nora|nb-NO": "urn:moz-tts:osx:com.apple.voice.compact.nb-NO.Nora",
+ "Ona|lt-LT": "urn:moz-tts:osx:com.apple.voice.Ona",
+ "Organ|en-US": "urn:moz-tts:osx:com.apple.speech.synthesis.voice.Organ",
+ "Paulina|es-MX": "urn:moz-tts:osx:com.apple.voice.compact.es-MX.Paulina",
+ "Piya|bn-IN": "urn:moz-tts:osx:com.apple.voice.compact.bn-IN.Paya",
+ "Ralph|en-US": "urn:moz-tts:osx:com.apple.speech.synthesis.voice.Ralph",
+ "Reed (Chinese (China mainland))|zh-CN": "urn:moz-tts:osx:com.apple.eloquence.zh-CN.Reed",
+ "Reed (Chinese (Taiwan))|zh-TW": "urn:moz-tts:osx:com.apple.eloquence.zh-TW.Reed",
+ "Reed (English (UK))|en-GB": "urn:moz-tts:osx:com.apple.eloquence.en-GB.Reed",
+ "Reed (English (US))|en-US": "urn:moz-tts:osx:com.apple.eloquence.en-US.Reed",
+ "Reed (Finnish (Finland))|fi-FI": "urn:moz-tts:osx:com.apple.eloquence.fi-FI.Reed",
+ "Reed (French (Canada))|fr-CA": "urn:moz-tts:osx:com.apple.eloquence.fr-CA.Reed",
+ "Reed (German (Germany))|de-DE": "urn:moz-tts:osx:com.apple.eloquence.de-DE.Reed",
+ "Reed (Italian (Italy))|it-IT": "urn:moz-tts:osx:com.apple.eloquence.it-IT.Reed",
+ "Reed (Japanese (Japan))|ja-JP": "urn:moz-tts:osx:com.apple.eloquence.ja-JP.Reed",
+ "Reed (Korean (South Korea))|ko-KR": "urn:moz-tts:osx:com.apple.eloquence.ko-KR.Reed",
+ "Reed (Portuguese (Brazil))|pt-BR": "urn:moz-tts:osx:com.apple.eloquence.pt-BR.Reed",
+ "Reed (Spanish (Mexico))|es-MX": "urn:moz-tts:osx:com.apple.eloquence.es-MX.Reed",
+ "Reed (Spanish (Spain))|es-ES": "urn:moz-tts:osx:com.apple.eloquence.es-ES.Reed",
+ "Rishi|en-IN": "urn:moz-tts:osx:com.apple.voice.compact.en-IN.Rishi",
+ "Rocko (Chinese (China mainland))|zh-CN": "urn:moz-tts:osx:com.apple.eloquence.zh-CN.Rocko",
+ "Rocko (Chinese (Taiwan))|zh-TW": "urn:moz-tts:osx:com.apple.eloquence.zh-TW.Rocko",
+ "Rocko (English (UK))|en-GB": "urn:moz-tts:osx:com.apple.eloquence.en-GB.Rocko",
+ "Rocko (English (US))|en-US": "urn:moz-tts:osx:com.apple.eloquence.en-US.Rocko",
+ "Rocko (Finnish (Finland))|fi-FI": "urn:moz-tts:osx:com.apple.eloquence.fi-FI.Rocko",
+ "Rocko (French (Canada))|fr-CA": "urn:moz-tts:osx:com.apple.eloquence.fr-CA.Rocko",
+ "Rocko (French (France))|fr-FR": "urn:moz-tts:osx:com.apple.eloquence.fr-FR.Rocko",
+ "Rocko (German (Germany))|de-DE": "urn:moz-tts:osx:com.apple.eloquence.de-DE.Rocko",
+ "Rocko (Italian (Italy))|it-IT": "urn:moz-tts:osx:com.apple.eloquence.it-IT.Rocko",
+ "Rocko (Japanese (Japan))|ja-JP": "urn:moz-tts:osx:com.apple.eloquence.ja-JP.Rocko",
+ "Rocko (Korean (South Korea))|ko-KR": "urn:moz-tts:osx:com.apple.eloquence.ko-KR.Rocko",
+ "Rocko (Portuguese (Brazil))|pt-BR": "urn:moz-tts:osx:com.apple.eloquence.pt-BR.Rocko",
+ "Rocko (Spanish (Mexico))|es-MX": "urn:moz-tts:osx:com.apple.eloquence.es-MX.Rocko",
+ "Rocko (Spanish (Spain))|es-ES": "urn:moz-tts:osx:com.apple.eloquence.es-ES.Rocko",
+ "Samantha|en-US": "urn:moz-tts:osx:com.apple.voice.compact.en-US.Samantha",
+ "Sandy (Chinese (China mainland))|zh-CN": "urn:moz-tts:osx:com.apple.eloquence.zh-CN.Sandy",
+ "Sandy (Chinese (Taiwan))|zh-TW": "urn:moz-tts:osx:com.apple.eloquence.zh-TW.Sandy",
+ "Sandy (English (UK))|en-GB": "urn:moz-tts:osx:com.apple.eloquence.en-GB.Sandy",
+ "Sandy (English (US))|en-US": "urn:moz-tts:osx:com.apple.eloquence.en-US.Sandy",
+ "Sandy (Finnish (Finland))|fi-FI": "urn:moz-tts:osx:com.apple.eloquence.fi-FI.Sandy",
+ "Sandy (French (Canada))|fr-CA": "urn:moz-tts:osx:com.apple.eloquence.fr-CA.Sandy",
+ "Sandy (French (France))|fr-FR": "urn:moz-tts:osx:com.apple.eloquence.fr-FR.Sandy",
+ "Sandy (German (Germany))|de-DE": "urn:moz-tts:osx:com.apple.eloquence.de-DE.Sandy",
+ "Sandy (Italian (Italy))|it-IT": "urn:moz-tts:osx:com.apple.eloquence.it-IT.Sandy",
+ "Sandy (Japanese (Japan))|ja-JP": "urn:moz-tts:osx:com.apple.eloquence.ja-JP.Sandy",
+ "Sandy (Korean (South Korea))|ko-KR": "urn:moz-tts:osx:com.apple.eloquence.ko-KR.Sandy",
+ "Sandy (Portuguese (Brazil))|pt-BR": "urn:moz-tts:osx:com.apple.eloquence.pt-BR.Sandy",
+ "Sandy (Spanish (Mexico))|es-MX": "urn:moz-tts:osx:com.apple.eloquence.es-MX.Sandy",
+ "Sandy (Spanish (Spain))|es-ES": "urn:moz-tts:osx:com.apple.eloquence.es-ES.Sandy",
+ "Sara|da-DK": "urn:moz-tts:osx:com.apple.voice.compact.da-DK.Sara",
+ "Satu|fi-FI": "urn:moz-tts:osx:com.apple.voice.compact.fi-FI.Satu",
+ "Shelley (Chinese (China mainland))|zh-CN": "urn:moz-tts:osx:com.apple.eloquence.zh-CN.Shelley",
+ "Shelley (Chinese (Taiwan))|zh-TW": "urn:moz-tts:osx:com.apple.eloquence.zh-TW.Shelley",
+ "Shelley (English (UK))|en-GB": "urn:moz-tts:osx:com.apple.eloquence.en-GB.Shelley",
+ "Shelley (English (US))|en-US": "urn:moz-tts:osx:com.apple.eloquence.en-US.Shelley",
+ "Shelley (Finnish (Finland))|fi-FI": "urn:moz-tts:osx:com.apple.eloquence.fi-FI.Shelley",
+ "Shelley (French (Canada))|fr-CA": "urn:moz-tts:osx:com.apple.eloquence.fr-CA.Shelley",
+ "Shelley (French (France))|fr-FR": "urn:moz-tts:osx:com.apple.eloquence.fr-FR.Shelley",
+ "Shelley (German (Germany))|de-DE": "urn:moz-tts:osx:com.apple.eloquence.de-DE.Shelley",
+ "Shelley (Italian (Italy))|it-IT": "urn:moz-tts:osx:com.apple.eloquence.it-IT.Shelley",
+ "Shelley (Japanese (Japan))|ja-JP": "urn:moz-tts:osx:com.apple.eloquence.ja-JP.Shelley",
+ "Shelley (Korean (South Korea))|ko-KR": "urn:moz-tts:osx:com.apple.eloquence.ko-KR.Shelley",
+ "Shelley (Portuguese (Brazil))|pt-BR": "urn:moz-tts:osx:com.apple.eloquence.pt-BR.Shelley",
+ "Shelley (Spanish (Mexico))|es-MX": "urn:moz-tts:osx:com.apple.eloquence.es-MX.Shelley",
+ "Shelley (Spanish (Spain))|es-ES": "urn:moz-tts:osx:com.apple.eloquence.es-ES.Shelley",
+ "Sinji|zh-HK": "urn:moz-tts:osx:com.apple.voice.compact.zh-HK.Sinji",
+ "Soumya|kn-IN": "urn:moz-tts:osx:com.apple.voice.compact.kn-IN.Alpana",
+ "Superstar|en-US": "urn:moz-tts:osx:com.apple.speech.synthesis.voice.Princess",
+ "Tara|en-IN": "urn:moz-tts:osx:com.apple.voice.Tara",
+ "Tessa|en-ZA": "urn:moz-tts:osx:com.apple.voice.compact.en-ZA.Tessa",
+ "Thomas|fr-FR": "urn:moz-tts:osx:com.apple.voice.compact.fr-FR.Thomas",
+ "Tina|sl-SI": "urn:moz-tts:osx:com.apple.voice.compact.sl-SI.Tina",
+ "Tingting|zh-CN": "urn:moz-tts:osx:com.apple.voice.compact.zh-CN.Tingting",
+ "Trinoids|en-US": "urn:moz-tts:osx:com.apple.speech.synthesis.voice.Trinoids",
+ "Tünde|hu-HU": "urn:moz-tts:osx:com.apple.voice.compact.hu-HU.Mariska",
+ "Vani|ta-IN": "urn:moz-tts:osx:com.apple.voice.compact.ta-IN.Vani",
+ "Whisper|en-US": "urn:moz-tts:osx:com.apple.speech.synthesis.voice.Whisper",
+ "Wobble|en-US": "urn:moz-tts:osx:com.apple.speech.synthesis.voice.Deranged",
+ "Xander|nl-NL": "urn:moz-tts:osx:com.apple.voice.compact.nl-NL.Xander",
+ "Yelda|tr-TR": "urn:moz-tts:osx:com.apple.voice.compact.tr-TR.Yelda",
+ "Yuna|ko-KR": "urn:moz-tts:osx:com.apple.voice.compact.ko-KR.Yuna",
+ "Zarvox|en-US": "urn:moz-tts:osx:com.apple.speech.synthesis.voice.Zarvox",
+ "Zosia|pl-PL": "urn:moz-tts:osx:com.apple.voice.compact.pl-PL.Zosia",
+ "Zuzana|cs-CZ": "urn:moz-tts:osx:com.apple.voice.compact.cs-CZ.Zuzana"
+ }
+}
\ No newline at end of file
diff --git a/pythonlib/camoufox/webgl/sample.py b/pythonlib/camoufox/webgl/sample.py
index f963d0509..0227ecf9b 100644
--- a/pythonlib/camoufox/webgl/sample.py
+++ b/pythonlib/camoufox/webgl/sample.py
@@ -10,9 +10,52 @@
# Get database path relative to this file
DB_PATH = Path(__file__).parent / 'webgl_data.db'
+# Extensions a release Firefox never exposes (draft extensions behind
+# webgl.enable-draft-extensions, or mobile-only): some database rows carry
+# them, and a spoofed list that names one is a tell on its own. Measured on
+# stock Firefox 152.0.4 on real Windows 11 (ANGLE D3D11) 2026-09-16: none of
+# these four are exposed. WEBGL_provoking_vertex is NOT in this set: stock
+# Firefox on Apple GPUs and on Windows does expose it.
+_NEVER_EXPOSED_EXTENSIONS = frozenset(
+ {
+ 'WEBGL_multi_draw',
+ 'WEBGL_clip_cull_distance',
+ 'EXT_texture_norm16',
+ 'WEBGL_compressed_texture_etc1',
+ }
+)
+
+# OVR_multiview2 is a RELEASE extension whose availability depends on the
+# graphics backend. On Windows, Firefox renders WebGL through ANGLE's D3D11
+# backend, which implements multiview on every D3D11 GPU: stock 152.0.4 on
+# a Windows 11 host exposes it on WebGL2 (MAX_VIEWS_OVR=4, headless and headed), and the
+# recorded corpus has it on 13 of the 15 Windows rows with WebGL2 (never on
+# WebGL1) -- filtering it there was a leak. On Linux it depends on
+# the host GL driver (stock on an NVIDIA box does not expose it), and
+# ClientWebGLContext::IsSupported answers from the spoofed list without asking
+# the host, so a Linux identity could advertise an extension the GPU cannot
+# back; it stays filtered off Windows.
+_HOST_DEPENDENT_EXTENSIONS = frozenset({'OVR_multiview2'})
+
+
+def _filtered_extensions(os: str) -> frozenset:
+ if os == 'win':
+ return _NEVER_EXPOSED_EXTENSIONS
+ return _NEVER_EXPOSED_EXTENSIONS | _HOST_DEPENDENT_EXTENSIONS
+
+
+def _load_webgl_data(data_str: str, os: str) -> Dict[str, str]:
+ data = orjson.loads(data_str)
+ blocked = _filtered_extensions(os)
+ for key in ('webGl:supportedExtensions', 'webGl2:supportedExtensions'):
+ exts = data.get(key)
+ if isinstance(exts, list):
+ data[key] = [e for e in exts if e not in blocked]
+ return data
+
def sample_webgl(
- os: str, vendor: Optional[str] = None, renderer: Optional[str] = None
+ os: str, vendor: Optional[str] = None, renderer: Optional[str] = None, seed: Optional[int] = None
) -> Dict[str, str]:
"""
Sample a random WebGL vendor/renderer combination and its data based on OS probabilities.
@@ -61,7 +104,7 @@ def sample_webgl(
)
conn.close()
- return orjson.loads(result[2])
+ return _load_webgl_data(result[2], os)
# Get all vendor/renderer pairs and their probabilities for this OS
cursor.execute(
@@ -73,6 +116,20 @@ def sample_webgl(
if not results:
raise ValueError(f'No WebGL data found for OS: {os}')
+ # Drop pairs this OS cannot report before sampling. webgl_data.db weights
+ # each pair per OS, and its macOS column carries a Braswell Atom IGP
+ # ("Intel(R) HD Graphics 400") at 7.4% and a desktop PC card ("Radeon R9 200
+ # Series") at 3.7% -- neither shipped in any Mac, so ~11% of macOS
+ # identities were drawing a GPU that would contradict the rest of the
+ # identity the moment a page read the renderer string beside the platform.
+ # Filtering here rather than repairing later keeps reported and sampled
+ # WebGL parameters from the same recorded device.
+ from ..coherence import gpu_fits_os
+
+ coherent = [row for row in results if gpu_fits_os(row[1], os)]
+ if coherent:
+ results = coherent
+
# Split into separate arrays
_, _, data_strs, probs = map(list, zip(*results))
@@ -81,10 +138,11 @@ def sample_webgl(
probs_array = probs_array / probs_array.sum()
# Sample based on probabilities
- idx = np.random.choice(len(probs_array), p=probs_array)
+ # Seeded so the same identity always draws the same device (#442/#765).
+ idx = np.random.default_rng(seed).choice(len(probs_array), p=probs_array)
# Parse the JSON data string
- return orjson.loads(data_strs[idx])
+ return _load_webgl_data(data_strs[idx], os)
def get_possible_pairs() -> Dict[str, List[Tuple[str, str]]]:
diff --git a/pythonlib/camoufox/webgl/webgl_data.db b/pythonlib/camoufox/webgl/webgl_data.db
index 088d35a87..58b531de3 100644
Binary files a/pythonlib/camoufox/webgl/webgl_data.db and b/pythonlib/camoufox/webgl/webgl_data.db differ
diff --git a/pythonlib/pyproject.toml b/pythonlib/pyproject.toml
index c65f19d3a..b8bc72918 100644
--- a/pythonlib/pyproject.toml
+++ b/pythonlib/pyproject.toml
@@ -32,7 +32,7 @@ rich-click = "*"
rich = "*"
requests = "*"
orjson = "*"
-browserforge = "^1.2.4"
+fpgen = "^1.3.0"
# Keep a ceiling. 1.61 added Juggler params the protocol schema had to learn
# (viewport isMobile/screenSize, webp screenshots, webSocketFrame timestamps)
# and every Playwright minor is free to change Juggler again, while
diff --git a/pythonlib/tests/test_coherence.py b/pythonlib/tests/test_coherence.py
new file mode 100644
index 000000000..fe0c774e0
--- /dev/null
+++ b/pythonlib/tests/test_coherence.py
@@ -0,0 +1,151 @@
+"""Every identity Camoufox can produce has to be a machine that could exist.
+
+The pools are sampled independently -- navigator and screen from fpgen, the GPU
+from webgl_data.db, fonts and voices from their own catalogues -- so an
+incoherent identity is assembled rather than inherited, and cleaning the pools
+cannot prevent it. These tests run the assembled identity, from every source, past
+camoufox.coherence.
+
+Measured before the layer existed (2026-09-17): 14% of macOS identities drew
+"Radeon R9 200 Series", a desktop PC card; 7% paired Apple Silicon with
+colorDepth 24; 2% of Windows identities reported maxTouchPoints 256; and 18 of
+the 312 bundled presets carried a GPU or a screen no desktop has.
+"""
+
+import sys
+from os.path import dirname, join
+
+import pytest
+
+sys.path.insert(0, join(dirname(__file__), ".."))
+
+from camoufox import coherence # noqa: E402
+from camoufox import fingerprints as fp # noqa: E402
+from camoufox.utils import get_target_os # noqa: E402
+
+from test_identity_salt import launch # noqa: E402
+
+
+class TestRules:
+ """Each rule, against the value that motivated it."""
+
+ def test_apple_silicon_never_has_fewer_than_eight_cores(self):
+ config = {"webGl:renderer": "Apple M1, or similar", "navigator.hardwareConcurrency": 2}
+ assert [v.rule for v in coherence.validate(config, "mac")] == ["apple-silicon-cores"]
+ assert coherence.apply(config, "mac") == []
+ assert config["navigator.hardwareConcurrency"] == 8
+
+ def test_a_mac_cannot_report_a_braswell_atom_igp(self):
+ # webgl_data.db weights this at 7.4% of the macOS pool.
+ config = {"webGl:renderer": "Intel(R) HD Graphics 400, or similar"}
+ assert [v.rule for v in coherence.validate(config, "mac")] == ["gpu-matches-os"]
+
+ def test_a_mac_cannot_report_an_angle_renderer(self):
+ config = {"webGl:renderer": "ANGLE (Intel, Intel(R) HD Graphics Direct3D11 vs_5_0), or similar"}
+ assert [v.rule for v in coherence.validate(config, "mac")] == ["gpu-matches-os"]
+
+ def test_windows_renders_through_angle(self):
+ assert coherence.gpu_fits_os("ANGLE (NVIDIA, NVIDIA GeForce GTX 980 Direct3D11), or similar", "win")
+ assert not coherence.gpu_fits_os("Apple M1, or similar", "win")
+
+ def test_apple_silicon_reports_deep_colour(self):
+ # Measured on jobharvest-mac: colorDepth 30, (color: 10).
+ config = {"webGl:renderer": "Apple M1, or similar", "screen.colorDepth": 24}
+ assert [v.rule for v in coherence.validate(config, "mac")] == ["color-depth"]
+ assert coherence.apply(config, "mac") == []
+ assert config["screen.colorDepth"] == 30
+ assert config["screen.pixelDepth"] == 30
+
+ def test_colour_depth_is_24_or_30(self):
+ config = {"screen.colorDepth": 32}
+ assert [v.rule for v in coherence.validate(config, "lin")] == ["color-depth"]
+ assert coherence.apply(config, "lin") == []
+ assert config["screen.colorDepth"] == 24
+
+ def test_touch_points_are_a_digitiser_count(self):
+ config = {"navigator.maxTouchPoints": 256}
+ assert [v.rule for v in coherence.validate(config, "win")] == ["touch-points"]
+ assert coherence.apply(config, "win") == []
+ assert config["navigator.maxTouchPoints"] == 0
+ # 5 is real -- measured on win-i9, a touchscreen laptop -- and so are
+ # 2 and 10; fpgen offers none of 2/5 and the presets carry 40.
+ for real in (0, 1, 2, 5, 10):
+ assert coherence.validate({"navigator.maxTouchPoints": real}, "win") == [], real
+
+ def test_a_mac_has_no_touchscreen(self):
+ config = {"navigator.maxTouchPoints": 5}
+ assert [v.rule for v in coherence.validate(config, "mac")] == ["touch-points"]
+
+ def test_device_pixel_ratio_is_a_real_display_mode(self):
+ # 1.818 is a scraped artefact: a zoom level folded into the ratio.
+ config = {"window.devicePixelRatio": 1.8181818181818181}
+ assert [v.rule for v in coherence.validate(config, "win")] == ["device-pixel-ratio"]
+ assert coherence.apply(config, "win") == []
+ assert config["window.devicePixelRatio"] == 1.75
+ # The three measured machines: 1 on linux, 2.5 on win-i9, 2 on the Mac.
+ assert coherence.validate({"window.devicePixelRatio": 1}, "lin") == []
+ assert coherence.validate({"window.devicePixelRatio": 2.5}, "win") == []
+ assert coherence.validate({"window.devicePixelRatio": 2}, "mac") == []
+ # macOS has no fractional scaling.
+ assert [v.rule for v in coherence.validate({"window.devicePixelRatio": 1.5}, "mac")] == [
+ "device-pixel-ratio"
+ ]
+
+ def test_desktop_screens_are_landscape(self):
+ config = {"screen.width": 1440, "screen.height": 2560}
+ assert [v.rule for v in coherence.validate(config, "win")] == ["screen-shape"]
+ assert coherence.repair_screen_orientation(config)
+ assert (config["screen.width"], config["screen.height"]) == (2560, 1440)
+
+ def test_a_phone_viewport_is_not_a_desktop_screen(self):
+ # One bundled preset reports this.
+ assert [v.rule for v in coherence.validate({"screen.width": 736, "screen.height": 414}, "mac")] == [
+ "screen-shape"
+ ]
+
+ def test_avail_never_exceeds_the_screen(self):
+ config = {"screen.width": 1920, "screen.height": 1080, "screen.availWidth": 2000}
+ assert [v.rule for v in coherence.validate(config, "lin")] == ["avail-bounds"]
+ assert coherence.apply(config, "lin") == []
+ assert config["screen.availWidth"] == 1920
+
+ def test_platform_agrees_with_the_user_agent_arch(self):
+ config = {
+ "navigator.userAgent": "Mozilla/5.0 (X11; Linux x86_64; rv:152.0) Gecko/20100101 Firefox/152.0",
+ "navigator.platform": "Linux armv81",
+ }
+ assert [v.rule for v in coherence.validate(config, "lin")] == ["arch-agreement"]
+
+ def test_the_real_machines_pass(self):
+ """The three machines captured on 2026-09-17, as themselves."""
+ real = [
+ ("lin", {"navigator.userAgent": "Mozilla/5.0 (X11; Linux x86_64; rv:152.0) Gecko/20100101 Firefox/152.0",
+ "navigator.platform": "Linux x86_64", "navigator.hardwareConcurrency": 16,
+ "navigator.maxTouchPoints": 0, "screen.width": 1920, "screen.height": 1080,
+ "screen.colorDepth": 24, "webGl:renderer": "Radeon HD 3200 Graphics, or similar"}),
+ ("win", {"navigator.platform": "Win32", "navigator.hardwareConcurrency": 16,
+ "navigator.maxTouchPoints": 5, "screen.width": 1382, "screen.height": 864,
+ "screen.colorDepth": 24,
+ "webGl:renderer": "ANGLE (Intel, Intel(R) HD Graphics Direct3D11 vs_5_0 ps_5_0), or similar"}),
+ ("mac", {"navigator.platform": "MacIntel", "navigator.hardwareConcurrency": 10,
+ "navigator.maxTouchPoints": 0, "screen.width": 2560, "screen.height": 1440,
+ "screen.colorDepth": 30, "webGl:renderer": "Apple M1, or similar"}),
+ ]
+ for target_os, config in real:
+ assert coherence.validate(config, target_os) == [], target_os
+
+
+class TestEveryIdentityIsCoherent:
+ """The assembled identity, from each source Camoufox draws one from."""
+
+ @pytest.mark.parametrize("os_name", ["macos", "windows", "linux"])
+ def test_generated_identities(self, os_name):
+ for _ in range(40):
+ config = launch(os=os_name)
+ assert coherence.validate(config, get_target_os(config)) == []
+
+ @pytest.mark.parametrize("os_name", ["macos", "windows", "linux"])
+ def test_every_bundled_preset(self, os_name):
+ for i, preset in enumerate(fp.load_presets("150")["presets"][os_name]):
+ config = launch(os=os_name, fingerprint_preset=preset)
+ assert coherence.validate(config, get_target_os(config)) == [], (os_name, i)
diff --git a/pythonlib/tests/test_fingerprint_fixes.py b/pythonlib/tests/test_fingerprint_fixes.py
index 715382f54..5817beda5 100644
--- a/pythonlib/tests/test_fingerprint_fixes.py
+++ b/pythonlib/tests/test_fingerprint_fixes.py
@@ -224,15 +224,138 @@ def test_never_negative(self):
class TestSetMediaDevicesDefaults:
- def test_sets_one_mic_one_cam(self):
- c = {}
+ def test_draws_common_desktop_devices(self):
+ # A pre-permission page only sees "has a mic" / "has a camera"; the draw
+ # is seeded by the identity and follows the common desktop population.
+ c = {"navigator.userAgent": "ua", "navigator.platform": "Win32"}
set_media_devices_defaults(c)
assert c["mediaDevices:enabled"] is True
- assert c["mediaDevices:micros"] == 1
- assert c["mediaDevices:webcams"] == 1
- assert c["mediaDevices:speakers"] == 0
+ # counts and the post-grant label/group lists agree
+ for kind, key in (("micros", "microphone"), ("webcams", "webcam"), ("speakers", "speaker")):
+ n = c[f"mediaDevices:{kind}"]
+ assert n >= 0
+ assert len(c[f"mediaDevices:{key}Labels"]) == n
+ assert len(c[f"mediaDevices:{key}Groups"]) == n
+ # a Windows machine always has an output, in WASAPI label form
+ assert c["mediaDevices:speakers"] >= 1
+ assert all("(" in s for s in c["mediaDevices:speakerLabels"])
+ again = {"navigator.userAgent": "ua", "navigator.platform": "Win32"}
+ set_media_devices_defaults(again)
+ assert again == c
+ # over many identities laptops dominate Windows: most have both
+ mics = cams = 0
+ for i in range(400):
+ d = {"navigator.userAgent": f"ua{i}", "navigator.platform": "Win32"}
+ set_media_devices_defaults(d)
+ mics += d["mediaDevices:micros"] > 0
+ cams += d["mediaDevices:webcams"] > 0
+ assert 0.8 < mics / 400 < 1.0
+ assert 0.55 < cams / 400 < 0.95
+
+ def test_per_os_label_style(self):
+ from camoufox.fingerprints import draw_media_devices
+
+ mac = draw_media_devices("mac", 7)
+ assert all(not s.startswith("Microphone (") for s in mac["mediaDevices:microphoneLabels"])
+ lin = draw_media_devices("lin", 7)
+ # PulseAudio lists a monitor source per output as a capture device
+ outs = lin["mediaDevices:speakerLabels"]
+ assert all(f"Monitor of {o}" in lin["mediaDevices:microphoneLabels"] for o in outs)
+ # a sound card's mic and speakers share a group, like a real groupId
+ win = draw_media_devices("win", 11)
+ if win["mediaDevices:micros"] and win["mediaDevices:speakers"]:
+ assert win["mediaDevices:microphoneGroups"][0] == win["mediaDevices:speakerGroups"][0]
+ # never the fake engine's names
+ for os_key in ("win", "mac", "lin"):
+ for seed in range(50):
+ d = draw_media_devices(os_key, seed)
+ mics = d["mediaDevices:microphoneLabels"]
+ cams = d["mediaDevices:webcamLabels"]
+ assert "Default Audio Device" not in mics
+ assert "Default Video Device" not in cams
+ # distinct within a kind (macOS names a webcam and its mic alike)
+ assert len(set(mics)) == len(mics)
+ assert len(set(cams)) == len(cams)
def test_respects_user_set_media_devices(self):
c = {"mediaDevices:webcams": 5}
set_media_devices_defaults(c)
assert c == {"mediaDevices:webcams": 5}
+
+
+class TestFixHardwareConcurrency:
+ def test_keeps_a_plausible_draw_the_host_can_be_pinned_to(self, monkeypatch):
+ # The fingerprint's value survives when it is a count a real desktop
+ # ships with AND the browser can be pinned to it (reported == measurable
+ # by construction).
+ from camoufox import cpu_affinity, fingerprints as fp
+
+ monkeypatch.setattr(cpu_affinity, "supported", lambda: True)
+ monkeypatch.setattr(fp, "host_cpu_count", lambda: 16)
+ for drawn in (4, 6, 8, 10, 12, 14, 16):
+ c = {"navigator.hardwareConcurrency": drawn}
+ fp.fix_hardware_concurrency(c)
+ assert c["navigator.hardwareConcurrency"] == drawn
+
+ def test_snaps_implausible_draws_down_into_the_table(self, monkeypatch):
+ # browserforge draws counts no desktop ships with: over 400 linux draws
+ # 8.0% were < 4 cores and 4.2% were exactly 2. hardwareConcurrency == 2
+ # is what Firefox reports under resistFingerprinting, so CreepJS-style
+ # heuristics label the browser "Firefox resistFingerprinting"; odd counts
+ # (5, 7, 9, ...) are equally synthetic. They snap DOWN into
+ # PLAUSIBLE_CORE_COUNTS, with the table floor for anything below it.
+ from camoufox import cpu_affinity, fingerprints as fp
+
+ monkeypatch.setattr(cpu_affinity, "supported", lambda: True)
+ monkeypatch.setattr(fp, "host_cpu_count", lambda: 16)
+ for drawn, expected in ((1, 4), (2, 4), (3, 4), (5, 4), (7, 6), (9, 8),
+ (11, 10), (13, 12), (15, 14), (32, 16)):
+ c = {"navigator.hardwareConcurrency": drawn}
+ fp.fix_hardware_concurrency(c)
+ assert c["navigator.hardwareConcurrency"] == expected, drawn
+ # never above what the host can be pinned to
+ monkeypatch.setattr(fp, "host_cpu_count", lambda: 4)
+ c = {"navigator.hardwareConcurrency": 2}
+ fp.fix_hardware_concurrency(c)
+ assert c["navigator.hardwareConcurrency"] == 4
+
+ def test_snaps_host_parallelism_when_it_cannot_pin(self, monkeypatch):
+ # The host count, snapped DOWN into the
+ # counts real machines ship with; the tails report 32 / 4. Used when the
+ # draw exceeds the host or the host cannot pin (macOS).
+ # 18/22/24/28/32 are in the table (recorded on real devices); 2 is NOT,
+ # although it is recorded, because 2 is the resistFingerprinting value.
+ from camoufox import cpu_affinity, fingerprints as fp
+
+ monkeypatch.setattr(cpu_affinity, "supported", lambda: False)
+ for host, expected in (
+ (16, 16),
+ (10, 10),
+ (24, 24),
+ (26, 24),
+ (32, 32),
+ (64, 32),
+ (22, 22),
+ (7, 6),
+ (5, 4),
+ (2, 4),
+ (9, 8),
+ ):
+ monkeypatch.setattr(fp, "host_cpu_count", lambda host=host: host)
+ c = {"navigator.hardwareConcurrency": 2}
+ fp.fix_hardware_concurrency(c)
+ assert c["navigator.hardwareConcurrency"] == expected, host
+ # a draw above the host count cannot be honoured even where pinning works
+ monkeypatch.setattr(cpu_affinity, "supported", lambda: True)
+ monkeypatch.setattr(fp, "host_cpu_count", lambda: 8)
+ c = {"navigator.hardwareConcurrency": 32}
+ fp.fix_hardware_concurrency(c)
+ assert c["navigator.hardwareConcurrency"] == 8
+
+ def test_no_host_count_leaves_the_draw(self, monkeypatch):
+ from camoufox import fingerprints as fp
+
+ monkeypatch.setattr(fp, "host_cpu_count", lambda: None)
+ c = {"navigator.hardwareConcurrency": 8}
+ fp.fix_hardware_concurrency(c)
+ assert c["navigator.hardwareConcurrency"] == 8
diff --git a/pythonlib/tests/test_font_distribution.py b/pythonlib/tests/test_font_distribution.py
new file mode 100644
index 000000000..41307da40
--- /dev/null
+++ b/pythonlib/tests/test_font_distribution.py
@@ -0,0 +1,283 @@
+"""The font draw has to produce machines that could exist.
+
+verify-fonts.py already checks that a draw only names families fonts.json can
+report. That is a membership check, and membership is not the property that
+matters: a draw that returned the same list every time, or that put Office on a
+third of Windows machines instead of 60%, passes it. Those are the failures this
+file is for.
+
+Three properties, each of which a plausible refactor could silently break:
+
+ * COMPLETE BASE -- a real machine runs one OS version and has that version's
+ whole default font set. `_ESSENTIAL_FONTS_*` is only the
+ INTERSECTION of the versions, so asserting it is not the
+ same as asserting a base.
+ Caveat, measured by mutation-testing this file: the
+ essential floor is large (125 win / 369 mac / 274 lin)
+ and refills most of a subsetted base, so
+ test_every_draw_contains_one_complete_base alone does NOT
+ catch a base that is silently truncated -- what catches
+ that is test_base_weights_match_the_manifest, because
+ truncation removes the exclusive families a version is
+ identified by. Keep both.
+ * REAL RATES -- each unit appears at the probability the manifest gives
+ it, measured against real machines. The draw used to take
+ a flat 30-78% sample over units, which put the
+ Pan-European pack (really 2.8%) on more than half of
+ identities.
+ * VARIATION -- the population of draws is diverse. Font lists are a
+ high-entropy surface; a draw that collapses toward one
+ list makes every Camoufox install look like the same
+ machine.
+
+Rates are sampled, so every threshold here is a binomial tolerance around the
+manifest value rather than an equality, and the sample is drawn once per OS and
+shared (module-scoped fixture) to keep the suite fast.
+"""
+
+import json
+import math
+import os
+from collections import Counter
+
+import pytest
+
+from camoufox.fingerprints import _generate_random_font_subset as draw
+
+DATA = os.path.join(os.path.dirname(os.path.dirname(os.path.abspath(__file__))), 'camoufox')
+OS_KEYS = {'windows': 'win', 'macos': 'mac', 'linux': 'lin'}
+N = 1500
+
+
+def _load(name):
+ with open(os.path.join(DATA, name), 'rb') as fh:
+ return json.loads(fh.read())
+
+
+BASES = _load('font-bases.json')
+GROUPS = _load('font-groups.json')
+REPORTABLE = _load('fonts.json')
+
+
+def tolerance(p, n=N, sigmas=5.0, floor=0.03):
+ """Binomial slack, wide enough that a correct draw is not flaky."""
+ return max(floor, sigmas * math.sqrt(max(p * (1.0 - p), 1e-6) / n))
+
+
+@pytest.fixture(scope='module')
+def samples():
+ """{os_name: [set(fonts), ...]} -- one shared sample per OS."""
+ return {name: [set(draw(name, seed=i)) for i in range(N)] for name in OS_KEYS}
+
+
+# ---------------------------------------------------------------------------
+# a complete OS-version base, never a partial one
+# ---------------------------------------------------------------------------
+
+@pytest.mark.parametrize('os_name', sorted(OS_KEYS))
+def test_every_draw_contains_one_complete_base(os_name, samples):
+ """A machine has its OS version's whole default set, not a subset of it."""
+ bases = BASES[OS_KEYS[os_name]]
+ assert bases, f'{os_name}: no generated bases -- run scripts/gen-font-groups.py'
+ base_sets = {b['id']: set(b['fonts']) for b in bases}
+ for i, fonts in enumerate(samples[os_name]):
+ if not any(fs <= fonts for fs in base_sets.values()):
+ short = {bid: sorted(fs - fonts)[:5] for bid, fs in base_sets.items()}
+ pytest.fail(
+ f'{os_name} draw #{i} contains no base in full; missing per base: {short}'
+ )
+
+
+@pytest.mark.parametrize('os_name', sorted(OS_KEYS))
+def test_base_weights_match_the_manifest(os_name, samples):
+ """Each OS version turns up at its real-world share."""
+ bases = BASES[OS_KEYS[os_name]]
+ if len(bases) < 2:
+ pytest.skip(f'{os_name} has a single base; nothing to weight')
+ # Identify a base by the families that ONLY it has. A base with none (a
+ # strict subset of another, e.g. Windows 10 under Windows 11) is not
+ # separable and is not asserted here.
+ counts = Counter()
+ exclusive = {}
+ for b in bases:
+ others = set().union(*[set(o['fonts']) for o in bases if o['id'] != b['id']])
+ exclusive[b['id']] = set(b['fonts']) - others
+ for fonts in samples[os_name]:
+ for bid, ex in exclusive.items():
+ if ex and ex <= fonts:
+ counts[bid] += 1
+ for b in bases:
+ ex = exclusive[b['id']]
+ if not ex:
+ continue
+ seen, want = counts[b['id']] / N, b['weight']
+ assert abs(seen - want) <= tolerance(want), (
+ f'{os_name} base {b["id"]}: drawn {seen:.3f}, manifest weight {want}'
+ )
+
+
+# ---------------------------------------------------------------------------
+# addition units appear at their measured real-world probability
+# ---------------------------------------------------------------------------
+
+def _unit_exclusive(os_key, unit):
+ """Fonts that identify this unit: in no base and in no other unit."""
+ units = GROUPS[os_key]
+ other_units = set().union(
+ *[set(u['fonts']) for u in units if u['id'] != unit['id']]
+ ) if len(units) > 1 else set()
+ in_base = set().union(*[set(b['fonts']) for b in BASES[os_key]]) if BASES[os_key] else set()
+ return set(unit['fonts']) - in_base - other_units
+
+
+@pytest.mark.parametrize('os_name', sorted(OS_KEYS))
+def test_unit_probabilities_match_the_manifest(os_name, samples):
+ """Office on ~60% of Windows boxes, the Pan-European pack on ~2.8%."""
+ os_key = OS_KEYS[os_name]
+ checked = 0
+ for unit in GROUPS[os_key]:
+ if unit.get('requiresLocale'):
+ continue # gated separately, below
+ ex = _unit_exclusive(os_key, unit)
+ if not ex:
+ continue # wholly shared with a base/another unit: not separable
+ hits = sum(1 for fonts in samples[os_name] if ex & fonts)
+ seen, want = hits / N, unit['prob']
+ checked += 1
+ assert abs(seen - want) <= tolerance(want), (
+ f'{os_name} unit {unit["id"]}: drawn {seen:.3f}, manifest prob {want}'
+ )
+ assert checked, f'{os_name}: no separable units to check'
+
+
+@pytest.mark.parametrize('os_name', sorted(OS_KEYS))
+def test_bundle_units_are_all_or_nothing(os_name, samples):
+ """Office installs as one download; a draw must never show half of it.
+
+ A partial group is an artefact no real machine produces (sundial
+ "co-shipped families not split").
+ """
+ os_key = OS_KEYS[os_name]
+ for unit in GROUPS[os_key]:
+ if unit['kind'] != 'bundle':
+ continue
+ ex = _unit_exclusive(os_key, unit)
+ if len(ex) < 2:
+ continue
+ for i, fonts in enumerate(samples[os_name]):
+ present = ex & fonts
+ if present and present != ex:
+ pytest.fail(
+ f'{os_name} draw #{i}: bundle unit {unit["id"]} is partial -- '
+ f'{len(present)} of {len(ex)} exclusive families, '
+ f'missing e.g. {sorted(ex - present)[:4]}'
+ )
+
+
+@pytest.mark.parametrize('os_name', sorted(OS_KEYS))
+def test_alacarte_units_are_piecemeal_not_all_or_nothing(os_name, samples):
+ """Developer/web fonts are installed a few at a time, not as a block.
+
+ This is the property that separates an alacarte unit from a bundle one; if
+ the draw ever treats them alike, identities lose most of their font entropy.
+ """
+ os_key = OS_KEYS[os_name]
+ checked = 0
+ for unit in GROUPS[os_key]:
+ if unit['kind'] != 'alacarte':
+ continue
+ ex = _unit_exclusive(os_key, unit)
+ if len(ex) < 4:
+ continue
+ counts = {len(ex & fonts) for fonts in samples[os_name]}
+ partial = {c for c in counts if 0 < c < len(ex)}
+ checked += 1
+ assert partial, (
+ f'{os_name} unit {unit["id"]}: never appears partially '
+ f'(counts seen: {sorted(counts)[:6]}) -- it is behaving like a bundle'
+ )
+ expected = sum(s['n'] * s['w'] for s in unit['sizes']) / sum(s['w'] for s in unit['sizes'])
+ drawn = [len(ex & fonts) for fonts in samples[os_name] if ex & fonts]
+ mean = sum(drawn) / len(drawn)
+ # `sizes` is renormalised against the reportable subset, so allow slack.
+ assert mean <= max(expected * 2.5, expected + 2), (
+ f'{os_name} unit {unit["id"]}: mean install size {mean:.2f}, '
+ f'manifest sizes expect about {expected:.2f}'
+ )
+ assert checked, f'{os_name}: no alacarte units to check'
+
+
+def test_locale_gated_units_need_their_locale():
+ """A zh-TW-only pack must not land on an en-US identity."""
+ gated = [(k, u) for k, units in GROUPS.items() for u in units if u.get('requiresLocale')]
+ if not gated:
+ pytest.skip('no locale-gated units currently reportable')
+ name = {'win': 'windows', 'mac': 'macos', 'lin': 'linux'}
+ for os_key, unit in gated:
+ ex = _unit_exclusive(os_key, unit)
+ if not ex:
+ continue
+ for i in range(300):
+ fonts = set(draw(name[os_key], seed=i, locale='en-US'))
+ assert not (ex & fonts), (
+ f'{os_key} unit {unit["id"]} requires {unit["requiresLocale"]} '
+ f'but appeared on an en-US identity (draw #{i})'
+ )
+
+
+# ---------------------------------------------------------------------------
+# variation
+# ---------------------------------------------------------------------------
+
+@pytest.mark.parametrize('os_name', sorted(OS_KEYS))
+def test_draws_are_varied(os_name, samples):
+ """Font lists are a high-entropy surface; they must not collapse."""
+ lists = [tuple(sorted(f)) for f in samples[os_name]]
+ distinct = len(set(lists))
+ assert distinct >= 50, (
+ f'{os_name}: only {distinct} distinct font lists in {N} draws'
+ )
+ commonest = Counter(lists).most_common(1)[0][1] / N
+ assert commonest <= 0.5, (
+ f'{os_name}: one identical font list covers {commonest:.1%} of draws'
+ )
+
+
+@pytest.mark.parametrize('os_name', sorted(OS_KEYS))
+def test_list_length_varies(os_name, samples):
+ """Two machines of the same OS should not report the same number of fonts."""
+ lengths = {len(f) for f in samples[os_name]}
+ assert len(lengths) >= 5, (
+ f'{os_name}: font-list length takes only {len(lengths)} values {sorted(lengths)[:6]}'
+ )
+
+
+# ---------------------------------------------------------------------------
+# invariants the above must not be bought at the expense of
+# ---------------------------------------------------------------------------
+
+@pytest.mark.parametrize('os_name', sorted(OS_KEYS))
+def test_draw_only_reports_renderable_families(os_name, samples):
+ """Reporting a font the browser cannot draw is a reverse leak."""
+ pool = set(REPORTABLE[OS_KEYS[os_name]])
+ for i, fonts in enumerate(samples[os_name]):
+ extra = fonts - pool
+ assert not extra, f'{os_name} draw #{i} names families outside fonts.json: {sorted(extra)[:5]}'
+
+
+@pytest.mark.parametrize('os_name', sorted(OS_KEYS))
+def test_draw_is_deterministic_per_identity(os_name):
+ """One identity must present one font list across launches.
+
+ A page that keeps cookies and sees the font list change has caught the
+ browser out (daijro/camoufox#442, #765).
+ """
+ for seed in (1, 7, 99):
+ assert draw(os_name, seed=seed) == draw(os_name, seed=seed)
+
+
+@pytest.mark.parametrize('os_name', sorted(OS_KEYS))
+def test_no_duplicate_families_in_a_draw(os_name, samples):
+ for i in range(min(N, 200)):
+ lst = draw(os_name, seed=i)
+ assert len(lst) == len(set(lst)), f'{os_name} draw #{i} repeats a family'
diff --git a/pythonlib/tests/test_humanize.py b/pythonlib/tests/test_humanize.py
index 2275bc1a9..ddbe389cc 100644
--- a/pythonlib/tests/test_humanize.py
+++ b/pythonlib/tests/test_humanize.py
@@ -10,7 +10,7 @@ def captured_launch_config(monkeypatch):
captured = {}
monkeypatch.setattr(utils, "generate_fingerprint", lambda **_kwargs: object())
- monkeypatch.setattr(utils, "from_browserforge", lambda *_args, **_kwargs: {})
+ monkeypatch.setattr(utils, "from_fpgen", lambda *_args, **_kwargs: {})
monkeypatch.setattr(utils, "get_screen_cons", lambda *_args, **_kwargs: {})
monkeypatch.setattr(
utils, "_generate_random_font_subset", lambda *_args, **_kwargs: []
diff --git a/pythonlib/tests/test_identity_salt.py b/pythonlib/tests/test_identity_salt.py
new file mode 100644
index 000000000..f63ef7a96
--- /dev/null
+++ b/pythonlib/tests/test_identity_salt.py
@@ -0,0 +1,164 @@
+"""Per-identity draws: unrelated launches must not share them, a pinned identity must.
+
+identity_seed() used to hash only the UA, platform, screen size and core count.
+Those take a handful of values per OS, so over 500 launches the seed took 12-30
+distinct values, and every install drew its fonts, voices, GPU, media devices and
+canvas/audio noise seeds from that same short list.
+"""
+
+from contextlib import contextmanager
+from unittest import mock
+
+import orjson
+import pytest
+
+from camoufox import cpu_affinity, utils
+from camoufox import fingerprints as fp
+
+
+@contextmanager
+def host():
+ with mock.patch.object(utils, "get_screen_cons", lambda headless: None), (
+ mock.patch.object(utils, "has_display", lambda env: False)
+ ), mock.patch.object(utils, "installed_verstr", lambda: "150.0.2"), (
+ mock.patch.object(utils, "launch_path", lambda **kwargs: "/nonexistent/camoufox")
+ ):
+ yield
+
+
+def config_of(options):
+ env = options["env"]
+ chunks = sorted(
+ (int(k.rsplit("_", 1)[1]), v) for k, v in env.items() if k.startswith("CAMOU_CONFIG_")
+ )
+ return orjson.loads("".join(chunk for _, chunk in chunks))
+
+
+def launch(**kwargs):
+ kwargs.setdefault("os", "linux")
+ kwargs.setdefault("headless", True)
+ kwargs.setdefault("i_know_what_im_doing", True)
+ with host():
+ return config_of(utils.launch_options(**kwargs))
+
+
+DRAWN = ("canvas:seed", "audio:seed", "fonts", "voices", "webGl:renderer")
+
+
+def drawn(config):
+ return {k: orjson.dumps(config.get(k)) for k in DRAWN}
+
+
+class TestUnpinnedLaunchesAreDistinct:
+ def test_noise_seeds_do_not_collide(self):
+ seeds = [launch()["canvas:seed"] for _ in range(40)]
+ # 40 draws from 2**32: any collision means the seed space collapsed.
+ assert len(set(seeds)) == len(seeds)
+
+ def test_same_presented_values_still_differ(self):
+ # The same UA/platform/screen/cores, i.e. what two users on the same
+ # common machine present, must not yield the same noise seeds.
+ config = {"navigator.userAgent": "x", "navigator.platform": "Win32",
+ "screen.width": 1920, "screen.height": 1080, "navigator.hardwareConcurrency": 8}
+ seeds = {fp.identity_seed(config, fp.identity_salt()) for _ in range(200)}
+ assert len(seeds) == 200
+
+
+class TestPinnedIdentityIsStable:
+ def test_fixed_fingerprint_reproduces_every_draw(self):
+ fingerprint = fp.generate_fingerprint(os="linux")
+ first = launch(fingerprint=fingerprint)
+ second = launch(fingerprint=fingerprint)
+ assert drawn(first) == drawn(second)
+
+ def test_fixed_preset_reproduces_noise_seeds(self):
+ preset = fp.get_random_preset(os="windows", ff_version="150")
+ if not preset:
+ pytest.skip("no presets bundled")
+ first = launch(os="windows", fingerprint_preset=preset)
+ second = launch(os="windows", fingerprint_preset=preset)
+ assert (first["canvas:seed"], first["audio:seed"]) == (second["canvas:seed"], second["audio:seed"])
+ assert first["fonts"] == second["fonts"]
+
+ @pytest.mark.parametrize("os_name", ["windows", "macos", "linux"])
+ def test_every_bundled_preset_launches(self, os_name):
+ # The test above draws ONE preset at random, so a preset that cannot
+ # launch shows up as a 1-in-11 flake rather than a failure -- which is
+ # how it reached CI. 39 of the 435 bundled presets name a GPU that is
+ # not among the 33 in webgl_data.db, and sample_webgl raises for those.
+ # Every preset has to produce launch options; see the fallback in
+ # utils.launch_options.
+ from camoufox.webgl import sample_webgl
+
+ presets = fp.load_presets("150")["presets"][os_name]
+ key = {"windows": "win", "macos": "mac", "linux": "lin"}[os_name]
+ for i, preset in enumerate(presets):
+ config = launch(os=os_name, fingerprint_preset=preset)
+ # Whatever GPU survives, the renderer the page reads and the
+ # parameters behind it must come from the SAME recorded device --
+ # merge_into does not overwrite, so a fallback that forgets to drop
+ # the preset's pair leaves one device's name on another's data.
+ assert config.get("webGl:parameters"), (os_name, i)
+ sample_webgl(key, config["webGl:vendor"], config["webGl:renderer"])
+
+ def test_caller_seeds_are_kept(self):
+ config = launch(config={"canvas:seed": 7, "audio:seed": 9})
+ assert (config["canvas:seed"], config["audio:seed"]) == (7, 9)
+
+ def test_salt_of_equal_objects_is_equal(self):
+ a = fp.generate_fingerprint(os="windows")
+ assert fp.identity_salt(a) == fp.identity_salt(a)
+ assert fp.identity_salt({"a": 1, "b": 2}) == fp.identity_salt({"b": 2, "a": 1})
+
+
+class TestVoicesFollowLocale:
+ def test_windows_fr_identity_has_french_voices(self, monkeypatch):
+ for _ in range(5):
+ config = launch(os="windows", locale="fr-FR")
+ langs = {v["lang"] for v in config["voices"]}
+ assert "fr-FR" in langs, langs
+
+
+class TestCoreCountFloor:
+ def test_small_pinnable_host_reports_table_floor(self, monkeypatch):
+ monkeypatch.setattr(cpu_affinity, "supported", lambda: True)
+ for host_cores in (1, 2, 3):
+ monkeypatch.setattr(fp, "host_cpu_count", lambda n=host_cores: n)
+ for drawn_cores in (1, 2, 3, 8):
+ c = {"navigator.hardwareConcurrency": drawn_cores}
+ fp.fix_hardware_concurrency(c)
+ assert c["navigator.hardwareConcurrency"] == 4, (host_cores, drawn_cores)
+
+ def test_unpinned_launch_reports_host(self, monkeypatch):
+ monkeypatch.setattr(cpu_affinity, "supported", lambda: True)
+ monkeypatch.setattr(fp, "host_cpu_count", lambda: 16)
+ c = {"navigator.hardwareConcurrency": 8}
+ fp.fix_hardware_concurrency(c, can_pin=False)
+ assert c["navigator.hardwareConcurrency"] == 16
+
+ def test_recorded_counts_are_in_the_table(self):
+ for n in (18, 22, 28, 32):
+ assert n in fp.PLAUSIBLE_CORE_COUNTS
+
+
+class TestAffinityPick:
+ def test_adjacent_cores_from_a_random_start(self):
+ cores = list(range(16))
+ starts = set()
+ for _ in range(200):
+ picked = cpu_affinity._pick(cores, 4)
+ assert len(picked) == 4 and set(picked) <= set(cores)
+ ring = sorted(picked)
+ # adjacent modulo 16
+ assert any(all((s + i) % 16 in picked for i in range(4)) for s in ring)
+ starts.add(tuple(picked))
+ assert len(starts) > 4
+
+
+class TestPrefsEnvIsAscii:
+ def test_non_ascii_pref_round_trips(self):
+ prefs = {"font.name.serif.ja": "游明朝", "intl.accept_languages": "fr-FR, fr"}
+ env = utils.get_pref_env_vars(prefs)
+ joined = "".join(env[f"CAMOU_PREFS_{i}"] for i in range(1, len(env) + 1))
+ assert joined.isascii()
+ assert orjson.loads(joined) == prefs
diff --git a/pythonlib/tests/test_launch_environment.py b/pythonlib/tests/test_launch_environment.py
index b462528ac..2505395a0 100644
--- a/pythonlib/tests/test_launch_environment.py
+++ b/pythonlib/tests/test_launch_environment.py
@@ -12,7 +12,7 @@ def isolated_launch_dependencies(monkeypatch):
"""Keep launch_options focused on environment assembly, without a browser."""
monkeypatch.setattr(utils, "add_default_addons", lambda *args, **kwargs: None)
monkeypatch.setattr(utils, "generate_fingerprint", lambda *args, **kwargs: object())
- monkeypatch.setattr(utils, "from_browserforge", lambda *args, **kwargs: {})
+ monkeypatch.setattr(utils, "from_fpgen", lambda *args, **kwargs: {})
monkeypatch.setattr(utils, "get_screen_cons", lambda *args, **kwargs: None)
monkeypatch.setattr(utils, "_generate_random_font_subset", lambda *args: [])
monkeypatch.setattr(utils, "_generate_random_voice_subset", lambda *args: [])
@@ -74,3 +74,317 @@ def test_virtual_display_does_not_mutate_caller_environment(
assert options["env"]["GDK_BACKEND"] == "x11"
assert "WAYLAND_DISPLAY" not in options["env"]
assert options["env"]["MOZ_ENABLE_WAYLAND"] == "0"
+
+
+class TestFontFallbackAsyncPref:
+ """Per-character font fallback must not skip families whose
+ charmap is not loaded yet.
+
+ Gecko's GlobalFontFallback walks the shared font list for a family covering
+ the character; in a content process with async fallback on it hits the
+ `!family.IsFullyInitialized()` branch, schedules a cmap load and SKIPS the
+ family, so the first measurement of a character only one bundled family
+ provides returns the primary family's .notdef. Linux takes that path for
+ every fallback (UseCmapsDuringSystemFallback), so the font-hijacker change
+ that restored this on macOS cannot reach it there.
+
+ macOS must NOT get the pref: it uses the CoreText fallback, and forcing the
+ synchronous scan changed the face picked for U+1E9E in Futura (stock 21.733
+ -> 27.267), measured on a real Mac mini.
+ """
+
+ PREF = "gfx.font_rendering.fallback.async"
+
+ def _prefs_for(self, ua, isolated):
+ return utils.launch_options(
+ config={"navigator.userAgent": ua},
+ i_know_what_im_doing=True,
+ )["firefox_user_prefs"]
+
+ def test_linux_disables_async_font_fallback(self, isolated_launch_dependencies):
+ prefs = self._prefs_for("Mozilla/5.0 (X11; Linux x86_64; rv:152.0) Gecko/20100101 Firefox/152.0", None)
+ assert prefs[self.PREF] is False
+
+ def test_macos_keeps_async_font_fallback(self, isolated_launch_dependencies):
+ prefs = self._prefs_for(
+ "Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:152.0) Gecko/20100101 Firefox/152.0", None
+ )
+ assert self.PREF not in prefs
+
+ def test_windows_keeps_async_font_fallback(self, isolated_launch_dependencies):
+ prefs = self._prefs_for(
+ "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:152.0) Gecko/20100101 Firefox/152.0", None
+ )
+ assert self.PREF not in prefs
+
+ def test_caller_pref_wins(self, isolated_launch_dependencies):
+ prefs = utils.launch_options(
+ config={"navigator.userAgent": "Mozilla/5.0 (X11; Linux x86_64; rv:152.0) Gecko/20100101 Firefox/152.0"},
+ firefox_user_prefs={"gfx.font_rendering.fallback.async": True},
+ i_know_what_im_doing=True,
+ )["firefox_user_prefs"]
+ assert prefs[self.PREF] is True
+
+
+class TestUiLocaleFollowsIntlLocale:
+ """The packaged browser locale must follow the spoofed Intl locale.
+
+ With locale="fr-FR" and the browser left on en-US, Intl formatting went
+ French while input.validationMessage and XML parse errors stayed English --
+ a mix no real Firefox produces. Packages now bake in the language packs;
+ intl.locale.requested selects one, and must always be set because an empty
+ value would follow the host OS locale.
+ """
+
+ PREF = "intl.locale.requested"
+ UA = "Mozilla/5.0 (X11; Linux x86_64; rv:152.0) Gecko/20100101 Firefox/152.0"
+
+ def _prefs(self, **kwargs):
+ return utils.launch_options(
+ config={"navigator.userAgent": self.UA, **kwargs.pop("config", {})},
+ i_know_what_im_doing=True,
+ **kwargs,
+ )["firefox_user_prefs"]
+
+ def test_default_identity_pins_en_us(self, isolated_launch_dependencies):
+ assert self._prefs()[self.PREF] == "en-US"
+
+ def test_spoofed_locale_selects_matching_ui_locale(self, isolated_launch_dependencies):
+ # handle_locale adds the likely script; Gecko's filtering negotiation
+ # treats a packaged "fr" as a range, so fr-Latn-FR still selects fr.
+ assert self._prefs(locale="fr-FR")[self.PREF] == "fr-Latn-FR"
+ assert self._prefs(locale="pt-BR")[self.PREF] == "pt-Latn-BR"
+
+ def test_first_of_several_locales_wins(self, isolated_launch_dependencies):
+ assert self._prefs(locale="de-DE, en-US")[self.PREF] == "de-Latn-DE"
+
+ def test_geoip_style_config_locale_is_used(self, isolated_launch_dependencies):
+ config = {"locale:language": "ja", "locale:region": "JP"}
+ assert self._prefs(config=config)[self.PREF] == "ja-JP"
+
+ def test_script_subtag_is_kept(self, isolated_launch_dependencies):
+ config = {"locale:language": "zh", "locale:script": "Hant", "locale:region": "TW"}
+ assert self._prefs(config=config)[self.PREF] == "zh-Hant-TW"
+
+ def test_caller_pref_wins(self, isolated_launch_dependencies):
+ prefs = self._prefs(locale="fr-FR", firefox_user_prefs={self.PREF: "de"})
+ assert prefs[self.PREF] == "de"
+
+
+class TestPrefsReachStartup:
+ """Launcher prefs must be readable by camoufox.cfg at startup.
+
+ Playwright's non-persistent launch writes no user.js, so firefox_user_prefs
+ only arrived via juggler after startup; intl.locale.requested lost the race
+ against Gecko's pre-created string bundles on Windows.
+ """
+
+ UA = "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:152.0) Gecko/20100101 Firefox/152.0"
+
+ def test_prefs_are_passed_as_env(self, isolated_launch_dependencies):
+ import orjson
+
+ opts = utils.launch_options(config={"navigator.userAgent": self.UA}, locale="fr-FR", i_know_what_im_doing=True)
+ chunks = sorted((k for k in opts["env"] if k.startswith("CAMOU_PREFS_")), key=lambda k: int(k.rsplit("_", 1)[1]))
+ assert chunks and chunks[0] == "CAMOU_PREFS_1"
+ prefs = orjson.loads("".join(opts["env"][k] for k in chunks))
+ assert prefs == opts["firefox_user_prefs"]
+ assert prefs["intl.locale.requested"] == "fr-Latn-FR"
+
+ def test_large_prefs_are_chunked_in_order(self, monkeypatch):
+ import orjson
+
+ monkeypatch.setattr(utils, "OS_NAME", "win")
+ prefs = {f"camoufox.test.pref{i}": "x" * 50 for i in range(200)}
+ env = utils.get_pref_env_vars(prefs)
+ assert len(env) > 1 and all(len(v) <= 2047 for v in env.values())
+ joined = "".join(env[f"CAMOU_PREFS_{i}"] for i in range(1, len(env) + 1))
+ assert orjson.loads(joined) == prefs
+
+ def test_no_prefs_no_env(self):
+ assert utils.get_pref_env_vars({}) == {}
+
+
+class TestWindowsScrollbarsFollowVersion:
+ """Windows 11 draws overlay scrollbars by default (stock 152.0.4 on Win11: 0 px),
+ Windows 10 classic 17 px ones; the identity's font draw decides the version."""
+
+ PREF = "ui.useOverlayScrollbars"
+ WIN_UA = "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:152.0) Gecko/20100101 Firefox/152.0"
+
+ def _prefs(self, fonts, ua=None):
+ return utils.launch_options(
+ config={"navigator.userAgent": ua or self.WIN_UA, "fonts": fonts},
+ i_know_what_im_doing=True,
+ )["firefox_user_prefs"]
+
+ def test_windows_11_fonts_get_overlay(self, isolated_launch_dependencies):
+ assert self._prefs(["Arial", "Segoe UI Variable Text"])[self.PREF] == 1
+
+ def test_windows_10_fonts_get_classic(self, isolated_launch_dependencies):
+ assert self._prefs(["Arial", "Segoe UI", "Calibri"])[self.PREF] == 0
+
+ def test_other_oses_overlay(self, isolated_launch_dependencies):
+ ua = "Mozilla/5.0 (X11; Linux x86_64; rv:152.0) Gecko/20100101 Firefox/152.0"
+ assert self._prefs(["DejaVu Sans"], ua=ua)[self.PREF] == 1
+
+ def test_marker_set_is_the_font_model(self):
+ from camoufox.fingerprints import _BASE_VARIANT_FONTS_WINDOWS, WINDOWS_11_MARKER_FONTS
+ assert WINDOWS_11_MARKER_FONTS == frozenset(_BASE_VARIANT_FONTS_WINDOWS[1])
+
+
+class TestNativeWindowsVariantFonts:
+ """A native Windows identity claims the Win11 font variant iff the host has it."""
+
+ def test_native_windows_11_host_claims_variant(self, monkeypatch):
+ from camoufox import fingerprints as fp
+ monkeypatch.setattr(fp, "_host_has_variant_fonts", lambda target_os: True)
+ fonts = fp._generate_random_font_subset("windows", seed=1, native=True)
+ assert fp.WINDOWS_11_MARKER_FONTS <= set(fonts)
+
+ def test_native_windows_10_host_does_not(self, monkeypatch):
+ from camoufox import fingerprints as fp
+ monkeypatch.setattr(fp, "_host_has_variant_fonts", lambda target_os: False)
+ fonts = fp._generate_random_font_subset("windows", seed=1, native=True)
+ assert not (fp.WINDOWS_11_MARKER_FONTS & set(fonts))
+
+ def test_non_windows_hosts_never_report_variant(self):
+ from camoufox import fingerprints as fp
+ assert fp._host_has_variant_fonts("linux") is False
+ assert fp._host_has_variant_fonts("macos") is False
+
+
+class _Usage:
+ """shutil.disk_usage's namedtuple, with only `total` filled in."""
+
+ def __init__(self, total):
+ self.total = total
+ self.used = 0
+ self.free = total
+
+
+class TestStorageQuotaFollowsHostDisk:
+ """The storage quota a page reads must be the host's, not a constant.
+
+ Gecko derives navigator.storage.estimate().quota from the disk: the
+ temporary-storage limit is GetDiskCapacity() / 2 and the group limit a page
+ reads is min(that / 5, 10 GiB). camoufox.cfg used to pin the limit to
+ 52428800 KB -- 50 GiB, which is exactly nsRFPService::GetSpoofedStorageLimit()
+ and reports 10 GiB on every host whatever its disk holds.
+
+ Deriving it from the host keeps the shape Gecko produces (a 100 GB+ disk
+ reports the 10 GiB cap, a smaller one reports capacity / 10) while ignoring
+ the disk Playwright's throwaway profile happens to land on -- a tmpfs /tmp
+ is a RAM-sized volume no real profile lives on.
+ """
+
+ PREF = "dom.quotaManager.temporaryStorage.fixedLimit"
+ UA = "Mozilla/5.0 (X11; Linux x86_64; rv:152.0) Gecko/20100101 Firefox/152.0"
+
+ def _prefs(self, **kwargs):
+ return utils.launch_options(
+ config={"navigator.userAgent": self.UA},
+ i_know_what_im_doing=True,
+ **kwargs,
+ )["firefox_user_prefs"]
+
+ def test_limit_is_half_the_host_disk(self, monkeypatch, isolated_launch_dependencies):
+ # 512 GiB, the way a filesystem reports it: a multiple of the block size.
+ capacity = 512 * 1024**3
+ monkeypatch.setattr(utils.shutil, "disk_usage", lambda _p: _Usage(capacity))
+ assert self._prefs()[self.PREF] == capacity // 2 // 1024
+
+ def test_small_disk_reports_less_than_the_cap(
+ self, monkeypatch, isolated_launch_dependencies
+ ):
+ # A 40 GB VPS: stock reports 4 GB, not the 10 GiB cap. The old pin
+ # claimed 10 GiB here, which that machine's own Firefox never says.
+ capacity = 40 * 1000**3
+ monkeypatch.setattr(utils.shutil, "disk_usage", lambda _p: _Usage(capacity))
+ limit_kb = self._prefs()[self.PREF]
+ group_limit = min(limit_kb * 1024 // 5, 10 * 1024**3)
+ assert group_limit == capacity // 2 // 5
+ assert group_limit < 10 * 1024**3
+
+ def test_multi_terabyte_disk_stays_in_int32(
+ self, monkeypatch, isolated_launch_dependencies
+ ):
+ monkeypatch.setattr(utils.shutil, "disk_usage", lambda _p: _Usage(16 * 1024**4))
+ limit_kb = self._prefs()[self.PREF]
+ assert limit_kb <= 2**31 - 1
+ # Still above 50 GiB, so the page reads the same 10 GiB cap stock does.
+ assert limit_kb * 1024 // 5 >= 10 * 1024**3
+
+ def test_unreadable_disk_leaves_gecko_to_measure(
+ self, monkeypatch, isolated_launch_dependencies
+ ):
+ def _raise(_p):
+ raise OSError("no such device")
+
+ monkeypatch.setattr(utils.shutil, "disk_usage", _raise)
+ assert self.PREF not in self._prefs()
+
+ def test_caller_pref_wins(self, monkeypatch, isolated_launch_dependencies):
+ monkeypatch.setattr(utils.shutil, "disk_usage", lambda _p: _Usage(512 * 1024**3))
+ prefs = self._prefs(firefox_user_prefs={self.PREF: 1234})
+ assert prefs[self.PREF] == 1234
+
+
+class TestStockMediaDefaults:
+ """The host's own media features, not Playwright's emulated ones.
+
+ Playwright emulates four media features on every context whether or not the
+ caller asked: colorScheme "light", and no-preference values for
+ reducedMotion / forcedColors / contrast. The page then reads those whatever
+ the machine is set to -- measured 2026-09-18, headed on an Xvfb with
+ GTK_THEME=Adwaita:dark: stock Firefox reported
+ `(prefers-color-scheme: dark)`, camoufox reported light.
+
+ "no-override" is Playwright's opt-out: no emulation is sent and the browser
+ answers from the host.
+ """
+
+ def test_defaults_are_no_override(self):
+ assert utils.STOCK_MEDIA_DEFAULTS == {
+ "color_scheme": "no-override",
+ "reduced_motion": "no-override",
+ "forced_colors": "no-override",
+ "contrast": "no-override",
+ }
+
+ def test_new_page_and_new_context_get_them(self):
+ class FakeBrowser:
+ def __init__(self):
+ self.calls = []
+
+ def new_page(self, **kwargs):
+ self.calls.append(("new_page", kwargs))
+
+ def new_context(self, **kwargs):
+ self.calls.append(("new_context", kwargs))
+
+ browser = FakeBrowser()
+ utils.attach_stock_media_defaults(browser)
+ browser.new_page()
+ browser.new_context()
+ for _, kwargs in browser.calls:
+ assert kwargs["color_scheme"] == "no-override"
+ assert kwargs["reduced_motion"] == "no-override"
+ assert kwargs["forced_colors"] == "no-override"
+ assert kwargs["contrast"] == "no-override"
+
+ def test_caller_value_wins(self):
+ class FakeBrowser:
+ def __init__(self):
+ self.kwargs = None
+
+ def new_context(self, **kwargs):
+ self.kwargs = kwargs
+
+ browser = FakeBrowser()
+ utils.attach_stock_media_defaults(browser)
+ browser.new_context(color_scheme="dark", forced_colors="active")
+ assert browser.kwargs["color_scheme"] == "dark"
+ assert browser.kwargs["forced_colors"] == "active"
+ # the ones the caller left alone still follow the host
+ assert browser.kwargs["reduced_motion"] == "no-override"
diff --git a/pythonlib/tests/test_launch_geometry.py b/pythonlib/tests/test_launch_geometry.py
index 21671d2f1..f7d0d7c1a 100644
--- a/pythonlib/tests/test_launch_geometry.py
+++ b/pythonlib/tests/test_launch_geometry.py
@@ -14,7 +14,7 @@
import orjson # noqa: E402
import pytest # noqa: E402
-from browserforge.fingerprints import Screen # noqa: E402
+from camoufox.fingerprints import Screen # noqa: E402
from camoufox import utils # noqa: E402
@@ -126,3 +126,24 @@ def test_unprobeable_display_is_not_clamped(self):
launch(headless=False)
clamp.assert_not_called()
+
+class TestViewportOperationsDoNotDeadlock:
+ """The window's inner dimensions must stay real.
+
+ Playwright's setViewportSize resizes the window and then waits for the page
+ to report the size it asked for. A spoofed innerWidth/innerHeight never
+ changes, so that wait never ends -- the same trap no_viewport exists for
+ (#666), reached through an explicit call instead.
+
+ BrowserForge hid this: its Firefox samples carry innerWidth/innerHeight as 0
+ and the mapper skips falsy values, so they were never spoofed. fpgen reports
+ real numbers, and mapping them hung tests/patches/humanize-edge-deadlock.py
+ for the full 600s CI timeout.
+ """
+
+ def test_inner_dimensions_are_never_spoofed(self):
+ for os_name in ("linux", "windows", "macos"):
+ for _ in range(5):
+ config = launch(os=os_name)
+ assert "window.innerWidth" not in config, os_name
+ assert "window.innerHeight" not in config, os_name
diff --git a/pythonlib/tests/test_shipped_data.py b/pythonlib/tests/test_shipped_data.py
new file mode 100644
index 000000000..4efef5db2
--- /dev/null
+++ b/pythonlib/tests/test_shipped_data.py
@@ -0,0 +1,76 @@
+"""The data files that ship must not contain an identity we would refuse to use.
+
+`camoufox.coherence` filters at draw time, so an impossible row can never reach
+a page either way. This is the second filter, on the data itself: a row that
+survives here is one a future refresh could ship, a consumer reading the JSON
+directly would get, and a reviewer would take as real. Both filters run the same
+rules -- `scripts/clean-fingerprint-data.py --write` is what makes these pass.
+
+Dropped on 2026-09-17: 38 of 435 presets (26 with a GPU their OS cannot report,
+7 pairing Apple Silicon with a core count Apple never shipped, 4 with a colour
+depth their GPU contradicts, 3 with a phone viewport, 1 claiming 40 touch
+points), and 2 impossible macOS weights in webgl_data.db.
+"""
+
+import json
+import sqlite3
+import sys
+from os.path import dirname, join
+from pathlib import Path
+
+import pytest
+
+sys.path.insert(0, join(dirname(__file__), ".."))
+
+from camoufox import coherence # noqa: E402
+from camoufox.fingerprints import from_preset # noqa: E402
+from camoufox.webgl.sample import DB_PATH # noqa: E402
+
+DATA = Path(__file__).parent.parent / "camoufox"
+PRESET_FILES = ("fingerprint-presets.json", "fingerprint-presets-v150.json")
+OS_KEY = {"macos": "mac", "windows": "win", "linux": "lin"}
+
+
+@pytest.mark.parametrize("filename", PRESET_FILES)
+def test_every_bundled_preset_is_coherent_as_stored(filename):
+ presets = json.loads((DATA / filename).read_text())["presets"]
+ for os_name, entries in presets.items():
+ assert entries, f"{filename}/{os_name} has no presets left"
+ for index, preset in enumerate(entries):
+ config = from_preset(preset, "152")
+ violations = coherence.validate(config, OS_KEY[os_name])
+ assert violations == [], (
+ f"{filename} {os_name}[{index}]: "
+ + "; ".join(v.detail for v in violations)
+ + " -- run scripts/clean-fingerprint-data.py --write"
+ )
+
+
+def test_no_gpu_is_offered_to_an_os_that_cannot_report_it():
+ connection = sqlite3.connect(DB_PATH)
+ try:
+ rows = connection.execute(
+ "SELECT vendor, renderer, win, mac, lin FROM webgl_fingerprints"
+ ).fetchall()
+ finally:
+ connection.close()
+ assert rows, "webgl_data.db is empty"
+ for vendor, renderer, *weights in rows:
+ for os_key, weight in zip(("win", "mac", "lin"), weights):
+ if weight and weight > 0:
+ assert coherence.gpu_fits_os(renderer, os_key), (
+ f"{renderer!r} is offered to {os_key} at {weight}"
+ )
+
+
+def test_each_os_still_has_gpus_to_draw_from():
+ """The filter must not empty a pool -- a single GPU per OS is its own tell."""
+ connection = sqlite3.connect(DB_PATH)
+ try:
+ for os_key in ("win", "mac", "lin"):
+ count = connection.execute(
+ f"SELECT COUNT(*) FROM webgl_fingerprints WHERE {os_key} > 0" # nosec
+ ).fetchone()[0]
+ assert count >= 2, f"{os_key} has {count} GPU(s) left"
+ finally:
+ connection.close()
diff --git a/pythonlib/tests/test_voices.py b/pythonlib/tests/test_voices.py
index b55d1de65..a5b7e5248 100644
--- a/pythonlib/tests/test_voices.py
+++ b/pythonlib/tests/test_voices.py
@@ -44,15 +44,23 @@ def test_entries_are_full_objects(target_os):
@pytest.mark.parametrize("target_os", ["macos", "windows", "linux"])
-def test_exactly_one_default(target_os):
+def test_no_default_voice(target_os):
+ # Stock Firefox 152 marks no SpeechSynthesisVoice.default on any OS.
voices = _generate_random_voice_subset(target_os, "en-US")
- assert sum(1 for v in voices if v["isDefault"]) == 1
-
-
-def test_default_matches_spoofed_locale_prefix():
- de = _generate_random_voice_subset("linux", "de-DE")
- default = next(v for v in de if v["isDefault"])
- assert default["lang"].split("-")[0] == "de"
+ assert voices and not any(v["isDefault"] for v in voices)
+
+
+def test_windows_display_language_pack():
+ # A German display language gets the German OneCore pack first; en-US is
+ # the pack every stock en-US box reports (David / Mark / Zira + Desktop).
+ de = _generate_random_voice_subset("windows", "de-DE", seed=1)
+ assert de[0]["lang"] == "de-DE"
+ en = _generate_random_voice_subset("windows", "en-US", seed=1)
+ assert [v["name"] for v in en[:3]] == [
+ "Microsoft David - English (United States)",
+ "Microsoft Mark - English (United States)",
+ "Microsoft Zira - English (United States)",
+ ]
class TestLinuxSpeechdUris:
diff --git a/pythonlib/tests/test_webgl_extension_filter.py b/pythonlib/tests/test_webgl_extension_filter.py
new file mode 100644
index 000000000..057748c6a
--- /dev/null
+++ b/pythonlib/tests/test_webgl_extension_filter.py
@@ -0,0 +1,60 @@
+"""Which sampled WebGL extensions reach the page, per OS."""
+
+import sqlite3
+
+import orjson
+
+from camoufox.webgl import sample
+from camoufox.webgl.sample import DB_PATH, _load_webgl_data
+
+
+def _row_with(ext, key="webGl2:supportedExtensions", os="win"):
+ con = sqlite3.connect(DB_PATH)
+ try:
+ for (data,) in con.execute(f"SELECT data FROM webgl_fingerprints WHERE {os} > 0"): # nosec
+ if ext in (orjson.loads(data).get(key) or []):
+ return data
+ finally:
+ con.close()
+ raise AssertionError(f"no {os} row carries {ext}")
+
+
+def test_windows_keeps_ovr_multiview2_on_webgl2():
+ data = _load_webgl_data(_row_with("OVR_multiview2"), "win")
+ assert "OVR_multiview2" in data["webGl2:supportedExtensions"]
+
+
+def test_linux_filters_ovr_multiview2():
+ data = _load_webgl_data(_row_with("OVR_multiview2", os="lin"), "lin")
+ assert "OVR_multiview2" not in data["webGl2:supportedExtensions"]
+
+
+def test_ovr_multiview2_never_on_webgl1_in_corpus():
+ con = sqlite3.connect(DB_PATH)
+ try:
+ for (data,) in con.execute("SELECT data FROM webgl_fingerprints"):
+ assert "OVR_multiview2" not in (orjson.loads(data).get("webGl:supportedExtensions") or [])
+ finally:
+ con.close()
+
+
+def test_draft_extensions_filtered_on_every_os():
+ blob = orjson.dumps(
+ {
+ "webGl:supportedExtensions": ["ANGLE_instanced_arrays", "WEBGL_multi_draw"],
+ "webGl2:supportedExtensions": ["EXT_texture_norm16", "WEBGL_clip_cull_distance", "OVR_multiview2"],
+ }
+ )
+ for os in ("win", "mac", "lin"):
+ data = _load_webgl_data(blob, os)
+ assert data["webGl:supportedExtensions"] == ["ANGLE_instanced_arrays"]
+ assert "EXT_texture_norm16" not in data["webGl2:supportedExtensions"]
+ assert "WEBGL_clip_cull_distance" not in data["webGl2:supportedExtensions"]
+
+
+def test_sampled_windows_identities_can_carry_it():
+ hits = sum(
+ "OVR_multiview2" in (sample.sample_webgl("win", seed=s).get("webGl2:supportedExtensions") or [])
+ for s in range(200)
+ )
+ assert hits > 0
diff --git a/pythonlib/tests/test_webgl_screen_consistency.py b/pythonlib/tests/test_webgl_screen_consistency.py
index 5cf8bd312..424b163cd 100644
--- a/pythonlib/tests/test_webgl_screen_consistency.py
+++ b/pythonlib/tests/test_webgl_screen_consistency.py
@@ -153,20 +153,19 @@ def test_hardware_is_not_mistaken_for_software(monkeypatch):
assert not is_software_renderer(renderer)
-def test_software_first_draw_is_never_resampled(monkeypatch):
- """The strongest reason this sampler must not be a plain reject loop.
-
- Rejecting hardware draws while accepting every software one renormalises
- the pool onto llvmpipe / WARP / SwiftShader. On a sub-floor screen that
- turned a 1.5% software rate into ~40%, trading a weak incoherence for the
- strongest VM/headless tell there is. So the first draw settles the class.
- """
+def test_software_first_draw_is_resampled_to_hardware(monkeypatch):
+ """A presented llvmpipe / WARP / SwiftShader is the first thing every
+ consumer-hardware check flags (measured 2026-09-14 with sundial), so a
+ software first draw is retried until a hardware renderer that fits the
+ screen comes up, and only kept when the pool offers nothing else."""
draws = iter([{"webGl:renderer": _LLVMPIPE}, {"webGl:renderer": _INTEL}])
monkeypatch.setattr(fingerprints, "sample_webgl", lambda *a, **kw: next(draws))
- # 1024x600 would reject a discrete GPU, but llvmpipe is plausible there and
- # must be returned as drawn rather than swapped for the Intel part.
- assert sample_webgl_for_screen("lin", 1024, 600)["webGl:renderer"] == _LLVMPIPE
+ assert sample_webgl_for_screen("lin", 1024, 600)["webGl:renderer"] == _INTEL
+
+ only_software = iter([{"webGl:renderer": _LLVMPIPE}] * 40)
+ monkeypatch.setattr(fingerprints, "sample_webgl", lambda *a, **kw: next(only_software))
+ assert sample_webgl_for_screen("lin", 1920, 1080)["webGl:renderer"] == _LLVMPIPE
def test_software_draws_are_skipped_when_resampling(monkeypatch):
@@ -273,10 +272,18 @@ def test_context_fingerprints_get_the_same_treatment(target_os):
def test_preset_screens_are_never_lifted():
- """Presets are real devices, coherent by construction -- #729 says so
- explicitly. Two bundled v150 presets report genuinely sub-netbook screens,
- and the floor used to rewrite them to 1366x768 because
- _user_set_screen_window is computed before the preset merges in."""
+ """A preset's own small screen is kept -- #729 -- unless it is not a screen.
+
+ The original premise here was that a preset IS a real device, so the floor
+ must never rewrite it. That premise does not survive the data: the two
+ "genuinely sub-netbook" v150 presets report 736x414 (an iPhone viewport) and
+ 960x540, and another reports 1440x2560, portrait. The presets are scraped
+ from live traffic, so they carry phones and bots alongside real desktops.
+
+ So the rule is narrower than "never lift a preset screen": a panel a desktop
+ could have is kept at whatever size it claims, and one no desktop reports is
+ repaired (camoufox.coherence). This asserts the keeping half; the repairing
+ half is in test_coherence.py."""
import json
from pathlib import Path
@@ -293,7 +300,11 @@ def small_presets(node):
isinstance(screen, dict)
and screen.get("width")
and screen.get("height")
- and screen["width"] * screen["height"] <= 1024 * 600
+ # Small, but a shape a desktop can have: coherence.py repairs
+ # anything narrower than 1024 or taller than it is wide.
+ and screen["width"] * screen["height"] <= 1366 * 768
+ and screen["width"] >= 1024
+ and screen["width"] >= screen["height"]
):
yield node
for value in node.values():
@@ -303,7 +314,7 @@ def small_presets(node):
yield from small_presets(value)
found = list(small_presets(presets))
- assert found, "expected the v150 presets to still carry sub-netbook screens"
+ assert found, "expected the v150 presets to still carry small desktop screens"
for preset in found:
env = launch_options(
diff --git a/scripts/clean-fingerprint-data.py b/scripts/clean-fingerprint-data.py
new file mode 100644
index 000000000..6b2c3939f
--- /dev/null
+++ b/scripts/clean-fingerprint-data.py
@@ -0,0 +1,144 @@
+#!/usr/bin/env python3
+"""Drop identities the shipped data files cannot honestly offer.
+
+`camoufox.coherence` checks an identity when one is drawn. This does the same
+to the DATA the identities are drawn FROM, so an impossible row never reaches a
+build in the first place. Two filters for the same rules: the runtime one has to
+produce an identity and so repairs what it can, while this one can simply drop a
+row -- there are plenty of others, and dropping loses nothing but a machine that
+never existed.
+
+What it covers:
+
+ fingerprint-presets.json, fingerprint-presets-v150.json
+ Each preset is converted the way a launch converts it and checked. A row
+ that fails is dropped rather than repaired: repairing would write an
+ invented value ("what core count does a 2-core Apple M1 really have?")
+ into a file whose entire purpose is being real.
+
+ webgl/webgl_data.db
+ Each (vendor, renderer) pair carries a probability per OS. A pair the OS
+ cannot report has that probability zeroed, which keeps the row for the
+ platforms where it IS real -- "Radeon R9 200 Series" is a genuine Linux
+ and Windows GPU, it simply never shipped in a Mac.
+
+Usage:
+ python3 scripts/clean-fingerprint-data.py # report only
+ python3 scripts/clean-fingerprint-data.py --write # rewrite the files
+
+`--check` exits non-zero when anything would be dropped; pythonlib's
+tests/test_shipped_data.py asserts the same thing, so a data refresh that
+reintroduces a bad row fails CI rather than shipping.
+"""
+
+import argparse
+import json
+import sqlite3
+import sys
+from collections import Counter
+from pathlib import Path
+
+REPO = Path(__file__).resolve().parent.parent
+sys.path.insert(0, str(REPO / 'pythonlib'))
+
+from camoufox import coherence # noqa: E402
+from camoufox.fingerprints import from_preset # noqa: E402
+
+PRESET_FILES = (
+ REPO / 'pythonlib' / 'camoufox' / 'fingerprint-presets.json',
+ REPO / 'pythonlib' / 'camoufox' / 'fingerprint-presets-v150.json',
+)
+WEBGL_DB = REPO / 'pythonlib' / 'camoufox' / 'webgl' / 'webgl_data.db'
+OS_KEY = {'macos': 'mac', 'windows': 'win', 'linux': 'lin'}
+# The Firefox version only decides the UA rewrite, which no rule reads.
+FF_VERSION = '152'
+
+
+def preset_violations(preset, os_name):
+ """What this preset breaks, as a launch would see it."""
+ try:
+ config = from_preset(preset, FF_VERSION)
+ except Exception as exc: # a row too malformed to convert is itself a defect
+ return [coherence.Violation('unconvertible', f'{type(exc).__name__}: {exc}')]
+ return coherence.validate(config, OS_KEY[os_name])
+
+
+def clean_presets(path, write):
+ data = json.loads(path.read_text())
+ dropped = Counter()
+ kept_total = dropped_total = 0
+ for os_name, presets in data['presets'].items():
+ kept = []
+ for index, preset in enumerate(presets):
+ violations = preset_violations(preset, os_name)
+ if violations:
+ dropped_total += 1
+ for violation in violations:
+ dropped[violation.rule] += 1
+ print(f' drop {path.name} {os_name}[{index}]: '
+ f'{"; ".join(v.detail for v in violations)[:120]}')
+ else:
+ kept.append(preset)
+ kept_total += len(kept)
+ data['presets'][os_name] = kept
+ if write and dropped_total:
+ # Keep the file's own formatting. Rewriting 2-space-indented JSON
+ # compactly turns a 38-row deletion into a 22,546-line diff that no
+ # reviewer can read, which is how a data change stops being reviewable.
+ # ensure_ascii=False as well: the originals hold 'Amélie' as itself,
+ # and escaping it would rewrite lines no preset touched.
+ # A no-op run must be byte-identical, so the diff of a real run is the
+ # dropped rows and nothing else: 2-space indent, non-ASCII kept as
+ # itself ('Amélie'), and no trailing newline, which is how these
+ # files are written.
+ path.write_text(json.dumps(data, indent=2, ensure_ascii=False))
+ print(f'{path.name}: {dropped_total} dropped, {kept_total} kept'
+ + (f' {dict(dropped)}' if dropped else ''))
+ return dropped_total
+
+
+def clean_webgl_db(write):
+ connection = sqlite3.connect(WEBGL_DB)
+ cursor = connection.cursor()
+ cursor.execute('SELECT rowid, vendor, renderer, win, mac, lin FROM webgl_fingerprints')
+ rows = cursor.fetchall()
+ zeroed = 0
+ for rowid, vendor, renderer, *weights in rows:
+ for column, weight in zip(('win', 'mac', 'lin'), weights):
+ if weight and weight > 0 and not coherence.gpu_fits_os(renderer, column):
+ zeroed += 1
+ print(f' zero webgl_data.db {column}={weight:.3f} for {renderer[:58]!r}')
+ if write:
+ cursor.execute(
+ f'UPDATE webgl_fingerprints SET {column} = 0 WHERE rowid = ?', # nosec
+ (rowid,),
+ )
+ if write and zeroed:
+ connection.commit()
+ connection.close()
+ print(f'webgl_data.db: {zeroed} impossible OS weight(s)'
+ + (' zeroed' if write and zeroed else ''))
+ return zeroed
+
+
+def main():
+ parser = argparse.ArgumentParser(description=__doc__)
+ parser.add_argument('--write', action='store_true', help='rewrite the data files')
+ parser.add_argument('--check', action='store_true', help='exit non-zero if anything is unclean')
+ args = parser.parse_args()
+
+ total = sum(clean_presets(path, args.write) for path in PRESET_FILES)
+ total += clean_webgl_db(args.write)
+
+ if not total:
+ print('\nEvery shipped identity is coherent.')
+ return 0
+ if args.write:
+ print(f'\n{total} incoherent entr(ies) removed.')
+ return 0
+ print(f'\n{total} incoherent entr(ies). Run with --write to remove them.')
+ return 1 if args.check else 0
+
+
+if __name__ == '__main__':
+ raise SystemExit(main())
diff --git a/bundle/fonts/cleanfonts.sh b/scripts/cleanfonts.sh
similarity index 100%
rename from bundle/fonts/cleanfonts.sh
rename to scripts/cleanfonts.sh
diff --git a/scripts/data/contentaccessible-manifest.json b/scripts/data/contentaccessible-manifest.json
new file mode 100644
index 000000000..cc540502f
--- /dev/null
+++ b/scripts/data/contentaccessible-manifest.json
@@ -0,0 +1,3438 @@
+{
+ "firefox_version": "152.0.4",
+ "packages": {
+ "browser/omni.ja|content|activity-stream": {
+ "files": [
+ "chrome/browser/content/activity-stream/data/content/assets/br-amo-fox-paint.svg",
+ "chrome/browser/content/activity-stream/data/content/assets/br-fxa-fox-mirror.svg",
+ "chrome/browser/content/activity-stream/data/content/assets/br-gratitude-fox-rock.svg",
+ "chrome/browser/content/activity-stream/data/content/assets/br-import-fox-house.svg",
+ "chrome/browser/content/activity-stream/data/content/assets/br-set-default-fox-heart.svg",
+ "chrome/browser/content/activity-stream/data/content/assets/confetti.svg",
+ "chrome/browser/content/activity-stream/data/content/assets/device-migration.svg",
+ "chrome/browser/content/activity-stream/data/content/assets/euo-chatbot.svg",
+ "chrome/browser/content/activity-stream/data/content/assets/euo-tab-orientation.svg",
+ "chrome/browser/content/activity-stream/data/content/assets/fox-doodle-backup-restore.svg",
+ "chrome/browser/content/activity-stream/data/content/assets/fox-doodle-backup.svg",
+ "chrome/browser/content/activity-stream/data/content/assets/fox-doodle-tail.png",
+ "chrome/browser/content/activity-stream/data/content/assets/fox-doodle-waving-static.png",
+ "chrome/browser/content/activity-stream/data/content/assets/fox-doodle-waving.gif",
+ "chrome/browser/content/activity-stream/data/content/assets/glyph-webextension-16.svg",
+ "chrome/browser/content/activity-stream/data/content/assets/heart.webp",
+ "chrome/browser/content/activity-stream/data/content/assets/long-zap.svg",
+ "chrome/browser/content/activity-stream/data/content/assets/mobile-download-qr-existing-user-cn.svg",
+ "chrome/browser/content/activity-stream/data/content/assets/mobile-download-qr-existing-user.svg",
+ "chrome/browser/content/activity-stream/data/content/assets/mobile-download-qr-new-user-cn.svg",
+ "chrome/browser/content/activity-stream/data/content/assets/mr-amo-collection.svg",
+ "chrome/browser/content/activity-stream/data/content/assets/mr-gratitude.svg",
+ "chrome/browser/content/activity-stream/data/content/assets/mr-import.svg",
+ "chrome/browser/content/activity-stream/data/content/assets/mr-kit-smart-window.svg",
+ "chrome/browser/content/activity-stream/data/content/assets/mr-pinprivate.svg",
+ "chrome/browser/content/activity-stream/data/content/assets/mr-pintaskbar.svg",
+ "chrome/browser/content/activity-stream/data/content/assets/mr-privacysegmentation.svg",
+ "chrome/browser/content/activity-stream/data/content/assets/mr-rtamo-background-image.svg",
+ "chrome/browser/content/activity-stream/data/content/assets/mr-settodefault.svg",
+ "chrome/browser/content/activity-stream/data/content/assets/noodle-C.svg",
+ "chrome/browser/content/activity-stream/data/content/assets/noodle-outline-L.svg",
+ "chrome/browser/content/activity-stream/data/content/assets/noodle-solid-L.svg",
+ "chrome/browser/content/activity-stream/data/content/assets/nuo-taborientation.svg",
+ "chrome/browser/content/activity-stream/data/content/assets/person-typing.svg",
+ "chrome/browser/content/activity-stream/data/content/assets/short-zap.svg",
+ "chrome/browser/content/activity-stream/data/content/assets/splash-logo.svg",
+ "chrome/browser/content/activity-stream/data/content/assets/tabs-side-zap-transparent.svg",
+ "chrome/browser/content/activity-stream/data/content/assets/tabs-top-zap-transparent.svg",
+ "chrome/browser/content/activity-stream/data/content/tippytop/favicons/addons-mozilla.png",
+ "chrome/browser/content/activity-stream/data/content/tippytop/favicons/adidas.png",
+ "chrome/browser/content/activity-stream/data/content/tippytop/favicons/aliexpress-com.ico",
+ "chrome/browser/content/activity-stream/data/content/tippytop/favicons/allegro-pl.ico",
+ "chrome/browser/content/activity-stream/data/content/tippytop/favicons/amazon.ico",
+ "chrome/browser/content/activity-stream/data/content/tippytop/favicons/apnews.png",
+ "chrome/browser/content/activity-stream/data/content/tippytop/favicons/avito-ru.ico",
+ "chrome/browser/content/activity-stream/data/content/tippytop/favicons/baidu-com.png",
+ "chrome/browser/content/activity-stream/data/content/tippytop/favicons/bbc-uk.ico",
+ "chrome/browser/content/activity-stream/data/content/tippytop/favicons/bing-com.ico",
+ "chrome/browser/content/activity-stream/data/content/tippytop/favicons/ctrip-com.ico",
+ "chrome/browser/content/activity-stream/data/content/tippytop/favicons/duckduckgo-com.ico",
+ "chrome/browser/content/activity-stream/data/content/tippytop/favicons/ebay.ico",
+ "chrome/browser/content/activity-stream/data/content/tippytop/favicons/etsy.ico",
+ "chrome/browser/content/activity-stream/data/content/tippytop/favicons/facebook-com.png",
+ "chrome/browser/content/activity-stream/data/content/tippytop/favicons/geico.png",
+ "chrome/browser/content/activity-stream/data/content/tippytop/favicons/google-com.ico",
+ "chrome/browser/content/activity-stream/data/content/tippytop/favicons/hrblock.ico",
+ "chrome/browser/content/activity-stream/data/content/tippytop/favicons/ifeng-com.ico",
+ "chrome/browser/content/activity-stream/data/content/tippytop/favicons/iqiyi-com.ico",
+ "chrome/browser/content/activity-stream/data/content/tippytop/favicons/leboncoin-fr.png",
+ "chrome/browser/content/activity-stream/data/content/tippytop/favicons/lemonde.png",
+ "chrome/browser/content/activity-stream/data/content/tippytop/favicons/ndtv.png",
+ "chrome/browser/content/activity-stream/data/content/tippytop/favicons/nike.ico",
+ "chrome/browser/content/activity-stream/data/content/tippytop/favicons/ok-ru.ico",
+ "chrome/browser/content/activity-stream/data/content/tippytop/favicons/olx-pl.ico",
+ "chrome/browser/content/activity-stream/data/content/tippytop/favicons/reddit-com.png",
+ "chrome/browser/content/activity-stream/data/content/tippytop/favicons/samsung.ico",
+ "chrome/browser/content/activity-stream/data/content/tippytop/favicons/tagesschau.png",
+ "chrome/browser/content/activity-stream/data/content/tippytop/favicons/turbotax.png",
+ "chrome/browser/content/activity-stream/data/content/tippytop/favicons/twitter-com.ico",
+ "chrome/browser/content/activity-stream/data/content/tippytop/favicons/vk-com.ico",
+ "chrome/browser/content/activity-stream/data/content/tippytop/favicons/vodafone.png",
+ "chrome/browser/content/activity-stream/data/content/tippytop/favicons/weibo-com.ico",
+ "chrome/browser/content/activity-stream/data/content/tippytop/favicons/wikipedia-org.ico",
+ "chrome/browser/content/activity-stream/data/content/tippytop/favicons/wix.ico",
+ "chrome/browser/content/activity-stream/data/content/tippytop/favicons/wykop-pl.png",
+ "chrome/browser/content/activity-stream/data/content/tippytop/favicons/yandex-com.png",
+ "chrome/browser/content/activity-stream/data/content/tippytop/favicons/yandex-ru.png",
+ "chrome/browser/content/activity-stream/data/content/tippytop/favicons/youtube-com.png",
+ "chrome/browser/content/activity-stream/data/content/tippytop/favicons/zhihu-com.ico",
+ "chrome/browser/content/activity-stream/data/content/tippytop/images/addons-mozilla@2x.png",
+ "chrome/browser/content/activity-stream/data/content/tippytop/images/adidas@2x.png",
+ "chrome/browser/content/activity-stream/data/content/tippytop/images/aliexpress-com@2x.png",
+ "chrome/browser/content/activity-stream/data/content/tippytop/images/allegro-pl@2x.png",
+ "chrome/browser/content/activity-stream/data/content/tippytop/images/amazon@2x.png",
+ "chrome/browser/content/activity-stream/data/content/tippytop/images/apnews@2x.png",
+ "chrome/browser/content/activity-stream/data/content/tippytop/images/avito-ru@2x.png",
+ "chrome/browser/content/activity-stream/data/content/tippytop/images/baidu-com@2x.png",
+ "chrome/browser/content/activity-stream/data/content/tippytop/images/bbc-uk@2x.png",
+ "chrome/browser/content/activity-stream/data/content/tippytop/images/bing-com@2x.svg",
+ "chrome/browser/content/activity-stream/data/content/tippytop/images/ctrip-com@2x.png",
+ "chrome/browser/content/activity-stream/data/content/tippytop/images/duckduckgo-com@2x.svg",
+ "chrome/browser/content/activity-stream/data/content/tippytop/images/ebay@2x.png",
+ "chrome/browser/content/activity-stream/data/content/tippytop/images/etsy@2x.jpg",
+ "chrome/browser/content/activity-stream/data/content/tippytop/images/facebook-com@2x.png",
+ "chrome/browser/content/activity-stream/data/content/tippytop/images/geico@2x.jpg",
+ "chrome/browser/content/activity-stream/data/content/tippytop/images/google-com@2x.png",
+ "chrome/browser/content/activity-stream/data/content/tippytop/images/hrblock@2x.png",
+ "chrome/browser/content/activity-stream/data/content/tippytop/images/ifeng-com@2x.png",
+ "chrome/browser/content/activity-stream/data/content/tippytop/images/iqiyi-com@2x.png",
+ "chrome/browser/content/activity-stream/data/content/tippytop/images/leboncoin-fr@2x.png",
+ "chrome/browser/content/activity-stream/data/content/tippytop/images/lemonde@2x.png",
+ "chrome/browser/content/activity-stream/data/content/tippytop/images/ndtv@2x.png",
+ "chrome/browser/content/activity-stream/data/content/tippytop/images/nike@2x.jpg",
+ "chrome/browser/content/activity-stream/data/content/tippytop/images/ok-ru@2x.png",
+ "chrome/browser/content/activity-stream/data/content/tippytop/images/olx-pl@2x.png",
+ "chrome/browser/content/activity-stream/data/content/tippytop/images/reddit-com@2x.png",
+ "chrome/browser/content/activity-stream/data/content/tippytop/images/samsung@2x.jpg",
+ "chrome/browser/content/activity-stream/data/content/tippytop/images/tagesschau@2x.png",
+ "chrome/browser/content/activity-stream/data/content/tippytop/images/turbotax@2x.jpg",
+ "chrome/browser/content/activity-stream/data/content/tippytop/images/twitter-com@2x.png",
+ "chrome/browser/content/activity-stream/data/content/tippytop/images/vk-com@2x.png",
+ "chrome/browser/content/activity-stream/data/content/tippytop/images/vodafone@2x.jpg",
+ "chrome/browser/content/activity-stream/data/content/tippytop/images/weibo-com@2x.png",
+ "chrome/browser/content/activity-stream/data/content/tippytop/images/wikipedia-org@2x.png",
+ "chrome/browser/content/activity-stream/data/content/tippytop/images/wix@2x.jpg",
+ "chrome/browser/content/activity-stream/data/content/tippytop/images/wykop-pl@2x.png",
+ "chrome/browser/content/activity-stream/data/content/tippytop/images/yandex-com@2x.png",
+ "chrome/browser/content/activity-stream/data/content/tippytop/images/yandex-ru@2x.png",
+ "chrome/browser/content/activity-stream/data/content/tippytop/images/youtube-com@2x.png",
+ "chrome/browser/content/activity-stream/data/content/tippytop/images/zhihu-com@2x.png",
+ "chrome/browser/content/activity-stream/data/content/tippytop/top_sites.json"
+ ],
+ "prefixes": [
+ "chrome/browser/content/activity-stream/"
+ ]
+ },
+ "browser/omni.ja|content|branding": {
+ "files": [
+ "chrome/browser/content/branding/about-logo-private.png",
+ "chrome/browser/content/branding/about-logo-private@2x.png",
+ "chrome/browser/content/branding/about-logo.png",
+ "chrome/browser/content/branding/about-logo.svg",
+ "chrome/browser/content/branding/about-logo@2x.png",
+ "chrome/browser/content/branding/about-wordmark.svg",
+ "chrome/browser/content/branding/about.png",
+ "chrome/browser/content/branding/aboutDialog.css",
+ "chrome/browser/content/branding/document.ico",
+ "chrome/browser/content/branding/document_pdf.svg",
+ "chrome/browser/content/branding/firefox-wordmark.svg",
+ "chrome/browser/content/branding/icon128.png",
+ "chrome/browser/content/branding/icon16.png",
+ "chrome/browser/content/branding/icon32.png",
+ "chrome/browser/content/branding/icon48.png",
+ "chrome/browser/content/branding/icon64.png"
+ ],
+ "prefixes": [
+ "chrome/browser/content/branding/"
+ ]
+ },
+ "browser/omni.ja|content|browser": {
+ "files": [
+ "chrome/browser/content/browser/aboutDialog-appUpdater.js",
+ "chrome/browser/content/browser/aboutDialog.css",
+ "chrome/browser/content/browser/aboutDialog.js",
+ "chrome/browser/content/browser/aboutDialog.xhtml",
+ "chrome/browser/content/browser/aboutFrameCrashed.html",
+ "chrome/browser/content/browser/aboutPrivateBrowsing.css",
+ "chrome/browser/content/browser/aboutPrivateBrowsing.html",
+ "chrome/browser/content/browser/aboutPrivateBrowsing.js",
+ "chrome/browser/content/browser/aboutRestartRequired.js",
+ "chrome/browser/content/browser/aboutRestartRequired.xhtml",
+ "chrome/browser/content/browser/aboutRobots-icon.png",
+ "chrome/browser/content/browser/aboutRobots.css",
+ "chrome/browser/content/browser/aboutRobots.js",
+ "chrome/browser/content/browser/aboutRobots.xhtml",
+ "chrome/browser/content/browser/aboutSessionRestore.js",
+ "chrome/browser/content/browser/aboutSessionRestore.xhtml",
+ "chrome/browser/content/browser/aboutTabCrashed.css",
+ "chrome/browser/content/browser/aboutTabCrashed.js",
+ "chrome/browser/content/browser/aboutTabCrashed.xhtml",
+ "chrome/browser/content/browser/aboutWelcomeBack.xhtml",
+ "chrome/browser/content/browser/aboutlogins/aboutLogins.css",
+ "chrome/browser/content/browser/aboutlogins/aboutLogins.html",
+ "chrome/browser/content/browser/aboutlogins/aboutLogins.mjs",
+ "chrome/browser/content/browser/aboutlogins/aboutLoginsImportReport.css",
+ "chrome/browser/content/browser/aboutlogins/aboutLoginsImportReport.html",
+ "chrome/browser/content/browser/aboutlogins/aboutLoginsImportReport.mjs",
+ "chrome/browser/content/browser/aboutlogins/aboutLoginsUtils.mjs",
+ "chrome/browser/content/browser/aboutlogins/common.css",
+ "chrome/browser/content/browser/aboutlogins/components/confirmation-dialog.css",
+ "chrome/browser/content/browser/aboutlogins/components/confirmation-dialog.mjs",
+ "chrome/browser/content/browser/aboutlogins/components/fxaccounts-button.css",
+ "chrome/browser/content/browser/aboutlogins/components/fxaccounts-button.mjs",
+ "chrome/browser/content/browser/aboutlogins/components/generic-dialog.css",
+ "chrome/browser/content/browser/aboutlogins/components/generic-dialog.mjs",
+ "chrome/browser/content/browser/aboutlogins/components/import-details-row.mjs",
+ "chrome/browser/content/browser/aboutlogins/components/import-error-dialog.css",
+ "chrome/browser/content/browser/aboutlogins/components/import-error-dialog.mjs",
+ "chrome/browser/content/browser/aboutlogins/components/import-summary-dialog.css",
+ "chrome/browser/content/browser/aboutlogins/components/import-summary-dialog.mjs",
+ "chrome/browser/content/browser/aboutlogins/components/input-field/input-field.css",
+ "chrome/browser/content/browser/aboutlogins/components/input-field/input-field.mjs",
+ "chrome/browser/content/browser/aboutlogins/components/input-field/login-origin-field.mjs",
+ "chrome/browser/content/browser/aboutlogins/components/input-field/login-password-field.mjs",
+ "chrome/browser/content/browser/aboutlogins/components/input-field/login-username-field.mjs",
+ "chrome/browser/content/browser/aboutlogins/components/login-alert.css",
+ "chrome/browser/content/browser/aboutlogins/components/login-alert.mjs",
+ "chrome/browser/content/browser/aboutlogins/components/login-command-button.css",
+ "chrome/browser/content/browser/aboutlogins/components/login-command-button.mjs",
+ "chrome/browser/content/browser/aboutlogins/components/login-filter.css",
+ "chrome/browser/content/browser/aboutlogins/components/login-filter.mjs",
+ "chrome/browser/content/browser/aboutlogins/components/login-intro.css",
+ "chrome/browser/content/browser/aboutlogins/components/login-intro.mjs",
+ "chrome/browser/content/browser/aboutlogins/components/login-item.css",
+ "chrome/browser/content/browser/aboutlogins/components/login-item.mjs",
+ "chrome/browser/content/browser/aboutlogins/components/login-list-item.mjs",
+ "chrome/browser/content/browser/aboutlogins/components/login-list-lit-item.css",
+ "chrome/browser/content/browser/aboutlogins/components/login-list-lit-item.mjs",
+ "chrome/browser/content/browser/aboutlogins/components/login-list-section.mjs",
+ "chrome/browser/content/browser/aboutlogins/components/login-list.css",
+ "chrome/browser/content/browser/aboutlogins/components/login-list.mjs",
+ "chrome/browser/content/browser/aboutlogins/components/login-message-popup.css",
+ "chrome/browser/content/browser/aboutlogins/components/login-message-popup.mjs",
+ "chrome/browser/content/browser/aboutlogins/components/login-timeline.css",
+ "chrome/browser/content/browser/aboutlogins/components/login-timeline.mjs",
+ "chrome/browser/content/browser/aboutlogins/components/menu-button.css",
+ "chrome/browser/content/browser/aboutlogins/components/menu-button.mjs",
+ "chrome/browser/content/browser/aboutlogins/components/remove-logins-dialog.css",
+ "chrome/browser/content/browser/aboutlogins/components/remove-logins-dialog.mjs",
+ "chrome/browser/content/browser/aboutlogins/icons/breached-website.svg",
+ "chrome/browser/content/browser/aboutlogins/icons/intro-illustration.svg",
+ "chrome/browser/content/browser/aboutlogins/icons/vulnerable-password.svg",
+ "chrome/browser/content/browser/aboutwelcome/aboutwelcome.bundle.js",
+ "chrome/browser/content/browser/aboutwelcome/aboutwelcome.css",
+ "chrome/browser/content/browser/aboutwelcome/aboutwelcome.html",
+ "chrome/browser/content/browser/aiwindow/ai-window-content.css",
+ "chrome/browser/content/browser/aiwindow/ai-window-overrides.css",
+ "chrome/browser/content/browser/aiwindow/ai-window-shared.css",
+ "chrome/browser/content/browser/aiwindow/aiChatContent.html",
+ "chrome/browser/content/browser/aiwindow/aiWindow.html",
+ "chrome/browser/content/browser/aiwindow/assets/ai-chat-grid-loading.svg",
+ "chrome/browser/content/browser/aiwindow/assets/ask-icon.svg",
+ "chrome/browser/content/browser/aiwindow/assets/icon-grid-view.svg",
+ "chrome/browser/content/browser/aiwindow/assets/icon-list-view.svg",
+ "chrome/browser/content/browser/aiwindow/assets/loader.svg",
+ "chrome/browser/content/browser/aiwindow/assets/memories-off.svg",
+ "chrome/browser/content/browser/aiwindow/assets/memories-on.svg",
+ "chrome/browser/content/browser/aiwindow/assets/model-choice-1.svg",
+ "chrome/browser/content/browser/aiwindow/assets/model-choice-2.svg",
+ "chrome/browser/content/browser/aiwindow/assets/model-choice-3.svg",
+ "chrome/browser/content/browser/aiwindow/assets/new-chat.svg",
+ "chrome/browser/content/browser/aiwindow/assets/set-default-onboarding.svg",
+ "chrome/browser/content/browser/aiwindow/assets/smart-window-promo-default.svg",
+ "chrome/browser/content/browser/aiwindow/assets/stop-generation.svg",
+ "chrome/browser/content/browser/aiwindow/components/ai-action-result.css",
+ "chrome/browser/content/browser/aiwindow/components/ai-action-result.mjs",
+ "chrome/browser/content/browser/aiwindow/components/ai-chat-card.css",
+ "chrome/browser/content/browser/aiwindow/components/ai-chat-card.mjs",
+ "chrome/browser/content/browser/aiwindow/components/ai-chat-content.css",
+ "chrome/browser/content/browser/aiwindow/components/ai-chat-content.mjs",
+ "chrome/browser/content/browser/aiwindow/components/ai-chat-grid.css",
+ "chrome/browser/content/browser/aiwindow/components/ai-chat-grid.mjs",
+ "chrome/browser/content/browser/aiwindow/components/ai-chat-message.css",
+ "chrome/browser/content/browser/aiwindow/components/ai-chat-message.mjs",
+ "chrome/browser/content/browser/aiwindow/components/ai-chat-table.css",
+ "chrome/browser/content/browser/aiwindow/components/ai-chat-table.mjs",
+ "chrome/browser/content/browser/aiwindow/components/ai-website-chip.css",
+ "chrome/browser/content/browser/aiwindow/components/ai-website-chip.mjs",
+ "chrome/browser/content/browser/aiwindow/components/ai-website-confirmation.css",
+ "chrome/browser/content/browser/aiwindow/components/ai-website-confirmation.mjs",
+ "chrome/browser/content/browser/aiwindow/components/ai-website-select.css",
+ "chrome/browser/content/browser/aiwindow/components/ai-website-select.mjs",
+ "chrome/browser/content/browser/aiwindow/components/ai-window.css",
+ "chrome/browser/content/browser/aiwindow/components/ai-window.mjs",
+ "chrome/browser/content/browser/aiwindow/components/applied-memories-button.css",
+ "chrome/browser/content/browser/aiwindow/components/applied-memories-button.mjs",
+ "chrome/browser/content/browser/aiwindow/components/assistant-message-footer.css",
+ "chrome/browser/content/browser/aiwindow/components/assistant-message-footer.mjs",
+ "chrome/browser/content/browser/aiwindow/components/chat-assistant-error.css",
+ "chrome/browser/content/browser/aiwindow/components/chat-assistant-error.mjs",
+ "chrome/browser/content/browser/aiwindow/components/chat-assistant-loader.css",
+ "chrome/browser/content/browser/aiwindow/components/chat-assistant-loader.mjs",
+ "chrome/browser/content/browser/aiwindow/components/context-icon-button.css",
+ "chrome/browser/content/browser/aiwindow/components/context-icon-button.mjs",
+ "chrome/browser/content/browser/aiwindow/components/input-cta.css",
+ "chrome/browser/content/browser/aiwindow/components/input-cta.mjs",
+ "chrome/browser/content/browser/aiwindow/components/memories-icon-button.css",
+ "chrome/browser/content/browser/aiwindow/components/memories-icon-button.mjs",
+ "chrome/browser/content/browser/aiwindow/components/smartwindow-footer.css",
+ "chrome/browser/content/browser/aiwindow/components/smartwindow-footer.mjs",
+ "chrome/browser/content/browser/aiwindow/components/smartwindow-heading.css",
+ "chrome/browser/content/browser/aiwindow/components/smartwindow-heading.mjs",
+ "chrome/browser/content/browser/aiwindow/components/smartwindow-panel-list.css",
+ "chrome/browser/content/browser/aiwindow/components/smartwindow-panel-list.mjs",
+ "chrome/browser/content/browser/aiwindow/components/smartwindow-promo.css",
+ "chrome/browser/content/browser/aiwindow/components/smartwindow-promo.mjs",
+ "chrome/browser/content/browser/aiwindow/components/smartwindow-prompts.css",
+ "chrome/browser/content/browser/aiwindow/components/smartwindow-prompts.mjs",
+ "chrome/browser/content/browser/aiwindow/components/website-chip-container.css",
+ "chrome/browser/content/browser/aiwindow/components/website-chip-container.mjs",
+ "chrome/browser/content/browser/aiwindow/firstrun.css",
+ "chrome/browser/content/browser/aiwindow/firstrun.html",
+ "chrome/browser/content/browser/aiwindow/firstrun.js",
+ "chrome/browser/content/browser/aiwindow/modules/ChatMarkdownParser.mjs",
+ "chrome/browser/content/browser/aiwindow/modules/TokenStreamParser.mjs",
+ "chrome/browser/content/browser/aiwindow/smartwindow-init.mjs",
+ "chrome/browser/content/browser/asrouter/asrouter-admin.bundle.js",
+ "chrome/browser/content/browser/asrouter/asrouter-admin.html",
+ "chrome/browser/content/browser/asrouter/assets/checkmark-16.svg",
+ "chrome/browser/content/browser/asrouter/assets/close-16.svg",
+ "chrome/browser/content/browser/asrouter/assets/desktop-to-mobile-banner.svg",
+ "chrome/browser/content/browser/asrouter/assets/desktop-to-mobile-eu-QR.svg",
+ "chrome/browser/content/browser/asrouter/assets/desktop-to-mobile-non-eu-QR.svg",
+ "chrome/browser/content/browser/asrouter/assets/fox-with-box-on-cloud.svg",
+ "chrome/browser/content/browser/asrouter/assets/fox-with-checkmark.svg",
+ "chrome/browser/content/browser/asrouter/assets/fox-with-devices.svg",
+ "chrome/browser/content/browser/asrouter/assets/fox-with-locked-box.svg",
+ "chrome/browser/content/browser/asrouter/assets/fox-with-mobile.svg",
+ "chrome/browser/content/browser/asrouter/assets/fox-with-profiles.svg",
+ "chrome/browser/content/browser/asrouter/assets/glyph-cfr-feature-16.svg",
+ "chrome/browser/content/browser/asrouter/assets/glyph-mail-mask-16.svg",
+ "chrome/browser/content/browser/asrouter/assets/hero-relay-email-masks.svg",
+ "chrome/browser/content/browser/asrouter/assets/shield-checkmark-16.svg",
+ "chrome/browser/content/browser/asrouter/assets/smiling-fox-icon.svg",
+ "chrome/browser/content/browser/asrouter/assets/subtract-16.svg",
+ "chrome/browser/content/browser/asrouter/assets/tabgroups/hort-animated-dark.svg",
+ "chrome/browser/content/browser/asrouter/assets/tabgroups/hort-animated-light.svg",
+ "chrome/browser/content/browser/asrouter/assets/tabgroups/hort-static-dark.svg",
+ "chrome/browser/content/browser/asrouter/assets/tabgroups/hort-static-light.svg",
+ "chrome/browser/content/browser/asrouter/assets/tabgroups/vert-animated-dark.svg",
+ "chrome/browser/content/browser/asrouter/assets/tabgroups/vert-animated-light.svg",
+ "chrome/browser/content/browser/asrouter/assets/tabgroups/vert-static-dark.svg",
+ "chrome/browser/content/browser/asrouter/assets/tabgroups/vert-static-light.svg",
+ "chrome/browser/content/browser/asrouter/components/ASRouterAdmin/ASRouterAdmin.css",
+ "chrome/browser/content/browser/asrouter/components/menu-message.css",
+ "chrome/browser/content/browser/asrouter/components/menu-message.mjs",
+ "chrome/browser/content/browser/asrouter/components/remote-text.js",
+ "chrome/browser/content/browser/asrouter/render.js",
+ "chrome/browser/content/browser/asrouter/schemas/BackgroundTaskMessagingExperiment.schema.json",
+ "chrome/browser/content/browser/asrouter/schemas/MessagingExperiment.schema.json",
+ "chrome/browser/content/browser/assets/cookie-banners-begone.svg",
+ "chrome/browser/content/browser/assets/focus-logo.svg",
+ "chrome/browser/content/browser/assets/focus-promo.png",
+ "chrome/browser/content/browser/assets/focus-qr-code.svg",
+ "chrome/browser/content/browser/assets/klar-qr-code.svg",
+ "chrome/browser/content/browser/assets/moz-vpn.svg",
+ "chrome/browser/content/browser/assets/private-promo-asset.svg",
+ "chrome/browser/content/browser/assets/vpn-logo.svg",
+ "chrome/browser/content/browser/backup/ArchiveJSONBlock.1.schema.json",
+ "chrome/browser/content/browser/backup/ArchiveJSONBlock.2.schema.json",
+ "chrome/browser/content/browser/backup/BackupManifest.1.schema.json",
+ "chrome/browser/content/browser/backup/BackupManifest.2.schema.json",
+ "chrome/browser/content/browser/backup/archive.css",
+ "chrome/browser/content/browser/backup/archive.js",
+ "chrome/browser/content/browser/backup/archive.template.html",
+ "chrome/browser/content/browser/backup/backup-common.css",
+ "chrome/browser/content/browser/backup/backup-constants.mjs",
+ "chrome/browser/content/browser/backup/backup-errors.mjs",
+ "chrome/browser/content/browser/backup/backup-settings.css",
+ "chrome/browser/content/browser/backup/backup-settings.mjs",
+ "chrome/browser/content/browser/backup/disable-backup-encryption.css",
+ "chrome/browser/content/browser/backup/disable-backup-encryption.mjs",
+ "chrome/browser/content/browser/backup/enable-backup-encryption.css",
+ "chrome/browser/content/browser/backup/enable-backup-encryption.mjs",
+ "chrome/browser/content/browser/backup/password-rules-tooltip.css",
+ "chrome/browser/content/browser/backup/password-rules-tooltip.mjs",
+ "chrome/browser/content/browser/backup/password-validation-inputs.css",
+ "chrome/browser/content/browser/backup/password-validation-inputs.mjs",
+ "chrome/browser/content/browser/backup/restore-from-backup.css",
+ "chrome/browser/content/browser/backup/restore-from-backup.mjs",
+ "chrome/browser/content/browser/backup/turn-off-scheduled-backups.css",
+ "chrome/browser/content/browser/backup/turn-off-scheduled-backups.mjs",
+ "chrome/browser/content/browser/backup/turn-on-scheduled-backups.css",
+ "chrome/browser/content/browser/backup/turn-on-scheduled-backups.mjs",
+ "chrome/browser/content/browser/blanktab.html",
+ "chrome/browser/content/browser/blockedSite.js",
+ "chrome/browser/content/browser/blockedSite.xhtml",
+ "chrome/browser/content/browser/browser-a11yUtils.js",
+ "chrome/browser/content/browser/browser-addons.js",
+ "chrome/browser/content/browser/browser-captivePortal.js",
+ "chrome/browser/content/browser/browser-commands.js",
+ "chrome/browser/content/browser/browser-context.js",
+ "chrome/browser/content/browser/browser-customization.js",
+ "chrome/browser/content/browser/browser-customtitlebar.js",
+ "chrome/browser/content/browser/browser-data-submission-info-bar.js",
+ "chrome/browser/content/browser/browser-fullScreenAndPointerLock.js",
+ "chrome/browser/content/browser/browser-gestureSupport.js",
+ "chrome/browser/content/browser/browser-graphics-utils.js",
+ "chrome/browser/content/browser/browser-init.js",
+ "chrome/browser/content/browser/browser-main.js",
+ "chrome/browser/content/browser/browser-menubar.js",
+ "chrome/browser/content/browser/browser-pageActions.js",
+ "chrome/browser/content/browser/browser-pagestyle.js",
+ "chrome/browser/content/browser/browser-places.js",
+ "chrome/browser/content/browser/browser-profiles.js",
+ "chrome/browser/content/browser/browser-safebrowsing.js",
+ "chrome/browser/content/browser/browser-sets.js",
+ "chrome/browser/content/browser/browser-siteIdentity.js",
+ "chrome/browser/content/browser/browser-sitePermissionPanel.js",
+ "chrome/browser/content/browser/browser-siteProtections.js",
+ "chrome/browser/content/browser/browser-sync.js",
+ "chrome/browser/content/browser/browser-thumbnails.js",
+ "chrome/browser/content/browser/browser-toolbarKeyNav.js",
+ "chrome/browser/content/browser/browser-trustPanel.js",
+ "chrome/browser/content/browser/browser-unified-extensions.js",
+ "chrome/browser/content/browser/browser-webrtc.js",
+ "chrome/browser/content/browser/browser.js",
+ "chrome/browser/content/browser/browser.xhtml",
+ "chrome/browser/content/browser/built_in_addons.json",
+ "chrome/browser/content/browser/callout-tab-pickup-dark.svg",
+ "chrome/browser/content/browser/callout-tab-pickup.svg",
+ "chrome/browser/content/browser/child/ext-browser-content-only.js",
+ "chrome/browser/content/browser/child/ext-browser.js",
+ "chrome/browser/content/browser/child/ext-devtools-inspectedWindow.js",
+ "chrome/browser/content/browser/child/ext-devtools-network.js",
+ "chrome/browser/content/browser/child/ext-devtools-panels.js",
+ "chrome/browser/content/browser/child/ext-devtools.js",
+ "chrome/browser/content/browser/child/ext-menus-child.js",
+ "chrome/browser/content/browser/child/ext-menus.js",
+ "chrome/browser/content/browser/child/ext-omnibox.js",
+ "chrome/browser/content/browser/child/ext-tabs.js",
+ "chrome/browser/content/browser/contentSearchHandoffUI.css",
+ "chrome/browser/content/browser/contentSearchHandoffUI.mjs",
+ "chrome/browser/content/browser/contentTheme.js",
+ "chrome/browser/content/browser/contentsharing/background-dark.svg",
+ "chrome/browser/content/browser/contentsharing/background-light.svg",
+ "chrome/browser/content/browser/contentsharing/content-sharing-icon.svg",
+ "chrome/browser/content/browser/contentsharing/content-sharing-modal.css",
+ "chrome/browser/content/browser/contentsharing/content-sharing-modal.mjs",
+ "chrome/browser/content/browser/contentsharing/contentSharingModal.xhtml",
+ "chrome/browser/content/browser/contentsharing/contentsharing.schema.json",
+ "chrome/browser/content/browser/controlcenter/assets/fox-concern.svg",
+ "chrome/browser/content/browser/controlcenter/components/breach-alert-panel.css",
+ "chrome/browser/content/browser/controlcenter/components/breach-alert-panel.mjs",
+ "chrome/browser/content/browser/customizableui/panelUI.js",
+ "chrome/browser/content/browser/customkeys/customkeys.css",
+ "chrome/browser/content/browser/customkeys/customkeys.html",
+ "chrome/browser/content/browser/customkeys/customkeys.js",
+ "chrome/browser/content/browser/default-bookmarks.html",
+ "chrome/browser/content/browser/downloads/allDownloadsView.js",
+ "chrome/browser/content/browser/downloads/contentAreaDownloadsView.css",
+ "chrome/browser/content/browser/downloads/contentAreaDownloadsView.js",
+ "chrome/browser/content/browser/downloads/contentAreaDownloadsView.xhtml",
+ "chrome/browser/content/browser/downloads/downloads.css",
+ "chrome/browser/content/browser/downloads/downloads.js",
+ "chrome/browser/content/browser/downloads/downloadsCommands.js",
+ "chrome/browser/content/browser/downloads/indicator.js",
+ "chrome/browser/content/browser/ext-browser.json",
+ "chrome/browser/content/browser/extension-popup-panel.css",
+ "chrome/browser/content/browser/extension.css",
+ "chrome/browser/content/browser/firefoxview/card-container.css",
+ "chrome/browser/content/browser/firefoxview/card-container.mjs",
+ "chrome/browser/content/browser/firefoxview/chats-tab-list.css",
+ "chrome/browser/content/browser/firefoxview/chats-tab-list.mjs",
+ "chrome/browser/content/browser/firefoxview/chats.mjs",
+ "chrome/browser/content/browser/firefoxview/empty-chat.svg",
+ "chrome/browser/content/browser/firefoxview/firefoxview.css",
+ "chrome/browser/content/browser/firefoxview/firefoxview.html",
+ "chrome/browser/content/browser/firefoxview/firefoxview.mjs",
+ "chrome/browser/content/browser/firefoxview/fxview-empty-state.css",
+ "chrome/browser/content/browser/firefoxview/fxview-empty-state.mjs",
+ "chrome/browser/content/browser/firefoxview/fxview-tab-list.css",
+ "chrome/browser/content/browser/firefoxview/fxview-tab-list.mjs",
+ "chrome/browser/content/browser/firefoxview/fxview-tab-row.css",
+ "chrome/browser/content/browser/firefoxview/helpers.mjs",
+ "chrome/browser/content/browser/firefoxview/history-empty.svg",
+ "chrome/browser/content/browser/firefoxview/history.css",
+ "chrome/browser/content/browser/firefoxview/history.mjs",
+ "chrome/browser/content/browser/firefoxview/opentabs-tab-list.css",
+ "chrome/browser/content/browser/firefoxview/opentabs-tab-list.mjs",
+ "chrome/browser/content/browser/firefoxview/opentabs-tab-row.css",
+ "chrome/browser/content/browser/firefoxview/opentabs.mjs",
+ "chrome/browser/content/browser/firefoxview/recentbrowsing.mjs",
+ "chrome/browser/content/browser/firefoxview/recentlyclosed.mjs",
+ "chrome/browser/content/browser/firefoxview/search-helpers.mjs",
+ "chrome/browser/content/browser/firefoxview/synced-tabs-empty.svg",
+ "chrome/browser/content/browser/firefoxview/synced-tabs-error.svg",
+ "chrome/browser/content/browser/firefoxview/syncedtabs-tab-list.css",
+ "chrome/browser/content/browser/firefoxview/syncedtabs-tab-list.mjs",
+ "chrome/browser/content/browser/firefoxview/syncedtabs.mjs",
+ "chrome/browser/content/browser/firefoxview/view-chats.svg",
+ "chrome/browser/content/browser/firefoxview/view-history.svg",
+ "chrome/browser/content/browser/firefoxview/view-opentabs.css",
+ "chrome/browser/content/browser/firefoxview/view-opentabs.svg",
+ "chrome/browser/content/browser/firefoxview/view-recentbrowsing.svg",
+ "chrome/browser/content/browser/firefoxview/view-recentlyclosed.svg",
+ "chrome/browser/content/browser/firefoxview/view-syncedtabs.css",
+ "chrome/browser/content/browser/firefoxview/view-syncedtabs.svg",
+ "chrome/browser/content/browser/firefoxview/viewpage.mjs",
+ "chrome/browser/content/browser/genai/assets/brands/chatgpt.svg",
+ "chrome/browser/content/browser/genai/assets/brands/claude.svg",
+ "chrome/browser/content/browser/genai/assets/brands/copilot.svg",
+ "chrome/browser/content/browser/genai/assets/brands/gemini.svg",
+ "chrome/browser/content/browser/genai/assets/brands/huggingchat.svg",
+ "chrome/browser/content/browser/genai/assets/brands/lechat.svg",
+ "chrome/browser/content/browser/genai/assets/onboarding-link-preview-image-longpress.svg",
+ "chrome/browser/content/browser/genai/chat.css",
+ "chrome/browser/content/browser/genai/chat.html",
+ "chrome/browser/content/browser/genai/chat.js",
+ "chrome/browser/content/browser/genai/content/link-preview-card-onboarding.css",
+ "chrome/browser/content/browser/genai/content/link-preview-card-onboarding.mjs",
+ "chrome/browser/content/browser/genai/content/link-preview-card.css",
+ "chrome/browser/content/browser/genai/content/link-preview-card.mjs",
+ "chrome/browser/content/browser/genai/content/model-optin.css",
+ "chrome/browser/content/browser/genai/content/model-optin.mjs",
+ "chrome/browser/content/browser/genai/content/page-assist.css",
+ "chrome/browser/content/browser/genai/content/page-assist.mjs",
+ "chrome/browser/content/browser/genai/pageAssist.html",
+ "chrome/browser/content/browser/global-scripts.js",
+ "chrome/browser/content/browser/ipprotection/assets/cfr-mozilla-vpn-dark.svg",
+ "chrome/browser/content/browser/ipprotection/assets/cfr-mozilla-vpn-light.svg",
+ "chrome/browser/content/browser/ipprotection/assets/cfr-vpn-bandwith-reset-dark.svg",
+ "chrome/browser/content/browser/ipprotection/assets/cfr-vpn-bandwith-reset-light.svg",
+ "chrome/browser/content/browser/ipprotection/assets/ipprotection-unauthenticated.svg",
+ "chrome/browser/content/browser/ipprotection/assets/mozilla-vpn-promo.svg",
+ "chrome/browser/content/browser/ipprotection/assets/shield-vpn-exceptions.svg",
+ "chrome/browser/content/browser/ipprotection/assets/states/ipprotection-error.svg",
+ "chrome/browser/content/browser/ipprotection/assets/states/ipprotection-excluded.svg",
+ "chrome/browser/content/browser/ipprotection/assets/states/ipprotection-info.svg",
+ "chrome/browser/content/browser/ipprotection/assets/states/ipprotection-loading.svg",
+ "chrome/browser/content/browser/ipprotection/assets/states/ipprotection-off.svg",
+ "chrome/browser/content/browser/ipprotection/assets/states/ipprotection-on.svg",
+ "chrome/browser/content/browser/ipprotection/assets/states/ipprotection-paused.svg",
+ "chrome/browser/content/browser/ipprotection/assets/vpn-settings-get-started.svg",
+ "chrome/browser/content/browser/ipprotection/bandwidth-usage.css",
+ "chrome/browser/content/browser/ipprotection/bandwidth-usage.mjs",
+ "chrome/browser/content/browser/ipprotection/ipprotection-constants.mjs",
+ "chrome/browser/content/browser/ipprotection/ipprotection-content.css",
+ "chrome/browser/content/browser/ipprotection/ipprotection-content.mjs",
+ "chrome/browser/content/browser/ipprotection/ipprotection-customelements.js",
+ "chrome/browser/content/browser/ipprotection/ipprotection-locations.mjs",
+ "chrome/browser/content/browser/ipprotection/ipprotection-message-bar.mjs",
+ "chrome/browser/content/browser/ipprotection/ipprotection-status-box.css",
+ "chrome/browser/content/browser/ipprotection/ipprotection-status-box.mjs",
+ "chrome/browser/content/browser/ipprotection/ipprotection-status-card.css",
+ "chrome/browser/content/browser/ipprotection/ipprotection-status-card.mjs",
+ "chrome/browser/content/browser/ipprotection/ipprotection-unauthenticated.mjs",
+ "chrome/browser/content/browser/ipprotection/ipprotection-utils.mjs",
+ "chrome/browser/content/browser/ipprotection/locations-list.mjs",
+ "chrome/browser/content/browser/ipprotection/locations-subview.css",
+ "chrome/browser/content/browser/license.html",
+ "chrome/browser/content/browser/lockwise-card.mjs",
+ "chrome/browser/content/browser/logos/etp-mobile.svg",
+ "chrome/browser/content/browser/logos/fxa-logo.svg",
+ "chrome/browser/content/browser/logos/ipprotection-error.svg",
+ "chrome/browser/content/browser/logos/ipprotection-excluded.svg",
+ "chrome/browser/content/browser/logos/ipprotection-info.svg",
+ "chrome/browser/content/browser/logos/ipprotection-off.svg",
+ "chrome/browser/content/browser/logos/ipprotection-on.svg",
+ "chrome/browser/content/browser/logos/ipprotection-paused.svg",
+ "chrome/browser/content/browser/logos/lockwise.svg",
+ "chrome/browser/content/browser/logos/monitor.svg",
+ "chrome/browser/content/browser/logos/passkey.svg",
+ "chrome/browser/content/browser/logos/relay.svg",
+ "chrome/browser/content/browser/logos/send.svg",
+ "chrome/browser/content/browser/logos/tracking-protection-dark-theme.svg",
+ "chrome/browser/content/browser/logos/tracking-protection.svg",
+ "chrome/browser/content/browser/logos/vpn-promo-logo.svg",
+ "chrome/browser/content/browser/logos/vpn.svg",
+ "chrome/browser/content/browser/main-popupset.js",
+ "chrome/browser/content/browser/messagepreview/limelight.svg",
+ "chrome/browser/content/browser/messagepreview/messagepreview.css",
+ "chrome/browser/content/browser/messagepreview/messagepreview.html",
+ "chrome/browser/content/browser/messagepreview/messagepreview.js",
+ "chrome/browser/content/browser/messagepreview/switch.svg",
+ "chrome/browser/content/browser/migration/brands/brave.png",
+ "chrome/browser/content/browser/migration/brands/chrome.png",
+ "chrome/browser/content/browser/migration/brands/chromium.png",
+ "chrome/browser/content/browser/migration/brands/opera.png",
+ "chrome/browser/content/browser/migration/brands/operagx.png",
+ "chrome/browser/content/browser/migration/brands/vivaldi.png",
+ "chrome/browser/content/browser/migration/migration-dialog-window.html",
+ "chrome/browser/content/browser/migration/migration-dialog-window.js",
+ "chrome/browser/content/browser/migration/migration-wizard-constants.mjs",
+ "chrome/browser/content/browser/migration/migration-wizard.mjs",
+ "chrome/browser/content/browser/monitor-card.mjs",
+ "chrome/browser/content/browser/multilineeditor/multiline-editor.css",
+ "chrome/browser/content/browser/multilineeditor/multiline-editor.mjs",
+ "chrome/browser/content/browser/multilineeditor/plugins/MentionsPlugin.mjs",
+ "chrome/browser/content/browser/multilineeditor/prosemirror.bundle.mjs",
+ "chrome/browser/content/browser/multilineeditor/prosemirror.css",
+ "chrome/browser/content/browser/navigator-toolbox.js",
+ "chrome/browser/content/browser/nsContextMenu.sys.mjs",
+ "chrome/browser/content/browser/pagedata/schemas/article.schema.json",
+ "chrome/browser/content/browser/pagedata/schemas/audio.schema.json",
+ "chrome/browser/content/browser/pagedata/schemas/document.schema.json",
+ "chrome/browser/content/browser/pagedata/schemas/general.schema.json",
+ "chrome/browser/content/browser/pagedata/schemas/product.schema.json",
+ "chrome/browser/content/browser/pagedata/schemas/video.schema.json",
+ "chrome/browser/content/browser/pageinfo/pageInfo.css",
+ "chrome/browser/content/browser/pageinfo/pageInfo.js",
+ "chrome/browser/content/browser/pageinfo/pageInfo.xhtml",
+ "chrome/browser/content/browser/pageinfo/permissions.js",
+ "chrome/browser/content/browser/pageinfo/security.js",
+ "chrome/browser/content/browser/parent/ext-bookmarks.js",
+ "chrome/browser/content/browser/parent/ext-browser.js",
+ "chrome/browser/content/browser/parent/ext-browserAction.js",
+ "chrome/browser/content/browser/parent/ext-chrome-settings-overrides.js",
+ "chrome/browser/content/browser/parent/ext-commands.js",
+ "chrome/browser/content/browser/parent/ext-devtools-inspectedWindow.js",
+ "chrome/browser/content/browser/parent/ext-devtools-network.js",
+ "chrome/browser/content/browser/parent/ext-devtools-panels.js",
+ "chrome/browser/content/browser/parent/ext-devtools.js",
+ "chrome/browser/content/browser/parent/ext-find.js",
+ "chrome/browser/content/browser/parent/ext-history.js",
+ "chrome/browser/content/browser/parent/ext-menus.js",
+ "chrome/browser/content/browser/parent/ext-normandyAddonStudy.js",
+ "chrome/browser/content/browser/parent/ext-omnibox.js",
+ "chrome/browser/content/browser/parent/ext-pageAction.js",
+ "chrome/browser/content/browser/parent/ext-pkcs11.js",
+ "chrome/browser/content/browser/parent/ext-search.js",
+ "chrome/browser/content/browser/parent/ext-sessions.js",
+ "chrome/browser/content/browser/parent/ext-sidebarAction.js",
+ "chrome/browser/content/browser/parent/ext-tabGroups.js",
+ "chrome/browser/content/browser/parent/ext-tabs.js",
+ "chrome/browser/content/browser/parent/ext-topSites.js",
+ "chrome/browser/content/browser/parent/ext-url-overrides.js",
+ "chrome/browser/content/browser/parent/ext-windows.js",
+ "chrome/browser/content/browser/places/bookmarkProperties.js",
+ "chrome/browser/content/browser/places/bookmarkProperties.xhtml",
+ "chrome/browser/content/browser/places/bookmarksSidebar.js",
+ "chrome/browser/content/browser/places/bookmarksSidebar.xhtml",
+ "chrome/browser/content/browser/places/browserPlacesViews.js",
+ "chrome/browser/content/browser/places/clearDataForSite.css",
+ "chrome/browser/content/browser/places/clearDataForSite.js",
+ "chrome/browser/content/browser/places/clearDataForSite.xhtml",
+ "chrome/browser/content/browser/places/controller.js",
+ "chrome/browser/content/browser/places/editBookmark.js",
+ "chrome/browser/content/browser/places/historySidebar.js",
+ "chrome/browser/content/browser/places/historySidebar.xhtml",
+ "chrome/browser/content/browser/places/interactionsViewer.css",
+ "chrome/browser/content/browser/places/interactionsViewer.html",
+ "chrome/browser/content/browser/places/interactionsViewer.js",
+ "chrome/browser/content/browser/places/places-commands.js",
+ "chrome/browser/content/browser/places/places-menupopup.js",
+ "chrome/browser/content/browser/places/places-tree.js",
+ "chrome/browser/content/browser/places/places.css",
+ "chrome/browser/content/browser/places/places.js",
+ "chrome/browser/content/browser/places/places.xhtml",
+ "chrome/browser/content/browser/places/placesContextMenu.js",
+ "chrome/browser/content/browser/places/treeView.js",
+ "chrome/browser/content/browser/policies/aboutPolicies.css",
+ "chrome/browser/content/browser/policies/aboutPolicies.html",
+ "chrome/browser/content/browser/policies/aboutPolicies.js",
+ "chrome/browser/content/browser/policies/policies-active.svg",
+ "chrome/browser/content/browser/policies/policies-documentation.svg",
+ "chrome/browser/content/browser/policies/policies-error.svg",
+ "chrome/browser/content/browser/preferences/OnDeviceModelManager.mjs",
+ "chrome/browser/content/browser/preferences/browser-layout-horizontal.svg",
+ "chrome/browser/content/browser/preferences/browser-layout-vertical.svg",
+ "chrome/browser/content/browser/preferences/config/LegacyPaneMappings.mjs",
+ "chrome/browser/content/browser/preferences/config/SettingGroupManager.mjs",
+ "chrome/browser/content/browser/preferences/config/SettingPaneManager.mjs",
+ "chrome/browser/content/browser/preferences/config/about-firefox.mjs",
+ "chrome/browser/content/browser/preferences/config/accessibility.mjs",
+ "chrome/browser/content/browser/preferences/config/account-sync.mjs",
+ "chrome/browser/content/browser/preferences/config/aiFeatures.mjs",
+ "chrome/browser/content/browser/preferences/config/appearance.mjs",
+ "chrome/browser/content/browser/preferences/config/block-ai-confirmation-dialog.css",
+ "chrome/browser/content/browser/preferences/config/downloads.mjs",
+ "chrome/browser/content/browser/preferences/config/firefoxLabs.mjs",
+ "chrome/browser/content/browser/preferences/config/home-startup.mjs",
+ "chrome/browser/content/browser/preferences/config/languages.mjs",
+ "chrome/browser/content/browser/preferences/config/moreFromMozilla.mjs",
+ "chrome/browser/content/browser/preferences/config/passwords-autofill.mjs",
+ "chrome/browser/content/browser/preferences/config/permissions-data.mjs",
+ "chrome/browser/content/browser/preferences/config/privacy.mjs",
+ "chrome/browser/content/browser/preferences/config/search.mjs",
+ "chrome/browser/content/browser/preferences/config/tabs-browsing.mjs",
+ "chrome/browser/content/browser/preferences/config/translations.mjs",
+ "chrome/browser/content/browser/preferences/containers.js",
+ "chrome/browser/content/browser/preferences/dialogs/applicationManager.js",
+ "chrome/browser/content/browser/preferences/dialogs/applicationManager.xhtml",
+ "chrome/browser/content/browser/preferences/dialogs/browserLanguages.js",
+ "chrome/browser/content/browser/preferences/dialogs/browserLanguages.xhtml",
+ "chrome/browser/content/browser/preferences/dialogs/colors.css",
+ "chrome/browser/content/browser/preferences/dialogs/colors.js",
+ "chrome/browser/content/browser/preferences/dialogs/colors.xhtml",
+ "chrome/browser/content/browser/preferences/dialogs/connection.js",
+ "chrome/browser/content/browser/preferences/dialogs/connection.xhtml",
+ "chrome/browser/content/browser/preferences/dialogs/containers.js",
+ "chrome/browser/content/browser/preferences/dialogs/containers.xhtml",
+ "chrome/browser/content/browser/preferences/dialogs/dohExceptions.js",
+ "chrome/browser/content/browser/preferences/dialogs/dohExceptions.xhtml",
+ "chrome/browser/content/browser/preferences/dialogs/fonts.js",
+ "chrome/browser/content/browser/preferences/dialogs/fonts.xhtml",
+ "chrome/browser/content/browser/preferences/dialogs/handlers.css",
+ "chrome/browser/content/browser/preferences/dialogs/languages.js",
+ "chrome/browser/content/browser/preferences/dialogs/languages.xhtml",
+ "chrome/browser/content/browser/preferences/dialogs/permissions.js",
+ "chrome/browser/content/browser/preferences/dialogs/permissions.xhtml",
+ "chrome/browser/content/browser/preferences/dialogs/selectBookmark.js",
+ "chrome/browser/content/browser/preferences/dialogs/selectBookmark.xhtml",
+ "chrome/browser/content/browser/preferences/dialogs/siteDataRemoveSelected.js",
+ "chrome/browser/content/browser/preferences/dialogs/siteDataRemoveSelected.xhtml",
+ "chrome/browser/content/browser/preferences/dialogs/siteDataSettings.js",
+ "chrome/browser/content/browser/preferences/dialogs/siteDataSettings.xhtml",
+ "chrome/browser/content/browser/preferences/dialogs/sitePermissions.css",
+ "chrome/browser/content/browser/preferences/dialogs/sitePermissions.js",
+ "chrome/browser/content/browser/preferences/dialogs/sitePermissions.xhtml",
+ "chrome/browser/content/browser/preferences/dialogs/syncChooseWhatToSync.js",
+ "chrome/browser/content/browser/preferences/dialogs/syncChooseWhatToSync.xhtml",
+ "chrome/browser/content/browser/preferences/dialogs/translations.xhtml",
+ "chrome/browser/content/browser/preferences/etp-advanced-banner.svg",
+ "chrome/browser/content/browser/preferences/etp-toggle-promo.svg",
+ "chrome/browser/content/browser/preferences/extensionControlled.js",
+ "chrome/browser/content/browser/preferences/findInPage.js",
+ "chrome/browser/content/browser/preferences/fxaPairDevice.js",
+ "chrome/browser/content/browser/preferences/fxaPairDevice.xhtml",
+ "chrome/browser/content/browser/preferences/home.js",
+ "chrome/browser/content/browser/preferences/main.js",
+ "chrome/browser/content/browser/preferences/more-from-mozilla-qr-code-simple-cn.svg",
+ "chrome/browser/content/browser/preferences/more-from-mozilla-qr-code-simple.svg",
+ "chrome/browser/content/browser/preferences/moreFromMozilla.js",
+ "chrome/browser/content/browser/preferences/preferences.js",
+ "chrome/browser/content/browser/preferences/preferences.xhtml",
+ "chrome/browser/content/browser/preferences/privacy.js",
+ "chrome/browser/content/browser/preferences/search.js",
+ "chrome/browser/content/browser/preferences/spell-check-promo.svg",
+ "chrome/browser/content/browser/preferences/sync.js",
+ "chrome/browser/content/browser/preferences/translations.js",
+ "chrome/browser/content/browser/preferences/web-appearance-dark.svg",
+ "chrome/browser/content/browser/preferences/web-appearance-light.svg",
+ "chrome/browser/content/browser/preferences/widgets/browser-language-restart-message.css",
+ "chrome/browser/content/browser/preferences/widgets/browser-language-restart-message.mjs",
+ "chrome/browser/content/browser/preferences/widgets/dialog-button.mjs",
+ "chrome/browser/content/browser/preferences/widgets/nav-notice.css",
+ "chrome/browser/content/browser/preferences/widgets/nav-notice.mjs",
+ "chrome/browser/content/browser/preferences/widgets/placeholder-message.css",
+ "chrome/browser/content/browser/preferences/widgets/placeholder-message.mjs",
+ "chrome/browser/content/browser/preferences/widgets/security-privacy-card.css",
+ "chrome/browser/content/browser/preferences/widgets/security-privacy-card.mjs",
+ "chrome/browser/content/browser/preferences/widgets/setting-control.css",
+ "chrome/browser/content/browser/preferences/widgets/setting-control.mjs",
+ "chrome/browser/content/browser/preferences/widgets/setting-element.mjs",
+ "chrome/browser/content/browser/preferences/widgets/setting-group.css",
+ "chrome/browser/content/browser/preferences/widgets/setting-group.mjs",
+ "chrome/browser/content/browser/preferences/widgets/setting-pane.css",
+ "chrome/browser/content/browser/preferences/widgets/setting-pane.mjs",
+ "chrome/browser/content/browser/preferences/widgets/sync-device-name.mjs",
+ "chrome/browser/content/browser/preferences/widgets/sync-engines-list.css",
+ "chrome/browser/content/browser/preferences/widgets/sync-engines-list.mjs",
+ "chrome/browser/content/browser/preferences/widgets/update-information.css",
+ "chrome/browser/content/browser/preferences/widgets/update-information.mjs",
+ "chrome/browser/content/browser/preferences/widgets/update-state.css",
+ "chrome/browser/content/browser/preferences/widgets/update-state.mjs",
+ "chrome/browser/content/browser/privacy-metrics-card.css",
+ "chrome/browser/content/browser/privacy-metrics-card.mjs",
+ "chrome/browser/content/browser/profiles/assets/16_barbell.svg",
+ "chrome/browser/content/browser/profiles/assets/16_bike.svg",
+ "chrome/browser/content/browser/profiles/assets/16_book.svg",
+ "chrome/browser/content/browser/profiles/assets/16_briefcase.svg",
+ "chrome/browser/content/browser/profiles/assets/16_canvas.svg",
+ "chrome/browser/content/browser/profiles/assets/16_craft.svg",
+ "chrome/browser/content/browser/profiles/assets/16_default-favicon.svg",
+ "chrome/browser/content/browser/profiles/assets/16_diamond.svg",
+ "chrome/browser/content/browser/profiles/assets/16_flower.svg",
+ "chrome/browser/content/browser/profiles/assets/16_folder.svg",
+ "chrome/browser/content/browser/profiles/assets/16_hammer.svg",
+ "chrome/browser/content/browser/profiles/assets/16_heart-rate.svg",
+ "chrome/browser/content/browser/profiles/assets/16_heart.svg",
+ "chrome/browser/content/browser/profiles/assets/16_history.svg",
+ "chrome/browser/content/browser/profiles/assets/16_leaf.svg",
+ "chrome/browser/content/browser/profiles/assets/16_lightbulb.svg",
+ "chrome/browser/content/browser/profiles/assets/16_makeup.svg",
+ "chrome/browser/content/browser/profiles/assets/16_message.svg",
+ "chrome/browser/content/browser/profiles/assets/16_musical-note.svg",
+ "chrome/browser/content/browser/profiles/assets/16_palette.svg",
+ "chrome/browser/content/browser/profiles/assets/16_paw-print.svg",
+ "chrome/browser/content/browser/profiles/assets/16_plane.svg",
+ "chrome/browser/content/browser/profiles/assets/16_present.svg",
+ "chrome/browser/content/browser/profiles/assets/16_shopping.svg",
+ "chrome/browser/content/browser/profiles/assets/16_soccer.svg",
+ "chrome/browser/content/browser/profiles/assets/16_sparkle-single.svg",
+ "chrome/browser/content/browser/profiles/assets/16_star.svg",
+ "chrome/browser/content/browser/profiles/assets/16_video-game-controller.svg",
+ "chrome/browser/content/browser/profiles/assets/20_barbell.svg",
+ "chrome/browser/content/browser/profiles/assets/20_bike.svg",
+ "chrome/browser/content/browser/profiles/assets/20_book.svg",
+ "chrome/browser/content/browser/profiles/assets/20_briefcase.svg",
+ "chrome/browser/content/browser/profiles/assets/20_canvas.svg",
+ "chrome/browser/content/browser/profiles/assets/20_craft.svg",
+ "chrome/browser/content/browser/profiles/assets/20_default-favicon.svg",
+ "chrome/browser/content/browser/profiles/assets/20_diamond.svg",
+ "chrome/browser/content/browser/profiles/assets/20_flower.svg",
+ "chrome/browser/content/browser/profiles/assets/20_folder.svg",
+ "chrome/browser/content/browser/profiles/assets/20_hammer.svg",
+ "chrome/browser/content/browser/profiles/assets/20_heart-rate.svg",
+ "chrome/browser/content/browser/profiles/assets/20_heart.svg",
+ "chrome/browser/content/browser/profiles/assets/20_history.svg",
+ "chrome/browser/content/browser/profiles/assets/20_leaf.svg",
+ "chrome/browser/content/browser/profiles/assets/20_lightbulb.svg",
+ "chrome/browser/content/browser/profiles/assets/20_makeup.svg",
+ "chrome/browser/content/browser/profiles/assets/20_message.svg",
+ "chrome/browser/content/browser/profiles/assets/20_musical-note.svg",
+ "chrome/browser/content/browser/profiles/assets/20_palette.svg",
+ "chrome/browser/content/browser/profiles/assets/20_paw-print.svg",
+ "chrome/browser/content/browser/profiles/assets/20_plane.svg",
+ "chrome/browser/content/browser/profiles/assets/20_present.svg",
+ "chrome/browser/content/browser/profiles/assets/20_shopping.svg",
+ "chrome/browser/content/browser/profiles/assets/20_soccer.svg",
+ "chrome/browser/content/browser/profiles/assets/20_sparkle-single.svg",
+ "chrome/browser/content/browser/profiles/assets/20_star.svg",
+ "chrome/browser/content/browser/profiles/assets/20_video-game-controller.svg",
+ "chrome/browser/content/browser/profiles/assets/24_book.svg",
+ "chrome/browser/content/browser/profiles/assets/24_briefcase.svg",
+ "chrome/browser/content/browser/profiles/assets/24_flower.svg",
+ "chrome/browser/content/browser/profiles/assets/24_heart.svg",
+ "chrome/browser/content/browser/profiles/assets/24_shopping.svg",
+ "chrome/browser/content/browser/profiles/assets/24_star.svg",
+ "chrome/browser/content/browser/profiles/assets/48_barbell.svg",
+ "chrome/browser/content/browser/profiles/assets/48_bike.svg",
+ "chrome/browser/content/browser/profiles/assets/48_book.svg",
+ "chrome/browser/content/browser/profiles/assets/48_briefcase.svg",
+ "chrome/browser/content/browser/profiles/assets/48_canvas.svg",
+ "chrome/browser/content/browser/profiles/assets/48_craft.svg",
+ "chrome/browser/content/browser/profiles/assets/48_default-favicon.svg",
+ "chrome/browser/content/browser/profiles/assets/48_diamond.svg",
+ "chrome/browser/content/browser/profiles/assets/48_flower.svg",
+ "chrome/browser/content/browser/profiles/assets/48_folder.svg",
+ "chrome/browser/content/browser/profiles/assets/48_hammer.svg",
+ "chrome/browser/content/browser/profiles/assets/48_heart-rate.svg",
+ "chrome/browser/content/browser/profiles/assets/48_heart.svg",
+ "chrome/browser/content/browser/profiles/assets/48_history.svg",
+ "chrome/browser/content/browser/profiles/assets/48_leaf.svg",
+ "chrome/browser/content/browser/profiles/assets/48_lightbulb.svg",
+ "chrome/browser/content/browser/profiles/assets/48_makeup.svg",
+ "chrome/browser/content/browser/profiles/assets/48_message.svg",
+ "chrome/browser/content/browser/profiles/assets/48_musical-note.svg",
+ "chrome/browser/content/browser/profiles/assets/48_palette.svg",
+ "chrome/browser/content/browser/profiles/assets/48_paw-print.svg",
+ "chrome/browser/content/browser/profiles/assets/48_plane.svg",
+ "chrome/browser/content/browser/profiles/assets/48_present.svg",
+ "chrome/browser/content/browser/profiles/assets/48_shopping.svg",
+ "chrome/browser/content/browser/profiles/assets/48_soccer.svg",
+ "chrome/browser/content/browser/profiles/assets/48_sparkle-single.svg",
+ "chrome/browser/content/browser/profiles/assets/48_star.svg",
+ "chrome/browser/content/browser/profiles/assets/48_video-game-controller.svg",
+ "chrome/browser/content/browser/profiles/assets/60_book.svg",
+ "chrome/browser/content/browser/profiles/assets/60_briefcase.svg",
+ "chrome/browser/content/browser/profiles/assets/60_flower.svg",
+ "chrome/browser/content/browser/profiles/assets/60_heart.svg",
+ "chrome/browser/content/browser/profiles/assets/60_shopping.svg",
+ "chrome/browser/content/browser/profiles/assets/60_star.svg",
+ "chrome/browser/content/browser/profiles/assets/80_barbell.svg",
+ "chrome/browser/content/browser/profiles/assets/80_bike.svg",
+ "chrome/browser/content/browser/profiles/assets/80_book.svg",
+ "chrome/browser/content/browser/profiles/assets/80_briefcase.svg",
+ "chrome/browser/content/browser/profiles/assets/80_canvas.svg",
+ "chrome/browser/content/browser/profiles/assets/80_craft.svg",
+ "chrome/browser/content/browser/profiles/assets/80_default-favicon.svg",
+ "chrome/browser/content/browser/profiles/assets/80_diamond.svg",
+ "chrome/browser/content/browser/profiles/assets/80_flower.svg",
+ "chrome/browser/content/browser/profiles/assets/80_folder.svg",
+ "chrome/browser/content/browser/profiles/assets/80_hammer.svg",
+ "chrome/browser/content/browser/profiles/assets/80_heart-rate.svg",
+ "chrome/browser/content/browser/profiles/assets/80_heart.svg",
+ "chrome/browser/content/browser/profiles/assets/80_history.svg",
+ "chrome/browser/content/browser/profiles/assets/80_leaf.svg",
+ "chrome/browser/content/browser/profiles/assets/80_lightbulb.svg",
+ "chrome/browser/content/browser/profiles/assets/80_makeup.svg",
+ "chrome/browser/content/browser/profiles/assets/80_message.svg",
+ "chrome/browser/content/browser/profiles/assets/80_musical-note.svg",
+ "chrome/browser/content/browser/profiles/assets/80_palette.svg",
+ "chrome/browser/content/browser/profiles/assets/80_paw-print.svg",
+ "chrome/browser/content/browser/profiles/assets/80_plane.svg",
+ "chrome/browser/content/browser/profiles/assets/80_present.svg",
+ "chrome/browser/content/browser/profiles/assets/80_shopping.svg",
+ "chrome/browser/content/browser/profiles/assets/80_soccer.svg",
+ "chrome/browser/content/browser/profiles/assets/80_sparkle-single.svg",
+ "chrome/browser/content/browser/profiles/assets/80_star.svg",
+ "chrome/browser/content/browser/profiles/assets/80_video-game-controller.svg",
+ "chrome/browser/content/browser/profiles/assets/plus.svg",
+ "chrome/browser/content/browser/profiles/assets/profilesBackground0.svg",
+ "chrome/browser/content/browser/profiles/assets/profilesBackground1.svg",
+ "chrome/browser/content/browser/profiles/assets/profilesBackground2.svg",
+ "chrome/browser/content/browser/profiles/assets/profilesBackground3.svg",
+ "chrome/browser/content/browser/profiles/assets/profilesBackground4.svg",
+ "chrome/browser/content/browser/profiles/assets/system-theme-background.svg",
+ "chrome/browser/content/browser/profiles/assets/theme-selector-background.svg",
+ "chrome/browser/content/browser/profiles/avatar.css",
+ "chrome/browser/content/browser/profiles/avatar.mjs",
+ "chrome/browser/content/browser/profiles/avatarSelectionHelpers.mjs",
+ "chrome/browser/content/browser/profiles/delete-profile-card.css",
+ "chrome/browser/content/browser/profiles/delete-profile-card.mjs",
+ "chrome/browser/content/browser/profiles/delete-profile.html",
+ "chrome/browser/content/browser/profiles/edit-profile-card.css",
+ "chrome/browser/content/browser/profiles/edit-profile-card.mjs",
+ "chrome/browser/content/browser/profiles/edit-profile.html",
+ "chrome/browser/content/browser/profiles/new-profile-card.mjs",
+ "chrome/browser/content/browser/profiles/new-profile.html",
+ "chrome/browser/content/browser/profiles/profile-avatar-selector.css",
+ "chrome/browser/content/browser/profiles/profile-avatar-selector.mjs",
+ "chrome/browser/content/browser/profiles/profile-card.css",
+ "chrome/browser/content/browser/profiles/profile-card.mjs",
+ "chrome/browser/content/browser/profiles/profile-selector.css",
+ "chrome/browser/content/browser/profiles/profile-selector.mjs",
+ "chrome/browser/content/browser/profiles/profiles-pages.css",
+ "chrome/browser/content/browser/profiles/profiles-theme-card.css",
+ "chrome/browser/content/browser/profiles/profiles-theme-card.mjs",
+ "chrome/browser/content/browser/profiles/profiles.html",
+ "chrome/browser/content/browser/protections.css",
+ "chrome/browser/content/browser/protections.html",
+ "chrome/browser/content/browser/protections.mjs",
+ "chrome/browser/content/browser/qrcode/QRCodeWorker.worker.mjs",
+ "chrome/browser/content/browser/qrcode/qrcode-dialog.css",
+ "chrome/browser/content/browser/qrcode/qrcode-dialog.html",
+ "chrome/browser/content/browser/qrcode/qrcode-dialog.js",
+ "chrome/browser/content/browser/reportbrokensite/components/register.js",
+ "chrome/browser/content/browser/reportbrokensite/components/url-input.css",
+ "chrome/browser/content/browser/reportbrokensite/components/url-input.mjs",
+ "chrome/browser/content/browser/robot.ico",
+ "chrome/browser/content/browser/safeMode.css",
+ "chrome/browser/content/browser/safeMode.js",
+ "chrome/browser/content/browser/safeMode.xhtml",
+ "chrome/browser/content/browser/sanitizeDialog.js",
+ "chrome/browser/content/browser/sanitize_v2.xhtml",
+ "chrome/browser/content/browser/schemas/bookmarks.json",
+ "chrome/browser/content/browser/schemas/chrome_settings_overrides.json",
+ "chrome/browser/content/browser/schemas/commands.json",
+ "chrome/browser/content/browser/schemas/devtools.json",
+ "chrome/browser/content/browser/schemas/devtools_inspected_window.json",
+ "chrome/browser/content/browser/schemas/devtools_network.json",
+ "chrome/browser/content/browser/schemas/devtools_panels.json",
+ "chrome/browser/content/browser/schemas/find.json",
+ "chrome/browser/content/browser/schemas/history.json",
+ "chrome/browser/content/browser/schemas/menus.json",
+ "chrome/browser/content/browser/schemas/menus_child.json",
+ "chrome/browser/content/browser/schemas/normandyAddonStudy.json",
+ "chrome/browser/content/browser/schemas/omnibox.json",
+ "chrome/browser/content/browser/schemas/pkcs11.json",
+ "chrome/browser/content/browser/schemas/search.json",
+ "chrome/browser/content/browser/schemas/sessions.json",
+ "chrome/browser/content/browser/schemas/sidebar_action.json",
+ "chrome/browser/content/browser/schemas/tabGroups.json",
+ "chrome/browser/content/browser/schemas/tabs.json",
+ "chrome/browser/content/browser/schemas/top_sites.json",
+ "chrome/browser/content/browser/schemas/url_overrides.json",
+ "chrome/browser/content/browser/schemas/windows.json",
+ "chrome/browser/content/browser/screenshots/copied-notification.svg",
+ "chrome/browser/content/browser/screenshots/fileHelpers.mjs",
+ "chrome/browser/content/browser/screenshots/menu-fullpage.svg",
+ "chrome/browser/content/browser/screenshots/menu-visible.svg",
+ "chrome/browser/content/browser/screenshots/overlay/overlay.css",
+ "chrome/browser/content/browser/screenshots/overlayHelpers.mjs",
+ "chrome/browser/content/browser/screenshots/screenshots-buttons.css",
+ "chrome/browser/content/browser/screenshots/screenshots-buttons.js",
+ "chrome/browser/content/browser/screenshots/screenshots-preview.css",
+ "chrome/browser/content/browser/screenshots/screenshots-preview.html",
+ "chrome/browser/content/browser/screenshots/screenshots-preview.mjs",
+ "chrome/browser/content/browser/search/addEngine.css",
+ "chrome/browser/content/browser/search/addEngine.js",
+ "chrome/browser/content/browser/search/addEngine.xhtml",
+ "chrome/browser/content/browser/search/autocomplete-popup.js",
+ "chrome/browser/content/browser/search/searchbar.js",
+ "chrome/browser/content/browser/security/unexpectedScriptLoad.css",
+ "chrome/browser/content/browser/security/unexpectedScriptLoad.js",
+ "chrome/browser/content/browser/security/unexpectedScriptLoad.xhtml",
+ "chrome/browser/content/browser/setDesktopBackground.js",
+ "chrome/browser/content/browser/setDesktopBackground.xhtml",
+ "chrome/browser/content/browser/sidebar/browser-sidebar.js",
+ "chrome/browser/content/browser/sidebar/sidebar-bookmark-list.css",
+ "chrome/browser/content/browser/sidebar/sidebar-bookmark-list.mjs",
+ "chrome/browser/content/browser/sidebar/sidebar-bookmarks.html",
+ "chrome/browser/content/browser/sidebar/sidebar-bookmarks.mjs",
+ "chrome/browser/content/browser/sidebar/sidebar-customize.css",
+ "chrome/browser/content/browser/sidebar/sidebar-customize.html",
+ "chrome/browser/content/browser/sidebar/sidebar-customize.mjs",
+ "chrome/browser/content/browser/sidebar/sidebar-history.css",
+ "chrome/browser/content/browser/sidebar/sidebar-history.html",
+ "chrome/browser/content/browser/sidebar/sidebar-history.mjs",
+ "chrome/browser/content/browser/sidebar/sidebar-main.css",
+ "chrome/browser/content/browser/sidebar/sidebar-main.mjs",
+ "chrome/browser/content/browser/sidebar/sidebar-page.mjs",
+ "chrome/browser/content/browser/sidebar/sidebar-panel-header.css",
+ "chrome/browser/content/browser/sidebar/sidebar-panel-header.mjs",
+ "chrome/browser/content/browser/sidebar/sidebar-permissions-ui.mjs",
+ "chrome/browser/content/browser/sidebar/sidebar-permissions.mjs",
+ "chrome/browser/content/browser/sidebar/sidebar-pins-promo.css",
+ "chrome/browser/content/browser/sidebar/sidebar-pins-promo.mjs",
+ "chrome/browser/content/browser/sidebar/sidebar-syncedtabs.html",
+ "chrome/browser/content/browser/sidebar/sidebar-syncedtabs.mjs",
+ "chrome/browser/content/browser/sidebar/sidebar-tab-list.css",
+ "chrome/browser/content/browser/sidebar/sidebar-tab-list.mjs",
+ "chrome/browser/content/browser/sidebar/sidebar-tab-row.css",
+ "chrome/browser/content/browser/sidebar/sidebar.css",
+ "chrome/browser/content/browser/spotlight.html",
+ "chrome/browser/content/browser/spotlight.js",
+ "chrome/browser/content/browser/static-robot.png",
+ "chrome/browser/content/browser/syncedtabs/sidebar.js",
+ "chrome/browser/content/browser/syncedtabs/sidebar.xhtml",
+ "chrome/browser/content/browser/tabbrowser/browser-allTabsMenu.js",
+ "chrome/browser/content/browser/tabbrowser/browser-ctrlTab.js",
+ "chrome/browser/content/browser/tabbrowser/browser-fullZoom.js",
+ "chrome/browser/content/browser/tabbrowser/drag-and-drop.js",
+ "chrome/browser/content/browser/tabbrowser/opentabs-splitview.css",
+ "chrome/browser/content/browser/tabbrowser/opentabs-splitview.mjs",
+ "chrome/browser/content/browser/tabbrowser/opentabs.css",
+ "chrome/browser/content/browser/tabbrowser/opentabs.html",
+ "chrome/browser/content/browser/tabbrowser/split-view-footer.js",
+ "chrome/browser/content/browser/tabbrowser/tab-groups-list.mjs",
+ "chrome/browser/content/browser/tabbrowser/tab-hover-preview.mjs",
+ "chrome/browser/content/browser/tabbrowser/tab.js",
+ "chrome/browser/content/browser/tabbrowser/tabbrowser.js",
+ "chrome/browser/content/browser/tabbrowser/tabgroup-menu.js",
+ "chrome/browser/content/browser/tabbrowser/tabgroup.js",
+ "chrome/browser/content/browser/tabbrowser/tabnote-menu.js",
+ "chrome/browser/content/browser/tabbrowser/tabs.js",
+ "chrome/browser/content/browser/tabbrowser/tabsplitview.js",
+ "chrome/browser/content/browser/tabunloader/aboutUnloads.css",
+ "chrome/browser/content/browser/tabunloader/aboutUnloads.html",
+ "chrome/browser/content/browser/tabunloader/aboutUnloads.js",
+ "chrome/browser/content/browser/taskbartabs/TaskbarTabs.1.schema.json",
+ "chrome/browser/content/browser/textrecognition/textrecognition.css",
+ "chrome/browser/content/browser/textrecognition/textrecognition.html",
+ "chrome/browser/content/browser/textrecognition/textrecognition.mjs",
+ "chrome/browser/content/browser/translations/TranslationsPanelShared.sys.mjs",
+ "chrome/browser/content/browser/translations/fullPageTranslationsPanel.js",
+ "chrome/browser/content/browser/translations/selectTranslationsPanel.js",
+ "chrome/browser/content/browser/urlbar/SearchModeSwitcher.mjs",
+ "chrome/browser/content/browser/urlbar/SmartbarInput.mjs",
+ "chrome/browser/content/browser/urlbar/SmartbarInputController.mjs",
+ "chrome/browser/content/browser/urlbar/SmartbarInputUtils.mjs",
+ "chrome/browser/content/browser/urlbar/UrlbarInput.mjs",
+ "chrome/browser/content/browser/usercontext/usercontext.css",
+ "chrome/browser/content/browser/utilityOverlay.js",
+ "chrome/browser/content/browser/vpn-card.mjs",
+ "chrome/browser/content/browser/webext-panels.css",
+ "chrome/browser/content/browser/webext-panels.js",
+ "chrome/browser/content/browser/webext-panels.xhtml",
+ "chrome/browser/content/browser/webrtc/webrtc-preview.css",
+ "chrome/browser/content/browser/webrtc/webrtc-preview.mjs",
+ "chrome/browser/content/browser/webrtcIndicator.js",
+ "chrome/browser/content/browser/webrtcIndicator.xhtml"
+ ],
+ "prefixes": [
+ "chrome/browser/content/browser/"
+ ]
+ },
+ "browser/omni.ja|content|devtools-jsonview-styles": {
+ "files": [
+ "chrome/devtools/modules/devtools/client/jsonview/css/general.css",
+ "chrome/devtools/modules/devtools/client/jsonview/css/headers-panel.css",
+ "chrome/devtools/modules/devtools/client/jsonview/css/json-panel.css",
+ "chrome/devtools/modules/devtools/client/jsonview/css/main.css",
+ "chrome/devtools/modules/devtools/client/jsonview/css/search-box.css",
+ "chrome/devtools/modules/devtools/client/jsonview/css/text-panel.css",
+ "chrome/devtools/modules/devtools/client/jsonview/css/toolbar.css"
+ ],
+ "prefixes": [
+ "chrome/devtools/modules/devtools/client/jsonview/css/"
+ ]
+ },
+ "browser/omni.ja|resource|activity-stream": {
+ "files": [],
+ "prefixes": [
+ "chrome/browser/res/activity-stream/"
+ ]
+ },
+ "browser/omni.ja|resource|builtin-addons": {
+ "files": [
+ "chrome/browser/builtin-addons/data-leak-blocker/api.js",
+ "chrome/browser/builtin-addons/data-leak-blocker/manifest.json",
+ "chrome/browser/builtin-addons/data-leak-blocker/schema.json",
+ "chrome/browser/builtin-addons/formautofill/api.js",
+ "chrome/browser/builtin-addons/formautofill/background.js",
+ "chrome/browser/builtin-addons/formautofill/content/addressFormLayout.mjs",
+ "chrome/browser/builtin-addons/formautofill/content/autofillEditForms.mjs",
+ "chrome/browser/builtin-addons/formautofill/content/editAddress.mjs",
+ "chrome/browser/builtin-addons/formautofill/content/editAddress.xhtml",
+ "chrome/browser/builtin-addons/formautofill/content/editCreditCard.mjs",
+ "chrome/browser/builtin-addons/formautofill/content/editCreditCard.xhtml",
+ "chrome/browser/builtin-addons/formautofill/content/editDialog.mjs",
+ "chrome/browser/builtin-addons/formautofill/content/formautofill.css",
+ "chrome/browser/builtin-addons/formautofill/content/formfill-anchor.svg",
+ "chrome/browser/builtin-addons/formautofill/content/icon-credit-card-generic.svg",
+ "chrome/browser/builtin-addons/formautofill/content/manageAddresses.mjs",
+ "chrome/browser/builtin-addons/formautofill/content/manageAddresses.xhtml",
+ "chrome/browser/builtin-addons/formautofill/content/manageCreditCards.mjs",
+ "chrome/browser/builtin-addons/formautofill/content/manageCreditCards.xhtml",
+ "chrome/browser/builtin-addons/formautofill/content/manageDialog.css",
+ "chrome/browser/builtin-addons/formautofill/content/manageDialog.mjs",
+ "chrome/browser/builtin-addons/formautofill/content/skin/editAddress.css",
+ "chrome/browser/builtin-addons/formautofill/content/skin/editCreditCard.css",
+ "chrome/browser/builtin-addons/formautofill/content/skin/editDialog-shared.css",
+ "chrome/browser/builtin-addons/formautofill/content/third-party/cc-logo-amex.png",
+ "chrome/browser/builtin-addons/formautofill/content/third-party/cc-logo-amex@2x.png",
+ "chrome/browser/builtin-addons/formautofill/content/third-party/cc-logo-cartebancaire.png",
+ "chrome/browser/builtin-addons/formautofill/content/third-party/cc-logo-cartebancaire@2x.png",
+ "chrome/browser/builtin-addons/formautofill/content/third-party/cc-logo-diners.svg",
+ "chrome/browser/builtin-addons/formautofill/content/third-party/cc-logo-discover.png",
+ "chrome/browser/builtin-addons/formautofill/content/third-party/cc-logo-discover@2x.png",
+ "chrome/browser/builtin-addons/formautofill/content/third-party/cc-logo-jcb.svg",
+ "chrome/browser/builtin-addons/formautofill/content/third-party/cc-logo-mastercard.svg",
+ "chrome/browser/builtin-addons/formautofill/content/third-party/cc-logo-mir.svg",
+ "chrome/browser/builtin-addons/formautofill/content/third-party/cc-logo-unionpay.svg",
+ "chrome/browser/builtin-addons/formautofill/content/third-party/cc-logo-visa.svg",
+ "chrome/browser/builtin-addons/formautofill/manifest.json",
+ "chrome/browser/builtin-addons/formautofill/schema.json",
+ "chrome/browser/builtin-addons/ipp-activator/api/parent/ext-ipp.js",
+ "chrome/browser/builtin-addons/ipp-activator/api/schemas/ipp.json",
+ "chrome/browser/builtin-addons/ipp-activator/bg.js",
+ "chrome/browser/builtin-addons/ipp-activator/breakages/tab.json",
+ "chrome/browser/builtin-addons/ipp-activator/conditions/and.js",
+ "chrome/browser/builtin-addons/ipp-activator/conditions/base.js",
+ "chrome/browser/builtin-addons/ipp-activator/conditions/cookie.js",
+ "chrome/browser/builtin-addons/ipp-activator/conditions/date.js",
+ "chrome/browser/builtin-addons/ipp-activator/conditions/factory.js",
+ "chrome/browser/builtin-addons/ipp-activator/conditions/not.js",
+ "chrome/browser/builtin-addons/ipp-activator/conditions/or.js",
+ "chrome/browser/builtin-addons/ipp-activator/conditions/region.js",
+ "chrome/browser/builtin-addons/ipp-activator/conditions/test.js",
+ "chrome/browser/builtin-addons/ipp-activator/conditions/url.js",
+ "chrome/browser/builtin-addons/ipp-activator/conditions/vpn.js",
+ "chrome/browser/builtin-addons/ipp-activator/manifest.json",
+ "chrome/browser/builtin-addons/newtab/common/Actions.mjs",
+ "chrome/browser/builtin-addons/newtab/common/Reducers.sys.mjs",
+ "chrome/browser/builtin-addons/newtab/common/WidgetsRegistry.mjs",
+ "chrome/browser/builtin-addons/newtab/data/content/abouthomecache/page.html.template",
+ "chrome/browser/builtin-addons/newtab/data/content/abouthomecache/script.js.template",
+ "chrome/browser/builtin-addons/newtab/data/content/activity-stream.bundle.js",
+ "chrome/browser/builtin-addons/newtab/data/content/bundled-renderer-index.js",
+ "chrome/browser/builtin-addons/newtab/data/content/bundled-renderer.css",
+ "chrome/browser/builtin-addons/newtab/data/content/newtab-render.js",
+ "chrome/browser/builtin-addons/newtab/data/content/remote-renderer-host.html",
+ "chrome/browser/builtin-addons/newtab/data/content/vendor.bundle.js",
+ "chrome/browser/builtin-addons/newtab/data/css/activity-stream.css",
+ "chrome/browser/builtin-addons/newtab/data/css/nova/activity-stream.css",
+ "chrome/browser/builtin-addons/newtab/data/data/content/assets/arrow-clockwise-16.svg",
+ "chrome/browser/builtin-addons/newtab/data/data/content/assets/download-qr-code-var-a.png",
+ "chrome/browser/builtin-addons/newtab/data/data/content/assets/download-qr-code-var-b.png",
+ "chrome/browser/builtin-addons/newtab/data/data/content/assets/download-qr-code-var-c.png",
+ "chrome/browser/builtin-addons/newtab/data/data/content/assets/firefox-mascot-prop-paintbucket-rgb.svg",
+ "chrome/browser/builtin-addons/newtab/data/data/content/assets/firefox-motion-head-pop-up-no-bg.svg",
+ "chrome/browser/builtin-addons/newtab/data/data/content/assets/firefox.svg",
+ "chrome/browser/builtin-addons/newtab/data/data/content/assets/foxtail-goal.png",
+ "chrome/browser/builtin-addons/newtab/data/data/content/assets/glyph-add-circle-fill-16.svg",
+ "chrome/browser/builtin-addons/newtab/data/data/content/assets/glyph-info-critical-16.svg",
+ "chrome/browser/builtin-addons/newtab/data/data/content/assets/glyph-mail-16.svg",
+ "chrome/browser/builtin-addons/newtab/data/data/content/assets/glyph-maximize-16.svg",
+ "chrome/browser/builtin-addons/newtab/data/data/content/assets/glyph-minimize-16.svg",
+ "chrome/browser/builtin-addons/newtab/data/data/content/assets/glyph-modal-delete-20.svg",
+ "chrome/browser/builtin-addons/newtab/data/data/content/assets/glyph-newWindow-16.svg",
+ "chrome/browser/builtin-addons/newtab/data/data/content/assets/glyph-open-file-16.svg",
+ "chrome/browser/builtin-addons/newtab/data/data/content/assets/glyph-pin-16.svg",
+ "chrome/browser/builtin-addons/newtab/data/data/content/assets/glyph-unpin-16.svg",
+ "chrome/browser/builtin-addons/newtab/data/data/content/assets/glyph-webextension-16.svg",
+ "chrome/browser/builtin-addons/newtab/data/data/content/assets/highlights/feature-callout-tail-dark.svg",
+ "chrome/browser/builtin-addons/newtab/data/data/content/assets/highlights/feature-callout-tail-hcm.svg",
+ "chrome/browser/builtin-addons/newtab/data/data/content/assets/highlights/feature-callout-tail.svg",
+ "chrome/browser/builtin-addons/newtab/data/data/content/assets/highlights/firefox-mascot-prop-paintbucket-rgb.svg",
+ "chrome/browser/builtin-addons/newtab/data/data/content/assets/highlights/firefox-wallpaper-desktop-hills-light-rgb.svg",
+ "chrome/browser/builtin-addons/newtab/data/data/content/assets/highlights/omc-newtab-follow.svg",
+ "chrome/browser/builtin-addons/newtab/data/data/content/assets/highlights/omc-newtab-shortcuts.svg",
+ "chrome/browser/builtin-addons/newtab/data/data/content/assets/highlights/omc-newtab-wallpapers.svg",
+ "chrome/browser/builtin-addons/newtab/data/data/content/assets/icon-removed-bookmark.svg",
+ "chrome/browser/builtin-addons/newtab/data/data/content/assets/kit-in-circle.svg",
+ "chrome/browser/builtin-addons/newtab/data/data/content/assets/kit.png",
+ "chrome/browser/builtin-addons/newtab/data/data/content/assets/lists-empty-state-comet.svg",
+ "chrome/browser/builtin-addons/newtab/data/data/content/assets/lists-empty-state-dark.svg",
+ "chrome/browser/builtin-addons/newtab/data/data/content/assets/lists-empty-state-light.svg",
+ "chrome/browser/builtin-addons/newtab/data/data/content/assets/lists-empty-state-nova.svg",
+ "chrome/browser/builtin-addons/newtab/data/data/content/assets/pocket-swoosh.svg",
+ "chrome/browser/builtin-addons/newtab/data/data/content/assets/puzzle-fox.svg",
+ "chrome/browser/builtin-addons/newtab/data/data/content/assets/shaft-arrow-left.svg",
+ "chrome/browser/builtin-addons/newtab/data/data/content/assets/shaft-arrow-right.svg",
+ "chrome/browser/builtin-addons/newtab/data/data/content/assets/spinner.svg",
+ "chrome/browser/builtin-addons/newtab/data/data/content/assets/wallpapers/dark-beach.avif",
+ "chrome/browser/builtin-addons/newtab/data/data/content/assets/wallpapers/dark-color.avif",
+ "chrome/browser/builtin-addons/newtab/data/data/content/assets/wallpapers/dark-landscape.avif",
+ "chrome/browser/builtin-addons/newtab/data/data/content/assets/wallpapers/dark-mountain.avif",
+ "chrome/browser/builtin-addons/newtab/data/data/content/assets/wallpapers/dark-panda.avif",
+ "chrome/browser/builtin-addons/newtab/data/data/content/assets/wallpapers/dark-sky.avif",
+ "chrome/browser/builtin-addons/newtab/data/data/content/assets/wallpapers/light-beach.avif",
+ "chrome/browser/builtin-addons/newtab/data/data/content/assets/wallpapers/light-color.avif",
+ "chrome/browser/builtin-addons/newtab/data/data/content/assets/wallpapers/light-landscape.avif",
+ "chrome/browser/builtin-addons/newtab/data/data/content/assets/wallpapers/light-mountain.avif",
+ "chrome/browser/builtin-addons/newtab/data/data/content/assets/wallpapers/light-panda.avif",
+ "chrome/browser/builtin-addons/newtab/data/data/content/assets/wallpapers/light-sky.avif",
+ "chrome/browser/builtin-addons/newtab/data/data/content/assets/widget-message.png",
+ "chrome/browser/builtin-addons/newtab/data/data/content/external-components/asrouter-newtab-message/ASRouterNewTabMessageChild.sys.mjs",
+ "chrome/browser/builtin-addons/newtab/data/data/content/external-components/asrouter-newtab-message/ASRouterNewTabMessageParent.sys.mjs",
+ "chrome/browser/builtin-addons/newtab/data/data/content/external-components/asrouter-newtab-message/asrouter-newtab-message.css",
+ "chrome/browser/builtin-addons/newtab/data/data/content/external-components/asrouter-newtab-message/asrouter-newtab-message.mjs",
+ "chrome/browser/builtin-addons/newtab/data/data/content/external-components/asrouter-newtab-multistage/asrouter-newtab-multistage.bundle.js",
+ "chrome/browser/builtin-addons/newtab/data/data/content/external-components/asrouter-newtab-multistage/asrouter-newtab-multistage.css",
+ "chrome/browser/builtin-addons/newtab/lib/AboutPreferences.sys.mjs",
+ "chrome/browser/builtin-addons/newtab/lib/ActivityStream.sys.mjs",
+ "chrome/browser/builtin-addons/newtab/lib/ActivityStreamMessageChannel.sys.mjs",
+ "chrome/browser/builtin-addons/newtab/lib/ActivityStreamPrefs.sys.mjs",
+ "chrome/browser/builtin-addons/newtab/lib/AdsFeed.sys.mjs",
+ "chrome/browser/builtin-addons/newtab/lib/DefaultSites.sys.mjs",
+ "chrome/browser/builtin-addons/newtab/lib/DiscoveryStreamFeed.sys.mjs",
+ "chrome/browser/builtin-addons/newtab/lib/DownloadsManager.sys.mjs",
+ "chrome/browser/builtin-addons/newtab/lib/ExternalComponentsFeed.sys.mjs",
+ "chrome/browser/builtin-addons/newtab/lib/FaviconFeed.sys.mjs",
+ "chrome/browser/builtin-addons/newtab/lib/FrecencyBoostProvider/FrecencyBoostProvider.mjs",
+ "chrome/browser/builtin-addons/newtab/lib/HighlightsFeed.sys.mjs",
+ "chrome/browser/builtin-addons/newtab/lib/ImportHelper.sys.mjs",
+ "chrome/browser/builtin-addons/newtab/lib/InferredModel/FeatureModel.sys.mjs",
+ "chrome/browser/builtin-addons/newtab/lib/InferredModel/GreedyContentRanker.mjs",
+ "chrome/browser/builtin-addons/newtab/lib/InferredModel/InferredConstants.sys.mjs",
+ "chrome/browser/builtin-addons/newtab/lib/InferredPersonalizationFeed.sys.mjs",
+ "chrome/browser/builtin-addons/newtab/lib/NewTabActorRegistry.sys.mjs",
+ "chrome/browser/builtin-addons/newtab/lib/NewTabAttributionFeed.sys.mjs",
+ "chrome/browser/builtin-addons/newtab/lib/NewTabAttributionService.sys.mjs",
+ "chrome/browser/builtin-addons/newtab/lib/NewTabContentPing.sys.mjs",
+ "chrome/browser/builtin-addons/newtab/lib/NewTabGleanUtils.sys.mjs",
+ "chrome/browser/builtin-addons/newtab/lib/NewTabInit.sys.mjs",
+ "chrome/browser/builtin-addons/newtab/lib/NewTabMessaging.sys.mjs",
+ "chrome/browser/builtin-addons/newtab/lib/PersistentCache.sys.mjs",
+ "chrome/browser/builtin-addons/newtab/lib/PlacesFeed.sys.mjs",
+ "chrome/browser/builtin-addons/newtab/lib/PrefsFeed.sys.mjs",
+ "chrome/browser/builtin-addons/newtab/lib/RemoteRenderer.sys.mjs",
+ "chrome/browser/builtin-addons/newtab/lib/Screenshots.sys.mjs",
+ "chrome/browser/builtin-addons/newtab/lib/SectionsLayoutFeed.sys.mjs",
+ "chrome/browser/builtin-addons/newtab/lib/SectionsManager.sys.mjs",
+ "chrome/browser/builtin-addons/newtab/lib/SiteClassifier.sys.mjs",
+ "chrome/browser/builtin-addons/newtab/lib/SmartShortcutsFeed.sys.mjs",
+ "chrome/browser/builtin-addons/newtab/lib/SmartShortcutsRanker/RankShortcuts.mjs",
+ "chrome/browser/builtin-addons/newtab/lib/SmartShortcutsRanker/RankShortcuts.worker.mjs",
+ "chrome/browser/builtin-addons/newtab/lib/SmartShortcutsRanker/RankShortcutsWorkerClass.mjs",
+ "chrome/browser/builtin-addons/newtab/lib/SmartShortcutsRanker/ThomSample.mjs",
+ "chrome/browser/builtin-addons/newtab/lib/StartupCacheInit.sys.mjs",
+ "chrome/browser/builtin-addons/newtab/lib/Store.sys.mjs",
+ "chrome/browser/builtin-addons/newtab/lib/SystemTickFeed.sys.mjs",
+ "chrome/browser/builtin-addons/newtab/lib/TelemetryFeed.sys.mjs",
+ "chrome/browser/builtin-addons/newtab/lib/TemporaryMerinoClientShim.sys.mjs",
+ "chrome/browser/builtin-addons/newtab/lib/TopSitesFeed.sys.mjs",
+ "chrome/browser/builtin-addons/newtab/lib/TopStoriesFeed.sys.mjs",
+ "chrome/browser/builtin-addons/newtab/lib/UTEventReporting.sys.mjs",
+ "chrome/browser/builtin-addons/newtab/lib/Wallpapers/WallpaperFeed.sys.mjs",
+ "chrome/browser/builtin-addons/newtab/lib/Wallpapers/WallpaperThemeUtils.mjs",
+ "chrome/browser/builtin-addons/newtab/lib/WeatherFeed.sys.mjs",
+ "chrome/browser/builtin-addons/newtab/lib/Widgets/ListsFeed.sys.mjs",
+ "chrome/browser/builtin-addons/newtab/lib/Widgets/SportsFeed.sys.mjs",
+ "chrome/browser/builtin-addons/newtab/lib/Widgets/TimerFeed.sys.mjs",
+ "chrome/browser/builtin-addons/newtab/lib/actors/MozNewTabRemoteRendererProtocolParent.sys.mjs",
+ "chrome/browser/builtin-addons/newtab/lib/actors/NewTabAttributionChild.sys.mjs",
+ "chrome/browser/builtin-addons/newtab/lib/actors/NewTabAttributionParent.sys.mjs",
+ "chrome/browser/builtin-addons/newtab/lib/cache.worker.js",
+ "chrome/browser/builtin-addons/newtab/manifest.json",
+ "chrome/browser/builtin-addons/newtab/prerendered/activity-stream-noscripts.html",
+ "chrome/browser/builtin-addons/newtab/prerendered/activity-stream.html",
+ "chrome/browser/builtin-addons/newtab/webext-glue/background.js",
+ "chrome/browser/builtin-addons/pictureinpicture/data/picture_in_picture_overrides.js",
+ "chrome/browser/builtin-addons/pictureinpicture/experiment-apis/aboutConfigPipPrefs.js",
+ "chrome/browser/builtin-addons/pictureinpicture/experiment-apis/aboutConfigPipPrefs.json",
+ "chrome/browser/builtin-addons/pictureinpicture/experiment-apis/pictureInPicture.js",
+ "chrome/browser/builtin-addons/pictureinpicture/experiment-apis/pictureInPicture.json",
+ "chrome/browser/builtin-addons/pictureinpicture/lib/picture_in_picture_overrides.js",
+ "chrome/browser/builtin-addons/pictureinpicture/manifest.json",
+ "chrome/browser/builtin-addons/pictureinpicture/run.js",
+ "chrome/browser/builtin-addons/pictureinpicture/video-wrappers/airmozilla.js",
+ "chrome/browser/builtin-addons/pictureinpicture/video-wrappers/apple.js",
+ "chrome/browser/builtin-addons/pictureinpicture/video-wrappers/bbc.js",
+ "chrome/browser/builtin-addons/pictureinpicture/video-wrappers/canalplus.js",
+ "chrome/browser/builtin-addons/pictureinpicture/video-wrappers/cbc.js",
+ "chrome/browser/builtin-addons/pictureinpicture/video-wrappers/dailymotion.js",
+ "chrome/browser/builtin-addons/pictureinpicture/video-wrappers/disneyplus.js",
+ "chrome/browser/builtin-addons/pictureinpicture/video-wrappers/edx.js",
+ "chrome/browser/builtin-addons/pictureinpicture/video-wrappers/hbomax.js",
+ "chrome/browser/builtin-addons/pictureinpicture/video-wrappers/hotstar.js",
+ "chrome/browser/builtin-addons/pictureinpicture/video-wrappers/hulu.js",
+ "chrome/browser/builtin-addons/pictureinpicture/video-wrappers/iq.js",
+ "chrome/browser/builtin-addons/pictureinpicture/video-wrappers/joyn.js",
+ "chrome/browser/builtin-addons/pictureinpicture/video-wrappers/jwplayerWrapper.js",
+ "chrome/browser/builtin-addons/pictureinpicture/video-wrappers/kick.js",
+ "chrome/browser/builtin-addons/pictureinpicture/video-wrappers/mock-wrapper.js",
+ "chrome/browser/builtin-addons/pictureinpicture/video-wrappers/netflix.js",
+ "chrome/browser/builtin-addons/pictureinpicture/video-wrappers/nytimes.js",
+ "chrome/browser/builtin-addons/pictureinpicture/video-wrappers/peacocktv.js",
+ "chrome/browser/builtin-addons/pictureinpicture/video-wrappers/piped.js",
+ "chrome/browser/builtin-addons/pictureinpicture/video-wrappers/primeVideo.js",
+ "chrome/browser/builtin-addons/pictureinpicture/video-wrappers/radiocanada.js",
+ "chrome/browser/builtin-addons/pictureinpicture/video-wrappers/sonyliv.js",
+ "chrome/browser/builtin-addons/pictureinpicture/video-wrappers/tubi.js",
+ "chrome/browser/builtin-addons/pictureinpicture/video-wrappers/tubilive.js",
+ "chrome/browser/builtin-addons/pictureinpicture/video-wrappers/twitch.js",
+ "chrome/browser/builtin-addons/pictureinpicture/video-wrappers/udemy.js",
+ "chrome/browser/builtin-addons/pictureinpicture/video-wrappers/videojsWrapper.js",
+ "chrome/browser/builtin-addons/pictureinpicture/video-wrappers/voot.js",
+ "chrome/browser/builtin-addons/pictureinpicture/video-wrappers/washingtonpost.js",
+ "chrome/browser/builtin-addons/pictureinpicture/video-wrappers/youtube.js",
+ "chrome/browser/builtin-addons/pictureinpicture/video-wrappers/zdf.js",
+ "chrome/browser/builtin-addons/search-detection/api.js",
+ "chrome/browser/builtin-addons/search-detection/background.js",
+ "chrome/browser/builtin-addons/search-detection/manifest.json",
+ "chrome/browser/builtin-addons/search-detection/schema.json",
+ "chrome/browser/builtin-addons/webcompat/about-compat/AboutCompat.sys.mjs",
+ "chrome/browser/builtin-addons/webcompat/about-compat/aboutCompat.css",
+ "chrome/browser/builtin-addons/webcompat/about-compat/aboutCompat.html",
+ "chrome/browser/builtin-addons/webcompat/about-compat/aboutCompat.js",
+ "chrome/browser/builtin-addons/webcompat/about-compat/aboutPage.js",
+ "chrome/browser/builtin-addons/webcompat/about-compat/aboutPage.json",
+ "chrome/browser/builtin-addons/webcompat/about-compat/aboutPageProcessScript.js",
+ "chrome/browser/builtin-addons/webcompat/data/interventions/1287715-littlealchemy2.com.json",
+ "chrome/browser/builtin-addons/webcompat/data/interventions/1385206-rakuten.co.jp.json",
+ "chrome/browser/builtin-addons/webcompat/data/interventions/1448747-FastClick_breakage.json",
+ "chrome/browser/builtin-addons/webcompat/data/interventions/1457335-histography.io.json",
+ "chrome/browser/builtin-addons/webcompat/data/interventions/1472075-bankofamerica.com.json",
+ "chrome/browser/builtin-addons/webcompat/data/interventions/1509873-zmags.com.json",
+ "chrome/browser/builtin-addons/webcompat/data/interventions/1570108-steamcommunity.com.json",
+ "chrome/browser/builtin-addons/webcompat/data/interventions/1574522-enuri.com.json",
+ "chrome/browser/builtin-addons/webcompat/data/interventions/1574564-ceskatelevize.cz.json",
+ "chrome/browser/builtin-addons/webcompat/data/interventions/1575000-apply.lloydsbank.co.uk.json",
+ "chrome/browser/builtin-addons/webcompat/data/interventions/1577519-directv.com.json",
+ "chrome/browser/builtin-addons/webcompat/data/interventions/1579159-m.tailieu.vn.json",
+ "chrome/browser/builtin-addons/webcompat/data/interventions/1582582-watch.sling.com.json",
+ "chrome/browser/builtin-addons/webcompat/data/interventions/1598198-galaxy.store.json",
+ "chrome/browser/builtin-addons/webcompat/data/interventions/1610026-www.mobilesuica.com.json",
+ "chrome/browser/builtin-addons/webcompat/data/interventions/1610344-directv.com.co.json",
+ "chrome/browser/builtin-addons/webcompat/data/interventions/1622063-wp1-ext.usps.gov.json",
+ "chrome/browser/builtin-addons/webcompat/data/interventions/1644830-usps.com.json",
+ "chrome/browser/builtin-addons/webcompat/data/interventions/1646791-santanderbank.com.json",
+ "chrome/browser/builtin-addons/webcompat/data/interventions/1651292-www.jp.square-enix.com.json",
+ "chrome/browser/builtin-addons/webcompat/data/interventions/1666754-lffl.org.json",
+ "chrome/browser/builtin-addons/webcompat/data/interventions/1704673-app.xiaomi.com.json",
+ "chrome/browser/builtin-addons/webcompat/data/interventions/1712807-www.dealnews.com.json",
+ "chrome/browser/builtin-addons/webcompat/data/interventions/1719859-saxoinvestor.fr.json",
+ "chrome/browser/builtin-addons/webcompat/data/interventions/1724868-news.yahoo.co.jp.json",
+ "chrome/browser/builtin-addons/webcompat/data/interventions/1729435-milkbarstore.com.json",
+ "chrome/browser/builtin-addons/webcompat/data/interventions/1741234-patient.alphalabs.ca.json",
+ "chrome/browser/builtin-addons/webcompat/data/interventions/1743429-Sites_with_issues_with_Firefox_versions_over_99.json",
+ "chrome/browser/builtin-addons/webcompat/data/interventions/1743627-renaud-bray.com.json",
+ "chrome/browser/builtin-addons/webcompat/data/interventions/1743751-slrclub.com.json",
+ "chrome/browser/builtin-addons/webcompat/data/interventions/1743754-workflow.base.vn.json",
+ "chrome/browser/builtin-addons/webcompat/data/interventions/1769762-tiktok.com_broken_comments.json",
+ "chrome/browser/builtin-addons/webcompat/data/interventions/1770962-coldwellbankerhomes.com.json",
+ "chrome/browser/builtin-addons/webcompat/data/interventions/1771200-animalplanet.com.json",
+ "chrome/browser/builtin-addons/webcompat/data/interventions/1774005-Sites_relying_on_window.InstallTrigger.json",
+ "chrome/browser/builtin-addons/webcompat/data/interventions/1779059-lazada.co.id.json",
+ "chrome/browser/builtin-addons/webcompat/data/interventions/1779908-play.google.com.json",
+ "chrome/browser/builtin-addons/webcompat/data/interventions/1784361-coldwellbankerhomes.com.json",
+ "chrome/browser/builtin-addons/webcompat/data/interventions/1793475-www.unitedwifi.com.json",
+ "chrome/browser/builtin-addons/webcompat/data/interventions/1799968-www.samsung.com_scrolling_fix.json",
+ "chrome/browser/builtin-addons/webcompat/data/interventions/1799980-healow.com.json",
+ "chrome/browser/builtin-addons/webcompat/data/interventions/1800880-clipchamp.com.json",
+ "chrome/browser/builtin-addons/webcompat/data/interventions/1813177-rbi.org.json",
+ "chrome/browser/builtin-addons/webcompat/data/interventions/1815733-Office_365_Outlook_locations.json",
+ "chrome/browser/builtin-addons/webcompat/data/interventions/1818818-FastClick_breakage_legacy.json",
+ "chrome/browser/builtin-addons/webcompat/data/interventions/1819450-cmbchina.com.json",
+ "chrome/browser/builtin-addons/webcompat/data/interventions/1823966-elearning.dmv.ca.gov.json",
+ "chrome/browser/builtin-addons/webcompat/data/interventions/1827678_119402-oirsa.org.json",
+ "chrome/browser/builtin-addons/webcompat/data/interventions/1827678_120450-onp.cloud.waterloo.ca.json",
+ "chrome/browser/builtin-addons/webcompat/data/interventions/1827678_65753-admissions.nid.edu.json",
+ "chrome/browser/builtin-addons/webcompat/data/interventions/1827678_68007-frankfred.com.json",
+ "chrome/browser/builtin-addons/webcompat/data/interventions/1827678_68520-onvue.com.json",
+ "chrome/browser/builtin-addons/webcompat/data/interventions/1827678_68635-avizia.com.json",
+ "chrome/browser/builtin-addons/webcompat/data/interventions/1827678_76785-www.yourtexasbenefits.com.json",
+ "chrome/browser/builtin-addons/webcompat/data/interventions/1827678_77727-www.free4talk.com.json",
+ "chrome/browser/builtin-addons/webcompat/data/interventions/1827678_77912-watch.indee.tv.json",
+ "chrome/browser/builtin-addons/webcompat/data/interventions/1827678_80180-viewer-ebook.books.com.tw.json",
+ "chrome/browser/builtin-addons/webcompat/data/interventions/1830739-Casino_sites.json",
+ "chrome/browser/builtin-addons/webcompat/data/interventions/1830796-copyleaks.com.json",
+ "chrome/browser/builtin-addons/webcompat/data/interventions/1830821_113663-webcartop.jp.json",
+ "chrome/browser/builtin-addons/webcompat/data/interventions/1830821_90981-enjoy.point.auone.jp.json",
+ "chrome/browser/builtin-addons/webcompat/data/interventions/1831007-All_international_Nintendo_domains.json",
+ "chrome/browser/builtin-addons/webcompat/data/interventions/1836105-cnn.com.json",
+ "chrome/browser/builtin-addons/webcompat/data/interventions/1836109-watch.tonton.com.my.json",
+ "chrome/browser/builtin-addons/webcompat/data/interventions/1836135-gts-pro.iyuno.com.json",
+ "chrome/browser/builtin-addons/webcompat/data/interventions/1836178-atracker.pro.json",
+ "chrome/browser/builtin-addons/webcompat/data/interventions/1836872-docs.google.com.json",
+ "chrome/browser/builtin-addons/webcompat/data/interventions/1841730-www.korg.com.json",
+ "chrome/browser/builtin-addons/webcompat/data/interventions/1842437-YouTube_back_forward_fix.json",
+ "chrome/browser/builtin-addons/webcompat/data/interventions/1842767-passport.bilibili.com.json",
+ "chrome/browser/builtin-addons/webcompat/data/interventions/1845299-Google_Slides.json",
+ "chrome/browser/builtin-addons/webcompat/data/interventions/1847971-ebay.com.json",
+ "chrome/browser/builtin-addons/webcompat/data/interventions/1848849-theaa.com.json",
+ "chrome/browser/builtin-addons/webcompat/data/interventions/1850998-chaturbate.com.json",
+ "chrome/browser/builtin-addons/webcompat/data/interventions/1855014-eksiseyler.com.json",
+ "chrome/browser/builtin-addons/webcompat/data/interventions/1855088-hrmis2.eghrmis.gov.my.json",
+ "chrome/browser/builtin-addons/webcompat/data/interventions/1855102-my.southerncross.co.nz.json",
+ "chrome/browser/builtin-addons/webcompat/data/interventions/1859617-Sites_relying_on_there_being_no_window.InstallTrigger.json",
+ "chrome/browser/builtin-addons/webcompat/data/interventions/1860417-www.samsung.com_images_fix.json",
+ "chrome/browser/builtin-addons/webcompat/data/interventions/1865000-bmo.com.json",
+ "chrome/browser/builtin-addons/webcompat/data/interventions/1865004-digimart.net.json",
+ "chrome/browser/builtin-addons/webcompat/data/interventions/1865007-portal.circle.ms.json",
+ "chrome/browser/builtin-addons/webcompat/data/interventions/1873166-nsandi.com.json",
+ "chrome/browser/builtin-addons/webcompat/data/interventions/1878024-g1.globo.com.json",
+ "chrome/browser/builtin-addons/webcompat/data/interventions/1884779-memurlar.net.json",
+ "chrome/browser/builtin-addons/webcompat/data/interventions/1886293-Future_PLC_websites.json",
+ "chrome/browser/builtin-addons/webcompat/data/interventions/1886566-quezoncity.gov.ph.json",
+ "chrome/browser/builtin-addons/webcompat/data/interventions/1886616-www.six-group.com.json",
+ "chrome/browser/builtin-addons/webcompat/data/interventions/1889326-Office_365_email_handling_prompt.json",
+ "chrome/browser/builtin-addons/webcompat/data/interventions/1889505-bankmandiri.co.id.json",
+ "chrome/browser/builtin-addons/webcompat/data/interventions/1892073-snapchat.com.json",
+ "chrome/browser/builtin-addons/webcompat/data/interventions/1894308-dingtalk.com.json",
+ "chrome/browser/builtin-addons/webcompat/data/interventions/1895051-www.zhihu.com.json",
+ "chrome/browser/builtin-addons/webcompat/data/interventions/1895672-hackgreensdr.org_and_websdr.78dx.ru.json",
+ "chrome/browser/builtin-addons/webcompat/data/interventions/1895997-e.seb.lt.json",
+ "chrome/browser/builtin-addons/webcompat/data/interventions/1896349-vivaldi.com.json",
+ "chrome/browser/builtin-addons/webcompat/data/interventions/1896354-my.rhinoshield.fr.json",
+ "chrome/browser/builtin-addons/webcompat/data/interventions/1896361-Meta_Messenger.json",
+ "chrome/browser/builtin-addons/webcompat/data/interventions/1896424-meet.google.com_legacy_group_calls_exploratory.json",
+ "chrome/browser/builtin-addons/webcompat/data/interventions/1896571-gracobaby.ca.json",
+ "chrome/browser/builtin-addons/webcompat/data/interventions/1897724-app.homewyse.com.json",
+ "chrome/browser/builtin-addons/webcompat/data/interventions/1898638-gmbinder.com.json",
+ "chrome/browser/builtin-addons/webcompat/data/interventions/1898895-eslatam.trygalaxy.com.json",
+ "chrome/browser/builtin-addons/webcompat/data/interventions/1898898-app.libry.jp.json",
+ "chrome/browser/builtin-addons/webcompat/data/interventions/1898904-indigo.shireburn.com.json",
+ "chrome/browser/builtin-addons/webcompat/data/interventions/1898909-remotasks.com.json",
+ "chrome/browser/builtin-addons/webcompat/data/interventions/1898911-forms.ontariodrugbenefit.ca.json",
+ "chrome/browser/builtin-addons/webcompat/data/interventions/1898915-locator.dhl.com.json",
+ "chrome/browser/builtin-addons/webcompat/data/interventions/1898916-smartmirror.link.json",
+ "chrome/browser/builtin-addons/webcompat/data/interventions/1898917-sekowf.wns.com.json",
+ "chrome/browser/builtin-addons/webcompat/data/interventions/1898923-trade-in.vodafone.com.json",
+ "chrome/browser/builtin-addons/webcompat/data/interventions/1898926-dgslms.aduacademy.in.json",
+ "chrome/browser/builtin-addons/webcompat/data/interventions/1898929-app.sessionlinkpro.com.json",
+ "chrome/browser/builtin-addons/webcompat/data/interventions/1898931-facturador.afip.gob.ar.json",
+ "chrome/browser/builtin-addons/webcompat/data/interventions/1898932-account.gov.il.json",
+ "chrome/browser/builtin-addons/webcompat/data/interventions/1898934-tza.red.json",
+ "chrome/browser/builtin-addons/webcompat/data/interventions/1898935-mysunlife.sunlife.com.hk.json",
+ "chrome/browser/builtin-addons/webcompat/data/interventions/1898936-app.stormx.io.json",
+ "chrome/browser/builtin-addons/webcompat/data/interventions/1898937-goodyearfiaetrc.com.json",
+ "chrome/browser/builtin-addons/webcompat/data/interventions/1898938-conference.amwell.com.json",
+ "chrome/browser/builtin-addons/webcompat/data/interventions/1898939-smartgpseco.com.json",
+ "chrome/browser/builtin-addons/webcompat/data/interventions/1898941-events.webinar.ru.json",
+ "chrome/browser/builtin-addons/webcompat/data/interventions/1898943-carelink.minimed.eu.json",
+ "chrome/browser/builtin-addons/webcompat/data/interventions/1898946-transcrib.io.json",
+ "chrome/browser/builtin-addons/webcompat/data/interventions/1898949-my.murj.com.json",
+ "chrome/browser/builtin-addons/webcompat/data/interventions/1898951-hexagame.io.json",
+ "chrome/browser/builtin-addons/webcompat/data/interventions/1898952-digits.t-mobile.com.json",
+ "chrome/browser/builtin-addons/webcompat/data/interventions/1898960-hrm.online.comarch.pl.json",
+ "chrome/browser/builtin-addons/webcompat/data/interventions/1898963-england.nhs.attendanywhere.com.json",
+ "chrome/browser/builtin-addons/webcompat/data/interventions/1898983-elibrary.ferc.gov.json",
+ "chrome/browser/builtin-addons/webcompat/data/interventions/1898988-prudential.com.hk.json",
+ "chrome/browser/builtin-addons/webcompat/data/interventions/1898989-mymsc.com.json",
+ "chrome/browser/builtin-addons/webcompat/data/interventions/1898996-oculus.com_and_meta.com.json",
+ "chrome/browser/builtin-addons/webcompat/data/interventions/1899049-bcbs.pinpointglobal.com.json",
+ "chrome/browser/builtin-addons/webcompat/data/interventions/1899054-icorrectproof.com.json",
+ "chrome/browser/builtin-addons/webcompat/data/interventions/1899060-wbte.drcedirect.com.json",
+ "chrome/browser/builtin-addons/webcompat/data/interventions/1899063-onlinestep.pgc.edu.json",
+ "chrome/browser/builtin-addons/webcompat/data/interventions/1899066-bookcreator.com.json",
+ "chrome/browser/builtin-addons/webcompat/data/interventions/1899067-game.granbluefantasy.jp.json",
+ "chrome/browser/builtin-addons/webcompat/data/interventions/1899072-passpoint.boingo.com.json",
+ "chrome/browser/builtin-addons/webcompat/data/interventions/1899829-animeflv.net.json",
+ "chrome/browser/builtin-addons/webcompat/data/interventions/1899831-zencastr.com.json",
+ "chrome/browser/builtin-addons/webcompat/data/interventions/1899923-findmy.tokyo.json",
+ "chrome/browser/builtin-addons/webcompat/data/interventions/1899929-selecionases.saude.pe.gov.br.json",
+ "chrome/browser/builtin-addons/webcompat/data/interventions/1899930-africanews.com.json",
+ "chrome/browser/builtin-addons/webcompat/data/interventions/1899932-ct-tc.apps.cic.gc.ca.json",
+ "chrome/browser/builtin-addons/webcompat/data/interventions/1899945-nytimes.com_Modern_Love_Questions.json",
+ "chrome/browser/builtin-addons/webcompat/data/interventions/1902367-seller.kuajingmaihuo.com.json",
+ "chrome/browser/builtin-addons/webcompat/data/interventions/1902379-adl.edu.tw.json",
+ "chrome/browser/builtin-addons/webcompat/data/interventions/1902382-flash.puffin.com.json",
+ "chrome/browser/builtin-addons/webcompat/data/interventions/1902385-bithumb.com.json",
+ "chrome/browser/builtin-addons/webcompat/data/interventions/1902388-clinic.platomedical.com.json",
+ "chrome/browser/builtin-addons/webcompat/data/interventions/1902389-store.91app.com.json",
+ "chrome/browser/builtin-addons/webcompat/data/interventions/1902390-app.rnova.org.json",
+ "chrome/browser/builtin-addons/webcompat/data/interventions/1902396-clinicaonline.co.il.json",
+ "chrome/browser/builtin-addons/webcompat/data/interventions/1902397-e-src.net.json",
+ "chrome/browser/builtin-addons/webcompat/data/interventions/1902398-cloud-login.sigmacare.com.json",
+ "chrome/browser/builtin-addons/webcompat/data/interventions/1902399-recochoku.jp.json",
+ "chrome/browser/builtin-addons/webcompat/data/interventions/1902400-sales-crowd.jp.json",
+ "chrome/browser/builtin-addons/webcompat/data/interventions/1902403-musicstore.auone.jp.json",
+ "chrome/browser/builtin-addons/webcompat/data/interventions/1902404-pss.perodua.com.my.json",
+ "chrome/browser/builtin-addons/webcompat/data/interventions/1902405-soffice.11st.co.kr.json",
+ "chrome/browser/builtin-addons/webcompat/data/interventions/1902406-sp.hi.co.kr.json",
+ "chrome/browser/builtin-addons/webcompat/data/interventions/1902407-www.sigadoc.mt.gov.br.json",
+ "chrome/browser/builtin-addons/webcompat/data/interventions/1902408-mgr.knowbe.jp.json",
+ "chrome/browser/builtin-addons/webcompat/data/interventions/1902411-agent.foundi.info.json",
+ "chrome/browser/builtin-addons/webcompat/data/interventions/1902412-esampark.wondercement.com.json",
+ "chrome/browser/builtin-addons/webcompat/data/interventions/1902413-ibanka.seb.lv.json",
+ "chrome/browser/builtin-addons/webcompat/data/interventions/1902414-e.seb.ee.json",
+ "chrome/browser/builtin-addons/webcompat/data/interventions/1902415-kaigetsu.staysee.jp.json",
+ "chrome/browser/builtin-addons/webcompat/data/interventions/1902416-acionafacil.com.br.json",
+ "chrome/browser/builtin-addons/webcompat/data/interventions/1902419-jamsune.com.json",
+ "chrome/browser/builtin-addons/webcompat/data/interventions/1902450-hilokal.com.json",
+ "chrome/browser/builtin-addons/webcompat/data/interventions/1902454-onvideo.kuaishou.com.json",
+ "chrome/browser/builtin-addons/webcompat/data/interventions/1902457-www.vpropel.in.json",
+ "chrome/browser/builtin-addons/webcompat/data/interventions/1902459-coupangplay.com.json",
+ "chrome/browser/builtin-addons/webcompat/data/interventions/1902463-stage.metareal.com.json",
+ "chrome/browser/builtin-addons/webcompat/data/interventions/1902464-workhub.transcribeme.com.json",
+ "chrome/browser/builtin-addons/webcompat/data/interventions/1902474-lg.jio.com.json",
+ "chrome/browser/builtin-addons/webcompat/data/interventions/1902478-La_Personnelle_and_Desjardins_General_insurance.json",
+ "chrome/browser/builtin-addons/webcompat/data/interventions/1902496-be.bim.mx.json",
+ "chrome/browser/builtin-addons/webcompat/data/interventions/1902497-englishtest.duolingo.com.json",
+ "chrome/browser/builtin-addons/webcompat/data/interventions/1902501-ads.tiktok.com.json",
+ "chrome/browser/builtin-addons/webcompat/data/interventions/1902506-mp3cut.net.json",
+ "chrome/browser/builtin-addons/webcompat/data/interventions/1902507_1-riverside.com_riverside.fm.json",
+ "chrome/browser/builtin-addons/webcompat/data/interventions/1902507_2-riverside.com_riverside.fm_studio.json",
+ "chrome/browser/builtin-addons/webcompat/data/interventions/1902507_3-riverside.com_riverside.fm_dashboard.json",
+ "chrome/browser/builtin-addons/webcompat/data/interventions/1902508-goto.com.json",
+ "chrome/browser/builtin-addons/webcompat/data/interventions/1902520-www.keisan.nta.go.jp.json",
+ "chrome/browser/builtin-addons/webcompat/data/interventions/1902527-app.gather.town.json",
+ "chrome/browser/builtin-addons/webcompat/data/interventions/1903480-ace7.acecombat.jp.json",
+ "chrome/browser/builtin-addons/webcompat/data/interventions/1904141-mega.nz.json",
+ "chrome/browser/builtin-addons/webcompat/data/interventions/1905069-one.geekie.com.br.json",
+ "chrome/browser/builtin-addons/webcompat/data/interventions/1905607-10play.com.au.json",
+ "chrome/browser/builtin-addons/webcompat/data/interventions/1905885-playlist-manager.com.json",
+ "chrome/browser/builtin-addons/webcompat/data/interventions/1906630-watch.foxtel.com.au.json",
+ "chrome/browser/builtin-addons/webcompat/data/interventions/1908636-xmgl.ccccltd.cn.json",
+ "chrome/browser/builtin-addons/webcompat/data/interventions/1911243-tsu-results.rf.gd.json",
+ "chrome/browser/builtin-addons/webcompat/data/interventions/1911253-qq.com.json",
+ "chrome/browser/builtin-addons/webcompat/data/interventions/1912923-class.com.json",
+ "chrome/browser/builtin-addons/webcompat/data/interventions/1913599-createEncodedStreams_shim_test-page.json",
+ "chrome/browser/builtin-addons/webcompat/data/interventions/1913668-workbench.researchallofus.org.json",
+ "chrome/browser/builtin-addons/webcompat/data/interventions/1913720-CitrusLab.json",
+ "chrome/browser/builtin-addons/webcompat/data/interventions/1913744-confetti.buzz.json",
+ "chrome/browser/builtin-addons/webcompat/data/interventions/1913759-playblackdesert.com.json",
+ "chrome/browser/builtin-addons/webcompat/data/interventions/1914327-media.qdnd.vn.json",
+ "chrome/browser/builtin-addons/webcompat/data/interventions/1914565-myassurity.com.json",
+ "chrome/browser/builtin-addons/webcompat/data/interventions/1916900-vuemotion.santacasaba.org.br.json",
+ "chrome/browser/builtin-addons/webcompat/data/interventions/1918604-g1.globo.com_Caca_Palavras.json",
+ "chrome/browser/builtin-addons/webcompat/data/interventions/1918995-calculator.net.json",
+ "chrome/browser/builtin-addons/webcompat/data/interventions/1919004-www.editoracontexto.com.br.json",
+ "chrome/browser/builtin-addons/webcompat/data/interventions/1919263-www.nbcsports.com.json",
+ "chrome/browser/builtin-addons/webcompat/data/interventions/1922498-ilgeniodellapizza.com.json",
+ "chrome/browser/builtin-addons/webcompat/data/interventions/1923656-ipmph.com.json",
+ "chrome/browser/builtin-addons/webcompat/data/interventions/1924334-neopets.com.json",
+ "chrome/browser/builtin-addons/webcompat/data/interventions/1924441-contractorinduction.colesgroup.com.au.json",
+ "chrome/browser/builtin-addons/webcompat/data/interventions/1925508-developer.apple.com.json",
+ "chrome/browser/builtin-addons/webcompat/data/interventions/1926501-iwebv2.thebankersbank.com.json",
+ "chrome/browser/builtin-addons/webcompat/data/interventions/1926564-app.phase.com.json",
+ "chrome/browser/builtin-addons/webcompat/data/interventions/1928605-votermaps.org.json",
+ "chrome/browser/builtin-addons/webcompat/data/interventions/1928941-oasis.decart.ai.json",
+ "chrome/browser/builtin-addons/webcompat/data/interventions/1930440-online.singaporepools.com.json",
+ "chrome/browser/builtin-addons/webcompat/data/interventions/1931538-buzzfeed.com.json",
+ "chrome/browser/builtin-addons/webcompat/data/interventions/1933169-next.goalplan.com.json",
+ "chrome/browser/builtin-addons/webcompat/data/interventions/1933910-www.tiktok.com_tiktokstudio.json",
+ "chrome/browser/builtin-addons/webcompat/data/interventions/1933929-toei-anim.co.jp.json",
+ "chrome/browser/builtin-addons/webcompat/data/interventions/1934189-fdj.fr.json",
+ "chrome/browser/builtin-addons/webcompat/data/interventions/1934518-app.fullcodemedical.com.json",
+ "chrome/browser/builtin-addons/webcompat/data/interventions/1934567-port8.fi.json",
+ "chrome/browser/builtin-addons/webcompat/data/interventions/1934908-www.cbsnews.com.json",
+ "chrome/browser/builtin-addons/webcompat/data/interventions/1935598-testbook.com.json",
+ "chrome/browser/builtin-addons/webcompat/data/interventions/1936429-diadora.com.json",
+ "chrome/browser/builtin-addons/webcompat/data/interventions/1939248-rosasthai.com.json",
+ "chrome/browser/builtin-addons/webcompat/data/interventions/1939697-paypal.com.json",
+ "chrome/browser/builtin-addons/webcompat/data/interventions/1941530-climate.rutgers.edu.json",
+ "chrome/browser/builtin-addons/webcompat/data/interventions/1942292-beterbed.nl.json",
+ "chrome/browser/builtin-addons/webcompat/data/interventions/1943289-livestorm.co.json",
+ "chrome/browser/builtin-addons/webcompat/data/interventions/1943898-www.capital.gr.json",
+ "chrome/browser/builtin-addons/webcompat/data/interventions/1943987-andisearch.com.json",
+ "chrome/browser/builtin-addons/webcompat/data/interventions/1943993-arenti.net.json",
+ "chrome/browser/builtin-addons/webcompat/data/interventions/1944219-zoom.us.json",
+ "chrome/browser/builtin-addons/webcompat/data/interventions/1944518-app.powerbi.com.json",
+ "chrome/browser/builtin-addons/webcompat/data/interventions/1944727-linkedin.com.json",
+ "chrome/browser/builtin-addons/webcompat/data/interventions/1945019-order.mealkeyway.com.json",
+ "chrome/browser/builtin-addons/webcompat/data/interventions/1945438-tiktok.com_extra_scrollbars.json",
+ "chrome/browser/builtin-addons/webcompat/data/interventions/1945561-webex.com.json",
+ "chrome/browser/builtin-addons/webcompat/data/interventions/1946409-www.lush.com.json",
+ "chrome/browser/builtin-addons/webcompat/data/interventions/1946443-aliexpress.com_bundle_deals_pages.json",
+ "chrome/browser/builtin-addons/webcompat/data/interventions/1947105-pexels.com.json",
+ "chrome/browser/builtin-addons/webcompat/data/interventions/1947979-www.shazam.com.json",
+ "chrome/browser/builtin-addons/webcompat/data/interventions/1949466-lapalabradeldia.com.json",
+ "chrome/browser/builtin-addons/webcompat/data/interventions/1950053-omegleapp.me.json",
+ "chrome/browser/builtin-addons/webcompat/data/interventions/1950100-aylak.com.json",
+ "chrome/browser/builtin-addons/webcompat/data/interventions/1950282-f1tv.formula1.com.json",
+ "chrome/browser/builtin-addons/webcompat/data/interventions/1950807-sus.softadmin.se.json",
+ "chrome/browser/builtin-addons/webcompat/data/interventions/1951055-calcoastcu.org.json",
+ "chrome/browser/builtin-addons/webcompat/data/interventions/1951675-byod.airindia.com.json",
+ "chrome/browser/builtin-addons/webcompat/data/interventions/1953077-Nintendo_movie_guidebook.json",
+ "chrome/browser/builtin-addons/webcompat/data/interventions/1953091-slc-ut-us.avolvecloud.com.json",
+ "chrome/browser/builtin-addons/webcompat/data/interventions/1954002-advancedmd.com.json",
+ "chrome/browser/builtin-addons/webcompat/data/interventions/1954144-td.com.json",
+ "chrome/browser/builtin-addons/webcompat/data/interventions/1954427-eolno.nokas.com.json",
+ "chrome/browser/builtin-addons/webcompat/data/interventions/1954533-copaair.com.json",
+ "chrome/browser/builtin-addons/webcompat/data/interventions/1955529-kancelaria.kros.sk.json",
+ "chrome/browser/builtin-addons/webcompat/data/interventions/1955932-coopvoce.it.json",
+ "chrome/browser/builtin-addons/webcompat/data/interventions/1956165-m.youtube.com_picture-in-picture_fix.json",
+ "chrome/browser/builtin-addons/webcompat/data/interventions/1957887-midi.city.json",
+ "chrome/browser/builtin-addons/webcompat/data/interventions/1959046-angeljackets.com.json",
+ "chrome/browser/builtin-addons/webcompat/data/interventions/1959117-cesupils.lv.json",
+ "chrome/browser/builtin-addons/webcompat/data/interventions/1959444-m.modanisa.com.json",
+ "chrome/browser/builtin-addons/webcompat/data/interventions/1959598-signal-tech.com.json",
+ "chrome/browser/builtin-addons/webcompat/data/interventions/1960294-firstenergycorp.com.json",
+ "chrome/browser/builtin-addons/webcompat/data/interventions/1962587-virtualvisit.telushealth.com.json",
+ "chrome/browser/builtin-addons/webcompat/data/interventions/1962642-hoanghamobile.com.json",
+ "chrome/browser/builtin-addons/webcompat/data/interventions/1962644-www.coles.com.au.json",
+ "chrome/browser/builtin-addons/webcompat/data/interventions/1962654-go.idnow.de.json",
+ "chrome/browser/builtin-addons/webcompat/data/interventions/1963270-app.kosmi.io.json",
+ "chrome/browser/builtin-addons/webcompat/data/interventions/1964947-dotnetfiddle.net.json",
+ "chrome/browser/builtin-addons/webcompat/data/interventions/1966330-salling.dk.json",
+ "chrome/browser/builtin-addons/webcompat/data/interventions/1966377-nvidia.com.json",
+ "chrome/browser/builtin-addons/webcompat/data/interventions/1966585-hiskin.care.json",
+ "chrome/browser/builtin-addons/webcompat/data/interventions/1967694-onlyfaucet.com.json",
+ "chrome/browser/builtin-addons/webcompat/data/interventions/1968187-authface.liquid-auth.com.json",
+ "chrome/browser/builtin-addons/webcompat/data/interventions/1970810-camper-van-week-end.fr.json",
+ "chrome/browser/builtin-addons/webcompat/data/interventions/1972511-cmyportal.tkc.co.jp.json",
+ "chrome/browser/builtin-addons/webcompat/data/interventions/1973019-mitsukoshi.mistore.jp.json",
+ "chrome/browser/builtin-addons/webcompat/data/interventions/1973976-iweather.gov.vn.json",
+ "chrome/browser/builtin-addons/webcompat/data/interventions/1974686-hermes.admin.ch.json",
+ "chrome/browser/builtin-addons/webcompat/data/interventions/1975651-comic.k-manga.jp.json",
+ "chrome/browser/builtin-addons/webcompat/data/interventions/1975652-gree.jp.json",
+ "chrome/browser/builtin-addons/webcompat/data/interventions/1975926-kuruma-news.jp.json",
+ "chrome/browser/builtin-addons/webcompat/data/interventions/1975927-trafficnews.jp.json",
+ "chrome/browser/builtin-addons/webcompat/data/interventions/1977195-wattpad.com.json",
+ "chrome/browser/builtin-addons/webcompat/data/interventions/1978572-store.renishaw.com.json",
+ "chrome/browser/builtin-addons/webcompat/data/interventions/1980129-app.simplenote.com.json",
+ "chrome/browser/builtin-addons/webcompat/data/interventions/1980382-www.fidrec.com.sg.json",
+ "chrome/browser/builtin-addons/webcompat/data/interventions/1980629-truepicvision.com.json",
+ "chrome/browser/builtin-addons/webcompat/data/interventions/1981995-mygeha.com.json",
+ "chrome/browser/builtin-addons/webcompat/data/interventions/1982295-hall.ssjj.cn.json",
+ "chrome/browser/builtin-addons/webcompat/data/interventions/1982626-store.sony.jp.json",
+ "chrome/browser/builtin-addons/webcompat/data/interventions/1982880-yoshinoya-mini-web.starboss.biz.json",
+ "chrome/browser/builtin-addons/webcompat/data/interventions/1983538-incontrol.landrover.com.json",
+ "chrome/browser/builtin-addons/webcompat/data/interventions/1983778-daotranslate.com.json",
+ "chrome/browser/builtin-addons/webcompat/data/interventions/1984434-fxnetworkspressroom.com.json",
+ "chrome/browser/builtin-addons/webcompat/data/interventions/1986438-gamma.app.json",
+ "chrome/browser/builtin-addons/webcompat/data/interventions/1988133-labs-aws.popcap.com_facebook_bj2.json",
+ "chrome/browser/builtin-addons/webcompat/data/interventions/1989241-useinsider.com.json",
+ "chrome/browser/builtin-addons/webcompat/data/interventions/1989975-idp.infocert.it.json",
+ "chrome/browser/builtin-addons/webcompat/data/interventions/1992402-ehssrisk.sai360.net.json",
+ "chrome/browser/builtin-addons/webcompat/data/interventions/1993201-portal.pilot.ly.json",
+ "chrome/browser/builtin-addons/webcompat/data/interventions/1993452-www.lee.in.json",
+ "chrome/browser/builtin-addons/webcompat/data/interventions/1993453-www.dockers.in.json",
+ "chrome/browser/builtin-addons/webcompat/data/interventions/1993454-www.wrangler.in.json",
+ "chrome/browser/builtin-addons/webcompat/data/interventions/1994062-managetrips.jetblue.com.json",
+ "chrome/browser/builtin-addons/webcompat/data/interventions/1994562-MSTP+MSTG_on_window_shim_test-page.json",
+ "chrome/browser/builtin-addons/webcompat/data/interventions/1994704-avlguest.justice.nsw.gov.au.json",
+ "chrome/browser/builtin-addons/webcompat/data/interventions/1995452-polymarket.com.json",
+ "chrome/browser/builtin-addons/webcompat/data/interventions/1996137-trip.com.json",
+ "chrome/browser/builtin-addons/webcompat/data/interventions/1996823-rogers.com_and_fido.ca.json",
+ "chrome/browser/builtin-addons/webcompat/data/interventions/1997575-perplexity.ai.json",
+ "chrome/browser/builtin-addons/webcompat/data/interventions/1997883-pwa.samsungglobalgoals.com.json",
+ "chrome/browser/builtin-addons/webcompat/data/interventions/1998361-doctolib.de.json",
+ "chrome/browser/builtin-addons/webcompat/data/interventions/1999198-anime-bit.ru.json",
+ "chrome/browser/builtin-addons/webcompat/data/interventions/1999770-configuraraparelhos.claro.com.br.json",
+ "chrome/browser/builtin-addons/webcompat/data/interventions/2000529-top.cafe.daum.net.json",
+ "chrome/browser/builtin-addons/webcompat/data/interventions/2000558-www.jal.co.jp.json",
+ "chrome/browser/builtin-addons/webcompat/data/interventions/2000906-teams.microsoft.com.json",
+ "chrome/browser/builtin-addons/webcompat/data/interventions/2001936-larksuite.com.json",
+ "chrome/browser/builtin-addons/webcompat/data/interventions/2002012-bbs.colg.cn.json",
+ "chrome/browser/builtin-addons/webcompat/data/interventions/2003019-jw.org.json",
+ "chrome/browser/builtin-addons/webcompat/data/interventions/2003815-crea-tv.jp.json",
+ "chrome/browser/builtin-addons/webcompat/data/interventions/2003826-tjoy.jp.json",
+ "chrome/browser/builtin-addons/webcompat/data/interventions/2004025-chatbot.weixin.qq.com.json",
+ "chrome/browser/builtin-addons/webcompat/data/interventions/2004610-character.ai.json",
+ "chrome/browser/builtin-addons/webcompat/data/interventions/2004679-paybill.com.json",
+ "chrome/browser/builtin-addons/webcompat/data/interventions/2005520-portal.adtpulse.com.json",
+ "chrome/browser/builtin-addons/webcompat/data/interventions/2006036-fbo.fubon.com.json",
+ "chrome/browser/builtin-addons/webcompat/data/interventions/2007641-papajohns.com.json",
+ "chrome/browser/builtin-addons/webcompat/data/interventions/2008115-pge.com.json",
+ "chrome/browser/builtin-addons/webcompat/data/interventions/2009174-otr.oregon.gov.json",
+ "chrome/browser/builtin-addons/webcompat/data/interventions/2009358-stgguaiba.com.br.json",
+ "chrome/browser/builtin-addons/webcompat/data/interventions/2009380-circuitdesremparts.com.json",
+ "chrome/browser/builtin-addons/webcompat/data/interventions/2010102-osmosis.org.json",
+ "chrome/browser/builtin-addons/webcompat/data/interventions/2010794-ipn2.paymentus.com.json",
+ "chrome/browser/builtin-addons/webcompat/data/interventions/2011819-ogcrush.com.json",
+ "chrome/browser/builtin-addons/webcompat/data/interventions/2011862-copilot.zenwork.com.json",
+ "chrome/browser/builtin-addons/webcompat/data/interventions/2011898-vanguard.com.json",
+ "chrome/browser/builtin-addons/webcompat/data/interventions/2012708-myordbok.com.json",
+ "chrome/browser/builtin-addons/webcompat/data/interventions/2012760-snowplowmap.a2gov.org.json",
+ "chrome/browser/builtin-addons/webcompat/data/interventions/2012789-zoopla.co.uk.json",
+ "chrome/browser/builtin-addons/webcompat/data/interventions/2013856-4gamer.net.json",
+ "chrome/browser/builtin-addons/webcompat/data/interventions/2013906-tibi.be.json",
+ "chrome/browser/builtin-addons/webcompat/data/interventions/2014713-javalab.org.json",
+ "chrome/browser/builtin-addons/webcompat/data/interventions/2015723-bchydro.com.json",
+ "chrome/browser/builtin-addons/webcompat/data/interventions/2015962-usbank.com.json",
+ "chrome/browser/builtin-addons/webcompat/data/interventions/2016030-prodamus.ru.json",
+ "chrome/browser/builtin-addons/webcompat/data/interventions/2018641-cloudplay.jiogames.com.json",
+ "chrome/browser/builtin-addons/webcompat/data/interventions/2018892-museumofpragueai.com.json",
+ "chrome/browser/builtin-addons/webcompat/data/interventions/2019231-setmore.com.json",
+ "chrome/browser/builtin-addons/webcompat/data/interventions/2019543-showroom-live.com.json",
+ "chrome/browser/builtin-addons/webcompat/data/interventions/2020285-Eurocontrol_Network_Operations_Portal.json",
+ "chrome/browser/builtin-addons/webcompat/data/interventions/2021019-rudder.taleez.com.json",
+ "chrome/browser/builtin-addons/webcompat/data/interventions/2023905-clw.westminster.gov.uk.json",
+ "chrome/browser/builtin-addons/webcompat/data/interventions/2024684-gueval2.digimoolyankan.com.json",
+ "chrome/browser/builtin-addons/webcompat/data/interventions/2025249-infyspringboard.onwingspan.com.json",
+ "chrome/browser/builtin-addons/webcompat/data/interventions/2029246-discord.com.json",
+ "chrome/browser/builtin-addons/webcompat/data/interventions/2031600-indeed.com.json",
+ "chrome/browser/builtin-addons/webcompat/data/interventions/2032348-www.av-connection.dk.json",
+ "chrome/browser/builtin-addons/webcompat/data/interventions/2034355-rok.lilith.com.json",
+ "chrome/browser/builtin-addons/webcompat/data/interventions/2034409-www.wanyiwan.top.json",
+ "chrome/browser/builtin-addons/webcompat/data/interventions/2035485-ncvtmis.gov.in.json",
+ "chrome/browser/builtin-addons/webcompat/data/interventions/2038180-geforcenow.com.json",
+ "chrome/browser/builtin-addons/webcompat/data/interventions/2044288-www.kuaishou.com.json",
+ "chrome/browser/builtin-addons/webcompat/data/shims.js",
+ "chrome/browser/builtin-addons/webcompat/experiment-apis/aboutConfigPrefs.js",
+ "chrome/browser/builtin-addons/webcompat/experiment-apis/aboutConfigPrefs.json",
+ "chrome/browser/builtin-addons/webcompat/experiment-apis/appConstants.js",
+ "chrome/browser/builtin-addons/webcompat/experiment-apis/appConstants.json",
+ "chrome/browser/builtin-addons/webcompat/experiment-apis/matchPatterns.js",
+ "chrome/browser/builtin-addons/webcompat/experiment-apis/matchPatterns.json",
+ "chrome/browser/builtin-addons/webcompat/experiment-apis/remoteSettings.js",
+ "chrome/browser/builtin-addons/webcompat/experiment-apis/remoteSettings.json",
+ "chrome/browser/builtin-addons/webcompat/experiment-apis/systemManufacturer.js",
+ "chrome/browser/builtin-addons/webcompat/experiment-apis/systemManufacturer.json",
+ "chrome/browser/builtin-addons/webcompat/experiment-apis/trackingProtection.js",
+ "chrome/browser/builtin-addons/webcompat/experiment-apis/trackingProtection.json",
+ "chrome/browser/builtin-addons/webcompat/experiment-apis/urlHelpers.js",
+ "chrome/browser/builtin-addons/webcompat/experiment-apis/urlHelpers.json",
+ "chrome/browser/builtin-addons/webcompat/injections/generated/bug1448747-FastClick_breakage.js",
+ "chrome/browser/builtin-addons/webcompat/injections/generated/bug1457335-histography.io.js",
+ "chrome/browser/builtin-addons/webcompat/injections/generated/bug1472075-bankofamerica.com.js",
+ "chrome/browser/builtin-addons/webcompat/injections/generated/bug1575000-apply.lloydsbank.co.uk-fix_misaligned_radio_buttons.css",
+ "chrome/browser/builtin-addons/webcompat/injections/generated/bug1579159-m.tailieu.vn.js",
+ "chrome/browser/builtin-addons/webcompat/injections/generated/bug1610344-directv.com.co-hide_browser_notice.css",
+ "chrome/browser/builtin-addons/webcompat/injections/generated/bug1644830-usps.com-fix_terms_and_conditions_checkboxes.css",
+ "chrome/browser/builtin-addons/webcompat/injections/generated/bug1724868-news.yahoo.co.jp-1.js",
+ "chrome/browser/builtin-addons/webcompat/injections/generated/bug1724868-news.yahoo.co.jp.js",
+ "chrome/browser/builtin-addons/webcompat/injections/generated/bug1729435-milkbarstore.com-fix_cart_quantities.css",
+ "chrome/browser/builtin-addons/webcompat/injections/generated/bug1741234-patient.alphalabs.ca-unhide_continue_button.css",
+ "chrome/browser/builtin-addons/webcompat/injections/generated/bug1769762-tiktok.com_broken_comments.js",
+ "chrome/browser/builtin-addons/webcompat/injections/generated/bug1770962-coldwellbankerhomes.com-fix_stretched_property_images.css",
+ "chrome/browser/builtin-addons/webcompat/injections/generated/bug1774005-Sites_relying_on_window.InstallTrigger.js",
+ "chrome/browser/builtin-addons/webcompat/injections/generated/bug1779908-play.google.com-hide_extra_scrollbars.css",
+ "chrome/browser/builtin-addons/webcompat/injections/generated/bug1799968-www.samsung.com_scrolling_fix.js",
+ "chrome/browser/builtin-addons/webcompat/injections/generated/bug1815733-Office_365_Outlook_locations.js",
+ "chrome/browser/builtin-addons/webcompat/injections/generated/bug1818818-FastClick_breakage_legacy.js",
+ "chrome/browser/builtin-addons/webcompat/injections/generated/bug1819450-cmbchina.com.js",
+ "chrome/browser/builtin-addons/webcompat/injections/generated/bug1827678_77727-www.free4talk.com.js",
+ "chrome/browser/builtin-addons/webcompat/injections/generated/bug1830796-copyleaks.com-hide_browser_notice.css",
+ "chrome/browser/builtin-addons/webcompat/injections/generated/bug1831007-All_international_Nintendo_domains.js",
+ "chrome/browser/builtin-addons/webcompat/injections/generated/bug1836105-cnn.com-fix_blank_pages_when_printing.css",
+ "chrome/browser/builtin-addons/webcompat/injections/generated/bug1836872-docs.google.com-fix_inaccessible_menus.css",
+ "chrome/browser/builtin-addons/webcompat/injections/generated/bug1841730-www.korg.com.js",
+ "chrome/browser/builtin-addons/webcompat/injections/generated/bug1842437-YouTube_back_forward_fix.js",
+ "chrome/browser/builtin-addons/webcompat/injections/generated/bug1845299-Google_Slides-hide_extra_scrollbars.css",
+ "chrome/browser/builtin-addons/webcompat/injections/generated/bug1848849-theaa.com-fix_blank_print_preview.css",
+ "chrome/browser/builtin-addons/webcompat/injections/generated/bug1859617-Sites_relying_on_there_being_no_window.InstallTrigger.js",
+ "chrome/browser/builtin-addons/webcompat/injections/generated/bug1860417-www.samsung.com_images_fix.js",
+ "chrome/browser/builtin-addons/webcompat/injections/generated/bug1873166-nsandi.com-hide_browser_notice.css",
+ "chrome/browser/builtin-addons/webcompat/injections/generated/bug1886293-Future_PLC_websites-fix_trending_scrollbar.css",
+ "chrome/browser/builtin-addons/webcompat/injections/generated/bug1886566-quezoncity.gov.ph-fix_invisible_iframe.css",
+ "chrome/browser/builtin-addons/webcompat/injections/generated/bug1886616-www.six-group.com-unhide_selected_inputs.css",
+ "chrome/browser/builtin-addons/webcompat/injections/generated/bug1889326-Office_365_email_handling_prompt.js",
+ "chrome/browser/builtin-addons/webcompat/injections/generated/bug1889505-bankmandiri.co.id.js",
+ "chrome/browser/builtin-addons/webcompat/injections/generated/bug1895051-www.zhihu.com-fix_unclickable_directory_buttons.css",
+ "chrome/browser/builtin-addons/webcompat/injections/generated/bug1896349-vivaldi.com-unhide-text-selections.css",
+ "chrome/browser/builtin-addons/webcompat/injections/generated/bug1896571-gracobaby.ca-unlock-scrolling.css",
+ "chrome/browser/builtin-addons/webcompat/injections/generated/bug1898915-locator.dhl.com-hide_browser_notice.css",
+ "chrome/browser/builtin-addons/webcompat/injections/generated/bug1898929-app.sessionlinkpro.com.js",
+ "chrome/browser/builtin-addons/webcompat/injections/generated/bug1898946-transcrib.io.js",
+ "chrome/browser/builtin-addons/webcompat/injections/generated/bug1898951-hexagame.io.js",
+ "chrome/browser/builtin-addons/webcompat/injections/generated/bug1898952-digits.t-mobile.com.js",
+ "chrome/browser/builtin-addons/webcompat/injections/generated/bug1898983-elibrary.ferc.gov.js",
+ "chrome/browser/builtin-addons/webcompat/injections/generated/bug1898996-oculus.com_and_meta.com.js",
+ "chrome/browser/builtin-addons/webcompat/injections/generated/bug1899054-icorrectproof.com.js",
+ "chrome/browser/builtin-addons/webcompat/injections/generated/bug1899063-onlinestep.pgc.edu-hide_browser_notice.css",
+ "chrome/browser/builtin-addons/webcompat/injections/generated/bug1899829-animeflv.net-fix-premiere-labels.css",
+ "chrome/browser/builtin-addons/webcompat/injections/generated/bug1899930-africanews.com-hide_browser_notice.css",
+ "chrome/browser/builtin-addons/webcompat/injections/generated/bug1902379-adl.edu.tw.js",
+ "chrome/browser/builtin-addons/webcompat/injections/generated/bug1902385-bithumb.com-hide_browser_notice.css",
+ "chrome/browser/builtin-addons/webcompat/injections/generated/bug1902388-clinic.platomedical.com-hide_browser_notice.css",
+ "chrome/browser/builtin-addons/webcompat/injections/generated/bug1902398-cloud-login.sigmacare.com-hide_browser_notice.css",
+ "chrome/browser/builtin-addons/webcompat/injections/generated/bug1902399-recochoku.jp.js",
+ "chrome/browser/builtin-addons/webcompat/injections/generated/bug1902405-soffice.11st.co.kr-hide_browser_notice.css",
+ "chrome/browser/builtin-addons/webcompat/injections/generated/bug1902406-sp.hi.co.kr.js",
+ "chrome/browser/builtin-addons/webcompat/injections/generated/bug1902407-www.sigadoc.mt.gov.br.js",
+ "chrome/browser/builtin-addons/webcompat/injections/generated/bug1902415-kaigetsu.staysee.jp-hide_browser_notice.css",
+ "chrome/browser/builtin-addons/webcompat/injections/generated/bug1902416-acionafacil.com.br.js",
+ "chrome/browser/builtin-addons/webcompat/injections/generated/bug1902419-jamsune.com.js",
+ "chrome/browser/builtin-addons/webcompat/injections/generated/bug1902520-www.keisan.nta.go.jp.js",
+ "chrome/browser/builtin-addons/webcompat/injections/generated/bug1903480-ace7.acecombat.jp.js",
+ "chrome/browser/builtin-addons/webcompat/injections/generated/bug1905069-one.geekie.com.br.js",
+ "chrome/browser/builtin-addons/webcompat/injections/generated/bug1911243-tsu-results.rf.gd-fix-table-headers.css",
+ "chrome/browser/builtin-addons/webcompat/injections/generated/bug1911253-qq.com-unhide-checkboxes.css",
+ "chrome/browser/builtin-addons/webcompat/injections/generated/bug1913668-workbench.researchallofus.org-hide-browser-notice.css",
+ "chrome/browser/builtin-addons/webcompat/injections/generated/bug1918604-g1.globo.com_Caca_Palavras-fix_clipped_buttons.css",
+ "chrome/browser/builtin-addons/webcompat/injections/generated/bug1918995-calculator.net-hide-copypaste-ui-for-buttons.css",
+ "chrome/browser/builtin-addons/webcompat/injections/generated/bug1919263-www.nbcsports.com.js",
+ "chrome/browser/builtin-addons/webcompat/injections/generated/bug1922498-ilgeniodellapizza.com.js",
+ "chrome/browser/builtin-addons/webcompat/injections/generated/bug1924334-neopets.com-fix_content_width.css",
+ "chrome/browser/builtin-addons/webcompat/injections/generated/bug1925508-developer.apple.com-fallback_for_css_zoom.css",
+ "chrome/browser/builtin-addons/webcompat/injections/generated/bug1928605-votermaps.org-center-map-icons.css",
+ "chrome/browser/builtin-addons/webcompat/injections/generated/bug1928941-oasis.decart.ai.js",
+ "chrome/browser/builtin-addons/webcompat/injections/generated/bug1930440-online.singaporepools.com.js",
+ "chrome/browser/builtin-addons/webcompat/injections/generated/bug1931538-buzzfeed.com-card_game_fix.css",
+ "chrome/browser/builtin-addons/webcompat/injections/generated/bug1934567-port8.fi-fix_scrolling.css",
+ "chrome/browser/builtin-addons/webcompat/injections/generated/bug1934908-www.cbsnews.com.js",
+ "chrome/browser/builtin-addons/webcompat/injections/generated/bug1936429-diadora.com-hide-extra-scrollbars.css",
+ "chrome/browser/builtin-addons/webcompat/injections/generated/bug1939248-rosasthai.com.js",
+ "chrome/browser/builtin-addons/webcompat/injections/generated/bug1941530-climate.rutgers.edu-fix-broken-images.css",
+ "chrome/browser/builtin-addons/webcompat/injections/generated/bug1942292-beterbed.nl-hide_extra_scrollbars.css",
+ "chrome/browser/builtin-addons/webcompat/injections/generated/bug1943987-andisearch.com-fix-offscreen-elements.css",
+ "chrome/browser/builtin-addons/webcompat/injections/generated/bug1944518-app.powerbi.com-hide_extra_scrollbars.css",
+ "chrome/browser/builtin-addons/webcompat/injections/generated/bug1944518-app.powerbi.com.js",
+ "chrome/browser/builtin-addons/webcompat/injections/generated/bug1944727-linkedin.com-fix-dark-overlay.css",
+ "chrome/browser/builtin-addons/webcompat/injections/generated/bug1945019-order.mealkeyway.com.js",
+ "chrome/browser/builtin-addons/webcompat/injections/generated/bug1945438-tiktok.com_extra_scrollbars-hide-extra-scrollbars.css",
+ "chrome/browser/builtin-addons/webcompat/injections/generated/bug1946409-www.lush.com-fix_cookie_banner.css",
+ "chrome/browser/builtin-addons/webcompat/injections/generated/bug1947105-pexels.com-nudge_thanks_popup_onscreen.css",
+ "chrome/browser/builtin-addons/webcompat/injections/generated/bug1947979-www.shazam.com-hide_extra_scrollbars.css",
+ "chrome/browser/builtin-addons/webcompat/injections/generated/bug1949466-lapalabradeldia.com-fix-vanishing-letters.css",
+ "chrome/browser/builtin-addons/webcompat/injections/generated/bug1950053-omegleapp.me-fix_scrollbars.css",
+ "chrome/browser/builtin-addons/webcompat/injections/generated/bug1950282-f1tv.formula1.com-1.js",
+ "chrome/browser/builtin-addons/webcompat/injections/generated/bug1950282-f1tv.formula1.com.js",
+ "chrome/browser/builtin-addons/webcompat/injections/generated/bug1951055-calcoastcu.org-hide_browser_notice.css",
+ "chrome/browser/builtin-addons/webcompat/injections/generated/bug1953077-Nintendo_movie_guidebook-fix_blank_movie_guidebook.css",
+ "chrome/browser/builtin-addons/webcompat/injections/generated/bug1954002-advancedmd.com.js",
+ "chrome/browser/builtin-addons/webcompat/injections/generated/bug1954144-td.com-fix_scrollbars.css",
+ "chrome/browser/builtin-addons/webcompat/injections/generated/bug1955932-coopvoce.it-fix_broken_radio_buttons.css",
+ "chrome/browser/builtin-addons/webcompat/injections/generated/bug1959598-signal-tech.com.js",
+ "chrome/browser/builtin-addons/webcompat/injections/generated/bug1960294-firstenergycorp.com-hide_browser_notice.css",
+ "chrome/browser/builtin-addons/webcompat/injections/generated/bug1963270-app.kosmi.io.js",
+ "chrome/browser/builtin-addons/webcompat/injections/generated/bug1966330-salling.dk-fix_mobile_filter_scrolling.css",
+ "chrome/browser/builtin-addons/webcompat/injections/generated/bug1966377-nvidia.com-fix_overflowing_layout.css",
+ "chrome/browser/builtin-addons/webcompat/injections/generated/bug1966585-hiskin.care-unhide_missing_content.css",
+ "chrome/browser/builtin-addons/webcompat/injections/generated/bug1970810-camper-van-week-end.fr.js",
+ "chrome/browser/builtin-addons/webcompat/injections/generated/bug1973976-iweather.gov.vn-fix_narrow_interface.css",
+ "chrome/browser/builtin-addons/webcompat/injections/generated/bug1974686-hermes.admin.ch-fix_overlapping_table_cells.css",
+ "chrome/browser/builtin-addons/webcompat/injections/generated/bug1975651-comic.k-manga.jp.js",
+ "chrome/browser/builtin-addons/webcompat/injections/generated/bug1978572-store.renishaw.com-fix_range_sliders.css",
+ "chrome/browser/builtin-addons/webcompat/injections/generated/bug1980382-www.fidrec.com.sg-fix_radio_buttons.css",
+ "chrome/browser/builtin-addons/webcompat/injections/generated/bug1981995-mygeha.com-fix_location_section_layout.css",
+ "chrome/browser/builtin-addons/webcompat/injections/generated/bug1982295-hall.ssjj.cn-fix_layout.css",
+ "chrome/browser/builtin-addons/webcompat/injections/generated/bug1983538-incontrol.landrover.com.js",
+ "chrome/browser/builtin-addons/webcompat/injections/generated/bug1986438-gamma.app.js",
+ "chrome/browser/builtin-addons/webcompat/injections/generated/bug1993452-www.lee.in-fix_product_image_hover_zoom.css",
+ "chrome/browser/builtin-addons/webcompat/injections/generated/bug1993453-www.dockers.in-fix_product_image_hover_zoom.css",
+ "chrome/browser/builtin-addons/webcompat/injections/generated/bug1993454-www.wrangler.in-fix_product_image_hover_zoom.css",
+ "chrome/browser/builtin-addons/webcompat/injections/generated/bug1994062-managetrips.jetblue.com-fix_only_one_page_printing.css",
+ "chrome/browser/builtin-addons/webcompat/injections/generated/bug1994704-avlguest.justice.nsw.gov.au.js",
+ "chrome/browser/builtin-addons/webcompat/injections/generated/bug1995452-polymarket.com-hide_extra_scrollbars.css",
+ "chrome/browser/builtin-addons/webcompat/injections/generated/bug1997575-perplexity.ai.js",
+ "chrome/browser/builtin-addons/webcompat/injections/generated/bug1998361-doctolib.de-hide_browser_notice.css",
+ "chrome/browser/builtin-addons/webcompat/injections/generated/bug1999770-configuraraparelhos.claro.com.br-unhide_phone_description.css",
+ "chrome/browser/builtin-addons/webcompat/injections/generated/bug2000558-www.jal.co.jp-fix_table_rendering.css",
+ "chrome/browser/builtin-addons/webcompat/injections/generated/bug2000906-teams.microsoft.com.js",
+ "chrome/browser/builtin-addons/webcompat/injections/generated/bug2003019-jw.org-fix_ruby_text_linebreaks.css",
+ "chrome/browser/builtin-addons/webcompat/injections/generated/bug2003826-tjoy.jp-fix_broken_zoom.css",
+ "chrome/browser/builtin-addons/webcompat/injections/generated/bug2004610-character.ai-fix_broken_italics.css",
+ "chrome/browser/builtin-addons/webcompat/injections/generated/bug2005520-portal.adtpulse.com-hide_browser_notice.css",
+ "chrome/browser/builtin-addons/webcompat/injections/generated/bug2006036-fbo.fubon.com.js",
+ "chrome/browser/builtin-addons/webcompat/injections/generated/bug2007641-papajohns.com.js",
+ "chrome/browser/builtin-addons/webcompat/injections/generated/bug2008115-pge.com-hide_browser_notice.css",
+ "chrome/browser/builtin-addons/webcompat/injections/generated/bug2009358-stgguaiba.com.br-fix_table_layout.css",
+ "chrome/browser/builtin-addons/webcompat/injections/generated/bug2010102-osmosis.org-center_pages.css",
+ "chrome/browser/builtin-addons/webcompat/injections/generated/bug2011819-ogcrush.com-fix_slick_slide_height.css",
+ "chrome/browser/builtin-addons/webcompat/injections/generated/bug2011862-copilot.zenwork.com.js",
+ "chrome/browser/builtin-addons/webcompat/injections/generated/bug2011898-vanguard.com-fix_obscured_inputs.css",
+ "chrome/browser/builtin-addons/webcompat/injections/generated/bug2012708-myordbok.com-fix_layout.css",
+ "chrome/browser/builtin-addons/webcompat/injections/generated/bug2012760-snowplowmap.a2gov.org-fix_ticker_performance.css",
+ "chrome/browser/builtin-addons/webcompat/injections/generated/bug2012789-zoopla.co.uk.js",
+ "chrome/browser/builtin-addons/webcompat/injections/generated/bug2015962-usbank.com-fix_minimum_font_size.css",
+ "chrome/browser/builtin-addons/webcompat/injections/generated/bug2016030-prodamus.ru-fix_hidden_content.css",
+ "chrome/browser/builtin-addons/webcompat/injections/generated/bug2018892-museumofpragueai.com-hide_mic_icon.css",
+ "chrome/browser/builtin-addons/webcompat/injections/generated/bug2018892-museumofpragueai.com.js",
+ "chrome/browser/builtin-addons/webcompat/injections/generated/bug2019231-setmore.com.js",
+ "chrome/browser/builtin-addons/webcompat/injections/generated/bug2020285-Eurocontrol_Network_Operations_Portal.js",
+ "chrome/browser/builtin-addons/webcompat/injections/generated/bug2021019-rudder.taleez.com-fix_overlapping_content.css",
+ "chrome/browser/builtin-addons/webcompat/injections/generated/bug2025249-infyspringboard.onwingspan.com-hide_browser_notice.css",
+ "chrome/browser/builtin-addons/webcompat/injections/generated/bug2029246-discord.com-fix_scrollbars.css",
+ "chrome/browser/builtin-addons/webcompat/injections/generated/bug2034409-www.wanyiwan.top.js",
+ "chrome/browser/builtin-addons/webcompat/injections/generated/bug2044288-www.kuaishou.com-fix_missing_video_thumbnails.css",
+ "chrome/browser/builtin-addons/webcompat/injections/js/add_chrome_to_useragent.js",
+ "chrome/browser/builtin-addons/webcompat/injections/js/add_samsung_to_useragent.js",
+ "chrome/browser/builtin-addons/webcompat/injections/js/bug1287715-littlealchemy2.com-fix-audio-race-condition.js",
+ "chrome/browser/builtin-addons/webcompat/injections/js/bug1799980-healow.com-infinite-loop-fix.js",
+ "chrome/browser/builtin-addons/webcompat/injections/js/bug1847971-ebay.com-barcode-scanner.js",
+ "chrome/browser/builtin-addons/webcompat/injections/js/bug1850998-chaturbate.com.js",
+ "chrome/browser/builtin-addons/webcompat/injections/js/bug1855014-eksiseyler.com.js",
+ "chrome/browser/builtin-addons/webcompat/injections/js/bug1878024-g1.globo.com-fix-account-icon.js",
+ "chrome/browser/builtin-addons/webcompat/injections/js/bug1902507-nofrozenicecandidatepairstats.js",
+ "chrome/browser/builtin-addons/webcompat/injections/js/bug1902507-ssrcmsid.js",
+ "chrome/browser/builtin-addons/webcompat/injections/js/bug1902520-keisan.nta.go.jp-spoof-windows11.js",
+ "chrome/browser/builtin-addons/webcompat/injections/js/bug1913599-shim-createencodedstreams.js",
+ "chrome/browser/builtin-addons/webcompat/injections/js/bug1943898-www.capital.gr-suppress-constant-reloading.js",
+ "chrome/browser/builtin-addons/webcompat/injections/js/bug1956165-www.youtube.com-picture-in-picture-fix.js",
+ "chrome/browser/builtin-addons/webcompat/injections/js/bug1994562-shim-mstp-mstg-on-window.js",
+ "chrome/browser/builtin-addons/webcompat/injections/js/bug1999198-anime-bit.ru-fix-broken-scrolling.js",
+ "chrome/browser/builtin-addons/webcompat/injections/js/bug2034355-rok.lilith.com-prevent-blank-page.js",
+ "chrome/browser/builtin-addons/webcompat/injections/js/bug2038180-shim-keyboard-lock.js",
+ "chrome/browser/builtin-addons/webcompat/injections/js/clear_navigator_plugins.js",
+ "chrome/browser/builtin-addons/webcompat/injections/js/deduplicate_registerProtocolHandler.js",
+ "chrome/browser/builtin-addons/webcompat/injections/js/define_InstallTrigger.js",
+ "chrome/browser/builtin-addons/webcompat/injections/js/define_MozAppearance.js",
+ "chrome/browser/builtin-addons/webcompat/injections/js/define_SpeechRecognition.js",
+ "chrome/browser/builtin-addons/webcompat/injections/js/define_TouchEvent.js",
+ "chrome/browser/builtin-addons/webcompat/injections/js/define_WebKitMutationObserver.js",
+ "chrome/browser/builtin-addons/webcompat/injections/js/define_minimal_window_chrome.js",
+ "chrome/browser/builtin-addons/webcompat/injections/js/define_mozRTC_APIs.js",
+ "chrome/browser/builtin-addons/webcompat/injections/js/define_userAgentData.js",
+ "chrome/browser/builtin-addons/webcompat/injections/js/define_window_chrome.js",
+ "chrome/browser/builtin-addons/webcompat/injections/js/disable_FastClick.js",
+ "chrome/browser/builtin-addons/webcompat/injections/js/disable_PACE_eventLag.js",
+ "chrome/browser/builtin-addons/webcompat/injections/js/disable_PDFJS_workers.js",
+ "chrome/browser/builtin-addons/webcompat/injections/js/disable_legacy_FastClick.js",
+ "chrome/browser/builtin-addons/webcompat/injections/js/disable_navigator_clipboard_read.js",
+ "chrome/browser/builtin-addons/webcompat/injections/js/disable_resizeMode_in_GDM.js",
+ "chrome/browser/builtin-addons/webcompat/injections/js/emulate_MouseWheel_events.js",
+ "chrome/browser/builtin-addons/webcompat/injections/js/hide_alerts.js",
+ "chrome/browser/builtin-addons/webcompat/injections/js/hide_messages.js",
+ "chrome/browser/builtin-addons/webcompat/injections/js/increase_performance_now_precision.js",
+ "chrome/browser/builtin-addons/webcompat/injections/js/inject_css.js",
+ "chrome/browser/builtin-addons/webcompat/injections/js/load_mParticle_synchronously.js",
+ "chrome/browser/builtin-addons/webcompat/injections/js/log_console_message.js",
+ "chrome/browser/builtin-addons/webcompat/injections/js/modify_meta_viewport.js",
+ "chrome/browser/builtin-addons/webcompat/injections/js/predefine_OnetrustActiveGroups.js",
+ "chrome/browser/builtin-addons/webcompat/injections/js/remove_firefox_from_useragent.js",
+ "chrome/browser/builtin-addons/webcompat/injections/js/round_pageYOffset.js",
+ "chrome/browser/builtin-addons/webcompat/injections/js/run_late_window_load_listeners.js",
+ "chrome/browser/builtin-addons/webcompat/injections/js/slow_down_wheel_events.js",
+ "chrome/browser/builtin-addons/webcompat/injections/js/spoof_as_windows.js",
+ "chrome/browser/builtin-addons/webcompat/injections/js/support_nonstandard_timezones.js",
+ "chrome/browser/builtin-addons/webcompat/injections/js/undefine_InstallTrigger.js",
+ "chrome/browser/builtin-addons/webcompat/injections/js/undefine_firefox_properties.js",
+ "chrome/browser/builtin-addons/webcompat/injections/js/unprefix-mozCaptureStream.js",
+ "chrome/browser/builtin-addons/webcompat/injections/js/unprefix_mozCaptureStream.js",
+ "chrome/browser/builtin-addons/webcompat/injections/js/use_chrome_appVersion.js",
+ "chrome/browser/builtin-addons/webcompat/injections/js/use_chrome_useragent.js",
+ "chrome/browser/builtin-addons/webcompat/injections/js/use_chrome_vendor.js",
+ "chrome/browser/builtin-addons/webcompat/injections/js/use_linux_appVersion.js",
+ "chrome/browser/builtin-addons/webcompat/injections/js/use_win64_platform.js",
+ "chrome/browser/builtin-addons/webcompat/lib/about_compat_broker.js",
+ "chrome/browser/builtin-addons/webcompat/lib/custom_functions.js",
+ "chrome/browser/builtin-addons/webcompat/lib/intervention_helpers.js",
+ "chrome/browser/builtin-addons/webcompat/lib/interventions.js",
+ "chrome/browser/builtin-addons/webcompat/lib/logging.js",
+ "chrome/browser/builtin-addons/webcompat/lib/messaging_helper.js",
+ "chrome/browser/builtin-addons/webcompat/lib/remote_settings_update_check.js",
+ "chrome/browser/builtin-addons/webcompat/lib/requestStorageAccess_helper.js",
+ "chrome/browser/builtin-addons/webcompat/lib/shim_messaging_helper.js",
+ "chrome/browser/builtin-addons/webcompat/lib/shims.js",
+ "chrome/browser/builtin-addons/webcompat/lib/smartblock_embeds_helper.js",
+ "chrome/browser/builtin-addons/webcompat/lib/ua_helpers.js",
+ "chrome/browser/builtin-addons/webcompat/manifest.json",
+ "chrome/browser/builtin-addons/webcompat/run.js",
+ "chrome/browser/builtin-addons/webcompat/shims/addthis-angular.js",
+ "chrome/browser/builtin-addons/webcompat/shims/adform.js",
+ "chrome/browser/builtin-addons/webcompat/shims/adnexus-ast.js",
+ "chrome/browser/builtin-addons/webcompat/shims/adnexus-prebid.js",
+ "chrome/browser/builtin-addons/webcompat/shims/adsafeprotected-ima.js",
+ "chrome/browser/builtin-addons/webcompat/shims/aliexpress-language.js",
+ "chrome/browser/builtin-addons/webcompat/shims/apstag.js",
+ "chrome/browser/builtin-addons/webcompat/shims/artstationLogin.js",
+ "chrome/browser/builtin-addons/webcompat/shims/bmauth.js",
+ "chrome/browser/builtin-addons/webcompat/shims/botd.mjs",
+ "chrome/browser/builtin-addons/webcompat/shims/branch.js",
+ "chrome/browser/builtin-addons/webcompat/shims/cambridgeDictionaryLogin.js",
+ "chrome/browser/builtin-addons/webcompat/shims/chartbeat.js",
+ "chrome/browser/builtin-addons/webcompat/shims/crave-ca.js",
+ "chrome/browser/builtin-addons/webcompat/shims/criteo.js",
+ "chrome/browser/builtin-addons/webcompat/shims/cxense.js",
+ "chrome/browser/builtin-addons/webcompat/shims/disqus-embed.js",
+ "chrome/browser/builtin-addons/webcompat/shims/disqus.svg",
+ "chrome/browser/builtin-addons/webcompat/shims/doubleverify.js",
+ "chrome/browser/builtin-addons/webcompat/shims/eluminate.js",
+ "chrome/browser/builtin-addons/webcompat/shims/embed-test-shim.js",
+ "chrome/browser/builtin-addons/webcompat/shims/empty-script.js",
+ "chrome/browser/builtin-addons/webcompat/shims/empty-shim.txt",
+ "chrome/browser/builtin-addons/webcompat/shims/everest.js",
+ "chrome/browser/builtin-addons/webcompat/shims/facebook-sdk.js",
+ "chrome/browser/builtin-addons/webcompat/shims/facebook.svg",
+ "chrome/browser/builtin-addons/webcompat/shims/fastclick.js",
+ "chrome/browser/builtin-addons/webcompat/shims/figshare.js",
+ "chrome/browser/builtin-addons/webcompat/shims/google-ads.js",
+ "chrome/browser/builtin-addons/webcompat/shims/google-analytics-and-tag-manager.js",
+ "chrome/browser/builtin-addons/webcompat/shims/google-analytics-ecommerce-plugin.js",
+ "chrome/browser/builtin-addons/webcompat/shims/google-analytics-legacy.js",
+ "chrome/browser/builtin-addons/webcompat/shims/google-ima.js",
+ "chrome/browser/builtin-addons/webcompat/shims/google-page-ad.js",
+ "chrome/browser/builtin-addons/webcompat/shims/google-publisher-tags.js",
+ "chrome/browser/builtin-addons/webcompat/shims/history.js",
+ "chrome/browser/builtin-addons/webcompat/shims/iam.js",
+ "chrome/browser/builtin-addons/webcompat/shims/iaspet.js",
+ "chrome/browser/builtin-addons/webcompat/shims/instagram-embed.js",
+ "chrome/browser/builtin-addons/webcompat/shims/instagram.js",
+ "chrome/browser/builtin-addons/webcompat/shims/instagram.svg",
+ "chrome/browser/builtin-addons/webcompat/shims/jira-zendesk-support.js",
+ "chrome/browser/builtin-addons/webcompat/shims/kinja.js",
+ "chrome/browser/builtin-addons/webcompat/shims/live-test-shim.js",
+ "chrome/browser/builtin-addons/webcompat/shims/maxmind-geoip.js",
+ "chrome/browser/builtin-addons/webcompat/shims/messengerLogin.js",
+ "chrome/browser/builtin-addons/webcompat/shims/microsoftAccountIcon.js",
+ "chrome/browser/builtin-addons/webcompat/shims/microsoftLogin.js",
+ "chrome/browser/builtin-addons/webcompat/shims/microsoftOfficeAuth.js",
+ "chrome/browser/builtin-addons/webcompat/shims/microsoftVirtualAssistant.js",
+ "chrome/browser/builtin-addons/webcompat/shims/moat.js",
+ "chrome/browser/builtin-addons/webcompat/shims/mochitest-shim-1.js",
+ "chrome/browser/builtin-addons/webcompat/shims/mochitest-shim-2.js",
+ "chrome/browser/builtin-addons/webcompat/shims/mochitest-shim-3.js",
+ "chrome/browser/builtin-addons/webcompat/shims/nielsen.js",
+ "chrome/browser/builtin-addons/webcompat/shims/optimizely.js",
+ "chrome/browser/builtin-addons/webcompat/shims/play.svg",
+ "chrome/browser/builtin-addons/webcompat/shims/rambler-authenticator.js",
+ "chrome/browser/builtin-addons/webcompat/shims/rich-relevance.js",
+ "chrome/browser/builtin-addons/webcompat/shims/salesforce.js",
+ "chrome/browser/builtin-addons/webcompat/shims/spotify-embed.js",
+ "chrome/browser/builtin-addons/webcompat/shims/stackoverflow-login.js",
+ "chrome/browser/builtin-addons/webcompat/shims/tiktok-embed.js",
+ "chrome/browser/builtin-addons/webcompat/shims/tiktok.svg",
+ "chrome/browser/builtin-addons/webcompat/shims/tracking-pixel.png",
+ "chrome/browser/builtin-addons/webcompat/shims/tsn-ca.js",
+ "chrome/browser/builtin-addons/webcompat/shims/twitter-embed.js",
+ "chrome/browser/builtin-addons/webcompat/shims/vast2.xml",
+ "chrome/browser/builtin-addons/webcompat/shims/vast3.xml",
+ "chrome/browser/builtin-addons/webcompat/shims/vmad.xml",
+ "chrome/browser/builtin-addons/webcompat/shims/webtrends.js",
+ "chrome/browser/builtin-addons/webcompat/shims/x-logo.svg",
+ "chrome/browser/builtin-addons/webcompat/shims/zendesk-asana-support.js"
+ ],
+ "prefixes": [
+ "chrome/browser/builtin-addons/"
+ ]
+ },
+ "browser/omni.ja|resource|devtools-highlighter-styles": {
+ "files": [
+ "chrome/devtools/modules/devtools/server/actors/highlighters/css/highlighters.css"
+ ],
+ "prefixes": [
+ "chrome/devtools/modules/devtools/server/actors/highlighters/css/"
+ ]
+ },
+ "browser/omni.ja|resource|usercontext-content": {
+ "files": [
+ "chrome/browser/content/activity-stream/data/content/assets/br-amo-fox-paint.svg",
+ "chrome/browser/content/activity-stream/data/content/assets/br-fxa-fox-mirror.svg",
+ "chrome/browser/content/activity-stream/data/content/assets/br-gratitude-fox-rock.svg",
+ "chrome/browser/content/activity-stream/data/content/assets/br-import-fox-house.svg",
+ "chrome/browser/content/activity-stream/data/content/assets/br-set-default-fox-heart.svg",
+ "chrome/browser/content/activity-stream/data/content/assets/confetti.svg",
+ "chrome/browser/content/activity-stream/data/content/assets/device-migration.svg",
+ "chrome/browser/content/activity-stream/data/content/assets/euo-chatbot.svg",
+ "chrome/browser/content/activity-stream/data/content/assets/euo-tab-orientation.svg",
+ "chrome/browser/content/activity-stream/data/content/assets/fox-doodle-backup-restore.svg",
+ "chrome/browser/content/activity-stream/data/content/assets/fox-doodle-backup.svg",
+ "chrome/browser/content/activity-stream/data/content/assets/fox-doodle-tail.png",
+ "chrome/browser/content/activity-stream/data/content/assets/fox-doodle-waving-static.png",
+ "chrome/browser/content/activity-stream/data/content/assets/fox-doodle-waving.gif",
+ "chrome/browser/content/activity-stream/data/content/assets/glyph-webextension-16.svg",
+ "chrome/browser/content/activity-stream/data/content/assets/heart.webp",
+ "chrome/browser/content/activity-stream/data/content/assets/long-zap.svg",
+ "chrome/browser/content/activity-stream/data/content/assets/mobile-download-qr-existing-user-cn.svg",
+ "chrome/browser/content/activity-stream/data/content/assets/mobile-download-qr-existing-user.svg",
+ "chrome/browser/content/activity-stream/data/content/assets/mobile-download-qr-new-user-cn.svg",
+ "chrome/browser/content/activity-stream/data/content/assets/mr-amo-collection.svg",
+ "chrome/browser/content/activity-stream/data/content/assets/mr-gratitude.svg",
+ "chrome/browser/content/activity-stream/data/content/assets/mr-import.svg",
+ "chrome/browser/content/activity-stream/data/content/assets/mr-kit-smart-window.svg",
+ "chrome/browser/content/activity-stream/data/content/assets/mr-pinprivate.svg",
+ "chrome/browser/content/activity-stream/data/content/assets/mr-pintaskbar.svg",
+ "chrome/browser/content/activity-stream/data/content/assets/mr-privacysegmentation.svg",
+ "chrome/browser/content/activity-stream/data/content/assets/mr-rtamo-background-image.svg",
+ "chrome/browser/content/activity-stream/data/content/assets/mr-settodefault.svg",
+ "chrome/browser/content/activity-stream/data/content/assets/noodle-C.svg",
+ "chrome/browser/content/activity-stream/data/content/assets/noodle-outline-L.svg",
+ "chrome/browser/content/activity-stream/data/content/assets/noodle-solid-L.svg",
+ "chrome/browser/content/activity-stream/data/content/assets/nuo-taborientation.svg",
+ "chrome/browser/content/activity-stream/data/content/assets/person-typing.svg",
+ "chrome/browser/content/activity-stream/data/content/assets/short-zap.svg",
+ "chrome/browser/content/activity-stream/data/content/assets/splash-logo.svg",
+ "chrome/browser/content/activity-stream/data/content/assets/tabs-side-zap-transparent.svg",
+ "chrome/browser/content/activity-stream/data/content/assets/tabs-top-zap-transparent.svg",
+ "chrome/browser/content/activity-stream/data/content/tippytop/favicons/addons-mozilla.png",
+ "chrome/browser/content/activity-stream/data/content/tippytop/favicons/adidas.png",
+ "chrome/browser/content/activity-stream/data/content/tippytop/favicons/aliexpress-com.ico",
+ "chrome/browser/content/activity-stream/data/content/tippytop/favicons/allegro-pl.ico",
+ "chrome/browser/content/activity-stream/data/content/tippytop/favicons/amazon.ico",
+ "chrome/browser/content/activity-stream/data/content/tippytop/favicons/apnews.png",
+ "chrome/browser/content/activity-stream/data/content/tippytop/favicons/avito-ru.ico",
+ "chrome/browser/content/activity-stream/data/content/tippytop/favicons/baidu-com.png",
+ "chrome/browser/content/activity-stream/data/content/tippytop/favicons/bbc-uk.ico",
+ "chrome/browser/content/activity-stream/data/content/tippytop/favicons/bing-com.ico",
+ "chrome/browser/content/activity-stream/data/content/tippytop/favicons/ctrip-com.ico",
+ "chrome/browser/content/activity-stream/data/content/tippytop/favicons/duckduckgo-com.ico",
+ "chrome/browser/content/activity-stream/data/content/tippytop/favicons/ebay.ico",
+ "chrome/browser/content/activity-stream/data/content/tippytop/favicons/etsy.ico",
+ "chrome/browser/content/activity-stream/data/content/tippytop/favicons/facebook-com.png",
+ "chrome/browser/content/activity-stream/data/content/tippytop/favicons/geico.png",
+ "chrome/browser/content/activity-stream/data/content/tippytop/favicons/google-com.ico",
+ "chrome/browser/content/activity-stream/data/content/tippytop/favicons/hrblock.ico",
+ "chrome/browser/content/activity-stream/data/content/tippytop/favicons/ifeng-com.ico",
+ "chrome/browser/content/activity-stream/data/content/tippytop/favicons/iqiyi-com.ico",
+ "chrome/browser/content/activity-stream/data/content/tippytop/favicons/leboncoin-fr.png",
+ "chrome/browser/content/activity-stream/data/content/tippytop/favicons/lemonde.png",
+ "chrome/browser/content/activity-stream/data/content/tippytop/favicons/ndtv.png",
+ "chrome/browser/content/activity-stream/data/content/tippytop/favicons/nike.ico",
+ "chrome/browser/content/activity-stream/data/content/tippytop/favicons/ok-ru.ico",
+ "chrome/browser/content/activity-stream/data/content/tippytop/favicons/olx-pl.ico",
+ "chrome/browser/content/activity-stream/data/content/tippytop/favicons/reddit-com.png",
+ "chrome/browser/content/activity-stream/data/content/tippytop/favicons/samsung.ico",
+ "chrome/browser/content/activity-stream/data/content/tippytop/favicons/tagesschau.png",
+ "chrome/browser/content/activity-stream/data/content/tippytop/favicons/turbotax.png",
+ "chrome/browser/content/activity-stream/data/content/tippytop/favicons/twitter-com.ico",
+ "chrome/browser/content/activity-stream/data/content/tippytop/favicons/vk-com.ico",
+ "chrome/browser/content/activity-stream/data/content/tippytop/favicons/vodafone.png",
+ "chrome/browser/content/activity-stream/data/content/tippytop/favicons/weibo-com.ico",
+ "chrome/browser/content/activity-stream/data/content/tippytop/favicons/wikipedia-org.ico",
+ "chrome/browser/content/activity-stream/data/content/tippytop/favicons/wix.ico",
+ "chrome/browser/content/activity-stream/data/content/tippytop/favicons/wykop-pl.png",
+ "chrome/browser/content/activity-stream/data/content/tippytop/favicons/yandex-com.png",
+ "chrome/browser/content/activity-stream/data/content/tippytop/favicons/yandex-ru.png",
+ "chrome/browser/content/activity-stream/data/content/tippytop/favicons/youtube-com.png",
+ "chrome/browser/content/activity-stream/data/content/tippytop/favicons/zhihu-com.ico",
+ "chrome/browser/content/activity-stream/data/content/tippytop/images/addons-mozilla@2x.png",
+ "chrome/browser/content/activity-stream/data/content/tippytop/images/adidas@2x.png",
+ "chrome/browser/content/activity-stream/data/content/tippytop/images/aliexpress-com@2x.png",
+ "chrome/browser/content/activity-stream/data/content/tippytop/images/allegro-pl@2x.png",
+ "chrome/browser/content/activity-stream/data/content/tippytop/images/amazon@2x.png",
+ "chrome/browser/content/activity-stream/data/content/tippytop/images/apnews@2x.png",
+ "chrome/browser/content/activity-stream/data/content/tippytop/images/avito-ru@2x.png",
+ "chrome/browser/content/activity-stream/data/content/tippytop/images/baidu-com@2x.png",
+ "chrome/browser/content/activity-stream/data/content/tippytop/images/bbc-uk@2x.png",
+ "chrome/browser/content/activity-stream/data/content/tippytop/images/bing-com@2x.svg",
+ "chrome/browser/content/activity-stream/data/content/tippytop/images/ctrip-com@2x.png",
+ "chrome/browser/content/activity-stream/data/content/tippytop/images/duckduckgo-com@2x.svg",
+ "chrome/browser/content/activity-stream/data/content/tippytop/images/ebay@2x.png",
+ "chrome/browser/content/activity-stream/data/content/tippytop/images/etsy@2x.jpg",
+ "chrome/browser/content/activity-stream/data/content/tippytop/images/facebook-com@2x.png",
+ "chrome/browser/content/activity-stream/data/content/tippytop/images/geico@2x.jpg",
+ "chrome/browser/content/activity-stream/data/content/tippytop/images/google-com@2x.png",
+ "chrome/browser/content/activity-stream/data/content/tippytop/images/hrblock@2x.png",
+ "chrome/browser/content/activity-stream/data/content/tippytop/images/ifeng-com@2x.png",
+ "chrome/browser/content/activity-stream/data/content/tippytop/images/iqiyi-com@2x.png",
+ "chrome/browser/content/activity-stream/data/content/tippytop/images/leboncoin-fr@2x.png",
+ "chrome/browser/content/activity-stream/data/content/tippytop/images/lemonde@2x.png",
+ "chrome/browser/content/activity-stream/data/content/tippytop/images/ndtv@2x.png",
+ "chrome/browser/content/activity-stream/data/content/tippytop/images/nike@2x.jpg",
+ "chrome/browser/content/activity-stream/data/content/tippytop/images/ok-ru@2x.png",
+ "chrome/browser/content/activity-stream/data/content/tippytop/images/olx-pl@2x.png",
+ "chrome/browser/content/activity-stream/data/content/tippytop/images/reddit-com@2x.png",
+ "chrome/browser/content/activity-stream/data/content/tippytop/images/samsung@2x.jpg",
+ "chrome/browser/content/activity-stream/data/content/tippytop/images/tagesschau@2x.png",
+ "chrome/browser/content/activity-stream/data/content/tippytop/images/turbotax@2x.jpg",
+ "chrome/browser/content/activity-stream/data/content/tippytop/images/twitter-com@2x.png",
+ "chrome/browser/content/activity-stream/data/content/tippytop/images/vk-com@2x.png",
+ "chrome/browser/content/activity-stream/data/content/tippytop/images/vodafone@2x.jpg",
+ "chrome/browser/content/activity-stream/data/content/tippytop/images/weibo-com@2x.png",
+ "chrome/browser/content/activity-stream/data/content/tippytop/images/wikipedia-org@2x.png",
+ "chrome/browser/content/activity-stream/data/content/tippytop/images/wix@2x.jpg",
+ "chrome/browser/content/activity-stream/data/content/tippytop/images/wykop-pl@2x.png",
+ "chrome/browser/content/activity-stream/data/content/tippytop/images/yandex-com@2x.png",
+ "chrome/browser/content/activity-stream/data/content/tippytop/images/yandex-ru@2x.png",
+ "chrome/browser/content/activity-stream/data/content/tippytop/images/youtube-com@2x.png",
+ "chrome/browser/content/activity-stream/data/content/tippytop/images/zhihu-com@2x.png",
+ "chrome/browser/content/activity-stream/data/content/tippytop/top_sites.json",
+ "chrome/browser/content/branding/about-logo-private.png",
+ "chrome/browser/content/branding/about-logo-private@2x.png",
+ "chrome/browser/content/branding/about-logo.png",
+ "chrome/browser/content/branding/about-logo.svg",
+ "chrome/browser/content/branding/about-logo@2x.png",
+ "chrome/browser/content/branding/about-wordmark.svg",
+ "chrome/browser/content/branding/about.png",
+ "chrome/browser/content/branding/aboutDialog.css",
+ "chrome/browser/content/branding/document.ico",
+ "chrome/browser/content/branding/document_pdf.svg",
+ "chrome/browser/content/branding/firefox-wordmark.svg",
+ "chrome/browser/content/branding/icon128.png",
+ "chrome/browser/content/branding/icon16.png",
+ "chrome/browser/content/branding/icon32.png",
+ "chrome/browser/content/branding/icon48.png",
+ "chrome/browser/content/branding/icon64.png",
+ "chrome/browser/content/briefcase.svg",
+ "chrome/browser/content/browser/aboutDialog-appUpdater.js",
+ "chrome/browser/content/browser/aboutDialog.css",
+ "chrome/browser/content/browser/aboutDialog.js",
+ "chrome/browser/content/browser/aboutDialog.xhtml",
+ "chrome/browser/content/browser/aboutFrameCrashed.html",
+ "chrome/browser/content/browser/aboutPrivateBrowsing.css",
+ "chrome/browser/content/browser/aboutPrivateBrowsing.html",
+ "chrome/browser/content/browser/aboutPrivateBrowsing.js",
+ "chrome/browser/content/browser/aboutRestartRequired.js",
+ "chrome/browser/content/browser/aboutRestartRequired.xhtml",
+ "chrome/browser/content/browser/aboutRobots-icon.png",
+ "chrome/browser/content/browser/aboutRobots.css",
+ "chrome/browser/content/browser/aboutRobots.js",
+ "chrome/browser/content/browser/aboutRobots.xhtml",
+ "chrome/browser/content/browser/aboutSessionRestore.js",
+ "chrome/browser/content/browser/aboutSessionRestore.xhtml",
+ "chrome/browser/content/browser/aboutTabCrashed.css",
+ "chrome/browser/content/browser/aboutTabCrashed.js",
+ "chrome/browser/content/browser/aboutTabCrashed.xhtml",
+ "chrome/browser/content/browser/aboutWelcomeBack.xhtml",
+ "chrome/browser/content/browser/aboutlogins/aboutLogins.css",
+ "chrome/browser/content/browser/aboutlogins/aboutLogins.html",
+ "chrome/browser/content/browser/aboutlogins/aboutLogins.mjs",
+ "chrome/browser/content/browser/aboutlogins/aboutLoginsImportReport.css",
+ "chrome/browser/content/browser/aboutlogins/aboutLoginsImportReport.html",
+ "chrome/browser/content/browser/aboutlogins/aboutLoginsImportReport.mjs",
+ "chrome/browser/content/browser/aboutlogins/aboutLoginsUtils.mjs",
+ "chrome/browser/content/browser/aboutlogins/common.css",
+ "chrome/browser/content/browser/aboutlogins/components/confirmation-dialog.css",
+ "chrome/browser/content/browser/aboutlogins/components/confirmation-dialog.mjs",
+ "chrome/browser/content/browser/aboutlogins/components/fxaccounts-button.css",
+ "chrome/browser/content/browser/aboutlogins/components/fxaccounts-button.mjs",
+ "chrome/browser/content/browser/aboutlogins/components/generic-dialog.css",
+ "chrome/browser/content/browser/aboutlogins/components/generic-dialog.mjs",
+ "chrome/browser/content/browser/aboutlogins/components/import-details-row.mjs",
+ "chrome/browser/content/browser/aboutlogins/components/import-error-dialog.css",
+ "chrome/browser/content/browser/aboutlogins/components/import-error-dialog.mjs",
+ "chrome/browser/content/browser/aboutlogins/components/import-summary-dialog.css",
+ "chrome/browser/content/browser/aboutlogins/components/import-summary-dialog.mjs",
+ "chrome/browser/content/browser/aboutlogins/components/input-field/input-field.css",
+ "chrome/browser/content/browser/aboutlogins/components/input-field/input-field.mjs",
+ "chrome/browser/content/browser/aboutlogins/components/input-field/login-origin-field.mjs",
+ "chrome/browser/content/browser/aboutlogins/components/input-field/login-password-field.mjs",
+ "chrome/browser/content/browser/aboutlogins/components/input-field/login-username-field.mjs",
+ "chrome/browser/content/browser/aboutlogins/components/login-alert.css",
+ "chrome/browser/content/browser/aboutlogins/components/login-alert.mjs",
+ "chrome/browser/content/browser/aboutlogins/components/login-command-button.css",
+ "chrome/browser/content/browser/aboutlogins/components/login-command-button.mjs",
+ "chrome/browser/content/browser/aboutlogins/components/login-filter.css",
+ "chrome/browser/content/browser/aboutlogins/components/login-filter.mjs",
+ "chrome/browser/content/browser/aboutlogins/components/login-intro.css",
+ "chrome/browser/content/browser/aboutlogins/components/login-intro.mjs",
+ "chrome/browser/content/browser/aboutlogins/components/login-item.css",
+ "chrome/browser/content/browser/aboutlogins/components/login-item.mjs",
+ "chrome/browser/content/browser/aboutlogins/components/login-list-item.mjs",
+ "chrome/browser/content/browser/aboutlogins/components/login-list-lit-item.css",
+ "chrome/browser/content/browser/aboutlogins/components/login-list-lit-item.mjs",
+ "chrome/browser/content/browser/aboutlogins/components/login-list-section.mjs",
+ "chrome/browser/content/browser/aboutlogins/components/login-list.css",
+ "chrome/browser/content/browser/aboutlogins/components/login-list.mjs",
+ "chrome/browser/content/browser/aboutlogins/components/login-message-popup.css",
+ "chrome/browser/content/browser/aboutlogins/components/login-message-popup.mjs",
+ "chrome/browser/content/browser/aboutlogins/components/login-timeline.css",
+ "chrome/browser/content/browser/aboutlogins/components/login-timeline.mjs",
+ "chrome/browser/content/browser/aboutlogins/components/menu-button.css",
+ "chrome/browser/content/browser/aboutlogins/components/menu-button.mjs",
+ "chrome/browser/content/browser/aboutlogins/components/remove-logins-dialog.css",
+ "chrome/browser/content/browser/aboutlogins/components/remove-logins-dialog.mjs",
+ "chrome/browser/content/browser/aboutlogins/icons/breached-website.svg",
+ "chrome/browser/content/browser/aboutlogins/icons/intro-illustration.svg",
+ "chrome/browser/content/browser/aboutlogins/icons/vulnerable-password.svg",
+ "chrome/browser/content/browser/aboutwelcome/aboutwelcome.bundle.js",
+ "chrome/browser/content/browser/aboutwelcome/aboutwelcome.css",
+ "chrome/browser/content/browser/aboutwelcome/aboutwelcome.html",
+ "chrome/browser/content/browser/aiwindow/ai-window-content.css",
+ "chrome/browser/content/browser/aiwindow/ai-window-overrides.css",
+ "chrome/browser/content/browser/aiwindow/ai-window-shared.css",
+ "chrome/browser/content/browser/aiwindow/aiChatContent.html",
+ "chrome/browser/content/browser/aiwindow/aiWindow.html",
+ "chrome/browser/content/browser/aiwindow/assets/ai-chat-grid-loading.svg",
+ "chrome/browser/content/browser/aiwindow/assets/ask-icon.svg",
+ "chrome/browser/content/browser/aiwindow/assets/icon-grid-view.svg",
+ "chrome/browser/content/browser/aiwindow/assets/icon-list-view.svg",
+ "chrome/browser/content/browser/aiwindow/assets/loader.svg",
+ "chrome/browser/content/browser/aiwindow/assets/memories-off.svg",
+ "chrome/browser/content/browser/aiwindow/assets/memories-on.svg",
+ "chrome/browser/content/browser/aiwindow/assets/model-choice-1.svg",
+ "chrome/browser/content/browser/aiwindow/assets/model-choice-2.svg",
+ "chrome/browser/content/browser/aiwindow/assets/model-choice-3.svg",
+ "chrome/browser/content/browser/aiwindow/assets/new-chat.svg",
+ "chrome/browser/content/browser/aiwindow/assets/set-default-onboarding.svg",
+ "chrome/browser/content/browser/aiwindow/assets/smart-window-promo-default.svg",
+ "chrome/browser/content/browser/aiwindow/assets/stop-generation.svg",
+ "chrome/browser/content/browser/aiwindow/components/ai-action-result.css",
+ "chrome/browser/content/browser/aiwindow/components/ai-action-result.mjs",
+ "chrome/browser/content/browser/aiwindow/components/ai-chat-card.css",
+ "chrome/browser/content/browser/aiwindow/components/ai-chat-card.mjs",
+ "chrome/browser/content/browser/aiwindow/components/ai-chat-content.css",
+ "chrome/browser/content/browser/aiwindow/components/ai-chat-content.mjs",
+ "chrome/browser/content/browser/aiwindow/components/ai-chat-grid.css",
+ "chrome/browser/content/browser/aiwindow/components/ai-chat-grid.mjs",
+ "chrome/browser/content/browser/aiwindow/components/ai-chat-message.css",
+ "chrome/browser/content/browser/aiwindow/components/ai-chat-message.mjs",
+ "chrome/browser/content/browser/aiwindow/components/ai-chat-table.css",
+ "chrome/browser/content/browser/aiwindow/components/ai-chat-table.mjs",
+ "chrome/browser/content/browser/aiwindow/components/ai-website-chip.css",
+ "chrome/browser/content/browser/aiwindow/components/ai-website-chip.mjs",
+ "chrome/browser/content/browser/aiwindow/components/ai-website-confirmation.css",
+ "chrome/browser/content/browser/aiwindow/components/ai-website-confirmation.mjs",
+ "chrome/browser/content/browser/aiwindow/components/ai-website-select.css",
+ "chrome/browser/content/browser/aiwindow/components/ai-website-select.mjs",
+ "chrome/browser/content/browser/aiwindow/components/ai-window.css",
+ "chrome/browser/content/browser/aiwindow/components/ai-window.mjs",
+ "chrome/browser/content/browser/aiwindow/components/applied-memories-button.css",
+ "chrome/browser/content/browser/aiwindow/components/applied-memories-button.mjs",
+ "chrome/browser/content/browser/aiwindow/components/assistant-message-footer.css",
+ "chrome/browser/content/browser/aiwindow/components/assistant-message-footer.mjs",
+ "chrome/browser/content/browser/aiwindow/components/chat-assistant-error.css",
+ "chrome/browser/content/browser/aiwindow/components/chat-assistant-error.mjs",
+ "chrome/browser/content/browser/aiwindow/components/chat-assistant-loader.css",
+ "chrome/browser/content/browser/aiwindow/components/chat-assistant-loader.mjs",
+ "chrome/browser/content/browser/aiwindow/components/context-icon-button.css",
+ "chrome/browser/content/browser/aiwindow/components/context-icon-button.mjs",
+ "chrome/browser/content/browser/aiwindow/components/input-cta.css",
+ "chrome/browser/content/browser/aiwindow/components/input-cta.mjs",
+ "chrome/browser/content/browser/aiwindow/components/memories-icon-button.css",
+ "chrome/browser/content/browser/aiwindow/components/memories-icon-button.mjs",
+ "chrome/browser/content/browser/aiwindow/components/smartwindow-footer.css",
+ "chrome/browser/content/browser/aiwindow/components/smartwindow-footer.mjs",
+ "chrome/browser/content/browser/aiwindow/components/smartwindow-heading.css",
+ "chrome/browser/content/browser/aiwindow/components/smartwindow-heading.mjs",
+ "chrome/browser/content/browser/aiwindow/components/smartwindow-panel-list.css",
+ "chrome/browser/content/browser/aiwindow/components/smartwindow-panel-list.mjs",
+ "chrome/browser/content/browser/aiwindow/components/smartwindow-promo.css",
+ "chrome/browser/content/browser/aiwindow/components/smartwindow-promo.mjs",
+ "chrome/browser/content/browser/aiwindow/components/smartwindow-prompts.css",
+ "chrome/browser/content/browser/aiwindow/components/smartwindow-prompts.mjs",
+ "chrome/browser/content/browser/aiwindow/components/website-chip-container.css",
+ "chrome/browser/content/browser/aiwindow/components/website-chip-container.mjs",
+ "chrome/browser/content/browser/aiwindow/firstrun.css",
+ "chrome/browser/content/browser/aiwindow/firstrun.html",
+ "chrome/browser/content/browser/aiwindow/firstrun.js",
+ "chrome/browser/content/browser/aiwindow/modules/ChatMarkdownParser.mjs",
+ "chrome/browser/content/browser/aiwindow/modules/TokenStreamParser.mjs",
+ "chrome/browser/content/browser/aiwindow/smartwindow-init.mjs",
+ "chrome/browser/content/browser/asrouter/asrouter-admin.bundle.js",
+ "chrome/browser/content/browser/asrouter/asrouter-admin.html",
+ "chrome/browser/content/browser/asrouter/assets/checkmark-16.svg",
+ "chrome/browser/content/browser/asrouter/assets/close-16.svg",
+ "chrome/browser/content/browser/asrouter/assets/desktop-to-mobile-banner.svg",
+ "chrome/browser/content/browser/asrouter/assets/desktop-to-mobile-eu-QR.svg",
+ "chrome/browser/content/browser/asrouter/assets/desktop-to-mobile-non-eu-QR.svg",
+ "chrome/browser/content/browser/asrouter/assets/fox-with-box-on-cloud.svg",
+ "chrome/browser/content/browser/asrouter/assets/fox-with-checkmark.svg",
+ "chrome/browser/content/browser/asrouter/assets/fox-with-devices.svg",
+ "chrome/browser/content/browser/asrouter/assets/fox-with-locked-box.svg",
+ "chrome/browser/content/browser/asrouter/assets/fox-with-mobile.svg",
+ "chrome/browser/content/browser/asrouter/assets/fox-with-profiles.svg",
+ "chrome/browser/content/browser/asrouter/assets/glyph-cfr-feature-16.svg",
+ "chrome/browser/content/browser/asrouter/assets/glyph-mail-mask-16.svg",
+ "chrome/browser/content/browser/asrouter/assets/hero-relay-email-masks.svg",
+ "chrome/browser/content/browser/asrouter/assets/shield-checkmark-16.svg",
+ "chrome/browser/content/browser/asrouter/assets/smiling-fox-icon.svg",
+ "chrome/browser/content/browser/asrouter/assets/subtract-16.svg",
+ "chrome/browser/content/browser/asrouter/assets/tabgroups/hort-animated-dark.svg",
+ "chrome/browser/content/browser/asrouter/assets/tabgroups/hort-animated-light.svg",
+ "chrome/browser/content/browser/asrouter/assets/tabgroups/hort-static-dark.svg",
+ "chrome/browser/content/browser/asrouter/assets/tabgroups/hort-static-light.svg",
+ "chrome/browser/content/browser/asrouter/assets/tabgroups/vert-animated-dark.svg",
+ "chrome/browser/content/browser/asrouter/assets/tabgroups/vert-animated-light.svg",
+ "chrome/browser/content/browser/asrouter/assets/tabgroups/vert-static-dark.svg",
+ "chrome/browser/content/browser/asrouter/assets/tabgroups/vert-static-light.svg",
+ "chrome/browser/content/browser/asrouter/components/ASRouterAdmin/ASRouterAdmin.css",
+ "chrome/browser/content/browser/asrouter/components/menu-message.css",
+ "chrome/browser/content/browser/asrouter/components/menu-message.mjs",
+ "chrome/browser/content/browser/asrouter/components/remote-text.js",
+ "chrome/browser/content/browser/asrouter/render.js",
+ "chrome/browser/content/browser/asrouter/schemas/BackgroundTaskMessagingExperiment.schema.json",
+ "chrome/browser/content/browser/asrouter/schemas/MessagingExperiment.schema.json",
+ "chrome/browser/content/browser/assets/cookie-banners-begone.svg",
+ "chrome/browser/content/browser/assets/focus-logo.svg",
+ "chrome/browser/content/browser/assets/focus-promo.png",
+ "chrome/browser/content/browser/assets/focus-qr-code.svg",
+ "chrome/browser/content/browser/assets/klar-qr-code.svg",
+ "chrome/browser/content/browser/assets/moz-vpn.svg",
+ "chrome/browser/content/browser/assets/private-promo-asset.svg",
+ "chrome/browser/content/browser/assets/vpn-logo.svg",
+ "chrome/browser/content/browser/backup/ArchiveJSONBlock.1.schema.json",
+ "chrome/browser/content/browser/backup/ArchiveJSONBlock.2.schema.json",
+ "chrome/browser/content/browser/backup/BackupManifest.1.schema.json",
+ "chrome/browser/content/browser/backup/BackupManifest.2.schema.json",
+ "chrome/browser/content/browser/backup/archive.css",
+ "chrome/browser/content/browser/backup/archive.js",
+ "chrome/browser/content/browser/backup/archive.template.html",
+ "chrome/browser/content/browser/backup/backup-common.css",
+ "chrome/browser/content/browser/backup/backup-constants.mjs",
+ "chrome/browser/content/browser/backup/backup-errors.mjs",
+ "chrome/browser/content/browser/backup/backup-settings.css",
+ "chrome/browser/content/browser/backup/backup-settings.mjs",
+ "chrome/browser/content/browser/backup/disable-backup-encryption.css",
+ "chrome/browser/content/browser/backup/disable-backup-encryption.mjs",
+ "chrome/browser/content/browser/backup/enable-backup-encryption.css",
+ "chrome/browser/content/browser/backup/enable-backup-encryption.mjs",
+ "chrome/browser/content/browser/backup/password-rules-tooltip.css",
+ "chrome/browser/content/browser/backup/password-rules-tooltip.mjs",
+ "chrome/browser/content/browser/backup/password-validation-inputs.css",
+ "chrome/browser/content/browser/backup/password-validation-inputs.mjs",
+ "chrome/browser/content/browser/backup/restore-from-backup.css",
+ "chrome/browser/content/browser/backup/restore-from-backup.mjs",
+ "chrome/browser/content/browser/backup/turn-off-scheduled-backups.css",
+ "chrome/browser/content/browser/backup/turn-off-scheduled-backups.mjs",
+ "chrome/browser/content/browser/backup/turn-on-scheduled-backups.css",
+ "chrome/browser/content/browser/backup/turn-on-scheduled-backups.mjs",
+ "chrome/browser/content/browser/blanktab.html",
+ "chrome/browser/content/browser/blockedSite.js",
+ "chrome/browser/content/browser/blockedSite.xhtml",
+ "chrome/browser/content/browser/browser-a11yUtils.js",
+ "chrome/browser/content/browser/browser-addons.js",
+ "chrome/browser/content/browser/browser-captivePortal.js",
+ "chrome/browser/content/browser/browser-commands.js",
+ "chrome/browser/content/browser/browser-context.js",
+ "chrome/browser/content/browser/browser-customization.js",
+ "chrome/browser/content/browser/browser-customtitlebar.js",
+ "chrome/browser/content/browser/browser-data-submission-info-bar.js",
+ "chrome/browser/content/browser/browser-fullScreenAndPointerLock.js",
+ "chrome/browser/content/browser/browser-gestureSupport.js",
+ "chrome/browser/content/browser/browser-graphics-utils.js",
+ "chrome/browser/content/browser/browser-init.js",
+ "chrome/browser/content/browser/browser-main.js",
+ "chrome/browser/content/browser/browser-menubar.js",
+ "chrome/browser/content/browser/browser-pageActions.js",
+ "chrome/browser/content/browser/browser-pagestyle.js",
+ "chrome/browser/content/browser/browser-places.js",
+ "chrome/browser/content/browser/browser-profiles.js",
+ "chrome/browser/content/browser/browser-safebrowsing.js",
+ "chrome/browser/content/browser/browser-sets.js",
+ "chrome/browser/content/browser/browser-siteIdentity.js",
+ "chrome/browser/content/browser/browser-sitePermissionPanel.js",
+ "chrome/browser/content/browser/browser-siteProtections.js",
+ "chrome/browser/content/browser/browser-sync.js",
+ "chrome/browser/content/browser/browser-thumbnails.js",
+ "chrome/browser/content/browser/browser-toolbarKeyNav.js",
+ "chrome/browser/content/browser/browser-trustPanel.js",
+ "chrome/browser/content/browser/browser-unified-extensions.js",
+ "chrome/browser/content/browser/browser-webrtc.js",
+ "chrome/browser/content/browser/browser.js",
+ "chrome/browser/content/browser/browser.xhtml",
+ "chrome/browser/content/browser/built_in_addons.json",
+ "chrome/browser/content/browser/callout-tab-pickup-dark.svg",
+ "chrome/browser/content/browser/callout-tab-pickup.svg",
+ "chrome/browser/content/browser/child/ext-browser-content-only.js",
+ "chrome/browser/content/browser/child/ext-browser.js",
+ "chrome/browser/content/browser/child/ext-devtools-inspectedWindow.js",
+ "chrome/browser/content/browser/child/ext-devtools-network.js",
+ "chrome/browser/content/browser/child/ext-devtools-panels.js",
+ "chrome/browser/content/browser/child/ext-devtools.js",
+ "chrome/browser/content/browser/child/ext-menus-child.js",
+ "chrome/browser/content/browser/child/ext-menus.js",
+ "chrome/browser/content/browser/child/ext-omnibox.js",
+ "chrome/browser/content/browser/child/ext-tabs.js",
+ "chrome/browser/content/browser/contentSearchHandoffUI.css",
+ "chrome/browser/content/browser/contentSearchHandoffUI.mjs",
+ "chrome/browser/content/browser/contentTheme.js",
+ "chrome/browser/content/browser/contentsharing/background-dark.svg",
+ "chrome/browser/content/browser/contentsharing/background-light.svg",
+ "chrome/browser/content/browser/contentsharing/content-sharing-icon.svg",
+ "chrome/browser/content/browser/contentsharing/content-sharing-modal.css",
+ "chrome/browser/content/browser/contentsharing/content-sharing-modal.mjs",
+ "chrome/browser/content/browser/contentsharing/contentSharingModal.xhtml",
+ "chrome/browser/content/browser/contentsharing/contentsharing.schema.json",
+ "chrome/browser/content/browser/controlcenter/assets/fox-concern.svg",
+ "chrome/browser/content/browser/controlcenter/components/breach-alert-panel.css",
+ "chrome/browser/content/browser/controlcenter/components/breach-alert-panel.mjs",
+ "chrome/browser/content/browser/customizableui/panelUI.js",
+ "chrome/browser/content/browser/customkeys/customkeys.css",
+ "chrome/browser/content/browser/customkeys/customkeys.html",
+ "chrome/browser/content/browser/customkeys/customkeys.js",
+ "chrome/browser/content/browser/default-bookmarks.html",
+ "chrome/browser/content/browser/downloads/allDownloadsView.js",
+ "chrome/browser/content/browser/downloads/contentAreaDownloadsView.css",
+ "chrome/browser/content/browser/downloads/contentAreaDownloadsView.js",
+ "chrome/browser/content/browser/downloads/contentAreaDownloadsView.xhtml",
+ "chrome/browser/content/browser/downloads/downloads.css",
+ "chrome/browser/content/browser/downloads/downloads.js",
+ "chrome/browser/content/browser/downloads/downloadsCommands.js",
+ "chrome/browser/content/browser/downloads/indicator.js",
+ "chrome/browser/content/browser/ext-browser.json",
+ "chrome/browser/content/browser/extension-popup-panel.css",
+ "chrome/browser/content/browser/extension.css",
+ "chrome/browser/content/browser/firefoxview/card-container.css",
+ "chrome/browser/content/browser/firefoxview/card-container.mjs",
+ "chrome/browser/content/browser/firefoxview/chats-tab-list.css",
+ "chrome/browser/content/browser/firefoxview/chats-tab-list.mjs",
+ "chrome/browser/content/browser/firefoxview/chats.mjs",
+ "chrome/browser/content/browser/firefoxview/empty-chat.svg",
+ "chrome/browser/content/browser/firefoxview/firefoxview.css",
+ "chrome/browser/content/browser/firefoxview/firefoxview.html",
+ "chrome/browser/content/browser/firefoxview/firefoxview.mjs",
+ "chrome/browser/content/browser/firefoxview/fxview-empty-state.css",
+ "chrome/browser/content/browser/firefoxview/fxview-empty-state.mjs",
+ "chrome/browser/content/browser/firefoxview/fxview-tab-list.css",
+ "chrome/browser/content/browser/firefoxview/fxview-tab-list.mjs",
+ "chrome/browser/content/browser/firefoxview/fxview-tab-row.css",
+ "chrome/browser/content/browser/firefoxview/helpers.mjs",
+ "chrome/browser/content/browser/firefoxview/history-empty.svg",
+ "chrome/browser/content/browser/firefoxview/history.css",
+ "chrome/browser/content/browser/firefoxview/history.mjs",
+ "chrome/browser/content/browser/firefoxview/opentabs-tab-list.css",
+ "chrome/browser/content/browser/firefoxview/opentabs-tab-list.mjs",
+ "chrome/browser/content/browser/firefoxview/opentabs-tab-row.css",
+ "chrome/browser/content/browser/firefoxview/opentabs.mjs",
+ "chrome/browser/content/browser/firefoxview/recentbrowsing.mjs",
+ "chrome/browser/content/browser/firefoxview/recentlyclosed.mjs",
+ "chrome/browser/content/browser/firefoxview/search-helpers.mjs",
+ "chrome/browser/content/browser/firefoxview/synced-tabs-empty.svg",
+ "chrome/browser/content/browser/firefoxview/synced-tabs-error.svg",
+ "chrome/browser/content/browser/firefoxview/syncedtabs-tab-list.css",
+ "chrome/browser/content/browser/firefoxview/syncedtabs-tab-list.mjs",
+ "chrome/browser/content/browser/firefoxview/syncedtabs.mjs",
+ "chrome/browser/content/browser/firefoxview/view-chats.svg",
+ "chrome/browser/content/browser/firefoxview/view-history.svg",
+ "chrome/browser/content/browser/firefoxview/view-opentabs.css",
+ "chrome/browser/content/browser/firefoxview/view-opentabs.svg",
+ "chrome/browser/content/browser/firefoxview/view-recentbrowsing.svg",
+ "chrome/browser/content/browser/firefoxview/view-recentlyclosed.svg",
+ "chrome/browser/content/browser/firefoxview/view-syncedtabs.css",
+ "chrome/browser/content/browser/firefoxview/view-syncedtabs.svg",
+ "chrome/browser/content/browser/firefoxview/viewpage.mjs",
+ "chrome/browser/content/browser/genai/assets/brands/chatgpt.svg",
+ "chrome/browser/content/browser/genai/assets/brands/claude.svg",
+ "chrome/browser/content/browser/genai/assets/brands/copilot.svg",
+ "chrome/browser/content/browser/genai/assets/brands/gemini.svg",
+ "chrome/browser/content/browser/genai/assets/brands/huggingchat.svg",
+ "chrome/browser/content/browser/genai/assets/brands/lechat.svg",
+ "chrome/browser/content/browser/genai/assets/onboarding-link-preview-image-longpress.svg",
+ "chrome/browser/content/browser/genai/chat.css",
+ "chrome/browser/content/browser/genai/chat.html",
+ "chrome/browser/content/browser/genai/chat.js",
+ "chrome/browser/content/browser/genai/content/link-preview-card-onboarding.css",
+ "chrome/browser/content/browser/genai/content/link-preview-card-onboarding.mjs",
+ "chrome/browser/content/browser/genai/content/link-preview-card.css",
+ "chrome/browser/content/browser/genai/content/link-preview-card.mjs",
+ "chrome/browser/content/browser/genai/content/model-optin.css",
+ "chrome/browser/content/browser/genai/content/model-optin.mjs",
+ "chrome/browser/content/browser/genai/content/page-assist.css",
+ "chrome/browser/content/browser/genai/content/page-assist.mjs",
+ "chrome/browser/content/browser/genai/pageAssist.html",
+ "chrome/browser/content/browser/global-scripts.js",
+ "chrome/browser/content/browser/ipprotection/assets/cfr-mozilla-vpn-dark.svg",
+ "chrome/browser/content/browser/ipprotection/assets/cfr-mozilla-vpn-light.svg",
+ "chrome/browser/content/browser/ipprotection/assets/cfr-vpn-bandwith-reset-dark.svg",
+ "chrome/browser/content/browser/ipprotection/assets/cfr-vpn-bandwith-reset-light.svg",
+ "chrome/browser/content/browser/ipprotection/assets/ipprotection-unauthenticated.svg",
+ "chrome/browser/content/browser/ipprotection/assets/mozilla-vpn-promo.svg",
+ "chrome/browser/content/browser/ipprotection/assets/shield-vpn-exceptions.svg",
+ "chrome/browser/content/browser/ipprotection/assets/states/ipprotection-error.svg",
+ "chrome/browser/content/browser/ipprotection/assets/states/ipprotection-excluded.svg",
+ "chrome/browser/content/browser/ipprotection/assets/states/ipprotection-info.svg",
+ "chrome/browser/content/browser/ipprotection/assets/states/ipprotection-loading.svg",
+ "chrome/browser/content/browser/ipprotection/assets/states/ipprotection-off.svg",
+ "chrome/browser/content/browser/ipprotection/assets/states/ipprotection-on.svg",
+ "chrome/browser/content/browser/ipprotection/assets/states/ipprotection-paused.svg",
+ "chrome/browser/content/browser/ipprotection/assets/vpn-settings-get-started.svg",
+ "chrome/browser/content/browser/ipprotection/bandwidth-usage.css",
+ "chrome/browser/content/browser/ipprotection/bandwidth-usage.mjs",
+ "chrome/browser/content/browser/ipprotection/ipprotection-constants.mjs",
+ "chrome/browser/content/browser/ipprotection/ipprotection-content.css",
+ "chrome/browser/content/browser/ipprotection/ipprotection-content.mjs",
+ "chrome/browser/content/browser/ipprotection/ipprotection-customelements.js",
+ "chrome/browser/content/browser/ipprotection/ipprotection-locations.mjs",
+ "chrome/browser/content/browser/ipprotection/ipprotection-message-bar.mjs",
+ "chrome/browser/content/browser/ipprotection/ipprotection-status-box.css",
+ "chrome/browser/content/browser/ipprotection/ipprotection-status-box.mjs",
+ "chrome/browser/content/browser/ipprotection/ipprotection-status-card.css",
+ "chrome/browser/content/browser/ipprotection/ipprotection-status-card.mjs",
+ "chrome/browser/content/browser/ipprotection/ipprotection-unauthenticated.mjs",
+ "chrome/browser/content/browser/ipprotection/ipprotection-utils.mjs",
+ "chrome/browser/content/browser/ipprotection/locations-list.mjs",
+ "chrome/browser/content/browser/ipprotection/locations-subview.css",
+ "chrome/browser/content/browser/license.html",
+ "chrome/browser/content/browser/lockwise-card.mjs",
+ "chrome/browser/content/browser/logos/etp-mobile.svg",
+ "chrome/browser/content/browser/logos/fxa-logo.svg",
+ "chrome/browser/content/browser/logos/ipprotection-error.svg",
+ "chrome/browser/content/browser/logos/ipprotection-excluded.svg",
+ "chrome/browser/content/browser/logos/ipprotection-info.svg",
+ "chrome/browser/content/browser/logos/ipprotection-off.svg",
+ "chrome/browser/content/browser/logos/ipprotection-on.svg",
+ "chrome/browser/content/browser/logos/ipprotection-paused.svg",
+ "chrome/browser/content/browser/logos/lockwise.svg",
+ "chrome/browser/content/browser/logos/monitor.svg",
+ "chrome/browser/content/browser/logos/passkey.svg",
+ "chrome/browser/content/browser/logos/relay.svg",
+ "chrome/browser/content/browser/logos/send.svg",
+ "chrome/browser/content/browser/logos/tracking-protection-dark-theme.svg",
+ "chrome/browser/content/browser/logos/tracking-protection.svg",
+ "chrome/browser/content/browser/logos/vpn-promo-logo.svg",
+ "chrome/browser/content/browser/logos/vpn.svg",
+ "chrome/browser/content/browser/main-popupset.js",
+ "chrome/browser/content/browser/messagepreview/limelight.svg",
+ "chrome/browser/content/browser/messagepreview/messagepreview.css",
+ "chrome/browser/content/browser/messagepreview/messagepreview.html",
+ "chrome/browser/content/browser/messagepreview/messagepreview.js",
+ "chrome/browser/content/browser/messagepreview/switch.svg",
+ "chrome/browser/content/browser/migration/brands/brave.png",
+ "chrome/browser/content/browser/migration/brands/chrome.png",
+ "chrome/browser/content/browser/migration/brands/chromium.png",
+ "chrome/browser/content/browser/migration/brands/opera.png",
+ "chrome/browser/content/browser/migration/brands/operagx.png",
+ "chrome/browser/content/browser/migration/brands/vivaldi.png",
+ "chrome/browser/content/browser/migration/migration-dialog-window.html",
+ "chrome/browser/content/browser/migration/migration-dialog-window.js",
+ "chrome/browser/content/browser/migration/migration-wizard-constants.mjs",
+ "chrome/browser/content/browser/migration/migration-wizard.mjs",
+ "chrome/browser/content/browser/monitor-card.mjs",
+ "chrome/browser/content/browser/multilineeditor/multiline-editor.css",
+ "chrome/browser/content/browser/multilineeditor/multiline-editor.mjs",
+ "chrome/browser/content/browser/multilineeditor/plugins/MentionsPlugin.mjs",
+ "chrome/browser/content/browser/multilineeditor/prosemirror.bundle.mjs",
+ "chrome/browser/content/browser/multilineeditor/prosemirror.css",
+ "chrome/browser/content/browser/navigator-toolbox.js",
+ "chrome/browser/content/browser/nsContextMenu.sys.mjs",
+ "chrome/browser/content/browser/pagedata/schemas/article.schema.json",
+ "chrome/browser/content/browser/pagedata/schemas/audio.schema.json",
+ "chrome/browser/content/browser/pagedata/schemas/document.schema.json",
+ "chrome/browser/content/browser/pagedata/schemas/general.schema.json",
+ "chrome/browser/content/browser/pagedata/schemas/product.schema.json",
+ "chrome/browser/content/browser/pagedata/schemas/video.schema.json",
+ "chrome/browser/content/browser/pageinfo/pageInfo.css",
+ "chrome/browser/content/browser/pageinfo/pageInfo.js",
+ "chrome/browser/content/browser/pageinfo/pageInfo.xhtml",
+ "chrome/browser/content/browser/pageinfo/permissions.js",
+ "chrome/browser/content/browser/pageinfo/security.js",
+ "chrome/browser/content/browser/parent/ext-bookmarks.js",
+ "chrome/browser/content/browser/parent/ext-browser.js",
+ "chrome/browser/content/browser/parent/ext-browserAction.js",
+ "chrome/browser/content/browser/parent/ext-chrome-settings-overrides.js",
+ "chrome/browser/content/browser/parent/ext-commands.js",
+ "chrome/browser/content/browser/parent/ext-devtools-inspectedWindow.js",
+ "chrome/browser/content/browser/parent/ext-devtools-network.js",
+ "chrome/browser/content/browser/parent/ext-devtools-panels.js",
+ "chrome/browser/content/browser/parent/ext-devtools.js",
+ "chrome/browser/content/browser/parent/ext-find.js",
+ "chrome/browser/content/browser/parent/ext-history.js",
+ "chrome/browser/content/browser/parent/ext-menus.js",
+ "chrome/browser/content/browser/parent/ext-normandyAddonStudy.js",
+ "chrome/browser/content/browser/parent/ext-omnibox.js",
+ "chrome/browser/content/browser/parent/ext-pageAction.js",
+ "chrome/browser/content/browser/parent/ext-pkcs11.js",
+ "chrome/browser/content/browser/parent/ext-search.js",
+ "chrome/browser/content/browser/parent/ext-sessions.js",
+ "chrome/browser/content/browser/parent/ext-sidebarAction.js",
+ "chrome/browser/content/browser/parent/ext-tabGroups.js",
+ "chrome/browser/content/browser/parent/ext-tabs.js",
+ "chrome/browser/content/browser/parent/ext-topSites.js",
+ "chrome/browser/content/browser/parent/ext-url-overrides.js",
+ "chrome/browser/content/browser/parent/ext-windows.js",
+ "chrome/browser/content/browser/places/bookmarkProperties.js",
+ "chrome/browser/content/browser/places/bookmarkProperties.xhtml",
+ "chrome/browser/content/browser/places/bookmarksSidebar.js",
+ "chrome/browser/content/browser/places/bookmarksSidebar.xhtml",
+ "chrome/browser/content/browser/places/browserPlacesViews.js",
+ "chrome/browser/content/browser/places/clearDataForSite.css",
+ "chrome/browser/content/browser/places/clearDataForSite.js",
+ "chrome/browser/content/browser/places/clearDataForSite.xhtml",
+ "chrome/browser/content/browser/places/controller.js",
+ "chrome/browser/content/browser/places/editBookmark.js",
+ "chrome/browser/content/browser/places/historySidebar.js",
+ "chrome/browser/content/browser/places/historySidebar.xhtml",
+ "chrome/browser/content/browser/places/interactionsViewer.css",
+ "chrome/browser/content/browser/places/interactionsViewer.html",
+ "chrome/browser/content/browser/places/interactionsViewer.js",
+ "chrome/browser/content/browser/places/places-commands.js",
+ "chrome/browser/content/browser/places/places-menupopup.js",
+ "chrome/browser/content/browser/places/places-tree.js",
+ "chrome/browser/content/browser/places/places.css",
+ "chrome/browser/content/browser/places/places.js",
+ "chrome/browser/content/browser/places/places.xhtml",
+ "chrome/browser/content/browser/places/placesContextMenu.js",
+ "chrome/browser/content/browser/places/treeView.js",
+ "chrome/browser/content/browser/policies/aboutPolicies.css",
+ "chrome/browser/content/browser/policies/aboutPolicies.html",
+ "chrome/browser/content/browser/policies/aboutPolicies.js",
+ "chrome/browser/content/browser/policies/policies-active.svg",
+ "chrome/browser/content/browser/policies/policies-documentation.svg",
+ "chrome/browser/content/browser/policies/policies-error.svg",
+ "chrome/browser/content/browser/preferences/OnDeviceModelManager.mjs",
+ "chrome/browser/content/browser/preferences/browser-layout-horizontal.svg",
+ "chrome/browser/content/browser/preferences/browser-layout-vertical.svg",
+ "chrome/browser/content/browser/preferences/config/LegacyPaneMappings.mjs",
+ "chrome/browser/content/browser/preferences/config/SettingGroupManager.mjs",
+ "chrome/browser/content/browser/preferences/config/SettingPaneManager.mjs",
+ "chrome/browser/content/browser/preferences/config/about-firefox.mjs",
+ "chrome/browser/content/browser/preferences/config/accessibility.mjs",
+ "chrome/browser/content/browser/preferences/config/account-sync.mjs",
+ "chrome/browser/content/browser/preferences/config/aiFeatures.mjs",
+ "chrome/browser/content/browser/preferences/config/appearance.mjs",
+ "chrome/browser/content/browser/preferences/config/block-ai-confirmation-dialog.css",
+ "chrome/browser/content/browser/preferences/config/downloads.mjs",
+ "chrome/browser/content/browser/preferences/config/firefoxLabs.mjs",
+ "chrome/browser/content/browser/preferences/config/home-startup.mjs",
+ "chrome/browser/content/browser/preferences/config/languages.mjs",
+ "chrome/browser/content/browser/preferences/config/moreFromMozilla.mjs",
+ "chrome/browser/content/browser/preferences/config/passwords-autofill.mjs",
+ "chrome/browser/content/browser/preferences/config/permissions-data.mjs",
+ "chrome/browser/content/browser/preferences/config/privacy.mjs",
+ "chrome/browser/content/browser/preferences/config/search.mjs",
+ "chrome/browser/content/browser/preferences/config/tabs-browsing.mjs",
+ "chrome/browser/content/browser/preferences/config/translations.mjs",
+ "chrome/browser/content/browser/preferences/containers.js",
+ "chrome/browser/content/browser/preferences/dialogs/applicationManager.js",
+ "chrome/browser/content/browser/preferences/dialogs/applicationManager.xhtml",
+ "chrome/browser/content/browser/preferences/dialogs/browserLanguages.js",
+ "chrome/browser/content/browser/preferences/dialogs/browserLanguages.xhtml",
+ "chrome/browser/content/browser/preferences/dialogs/colors.css",
+ "chrome/browser/content/browser/preferences/dialogs/colors.js",
+ "chrome/browser/content/browser/preferences/dialogs/colors.xhtml",
+ "chrome/browser/content/browser/preferences/dialogs/connection.js",
+ "chrome/browser/content/browser/preferences/dialogs/connection.xhtml",
+ "chrome/browser/content/browser/preferences/dialogs/containers.js",
+ "chrome/browser/content/browser/preferences/dialogs/containers.xhtml",
+ "chrome/browser/content/browser/preferences/dialogs/dohExceptions.js",
+ "chrome/browser/content/browser/preferences/dialogs/dohExceptions.xhtml",
+ "chrome/browser/content/browser/preferences/dialogs/fonts.js",
+ "chrome/browser/content/browser/preferences/dialogs/fonts.xhtml",
+ "chrome/browser/content/browser/preferences/dialogs/handlers.css",
+ "chrome/browser/content/browser/preferences/dialogs/languages.js",
+ "chrome/browser/content/browser/preferences/dialogs/languages.xhtml",
+ "chrome/browser/content/browser/preferences/dialogs/permissions.js",
+ "chrome/browser/content/browser/preferences/dialogs/permissions.xhtml",
+ "chrome/browser/content/browser/preferences/dialogs/selectBookmark.js",
+ "chrome/browser/content/browser/preferences/dialogs/selectBookmark.xhtml",
+ "chrome/browser/content/browser/preferences/dialogs/siteDataRemoveSelected.js",
+ "chrome/browser/content/browser/preferences/dialogs/siteDataRemoveSelected.xhtml",
+ "chrome/browser/content/browser/preferences/dialogs/siteDataSettings.js",
+ "chrome/browser/content/browser/preferences/dialogs/siteDataSettings.xhtml",
+ "chrome/browser/content/browser/preferences/dialogs/sitePermissions.css",
+ "chrome/browser/content/browser/preferences/dialogs/sitePermissions.js",
+ "chrome/browser/content/browser/preferences/dialogs/sitePermissions.xhtml",
+ "chrome/browser/content/browser/preferences/dialogs/syncChooseWhatToSync.js",
+ "chrome/browser/content/browser/preferences/dialogs/syncChooseWhatToSync.xhtml",
+ "chrome/browser/content/browser/preferences/dialogs/translations.xhtml",
+ "chrome/browser/content/browser/preferences/etp-advanced-banner.svg",
+ "chrome/browser/content/browser/preferences/etp-toggle-promo.svg",
+ "chrome/browser/content/browser/preferences/extensionControlled.js",
+ "chrome/browser/content/browser/preferences/findInPage.js",
+ "chrome/browser/content/browser/preferences/fxaPairDevice.js",
+ "chrome/browser/content/browser/preferences/fxaPairDevice.xhtml",
+ "chrome/browser/content/browser/preferences/home.js",
+ "chrome/browser/content/browser/preferences/main.js",
+ "chrome/browser/content/browser/preferences/more-from-mozilla-qr-code-simple-cn.svg",
+ "chrome/browser/content/browser/preferences/more-from-mozilla-qr-code-simple.svg",
+ "chrome/browser/content/browser/preferences/moreFromMozilla.js",
+ "chrome/browser/content/browser/preferences/preferences.js",
+ "chrome/browser/content/browser/preferences/preferences.xhtml",
+ "chrome/browser/content/browser/preferences/privacy.js",
+ "chrome/browser/content/browser/preferences/search.js",
+ "chrome/browser/content/browser/preferences/spell-check-promo.svg",
+ "chrome/browser/content/browser/preferences/sync.js",
+ "chrome/browser/content/browser/preferences/translations.js",
+ "chrome/browser/content/browser/preferences/web-appearance-dark.svg",
+ "chrome/browser/content/browser/preferences/web-appearance-light.svg",
+ "chrome/browser/content/browser/preferences/widgets/browser-language-restart-message.css",
+ "chrome/browser/content/browser/preferences/widgets/browser-language-restart-message.mjs",
+ "chrome/browser/content/browser/preferences/widgets/dialog-button.mjs",
+ "chrome/browser/content/browser/preferences/widgets/nav-notice.css",
+ "chrome/browser/content/browser/preferences/widgets/nav-notice.mjs",
+ "chrome/browser/content/browser/preferences/widgets/placeholder-message.css",
+ "chrome/browser/content/browser/preferences/widgets/placeholder-message.mjs",
+ "chrome/browser/content/browser/preferences/widgets/security-privacy-card.css",
+ "chrome/browser/content/browser/preferences/widgets/security-privacy-card.mjs",
+ "chrome/browser/content/browser/preferences/widgets/setting-control.css",
+ "chrome/browser/content/browser/preferences/widgets/setting-control.mjs",
+ "chrome/browser/content/browser/preferences/widgets/setting-element.mjs",
+ "chrome/browser/content/browser/preferences/widgets/setting-group.css",
+ "chrome/browser/content/browser/preferences/widgets/setting-group.mjs",
+ "chrome/browser/content/browser/preferences/widgets/setting-pane.css",
+ "chrome/browser/content/browser/preferences/widgets/setting-pane.mjs",
+ "chrome/browser/content/browser/preferences/widgets/sync-device-name.mjs",
+ "chrome/browser/content/browser/preferences/widgets/sync-engines-list.css",
+ "chrome/browser/content/browser/preferences/widgets/sync-engines-list.mjs",
+ "chrome/browser/content/browser/preferences/widgets/update-information.css",
+ "chrome/browser/content/browser/preferences/widgets/update-information.mjs",
+ "chrome/browser/content/browser/preferences/widgets/update-state.css",
+ "chrome/browser/content/browser/preferences/widgets/update-state.mjs",
+ "chrome/browser/content/browser/privacy-metrics-card.css",
+ "chrome/browser/content/browser/privacy-metrics-card.mjs",
+ "chrome/browser/content/browser/profiles/assets/16_barbell.svg",
+ "chrome/browser/content/browser/profiles/assets/16_bike.svg",
+ "chrome/browser/content/browser/profiles/assets/16_book.svg",
+ "chrome/browser/content/browser/profiles/assets/16_briefcase.svg",
+ "chrome/browser/content/browser/profiles/assets/16_canvas.svg",
+ "chrome/browser/content/browser/profiles/assets/16_craft.svg",
+ "chrome/browser/content/browser/profiles/assets/16_default-favicon.svg",
+ "chrome/browser/content/browser/profiles/assets/16_diamond.svg",
+ "chrome/browser/content/browser/profiles/assets/16_flower.svg",
+ "chrome/browser/content/browser/profiles/assets/16_folder.svg",
+ "chrome/browser/content/browser/profiles/assets/16_hammer.svg",
+ "chrome/browser/content/browser/profiles/assets/16_heart-rate.svg",
+ "chrome/browser/content/browser/profiles/assets/16_heart.svg",
+ "chrome/browser/content/browser/profiles/assets/16_history.svg",
+ "chrome/browser/content/browser/profiles/assets/16_leaf.svg",
+ "chrome/browser/content/browser/profiles/assets/16_lightbulb.svg",
+ "chrome/browser/content/browser/profiles/assets/16_makeup.svg",
+ "chrome/browser/content/browser/profiles/assets/16_message.svg",
+ "chrome/browser/content/browser/profiles/assets/16_musical-note.svg",
+ "chrome/browser/content/browser/profiles/assets/16_palette.svg",
+ "chrome/browser/content/browser/profiles/assets/16_paw-print.svg",
+ "chrome/browser/content/browser/profiles/assets/16_plane.svg",
+ "chrome/browser/content/browser/profiles/assets/16_present.svg",
+ "chrome/browser/content/browser/profiles/assets/16_shopping.svg",
+ "chrome/browser/content/browser/profiles/assets/16_soccer.svg",
+ "chrome/browser/content/browser/profiles/assets/16_sparkle-single.svg",
+ "chrome/browser/content/browser/profiles/assets/16_star.svg",
+ "chrome/browser/content/browser/profiles/assets/16_video-game-controller.svg",
+ "chrome/browser/content/browser/profiles/assets/20_barbell.svg",
+ "chrome/browser/content/browser/profiles/assets/20_bike.svg",
+ "chrome/browser/content/browser/profiles/assets/20_book.svg",
+ "chrome/browser/content/browser/profiles/assets/20_briefcase.svg",
+ "chrome/browser/content/browser/profiles/assets/20_canvas.svg",
+ "chrome/browser/content/browser/profiles/assets/20_craft.svg",
+ "chrome/browser/content/browser/profiles/assets/20_default-favicon.svg",
+ "chrome/browser/content/browser/profiles/assets/20_diamond.svg",
+ "chrome/browser/content/browser/profiles/assets/20_flower.svg",
+ "chrome/browser/content/browser/profiles/assets/20_folder.svg",
+ "chrome/browser/content/browser/profiles/assets/20_hammer.svg",
+ "chrome/browser/content/browser/profiles/assets/20_heart-rate.svg",
+ "chrome/browser/content/browser/profiles/assets/20_heart.svg",
+ "chrome/browser/content/browser/profiles/assets/20_history.svg",
+ "chrome/browser/content/browser/profiles/assets/20_leaf.svg",
+ "chrome/browser/content/browser/profiles/assets/20_lightbulb.svg",
+ "chrome/browser/content/browser/profiles/assets/20_makeup.svg",
+ "chrome/browser/content/browser/profiles/assets/20_message.svg",
+ "chrome/browser/content/browser/profiles/assets/20_musical-note.svg",
+ "chrome/browser/content/browser/profiles/assets/20_palette.svg",
+ "chrome/browser/content/browser/profiles/assets/20_paw-print.svg",
+ "chrome/browser/content/browser/profiles/assets/20_plane.svg",
+ "chrome/browser/content/browser/profiles/assets/20_present.svg",
+ "chrome/browser/content/browser/profiles/assets/20_shopping.svg",
+ "chrome/browser/content/browser/profiles/assets/20_soccer.svg",
+ "chrome/browser/content/browser/profiles/assets/20_sparkle-single.svg",
+ "chrome/browser/content/browser/profiles/assets/20_star.svg",
+ "chrome/browser/content/browser/profiles/assets/20_video-game-controller.svg",
+ "chrome/browser/content/browser/profiles/assets/24_book.svg",
+ "chrome/browser/content/browser/profiles/assets/24_briefcase.svg",
+ "chrome/browser/content/browser/profiles/assets/24_flower.svg",
+ "chrome/browser/content/browser/profiles/assets/24_heart.svg",
+ "chrome/browser/content/browser/profiles/assets/24_shopping.svg",
+ "chrome/browser/content/browser/profiles/assets/24_star.svg",
+ "chrome/browser/content/browser/profiles/assets/48_barbell.svg",
+ "chrome/browser/content/browser/profiles/assets/48_bike.svg",
+ "chrome/browser/content/browser/profiles/assets/48_book.svg",
+ "chrome/browser/content/browser/profiles/assets/48_briefcase.svg",
+ "chrome/browser/content/browser/profiles/assets/48_canvas.svg",
+ "chrome/browser/content/browser/profiles/assets/48_craft.svg",
+ "chrome/browser/content/browser/profiles/assets/48_default-favicon.svg",
+ "chrome/browser/content/browser/profiles/assets/48_diamond.svg",
+ "chrome/browser/content/browser/profiles/assets/48_flower.svg",
+ "chrome/browser/content/browser/profiles/assets/48_folder.svg",
+ "chrome/browser/content/browser/profiles/assets/48_hammer.svg",
+ "chrome/browser/content/browser/profiles/assets/48_heart-rate.svg",
+ "chrome/browser/content/browser/profiles/assets/48_heart.svg",
+ "chrome/browser/content/browser/profiles/assets/48_history.svg",
+ "chrome/browser/content/browser/profiles/assets/48_leaf.svg",
+ "chrome/browser/content/browser/profiles/assets/48_lightbulb.svg",
+ "chrome/browser/content/browser/profiles/assets/48_makeup.svg",
+ "chrome/browser/content/browser/profiles/assets/48_message.svg",
+ "chrome/browser/content/browser/profiles/assets/48_musical-note.svg",
+ "chrome/browser/content/browser/profiles/assets/48_palette.svg",
+ "chrome/browser/content/browser/profiles/assets/48_paw-print.svg",
+ "chrome/browser/content/browser/profiles/assets/48_plane.svg",
+ "chrome/browser/content/browser/profiles/assets/48_present.svg",
+ "chrome/browser/content/browser/profiles/assets/48_shopping.svg",
+ "chrome/browser/content/browser/profiles/assets/48_soccer.svg",
+ "chrome/browser/content/browser/profiles/assets/48_sparkle-single.svg",
+ "chrome/browser/content/browser/profiles/assets/48_star.svg",
+ "chrome/browser/content/browser/profiles/assets/48_video-game-controller.svg",
+ "chrome/browser/content/browser/profiles/assets/60_book.svg",
+ "chrome/browser/content/browser/profiles/assets/60_briefcase.svg",
+ "chrome/browser/content/browser/profiles/assets/60_flower.svg",
+ "chrome/browser/content/browser/profiles/assets/60_heart.svg",
+ "chrome/browser/content/browser/profiles/assets/60_shopping.svg",
+ "chrome/browser/content/browser/profiles/assets/60_star.svg",
+ "chrome/browser/content/browser/profiles/assets/80_barbell.svg",
+ "chrome/browser/content/browser/profiles/assets/80_bike.svg",
+ "chrome/browser/content/browser/profiles/assets/80_book.svg",
+ "chrome/browser/content/browser/profiles/assets/80_briefcase.svg",
+ "chrome/browser/content/browser/profiles/assets/80_canvas.svg",
+ "chrome/browser/content/browser/profiles/assets/80_craft.svg",
+ "chrome/browser/content/browser/profiles/assets/80_default-favicon.svg",
+ "chrome/browser/content/browser/profiles/assets/80_diamond.svg",
+ "chrome/browser/content/browser/profiles/assets/80_flower.svg",
+ "chrome/browser/content/browser/profiles/assets/80_folder.svg",
+ "chrome/browser/content/browser/profiles/assets/80_hammer.svg",
+ "chrome/browser/content/browser/profiles/assets/80_heart-rate.svg",
+ "chrome/browser/content/browser/profiles/assets/80_heart.svg",
+ "chrome/browser/content/browser/profiles/assets/80_history.svg",
+ "chrome/browser/content/browser/profiles/assets/80_leaf.svg",
+ "chrome/browser/content/browser/profiles/assets/80_lightbulb.svg",
+ "chrome/browser/content/browser/profiles/assets/80_makeup.svg",
+ "chrome/browser/content/browser/profiles/assets/80_message.svg",
+ "chrome/browser/content/browser/profiles/assets/80_musical-note.svg",
+ "chrome/browser/content/browser/profiles/assets/80_palette.svg",
+ "chrome/browser/content/browser/profiles/assets/80_paw-print.svg",
+ "chrome/browser/content/browser/profiles/assets/80_plane.svg",
+ "chrome/browser/content/browser/profiles/assets/80_present.svg",
+ "chrome/browser/content/browser/profiles/assets/80_shopping.svg",
+ "chrome/browser/content/browser/profiles/assets/80_soccer.svg",
+ "chrome/browser/content/browser/profiles/assets/80_sparkle-single.svg",
+ "chrome/browser/content/browser/profiles/assets/80_star.svg",
+ "chrome/browser/content/browser/profiles/assets/80_video-game-controller.svg",
+ "chrome/browser/content/browser/profiles/assets/plus.svg",
+ "chrome/browser/content/browser/profiles/assets/profilesBackground0.svg",
+ "chrome/browser/content/browser/profiles/assets/profilesBackground1.svg",
+ "chrome/browser/content/browser/profiles/assets/profilesBackground2.svg",
+ "chrome/browser/content/browser/profiles/assets/profilesBackground3.svg",
+ "chrome/browser/content/browser/profiles/assets/profilesBackground4.svg",
+ "chrome/browser/content/browser/profiles/assets/system-theme-background.svg",
+ "chrome/browser/content/browser/profiles/assets/theme-selector-background.svg",
+ "chrome/browser/content/browser/profiles/avatar.css",
+ "chrome/browser/content/browser/profiles/avatar.mjs",
+ "chrome/browser/content/browser/profiles/avatarSelectionHelpers.mjs",
+ "chrome/browser/content/browser/profiles/delete-profile-card.css",
+ "chrome/browser/content/browser/profiles/delete-profile-card.mjs",
+ "chrome/browser/content/browser/profiles/delete-profile.html",
+ "chrome/browser/content/browser/profiles/edit-profile-card.css",
+ "chrome/browser/content/browser/profiles/edit-profile-card.mjs",
+ "chrome/browser/content/browser/profiles/edit-profile.html",
+ "chrome/browser/content/browser/profiles/new-profile-card.mjs",
+ "chrome/browser/content/browser/profiles/new-profile.html",
+ "chrome/browser/content/browser/profiles/profile-avatar-selector.css",
+ "chrome/browser/content/browser/profiles/profile-avatar-selector.mjs",
+ "chrome/browser/content/browser/profiles/profile-card.css",
+ "chrome/browser/content/browser/profiles/profile-card.mjs",
+ "chrome/browser/content/browser/profiles/profile-selector.css",
+ "chrome/browser/content/browser/profiles/profile-selector.mjs",
+ "chrome/browser/content/browser/profiles/profiles-pages.css",
+ "chrome/browser/content/browser/profiles/profiles-theme-card.css",
+ "chrome/browser/content/browser/profiles/profiles-theme-card.mjs",
+ "chrome/browser/content/browser/profiles/profiles.html",
+ "chrome/browser/content/browser/protections.css",
+ "chrome/browser/content/browser/protections.html",
+ "chrome/browser/content/browser/protections.mjs",
+ "chrome/browser/content/browser/qrcode/QRCodeWorker.worker.mjs",
+ "chrome/browser/content/browser/qrcode/qrcode-dialog.css",
+ "chrome/browser/content/browser/qrcode/qrcode-dialog.html",
+ "chrome/browser/content/browser/qrcode/qrcode-dialog.js",
+ "chrome/browser/content/browser/reportbrokensite/components/register.js",
+ "chrome/browser/content/browser/reportbrokensite/components/url-input.css",
+ "chrome/browser/content/browser/reportbrokensite/components/url-input.mjs",
+ "chrome/browser/content/browser/robot.ico",
+ "chrome/browser/content/browser/safeMode.css",
+ "chrome/browser/content/browser/safeMode.js",
+ "chrome/browser/content/browser/safeMode.xhtml",
+ "chrome/browser/content/browser/sanitizeDialog.js",
+ "chrome/browser/content/browser/sanitize_v2.xhtml",
+ "chrome/browser/content/browser/schemas/bookmarks.json",
+ "chrome/browser/content/browser/schemas/chrome_settings_overrides.json",
+ "chrome/browser/content/browser/schemas/commands.json",
+ "chrome/browser/content/browser/schemas/devtools.json",
+ "chrome/browser/content/browser/schemas/devtools_inspected_window.json",
+ "chrome/browser/content/browser/schemas/devtools_network.json",
+ "chrome/browser/content/browser/schemas/devtools_panels.json",
+ "chrome/browser/content/browser/schemas/find.json",
+ "chrome/browser/content/browser/schemas/history.json",
+ "chrome/browser/content/browser/schemas/menus.json",
+ "chrome/browser/content/browser/schemas/menus_child.json",
+ "chrome/browser/content/browser/schemas/normandyAddonStudy.json",
+ "chrome/browser/content/browser/schemas/omnibox.json",
+ "chrome/browser/content/browser/schemas/pkcs11.json",
+ "chrome/browser/content/browser/schemas/search.json",
+ "chrome/browser/content/browser/schemas/sessions.json",
+ "chrome/browser/content/browser/schemas/sidebar_action.json",
+ "chrome/browser/content/browser/schemas/tabGroups.json",
+ "chrome/browser/content/browser/schemas/tabs.json",
+ "chrome/browser/content/browser/schemas/top_sites.json",
+ "chrome/browser/content/browser/schemas/url_overrides.json",
+ "chrome/browser/content/browser/schemas/windows.json",
+ "chrome/browser/content/browser/screenshots/copied-notification.svg",
+ "chrome/browser/content/browser/screenshots/fileHelpers.mjs",
+ "chrome/browser/content/browser/screenshots/menu-fullpage.svg",
+ "chrome/browser/content/browser/screenshots/menu-visible.svg",
+ "chrome/browser/content/browser/screenshots/overlay/overlay.css",
+ "chrome/browser/content/browser/screenshots/overlayHelpers.mjs",
+ "chrome/browser/content/browser/screenshots/screenshots-buttons.css",
+ "chrome/browser/content/browser/screenshots/screenshots-buttons.js",
+ "chrome/browser/content/browser/screenshots/screenshots-preview.css",
+ "chrome/browser/content/browser/screenshots/screenshots-preview.html",
+ "chrome/browser/content/browser/screenshots/screenshots-preview.mjs",
+ "chrome/browser/content/browser/search/addEngine.css",
+ "chrome/browser/content/browser/search/addEngine.js",
+ "chrome/browser/content/browser/search/addEngine.xhtml",
+ "chrome/browser/content/browser/search/autocomplete-popup.js",
+ "chrome/browser/content/browser/search/searchbar.js",
+ "chrome/browser/content/browser/security/unexpectedScriptLoad.css",
+ "chrome/browser/content/browser/security/unexpectedScriptLoad.js",
+ "chrome/browser/content/browser/security/unexpectedScriptLoad.xhtml",
+ "chrome/browser/content/browser/setDesktopBackground.js",
+ "chrome/browser/content/browser/setDesktopBackground.xhtml",
+ "chrome/browser/content/browser/sidebar/browser-sidebar.js",
+ "chrome/browser/content/browser/sidebar/sidebar-bookmark-list.css",
+ "chrome/browser/content/browser/sidebar/sidebar-bookmark-list.mjs",
+ "chrome/browser/content/browser/sidebar/sidebar-bookmarks.html",
+ "chrome/browser/content/browser/sidebar/sidebar-bookmarks.mjs",
+ "chrome/browser/content/browser/sidebar/sidebar-customize.css",
+ "chrome/browser/content/browser/sidebar/sidebar-customize.html",
+ "chrome/browser/content/browser/sidebar/sidebar-customize.mjs",
+ "chrome/browser/content/browser/sidebar/sidebar-history.css",
+ "chrome/browser/content/browser/sidebar/sidebar-history.html",
+ "chrome/browser/content/browser/sidebar/sidebar-history.mjs",
+ "chrome/browser/content/browser/sidebar/sidebar-main.css",
+ "chrome/browser/content/browser/sidebar/sidebar-main.mjs",
+ "chrome/browser/content/browser/sidebar/sidebar-page.mjs",
+ "chrome/browser/content/browser/sidebar/sidebar-panel-header.css",
+ "chrome/browser/content/browser/sidebar/sidebar-panel-header.mjs",
+ "chrome/browser/content/browser/sidebar/sidebar-permissions-ui.mjs",
+ "chrome/browser/content/browser/sidebar/sidebar-permissions.mjs",
+ "chrome/browser/content/browser/sidebar/sidebar-pins-promo.css",
+ "chrome/browser/content/browser/sidebar/sidebar-pins-promo.mjs",
+ "chrome/browser/content/browser/sidebar/sidebar-syncedtabs.html",
+ "chrome/browser/content/browser/sidebar/sidebar-syncedtabs.mjs",
+ "chrome/browser/content/browser/sidebar/sidebar-tab-list.css",
+ "chrome/browser/content/browser/sidebar/sidebar-tab-list.mjs",
+ "chrome/browser/content/browser/sidebar/sidebar-tab-row.css",
+ "chrome/browser/content/browser/sidebar/sidebar.css",
+ "chrome/browser/content/browser/spotlight.html",
+ "chrome/browser/content/browser/spotlight.js",
+ "chrome/browser/content/browser/static-robot.png",
+ "chrome/browser/content/browser/syncedtabs/sidebar.js",
+ "chrome/browser/content/browser/syncedtabs/sidebar.xhtml",
+ "chrome/browser/content/browser/tabbrowser/browser-allTabsMenu.js",
+ "chrome/browser/content/browser/tabbrowser/browser-ctrlTab.js",
+ "chrome/browser/content/browser/tabbrowser/browser-fullZoom.js",
+ "chrome/browser/content/browser/tabbrowser/drag-and-drop.js",
+ "chrome/browser/content/browser/tabbrowser/opentabs-splitview.css",
+ "chrome/browser/content/browser/tabbrowser/opentabs-splitview.mjs",
+ "chrome/browser/content/browser/tabbrowser/opentabs.css",
+ "chrome/browser/content/browser/tabbrowser/opentabs.html",
+ "chrome/browser/content/browser/tabbrowser/split-view-footer.js",
+ "chrome/browser/content/browser/tabbrowser/tab-groups-list.mjs",
+ "chrome/browser/content/browser/tabbrowser/tab-hover-preview.mjs",
+ "chrome/browser/content/browser/tabbrowser/tab.js",
+ "chrome/browser/content/browser/tabbrowser/tabbrowser.js",
+ "chrome/browser/content/browser/tabbrowser/tabgroup-menu.js",
+ "chrome/browser/content/browser/tabbrowser/tabgroup.js",
+ "chrome/browser/content/browser/tabbrowser/tabnote-menu.js",
+ "chrome/browser/content/browser/tabbrowser/tabs.js",
+ "chrome/browser/content/browser/tabbrowser/tabsplitview.js",
+ "chrome/browser/content/browser/tabunloader/aboutUnloads.css",
+ "chrome/browser/content/browser/tabunloader/aboutUnloads.html",
+ "chrome/browser/content/browser/tabunloader/aboutUnloads.js",
+ "chrome/browser/content/browser/taskbartabs/TaskbarTabs.1.schema.json",
+ "chrome/browser/content/browser/textrecognition/textrecognition.css",
+ "chrome/browser/content/browser/textrecognition/textrecognition.html",
+ "chrome/browser/content/browser/textrecognition/textrecognition.mjs",
+ "chrome/browser/content/browser/translations/TranslationsPanelShared.sys.mjs",
+ "chrome/browser/content/browser/translations/fullPageTranslationsPanel.js",
+ "chrome/browser/content/browser/translations/selectTranslationsPanel.js",
+ "chrome/browser/content/browser/urlbar/SearchModeSwitcher.mjs",
+ "chrome/browser/content/browser/urlbar/SmartbarInput.mjs",
+ "chrome/browser/content/browser/urlbar/SmartbarInputController.mjs",
+ "chrome/browser/content/browser/urlbar/SmartbarInputUtils.mjs",
+ "chrome/browser/content/browser/urlbar/UrlbarInput.mjs",
+ "chrome/browser/content/browser/usercontext/usercontext.css",
+ "chrome/browser/content/browser/utilityOverlay.js",
+ "chrome/browser/content/browser/vpn-card.mjs",
+ "chrome/browser/content/browser/webext-panels.css",
+ "chrome/browser/content/browser/webext-panels.js",
+ "chrome/browser/content/browser/webext-panels.xhtml",
+ "chrome/browser/content/browser/webrtc/webrtc-preview.css",
+ "chrome/browser/content/browser/webrtc/webrtc-preview.mjs",
+ "chrome/browser/content/browser/webrtcIndicator.js",
+ "chrome/browser/content/browser/webrtcIndicator.xhtml",
+ "chrome/browser/content/builtin-themes/aiwindow/aiwindow-theme.css",
+ "chrome/browser/content/builtin-themes/aiwindow/manifest.json",
+ "chrome/browser/content/builtin-themes/alpenglow/background-gradient-dark.svg",
+ "chrome/browser/content/builtin-themes/alpenglow/background-gradient.svg",
+ "chrome/browser/content/builtin-themes/alpenglow/background-noodles-left-dark.svg",
+ "chrome/browser/content/builtin-themes/alpenglow/background-noodles-left.svg",
+ "chrome/browser/content/builtin-themes/alpenglow/background-noodles-right-dark.svg",
+ "chrome/browser/content/builtin-themes/alpenglow/background-noodles-right.svg",
+ "chrome/browser/content/builtin-themes/alpenglow/icon.svg",
+ "chrome/browser/content/builtin-themes/alpenglow/manifest.json",
+ "chrome/browser/content/builtin-themes/alpenglow/preview.svg",
+ "chrome/browser/content/builtin-themes/dark/icon.svg",
+ "chrome/browser/content/builtin-themes/dark/manifest.json",
+ "chrome/browser/content/builtin-themes/dark/preview.svg",
+ "chrome/browser/content/builtin-themes/light/icon.svg",
+ "chrome/browser/content/builtin-themes/light/manifest.json",
+ "chrome/browser/content/builtin-themes/light/preview.svg",
+ "chrome/browser/content/cart.svg",
+ "chrome/browser/content/chill.svg",
+ "chrome/browser/content/circle.svg",
+ "chrome/browser/content/dollar.svg",
+ "chrome/browser/content/fence.svg",
+ "chrome/browser/content/fingerprint.svg",
+ "chrome/browser/content/food.svg",
+ "chrome/browser/content/fruit.svg",
+ "chrome/browser/content/gift.svg",
+ "chrome/browser/content/pet.svg",
+ "chrome/browser/content/tree.svg",
+ "chrome/browser/content/vacation.svg"
+ ],
+ "prefixes": [
+ "chrome/browser/content/"
+ ]
+ },
+ "omni.ja|content|global": {
+ "files": [
+ "chrome/toolkit/content/global/ScrollOffsets.mjs",
+ "chrome/toolkit/content/global/TopLevelVideoDocument.js",
+ "chrome/toolkit/content/global/aboutAbout.html",
+ "chrome/toolkit/content/global/aboutAbout.js",
+ "chrome/toolkit/content/global/aboutCheckerboard.css",
+ "chrome/toolkit/content/global/aboutCheckerboard.html",
+ "chrome/toolkit/content/global/aboutCheckerboard.js",
+ "chrome/toolkit/content/global/aboutGlean.css",
+ "chrome/toolkit/content/global/aboutGlean.html",
+ "chrome/toolkit/content/global/aboutGlean.js",
+ "chrome/toolkit/content/global/aboutLogging/aboutLogging.css",
+ "chrome/toolkit/content/global/aboutLogging/aboutLogging.html",
+ "chrome/toolkit/content/global/aboutLogging/aboutLogging.mjs",
+ "chrome/toolkit/content/global/aboutLogging/jwt.mjs",
+ "chrome/toolkit/content/global/aboutLogging/profileSaveUploadLogic.mjs",
+ "chrome/toolkit/content/global/aboutLogging/profileStorage.mjs",
+ "chrome/toolkit/content/global/aboutLogging/uploadedProfilesManager.mjs",
+ "chrome/toolkit/content/global/aboutMemory.css",
+ "chrome/toolkit/content/global/aboutMemory.js",
+ "chrome/toolkit/content/global/aboutMemory.xhtml",
+ "chrome/toolkit/content/global/aboutMozilla.css",
+ "chrome/toolkit/content/global/aboutNetError.html",
+ "chrome/toolkit/content/global/aboutNetError.mjs",
+ "chrome/toolkit/content/global/aboutNetErrorHelpers.mjs",
+ "chrome/toolkit/content/global/aboutNetworking.html",
+ "chrome/toolkit/content/global/aboutNetworking.js",
+ "chrome/toolkit/content/global/aboutProcesses.css",
+ "chrome/toolkit/content/global/aboutProcesses.html",
+ "chrome/toolkit/content/global/aboutProcesses.js",
+ "chrome/toolkit/content/global/aboutProfiles.js",
+ "chrome/toolkit/content/global/aboutProfiles.xhtml",
+ "chrome/toolkit/content/global/aboutRestricted/aboutRestricted.css",
+ "chrome/toolkit/content/global/aboutRestricted/aboutRestricted.html",
+ "chrome/toolkit/content/global/aboutRestricted/aboutRestricted.mjs",
+ "chrome/toolkit/content/global/aboutServiceWorkers.js",
+ "chrome/toolkit/content/global/aboutServiceWorkers.xhtml",
+ "chrome/toolkit/content/global/aboutSupport.js",
+ "chrome/toolkit/content/global/aboutSupport.xhtml",
+ "chrome/toolkit/content/global/aboutTelemetry.css",
+ "chrome/toolkit/content/global/aboutTelemetry.js",
+ "chrome/toolkit/content/global/aboutTelemetry.xhtml",
+ "chrome/toolkit/content/global/aboutUrlClassifier.css",
+ "chrome/toolkit/content/global/aboutUrlClassifier.js",
+ "chrome/toolkit/content/global/aboutUrlClassifier.xhtml",
+ "chrome/toolkit/content/global/aboutWebauthn.css",
+ "chrome/toolkit/content/global/aboutWebauthn.html",
+ "chrome/toolkit/content/global/aboutWebauthn.js",
+ "chrome/toolkit/content/global/aboutconfig/aboutconfig.css",
+ "chrome/toolkit/content/global/aboutconfig/aboutconfig.html",
+ "chrome/toolkit/content/global/aboutconfig/aboutconfig.js",
+ "chrome/toolkit/content/global/aboutconfig/background.svg",
+ "chrome/toolkit/content/global/aboutconfig/toggle.svg",
+ "chrome/toolkit/content/global/aboutwebrtc/aboutWebrtc.css",
+ "chrome/toolkit/content/global/aboutwebrtc/aboutWebrtc.html",
+ "chrome/toolkit/content/global/aboutwebrtc/aboutWebrtc.mjs",
+ "chrome/toolkit/content/global/aboutwebrtc/configurationList.mjs",
+ "chrome/toolkit/content/global/aboutwebrtc/copyButton.mjs",
+ "chrome/toolkit/content/global/aboutwebrtc/disclosure.mjs",
+ "chrome/toolkit/content/global/aboutwebrtc/graph.mjs",
+ "chrome/toolkit/content/global/aboutwebrtc/graphdb.mjs",
+ "chrome/toolkit/content/global/adjustableTitle.js",
+ "chrome/toolkit/content/global/alerts/alert.css",
+ "chrome/toolkit/content/global/alerts/alert.js",
+ "chrome/toolkit/content/global/alerts/alert.xhtml",
+ "chrome/toolkit/content/global/antitracking/StripOnShare.json",
+ "chrome/toolkit/content/global/antitracking/StripOnShareLGPL.json",
+ "chrome/toolkit/content/global/appPicker.js",
+ "chrome/toolkit/content/global/appPicker.xhtml",
+ "chrome/toolkit/content/global/autocomplete-row-item/autocomplete-row-item.css",
+ "chrome/toolkit/content/global/autocomplete-row-item/autocomplete-row-item.mjs",
+ "chrome/toolkit/content/global/autocomplete.css",
+ "chrome/toolkit/content/global/backgroundPageThumbs.xhtml",
+ "chrome/toolkit/content/global/bindings/calendar.js",
+ "chrome/toolkit/content/global/bindings/colorpicker-common.mjs",
+ "chrome/toolkit/content/global/bindings/colorpicker.mjs",
+ "chrome/toolkit/content/global/bindings/datekeeper.js",
+ "chrome/toolkit/content/global/bindings/datepicker.js",
+ "chrome/toolkit/content/global/bindings/datetimebox.css",
+ "chrome/toolkit/content/global/bindings/spinner.js",
+ "chrome/toolkit/content/global/bindings/timekeeper.js",
+ "chrome/toolkit/content/global/bindings/timepicker.js",
+ "chrome/toolkit/content/global/buildconfig.css",
+ "chrome/toolkit/content/global/buildconfig.html",
+ "chrome/toolkit/content/global/certviewer/certDecoder.mjs",
+ "chrome/toolkit/content/global/certviewer/certviewer.css",
+ "chrome/toolkit/content/global/certviewer/certviewer.html",
+ "chrome/toolkit/content/global/certviewer/certviewer.mjs",
+ "chrome/toolkit/content/global/certviewer/components/about-certificate-items.mjs",
+ "chrome/toolkit/content/global/certviewer/components/about-certificate-section.css",
+ "chrome/toolkit/content/global/certviewer/components/about-certificate-section.mjs",
+ "chrome/toolkit/content/global/certviewer/components/certificate-section.css",
+ "chrome/toolkit/content/global/certviewer/components/certificate-section.mjs",
+ "chrome/toolkit/content/global/certviewer/components/certificate-tabs-section.mjs",
+ "chrome/toolkit/content/global/certviewer/components/error-section.css",
+ "chrome/toolkit/content/global/certviewer/components/error-section.mjs",
+ "chrome/toolkit/content/global/certviewer/components/info-group-container.mjs",
+ "chrome/toolkit/content/global/certviewer/components/info-group.css",
+ "chrome/toolkit/content/global/certviewer/components/info-group.mjs",
+ "chrome/toolkit/content/global/certviewer/components/info-item.css",
+ "chrome/toolkit/content/global/certviewer/components/info-item.mjs",
+ "chrome/toolkit/content/global/certviewer/components/list-item.css",
+ "chrome/toolkit/content/global/certviewer/components/list-item.mjs",
+ "chrome/toolkit/content/global/certviewer/components/logNameTable.mjs",
+ "chrome/toolkit/content/global/certviewer/components/utils.mjs",
+ "chrome/toolkit/content/global/certviewer/vendor/pkijs.js",
+ "chrome/toolkit/content/global/colorpicker.html",
+ "chrome/toolkit/content/global/commonDialog.css",
+ "chrome/toolkit/content/global/commonDialog.js",
+ "chrome/toolkit/content/global/commonDialog.xhtml",
+ "chrome/toolkit/content/global/contentAreaUtils.js",
+ "chrome/toolkit/content/global/cookiebanners/CookieBannerRule.schema.json",
+ "chrome/toolkit/content/global/crashes.css",
+ "chrome/toolkit/content/global/crashes.html",
+ "chrome/toolkit/content/global/crashes.js",
+ "chrome/toolkit/content/global/customElements.js",
+ "chrome/toolkit/content/global/datetimepicker.xhtml",
+ "chrome/toolkit/content/global/editMenuOverlay.js",
+ "chrome/toolkit/content/global/elements/arrowscrollbox.js",
+ "chrome/toolkit/content/global/elements/autocomplete-input.js",
+ "chrome/toolkit/content/global/elements/autocomplete-popup.js",
+ "chrome/toolkit/content/global/elements/autocomplete-richlistitem.js",
+ "chrome/toolkit/content/global/elements/browser-custom-element.mjs",
+ "chrome/toolkit/content/global/elements/button.js",
+ "chrome/toolkit/content/global/elements/checkbox.js",
+ "chrome/toolkit/content/global/elements/datetimebox.js",
+ "chrome/toolkit/content/global/elements/dialog.js",
+ "chrome/toolkit/content/global/elements/editor.js",
+ "chrome/toolkit/content/global/elements/findbar.js",
+ "chrome/toolkit/content/global/elements/general.js",
+ "chrome/toolkit/content/global/elements/infobar.css",
+ "chrome/toolkit/content/global/elements/marquee.css",
+ "chrome/toolkit/content/global/elements/marquee.js",
+ "chrome/toolkit/content/global/elements/menu.js",
+ "chrome/toolkit/content/global/elements/menulist.js",
+ "chrome/toolkit/content/global/elements/menupopup.css",
+ "chrome/toolkit/content/global/elements/menupopup.js",
+ "chrome/toolkit/content/global/elements/moz-badge.css",
+ "chrome/toolkit/content/global/elements/moz-badge.mjs",
+ "chrome/toolkit/content/global/elements/moz-badge.tokens.css",
+ "chrome/toolkit/content/global/elements/moz-box-button.css",
+ "chrome/toolkit/content/global/elements/moz-box-button.mjs",
+ "chrome/toolkit/content/global/elements/moz-box-common.css",
+ "chrome/toolkit/content/global/elements/moz-box-group.css",
+ "chrome/toolkit/content/global/elements/moz-box-group.mjs",
+ "chrome/toolkit/content/global/elements/moz-box-item.css",
+ "chrome/toolkit/content/global/elements/moz-box-item.mjs",
+ "chrome/toolkit/content/global/elements/moz-box-link.css",
+ "chrome/toolkit/content/global/elements/moz-box-link.mjs",
+ "chrome/toolkit/content/global/elements/moz-box.tokens.css",
+ "chrome/toolkit/content/global/elements/moz-breadcrumb-group.css",
+ "chrome/toolkit/content/global/elements/moz-breadcrumb-group.mjs",
+ "chrome/toolkit/content/global/elements/moz-breadcrumb.css",
+ "chrome/toolkit/content/global/elements/moz-breadcrumb.tokens.css",
+ "chrome/toolkit/content/global/elements/moz-button-group.css",
+ "chrome/toolkit/content/global/elements/moz-button-group.mjs",
+ "chrome/toolkit/content/global/elements/moz-button.css",
+ "chrome/toolkit/content/global/elements/moz-button.mjs",
+ "chrome/toolkit/content/global/elements/moz-card.css",
+ "chrome/toolkit/content/global/elements/moz-card.mjs",
+ "chrome/toolkit/content/global/elements/moz-checkbox.mjs",
+ "chrome/toolkit/content/global/elements/moz-fieldset.css",
+ "chrome/toolkit/content/global/elements/moz-fieldset.mjs",
+ "chrome/toolkit/content/global/elements/moz-five-star.css",
+ "chrome/toolkit/content/global/elements/moz-five-star.mjs",
+ "chrome/toolkit/content/global/elements/moz-input-box.js",
+ "chrome/toolkit/content/global/elements/moz-input-color.css",
+ "chrome/toolkit/content/global/elements/moz-input-color.mjs",
+ "chrome/toolkit/content/global/elements/moz-input-common.css",
+ "chrome/toolkit/content/global/elements/moz-input-email.mjs",
+ "chrome/toolkit/content/global/elements/moz-input-folder.css",
+ "chrome/toolkit/content/global/elements/moz-input-folder.mjs",
+ "chrome/toolkit/content/global/elements/moz-input-number.mjs",
+ "chrome/toolkit/content/global/elements/moz-input-password.mjs",
+ "chrome/toolkit/content/global/elements/moz-input-search.mjs",
+ "chrome/toolkit/content/global/elements/moz-input-tel.mjs",
+ "chrome/toolkit/content/global/elements/moz-input-text.css",
+ "chrome/toolkit/content/global/elements/moz-input-text.mjs",
+ "chrome/toolkit/content/global/elements/moz-input-url.mjs",
+ "chrome/toolkit/content/global/elements/moz-label.css",
+ "chrome/toolkit/content/global/elements/moz-label.mjs",
+ "chrome/toolkit/content/global/elements/moz-message-bar.css",
+ "chrome/toolkit/content/global/elements/moz-message-bar.mjs",
+ "chrome/toolkit/content/global/elements/moz-message-bar.tokens.css",
+ "chrome/toolkit/content/global/elements/moz-page-header.css",
+ "chrome/toolkit/content/global/elements/moz-page-header.mjs",
+ "chrome/toolkit/content/global/elements/moz-page-nav-button.css",
+ "chrome/toolkit/content/global/elements/moz-page-nav.css",
+ "chrome/toolkit/content/global/elements/moz-page-nav.mjs",
+ "chrome/toolkit/content/global/elements/moz-page-nav.tokens.css",
+ "chrome/toolkit/content/global/elements/moz-promo.css",
+ "chrome/toolkit/content/global/elements/moz-promo.mjs",
+ "chrome/toolkit/content/global/elements/moz-promo.tokens.css",
+ "chrome/toolkit/content/global/elements/moz-radio-group.mjs",
+ "chrome/toolkit/content/global/elements/moz-reorderable-list.css",
+ "chrome/toolkit/content/global/elements/moz-reorderable-list.mjs",
+ "chrome/toolkit/content/global/elements/moz-reorderable-list.tokens.css",
+ "chrome/toolkit/content/global/elements/moz-select.css",
+ "chrome/toolkit/content/global/elements/moz-select.mjs",
+ "chrome/toolkit/content/global/elements/moz-select.tokens.css",
+ "chrome/toolkit/content/global/elements/moz-support-link.mjs",
+ "chrome/toolkit/content/global/elements/moz-toggle.css",
+ "chrome/toolkit/content/global/elements/moz-toggle.mjs",
+ "chrome/toolkit/content/global/elements/moz-toggle.tokens.css",
+ "chrome/toolkit/content/global/elements/moz-visual-picker-item.css",
+ "chrome/toolkit/content/global/elements/moz-visual-picker-item.tokens.css",
+ "chrome/toolkit/content/global/elements/moz-visual-picker.mjs",
+ "chrome/toolkit/content/global/elements/named-deck.js",
+ "chrome/toolkit/content/global/elements/notificationbox.js",
+ "chrome/toolkit/content/global/elements/panel-item.css",
+ "chrome/toolkit/content/global/elements/panel-list.css",
+ "chrome/toolkit/content/global/elements/panel-list.js",
+ "chrome/toolkit/content/global/elements/panel-list.mjs",
+ "chrome/toolkit/content/global/elements/panel.js",
+ "chrome/toolkit/content/global/elements/popupnotification.js",
+ "chrome/toolkit/content/global/elements/radio.js",
+ "chrome/toolkit/content/global/elements/richlistbox.js",
+ "chrome/toolkit/content/global/elements/stringbundle.js",
+ "chrome/toolkit/content/global/elements/tabbox.js",
+ "chrome/toolkit/content/global/elements/text.js",
+ "chrome/toolkit/content/global/elements/textrecognition.js",
+ "chrome/toolkit/content/global/elements/toolbarbutton.js",
+ "chrome/toolkit/content/global/elements/tree.js",
+ "chrome/toolkit/content/global/elements/videocontrols.js",
+ "chrome/toolkit/content/global/elements/wizard.js",
+ "chrome/toolkit/content/global/errors/cert-errors.mjs",
+ "chrome/toolkit/content/global/errors/error-lookup.mjs",
+ "chrome/toolkit/content/global/errors/error-registry.mjs",
+ "chrome/toolkit/content/global/errors/net-error-illustrations.mjs",
+ "chrome/toolkit/content/global/errors/net-errors.mjs",
+ "chrome/toolkit/content/global/errors/pkix-errors.mjs",
+ "chrome/toolkit/content/global/errors/ssl-errors.mjs",
+ "chrome/toolkit/content/global/filepicker.properties",
+ "chrome/toolkit/content/global/globalOverlay.js",
+ "chrome/toolkit/content/global/gmp-sources/openh264.json",
+ "chrome/toolkit/content/global/gmp-sources/widevinecdm.json",
+ "chrome/toolkit/content/global/gmp-sources/widevinecdm_l1.json",
+ "chrome/toolkit/content/global/httpsonlyerror/errorpage.html",
+ "chrome/toolkit/content/global/httpsonlyerror/errorpage.js",
+ "chrome/toolkit/content/global/httpsonlyerror/secure-broken.svg",
+ "chrome/toolkit/content/global/license.html",
+ "chrome/toolkit/content/global/lit-select-control.mjs",
+ "chrome/toolkit/content/global/lit-utils.mjs",
+ "chrome/toolkit/content/global/megalist/MegalistAlpha.mjs",
+ "chrome/toolkit/content/global/megalist/components/login-form/login-form.css",
+ "chrome/toolkit/content/global/megalist/components/login-form/login-form.mjs",
+ "chrome/toolkit/content/global/megalist/components/login-line/login-line.css",
+ "chrome/toolkit/content/global/megalist/components/login-line/login-line.mjs",
+ "chrome/toolkit/content/global/megalist/components/notification-message-bar/notification-message-bar.mjs",
+ "chrome/toolkit/content/global/megalist/components/password-card/password-card.css",
+ "chrome/toolkit/content/global/megalist/components/password-card/password-card.mjs",
+ "chrome/toolkit/content/global/megalist/components/virtual-passwords-list/virtual-passwords-list.mjs",
+ "chrome/toolkit/content/global/megalist/icons/cpm-fox-illustration.svg",
+ "chrome/toolkit/content/global/megalist/megalist.css",
+ "chrome/toolkit/content/global/megalist/megalist.html",
+ "chrome/toolkit/content/global/ml/AIFeature.sys.mjs",
+ "chrome/toolkit/content/global/ml/BlockWords.sys.mjs",
+ "chrome/toolkit/content/global/ml/ClusterAlgos.sys.mjs",
+ "chrome/toolkit/content/global/ml/EmbeddingsGenerator.sys.mjs",
+ "chrome/toolkit/content/global/ml/EngineProcess.sys.mjs",
+ "chrome/toolkit/content/global/ml/MLEngine.worker.mjs",
+ "chrome/toolkit/content/global/ml/MLTelemetry.sys.mjs",
+ "chrome/toolkit/content/global/ml/ModelHub.sys.mjs",
+ "chrome/toolkit/content/global/ml/NLPUtils.sys.mjs",
+ "chrome/toolkit/content/global/ml/OPFS.sys.mjs",
+ "chrome/toolkit/content/global/ml/StopWords.sys.mjs",
+ "chrome/toolkit/content/global/ml/ThomSample.mjs",
+ "chrome/toolkit/content/global/ml/Utils.sys.mjs",
+ "chrome/toolkit/content/global/ml/backends/LlamaCppPipeline.mjs",
+ "chrome/toolkit/content/global/ml/backends/LlamaPipeline.mjs",
+ "chrome/toolkit/content/global/ml/backends/ONNXPipeline.mjs",
+ "chrome/toolkit/content/global/ml/backends/OpenAIPipeline.mjs",
+ "chrome/toolkit/content/global/ml/backends/Pipeline.mjs",
+ "chrome/toolkit/content/global/ml/backends/StaticEmbeddingsPipeline.mjs",
+ "chrome/toolkit/content/global/ml/mozilla-logo.webp",
+ "chrome/toolkit/content/global/ml/openai.mjs",
+ "chrome/toolkit/content/global/ml/ort-wasm-simd-threaded.jsep.mjs",
+ "chrome/toolkit/content/global/ml/ort.webgpu.mjs",
+ "chrome/toolkit/content/global/ml/security/ConditionEvaluator.sys.mjs",
+ "chrome/toolkit/content/global/ml/security/DecisionTypes.sys.mjs",
+ "chrome/toolkit/content/global/ml/security/PolicyEvaluator.sys.mjs",
+ "chrome/toolkit/content/global/ml/security/SecurityLogger.sys.mjs",
+ "chrome/toolkit/content/global/ml/security/SecurityOrchestrator.sys.mjs",
+ "chrome/toolkit/content/global/ml/security/SecurityUtils.sys.mjs",
+ "chrome/toolkit/content/global/ml/security/policies/tool-execution-policies.json",
+ "chrome/toolkit/content/global/ml/transformers.js",
+ "chrome/toolkit/content/global/ml/wllama-module.mjs",
+ "chrome/toolkit/content/global/mozilla.html",
+ "chrome/toolkit/content/global/net-error-card.mjs",
+ "chrome/toolkit/content/global/neterror/aboutNetErrorCodes.js",
+ "chrome/toolkit/content/global/neterror/supportpages/connection-not-secure.html",
+ "chrome/toolkit/content/global/neterror/supportpages/time-errors.html",
+ "chrome/toolkit/content/global/pictureinpicture/player.js",
+ "chrome/toolkit/content/global/pictureinpicture/player.xhtml",
+ "chrome/toolkit/content/global/preferences/AsyncSetting.mjs",
+ "chrome/toolkit/content/global/preferences/Preference.mjs",
+ "chrome/toolkit/content/global/preferences/Preferences.mjs",
+ "chrome/toolkit/content/global/preferences/Setting.mjs",
+ "chrome/toolkit/content/global/preferencesBindings.js",
+ "chrome/toolkit/content/global/print.css",
+ "chrome/toolkit/content/global/print.html",
+ "chrome/toolkit/content/global/print.js",
+ "chrome/toolkit/content/global/printPagination.css",
+ "chrome/toolkit/content/global/printPreview.css",
+ "chrome/toolkit/content/global/printPreviewPagination.js",
+ "chrome/toolkit/content/global/printUtils.js",
+ "chrome/toolkit/content/global/process-content.js",
+ "chrome/toolkit/content/global/reader/aboutReader.html",
+ "chrome/toolkit/content/global/reader/moz-slider.css",
+ "chrome/toolkit/content/global/reader/moz-slider.mjs",
+ "chrome/toolkit/content/global/resetProfile.css",
+ "chrome/toolkit/content/global/resetProfile.js",
+ "chrome/toolkit/content/global/resetProfile.xhtml",
+ "chrome/toolkit/content/global/resetProfileProgress.xhtml",
+ "chrome/toolkit/content/global/resistfingerprinting/letterboxing.css",
+ "chrome/toolkit/content/global/selectDialog.css",
+ "chrome/toolkit/content/global/selectDialog.js",
+ "chrome/toolkit/content/global/selectDialog.xhtml",
+ "chrome/toolkit/content/global/simplifyMode.css",
+ "chrome/toolkit/content/global/third_party/cfworker/json-schema.js",
+ "chrome/toolkit/content/global/third_party/d3/d3.js",
+ "chrome/toolkit/content/global/toggle-group.css",
+ "chrome/toolkit/content/global/translations/TranslationsFeature.sys.mjs",
+ "chrome/toolkit/content/global/translations/TranslationsTelemetry.sys.mjs",
+ "chrome/toolkit/content/global/translations/TranslationsUtils.mjs",
+ "chrome/toolkit/content/global/translations/Translator.mjs",
+ "chrome/toolkit/content/global/translations/about-translations.css",
+ "chrome/toolkit/content/global/translations/about-translations.html",
+ "chrome/toolkit/content/global/translations/about-translations.mjs",
+ "chrome/toolkit/content/global/translations/bergamot-translator.js",
+ "chrome/toolkit/content/global/translations/translations-document.sys.mjs",
+ "chrome/toolkit/content/global/translations/translations-engine.sys.mjs",
+ "chrome/toolkit/content/global/translations/translations-engine.worker.js",
+ "chrome/toolkit/content/global/treeUtils.js",
+ "chrome/toolkit/content/global/usercharacteristics/gl-matrix.js",
+ "chrome/toolkit/content/global/usercharacteristics/ssdeep.js",
+ "chrome/toolkit/content/global/usercharacteristics/usercharacteristics.css",
+ "chrome/toolkit/content/global/usercharacteristics/usercharacteristics.html",
+ "chrome/toolkit/content/global/usercharacteristics/usercharacteristics.js",
+ "chrome/toolkit/content/global/usercharacteristics/usercharacteristics.woff",
+ "chrome/toolkit/content/global/vendor/Redux.sys.mjs",
+ "chrome/toolkit/content/global/vendor/lit.all.mjs",
+ "chrome/toolkit/content/global/vendor/prop-types.js",
+ "chrome/toolkit/content/global/vendor/react-dom.js",
+ "chrome/toolkit/content/global/vendor/react-redux.js",
+ "chrome/toolkit/content/global/vendor/react-transition-group.js",
+ "chrome/toolkit/content/global/vendor/react.js",
+ "chrome/toolkit/content/global/vendor/redux.js",
+ "chrome/toolkit/content/global/viewSourceUtils.js",
+ "chrome/toolkit/content/global/viewZoomOverlay.js",
+ "chrome/toolkit/content/global/widgets.css",
+ "chrome/toolkit/content/global/win.xhtml",
+ "chrome/toolkit/content/global/xml/XMLPrettyPrint.css",
+ "chrome/toolkit/content/global/xml/XMLPrettyPrint.xsl",
+ "chrome/toolkit/content/global/xul.css"
+ ],
+ "prefixes": [
+ "chrome/toolkit/content/global/"
+ ]
+ },
+ "omni.ja|resource|content-accessible": {
+ "files": [
+ "contentaccessible/ImageDocument.css",
+ "contentaccessible/TopLevelImageDocument.css",
+ "contentaccessible/TopLevelVideoDocument.css",
+ "contentaccessible/close-12.svg",
+ "contentaccessible/html/folder.png",
+ "contentaccessible/plaintext.css",
+ "contentaccessible/viewsource.css"
+ ],
+ "prefixes": [
+ "contentaccessible/"
+ ]
+ },
+ "omni.ja|resource|normandy-content": {
+ "files": [
+ "chrome/toolkit/res/normandy/content/AboutPages.sys.mjs",
+ "chrome/toolkit/res/normandy/content/ShieldFrameChild.sys.mjs",
+ "chrome/toolkit/res/normandy/content/ShieldFrameParent.sys.mjs",
+ "chrome/toolkit/res/normandy/content/about-studies/about-studies.css",
+ "chrome/toolkit/res/normandy/content/about-studies/about-studies.html",
+ "chrome/toolkit/res/normandy/content/about-studies/about-studies.js"
+ ],
+ "prefixes": [
+ "chrome/toolkit/res/normandy/content/"
+ ]
+ },
+ "omni.ja|resource|normandy-vendor": {
+ "files": [
+ "chrome/toolkit/res/normandy/vendor/LICENSE_THIRDPARTY",
+ "chrome/toolkit/res/normandy/vendor/classnames.js"
+ ],
+ "prefixes": [
+ "chrome/toolkit/res/normandy/vendor/"
+ ]
+ }
+ }
+}
diff --git a/scripts/data/font-bundle.json b/scripts/data/font-bundle.json
new file mode 100644
index 000000000..181a1e8f2
--- /dev/null
+++ b/scripts/data/font-bundle.json
@@ -0,0 +1,10 @@
+{
+ "tag": "font-bundle-v1",
+ "asset": "fonts-bundle-v1.tar.xz",
+ "size": 842795560,
+ "sha256": "8f345ce22a475c45eb9974d3e739fe1a2f5a742882c58727dbc55ab69cae8953",
+ "url": "https://github.com/daijro/camoufox/releases/download/font-bundle-v1/fonts-bundle-v1.tar.xz",
+ "repo": "daijro/camoufox",
+ "urlTemplate": "https://github.com/{repo}/releases/download/{tag}/{asset}",
+ "note": "The font bundle is a release asset, not repo content, and it is hosted by the UPSTREAM repo so a build here never depends on a contributor's fork. See scripts/fetch-fonts.py. Regenerate with --write-spec after rebuilding it."
+}
diff --git a/scripts/data/font-manifests.json b/scripts/data/font-manifests.json
new file mode 100644
index 000000000..4e20e996e
--- /dev/null
+++ b/scripts/data/font-manifests.json
@@ -0,0 +1,2767 @@
+{
+ "win": {
+ "bases": {
+ "win11": {
+ "weight": 1.0,
+ "fonts": [
+ "Arial",
+ "Arial Black",
+ "Bahnschrift",
+ "Calibri",
+ "Calibri Light",
+ "Cambria",
+ "Cambria Math",
+ "Candara",
+ "Candara Light",
+ "Comic Sans MS",
+ "Consolas",
+ "Constantia",
+ "Corbel",
+ "Corbel Light",
+ "Courier",
+ "Courier New",
+ "Ebrima",
+ "Franklin Gothic Medium",
+ "Gabriola",
+ "Gadugi",
+ "Georgia",
+ "Helvetica",
+ "Impact",
+ "Ink Free",
+ "Javanese Text",
+ "Leelawadee UI",
+ "Leelawadee UI Semilight",
+ "Lucida Console",
+ "Lucida Sans Unicode",
+ "MS Gothic",
+ "MS PGothic",
+ "MS Sans Serif",
+ "MS Serif",
+ "MS UI Gothic",
+ "MV Boli",
+ "Malgun Gothic",
+ "Malgun Gothic Semilight",
+ "Marlett",
+ "Microsoft Himalaya",
+ "Microsoft JhengHei",
+ "Microsoft JhengHei Light",
+ "Microsoft JhengHei UI",
+ "Microsoft JhengHei UI Light",
+ "Microsoft New Tai Lue",
+ "Microsoft PhagsPa",
+ "Microsoft Sans Serif",
+ "Microsoft Tai Le",
+ "Microsoft YaHei",
+ "Microsoft YaHei Light",
+ "Microsoft YaHei UI",
+ "Microsoft YaHei UI Light",
+ "Microsoft Yi Baiti",
+ "MingLiU-ExtB",
+ "MingLiU_HKSCS-ExtB",
+ "MingLiU_MSCS-ExtB",
+ "Mongolian Baiti",
+ "Myanmar Text",
+ "NSimSun",
+ "Nirmala Text",
+ "Nirmala Text Semilight",
+ "Nirmala UI",
+ "Nirmala UI Semilight",
+ "PMingLiU-ExtB",
+ "Palatino Linotype",
+ "Roman",
+ "Sans Serif Collection",
+ "Segoe Fluent Icons",
+ "Segoe MDL2 Assets",
+ "Segoe Print",
+ "Segoe Script",
+ "Segoe UI",
+ "Segoe UI Black",
+ "Segoe UI Emoji",
+ "Segoe UI Historic",
+ "Segoe UI Light",
+ "Segoe UI Semibold",
+ "Segoe UI Semilight",
+ "Segoe UI Symbol",
+ "Segoe UI Variable",
+ "Segoe UI Variable Display",
+ "Segoe UI Variable Small",
+ "Segoe UI Variable Text",
+ "SimSun",
+ "SimSun-ExtB",
+ "SimSun-ExtG",
+ "Sitka Banner",
+ "Sitka Display",
+ "Sitka Heading",
+ "Sitka Small",
+ "Sitka Subheading",
+ "Sitka Text",
+ "Small Fonts",
+ "Sylfaen",
+ "Symbol",
+ "Tahoma",
+ "Times",
+ "Times New Roman",
+ "Trebuchet MS",
+ "Twemoji Mozilla",
+ "Verdana",
+ "Webdings",
+ "Wingdings",
+ "Yu Gothic",
+ "Yu Gothic Light",
+ "Yu Gothic Medium",
+ "Yu Gothic UI",
+ "Yu Gothic UI Light",
+ "Yu Gothic UI Semibold",
+ "Yu Gothic UI Semilight",
+ "宋体",
+ "微軟正黑體",
+ "微軟正黑體 Light",
+ "微软雅黑",
+ "微软雅黑 Light",
+ "新宋体",
+ "新細明體-ExtB",
+ "游ゴシック",
+ "游ゴシック Light",
+ "游ゴシック Medium",
+ "細明體-ExtB",
+ "細明體_HKSCS-ExtB",
+ "細明體_MSCS-ExtB",
+ "맑은 고딕",
+ "맑은 고딕 Semilight",
+ "MS ゴシック",
+ "MS Pゴシック"
+ ],
+ "source": "win-i9, real Windows 11 build 26200.9457: C:\\Windows\\Fonts files carrying a WinSxS hardlink (OS-native, Office excluded), all-language nameID 1, plus the GDI substitution aliases and the DirectWrite optical-size scan splits"
+ }
+ },
+ "additions": [
+ {
+ "id": "office",
+ "kind": "bundle",
+ "prob": 0.602,
+ "source": "proprietary-win",
+ "fonts": [
+ "Bodoni MT Condensed",
+ "Stencil",
+ "Perpetua Titling MT",
+ "Haettenschweiler",
+ "Matura MT Script Capitals",
+ "Elephant",
+ "Gill Sans MT Ext Condensed Bold",
+ "Palace Script MT",
+ "Modern No. 20",
+ "Perpetua",
+ "Wide Latin",
+ "Kunstler Script",
+ "Rockwell Extra Bold",
+ "Bell MT",
+ "Harrington",
+ "Vivaldi",
+ "Gill Sans Ultra Bold",
+ "Bookshelf Symbol 7",
+ "Rage Italic",
+ "Agency FB",
+ "Eras Bold ITC",
+ "Old English Text MT",
+ "Broadway",
+ "Copperplate Gothic Light",
+ "Snap ITC",
+ "Forte",
+ "Gigi",
+ "Rockwell Condensed",
+ "Colonna MT",
+ "Bauhaus 93",
+ "Poor Richard",
+ "Gill Sans MT",
+ "Centaur",
+ "MS Reference Specialty",
+ "Imprint MT Shadow",
+ "Copperplate Gothic Bold",
+ "Playbill",
+ "Harlow Solid Italic",
+ "Footlight MT Light",
+ "Viner Hand ITC",
+ "Bradley Hand ITC",
+ "Calisto MT",
+ "Eras Light ITC",
+ "Parchment",
+ "Bodoni MT Black",
+ "Engravers MT",
+ "Mistral",
+ "Goudy Stout",
+ "Pristina",
+ "Brush Script MT",
+ "High Tower Text",
+ "Niagara Solid",
+ "Ravie",
+ "Gill Sans MT Condensed",
+ "Informal Roman",
+ "Algerian",
+ "Maiandra GD",
+ "Tw Cen MT Condensed",
+ "Edwardian Script ITC",
+ "Britannic Bold",
+ "OCR A Extended",
+ "Bodoni MT Poster Compressed",
+ "Tempus Sans ITC",
+ "Eras Demi ITC",
+ "Jokerman",
+ "Niagara Engraved",
+ "Magneto",
+ "French Script MT",
+ "Tw Cen MT",
+ "Berlin Sans FB Demi",
+ "Tw Cen MT Condensed Extra Bold",
+ "Castellar",
+ "Script MT Bold",
+ "Freestyle Script",
+ "Blackadder ITC",
+ "Gloucester MT Extra Condensed",
+ "Bernard MT Condensed",
+ "Curlz MT",
+ "Felix Titling",
+ "Baskerville Old Face",
+ "Vladimir Script",
+ "Rockwell",
+ "Onyx",
+ "Kristen ITC",
+ "Bodoni MT",
+ "Cooper Black",
+ "Eras Medium ITC",
+ "Californian FB",
+ "Goudy Old Style",
+ "Gill Sans Ultra Bold Condensed",
+ "Papyrus",
+ "Chiller",
+ "Showcard Gothic",
+ "Juice ITC",
+ "Berlin Sans FB",
+ "MT Extra",
+ "Book Antiqua",
+ "Bookman Old Style",
+ "Century",
+ "Century Gothic",
+ "Century Schoolbook",
+ "Dubai",
+ "Franklin Gothic Book",
+ "Franklin Gothic Demi",
+ "Franklin Gothic Demi Cond",
+ "Franklin Gothic Heavy",
+ "Garamond",
+ "Lucida Bright",
+ "Lucida Calligraphy",
+ "Lucida Fax",
+ "Lucida Handwriting",
+ "Lucida Sans Typewriter",
+ "Monotype Corsiva",
+ "MS Outlook",
+ "MS Reference Sans Serif"
+ ],
+ "measured": true
+ },
+ {
+ "id": "pan-euro",
+ "kind": "bundle",
+ "prob": 0.028,
+ "source": "proprietary-win",
+ "fonts": [
+ "Arial Nova",
+ "Georgia Pro",
+ "Gill Sans Nova",
+ "Neue Haas Grotesk Text Pro",
+ "Rockwell Nova",
+ "Verdana Pro"
+ ],
+ "measured": true
+ },
+ {
+ "id": "libreoffice",
+ "kind": "bundle",
+ "prob": 0.066,
+ "source": "open",
+ "fonts": [
+ "Caladea",
+ "Carlito",
+ "Liberation Sans",
+ "Liberation Serif",
+ "Liberation Mono",
+ "Liberation Sans Narrow",
+ "DejaVu Sans",
+ "DejaVu Serif",
+ "DejaVu Sans Mono",
+ "DejaVu Sans Condensed",
+ "DejaVu Serif Condensed",
+ "DejaVu Sans Light",
+ "DejaVu Math TeX Gyre",
+ "Source Sans 3",
+ "Source Serif 4",
+ "Source Code Pro",
+ "Noto Sans",
+ "Noto Serif",
+ "Noto Mono",
+ "Noto Sans Arabic",
+ "Noto Naskh Arabic",
+ "Noto Kufi Arabic",
+ "Noto Sans Hebrew",
+ "Noto Serif Hebrew",
+ "Noto Sans Armenian",
+ "Noto Serif Armenian",
+ "Noto Sans Georgian",
+ "Noto Serif Georgian",
+ "Noto Sans Lao",
+ "Noto Serif Lao",
+ "Noto Sans Lisu",
+ "Gentium Basic",
+ "Gentium Book Basic",
+ "Amiri",
+ "Amiri Quran",
+ "Scheherazade",
+ "Reem Kufi",
+ "David Libre",
+ "Alef",
+ "OpenSymbol",
+ "Rubik"
+ ],
+ "measured": true
+ },
+ {
+ "id": "cascadia",
+ "kind": "bundle",
+ "prob": 0.1,
+ "source": "open",
+ "fonts": [
+ "Cascadia Code",
+ "Cascadia Mono"
+ ],
+ "measured": true
+ },
+ {
+ "id": "cjk-tc",
+ "kind": "bundle",
+ "prob": 0.9,
+ "source": "proprietary-win",
+ "requiresLocale": "zh-TW",
+ "fonts": [
+ "DFKai-SB"
+ ],
+ "measured": false
+ },
+ {
+ "id": "meslo",
+ "kind": "bundle",
+ "prob": 0.04,
+ "source": "open",
+ "fonts": [
+ "Meslo LG S",
+ "Meslo LG M",
+ "Meslo LG L"
+ ],
+ "measured": true
+ },
+ {
+ "id": "dev",
+ "kind": "alacarte",
+ "prob": 0.038,
+ "source": "open",
+ "sizes": [
+ {
+ "n": 1,
+ "w": 0.32
+ },
+ {
+ "n": 2,
+ "w": 0.24
+ },
+ {
+ "n": 3,
+ "w": 0.17
+ },
+ {
+ "n": 4,
+ "w": 0.11
+ },
+ {
+ "n": 5,
+ "w": 0.07
+ },
+ {
+ "n": 6,
+ "w": 0.045
+ },
+ {
+ "n": 7,
+ "w": 0.025
+ },
+ {
+ "n": 8,
+ "w": 0.015
+ }
+ ],
+ "fonts": [
+ "Fira Code",
+ "Fira Mono",
+ "JetBrains Mono",
+ "Source Code Pro",
+ "Inconsolata",
+ "Hack",
+ "IBM Plex Mono",
+ "Roboto Mono",
+ "Anonymous Pro",
+ "Iosevka",
+ "Space Mono",
+ "Victor Mono",
+ "PT Mono",
+ "Overpass Mono"
+ ],
+ "measured": true
+ },
+ {
+ "id": "web",
+ "kind": "alacarte",
+ "prob": 0.088,
+ "source": "open",
+ "sizes": [
+ {
+ "n": 1,
+ "w": 0.32
+ },
+ {
+ "n": 2,
+ "w": 0.24
+ },
+ {
+ "n": 3,
+ "w": 0.17
+ },
+ {
+ "n": 4,
+ "w": 0.11
+ },
+ {
+ "n": 5,
+ "w": 0.07
+ },
+ {
+ "n": 6,
+ "w": 0.045
+ },
+ {
+ "n": 7,
+ "w": 0.025
+ },
+ {
+ "n": 8,
+ "w": 0.015
+ }
+ ],
+ "fonts": [
+ "Roboto",
+ "Open Sans",
+ "Lato",
+ "Montserrat",
+ "Poppins",
+ "Oswald",
+ "Raleway",
+ "Nunito",
+ "Nunito Sans",
+ "Inter",
+ "Roboto Condensed",
+ "Roboto Slab",
+ "Merriweather",
+ "Work Sans",
+ "Rubik",
+ "Mukta",
+ "PT Sans",
+ "PT Serif",
+ "Fira Sans",
+ "Josefin Sans",
+ "Bebas Neue",
+ "Barlow",
+ "Karla",
+ "DM Sans",
+ "Manrope",
+ "Quicksand",
+ "Playfair Display",
+ "Titillium Web",
+ "Cabin",
+ "Heebo",
+ "Source Sans 3",
+ "Source Serif 4"
+ ],
+ "measured": true
+ },
+ {
+ "id": "hololens",
+ "kind": "bundle",
+ "prob": 0.592,
+ "source": "open",
+ "measured": true,
+ "fonts": [
+ "HoloLens MDL2 Assets"
+ ]
+ }
+ ]
+ },
+ "mac": {
+ "bases": {
+ "sonoma": {
+ "weight": 0.2,
+ "fonts": [
+ "Academy Engraved LET",
+ "Al Bayan",
+ "Al Nile",
+ "Al Tarikh",
+ "American Typewriter",
+ "American Typewriter Semibold",
+ "Andale Mono",
+ "Apple Braille",
+ "Apple Chancery",
+ "Apple Color Emoji",
+ "Apple SD Gothic Neo",
+ "Apple SD Gothic Neo ExtraBold",
+ "Apple SD 산돌고딕 Neo",
+ "Apple Symbols",
+ "AppleGothic",
+ "AppleMyungjo",
+ "Arial",
+ "Arial Black",
+ "Arial Hebrew",
+ "Arial Hebrew Scholar",
+ "Arial Narrow",
+ "Arial Rounded MT Bold",
+ "Arial Unicode MS",
+ "Athelas",
+ "Avenir",
+ "Avenir Black",
+ "Avenir Black Oblique",
+ "Avenir Book",
+ "Avenir Heavy",
+ "Avenir Light",
+ "Avenir Medium",
+ "Avenir Next",
+ "Avenir Next Demi Bold",
+ "Avenir Next Heavy",
+ "Avenir Next Medium",
+ "Avenir Next Ultra Light",
+ "Ayuthaya",
+ "Baghdad",
+ "Bangla MN",
+ "Bangla Sangam MN",
+ "Baskerville",
+ "Beirut",
+ "Big Caslon",
+ "Bodoni 72",
+ "Bodoni 72 Oldstyle",
+ "Bodoni 72 Smallcaps",
+ "Bodoni Ornaments",
+ "Bradley Hand",
+ "Brush Script MT",
+ "Chalkboard",
+ "Chalkboard SE",
+ "Chalkduster",
+ "Charter",
+ "Charter Black",
+ "Cochin",
+ "Comic Sans MS",
+ "Copperplate",
+ "Corsiva Hebrew",
+ "Courier",
+ "Courier New",
+ "Czcionka systemowa",
+ "DIN Alternate",
+ "DIN Condensed",
+ "Damascus",
+ "DecoType Naskh",
+ "Devanagari MT",
+ "Devanagari Sangam MN",
+ "Didot",
+ "Diwan Kufi",
+ "Diwan Thuluth",
+ "Euphemia UCAS",
+ "Farah",
+ "Farisi",
+ "Font Sistem",
+ "Font de sistem",
+ "Font di sistema",
+ "Font sustava",
+ "Fonte do Sistema",
+ "Futura",
+ "Futura Bold",
+ "GB18030 Bitmap",
+ "Galvji",
+ "Geeza Pro",
+ "Geneva",
+ "Georgia",
+ "Gill Sans",
+ "Grantha Sangam MN",
+ "Gujarati MT",
+ "Gujarati Sangam MN",
+ "Gurmukhi MN",
+ "Gurmukhi MT",
+ "Gurmukhi Sangam MN",
+ "Heiti SC",
+ "Heiti TC",
+ "Heiti-간체",
+ "Heiti-번체",
+ "Helvetica",
+ "Helvetica Neue",
+ "Hiragino Kaku Gothic Pro",
+ "Hiragino Kaku Gothic Std",
+ "Hiragino Kaku Gothic StdN",
+ "Hiragino Maru Gothic Pro",
+ "Hiragino Maru Gothic ProN",
+ "Hiragino Maru Gothic ProN W4",
+ "Hiragino Mincho Pro",
+ "Hiragino Mincho ProN",
+ "Hiragino Mincho ProN W3",
+ "Hiragino Mincho ProN W6",
+ "Hiragino Sans",
+ "Hiragino Sans GB",
+ "Hiragino Sans GB W3",
+ "Hiragino Sans GB W6",
+ "Hiragino Sans W0",
+ "Hiragino Sans W1",
+ "Hiragino Sans W2",
+ "Hiragino Sans W3",
+ "Hiragino Sans W4",
+ "Hiragino Sans W5",
+ "Hiragino Sans W6",
+ "Hiragino Sans W7",
+ "Hiragino Sans W8",
+ "Hiragino Sans W9",
+ "Hoefler Text",
+ "Hoefler Text Ornaments",
+ "ITF Devanagari",
+ "ITF Devanagari Marathi",
+ "Impact",
+ "InaiMathi",
+ "InaiMathi Bold",
+ "Iowan Old Style",
+ "Järjestelmäfontti",
+ "Kailasa",
+ "Kannada MN",
+ "Kannada Sangam MN",
+ "Kefa",
+ "Khmer MN",
+ "Khmer Sangam MN",
+ "Kohinoor Bangla",
+ "Kohinoor Devanagari",
+ "Kohinoor Devanagari Medium",
+ "Kohinoor Gujarati",
+ "Kohinoor Telugu",
+ "Kokonor",
+ "Krungthep",
+ "KufiStandardGK",
+ "Lao MN",
+ "Lao Sangam MN",
+ "Lucida Grande",
+ "Luminari",
+ "Malayalam MN",
+ "Malayalam Sangam MN",
+ "Marker Felt",
+ "Menlo",
+ "Microsoft Sans Serif",
+ "Mishafi",
+ "Mishafi Gold",
+ "Monaco",
+ "Mshtakan",
+ "Mukta Mahee",
+ "MuktaMahee Bold",
+ "MuktaMahee ExtraBold",
+ "MuktaMahee ExtraLight",
+ "MuktaMahee Light",
+ "MuktaMahee Medium",
+ "MuktaMahee Regular",
+ "MuktaMahee SemiBold",
+ "Muna",
+ "Myanmar MN",
+ "Myanmar Sangam MN",
+ "Nadeem",
+ "New Peninim MT",
+ "Noteworthy",
+ "Noto Nastaliq Urdu",
+ "Noto Sans Adlam",
+ "Noto Sans Armenian",
+ "Noto Sans Armenian Blk",
+ "Noto Sans Armenian ExtBd",
+ "Noto Sans Armenian ExtLt",
+ "Noto Sans Armenian Light",
+ "Noto Sans Armenian Med",
+ "Noto Sans Armenian SemBd",
+ "Noto Sans Armenian Thin",
+ "Noto Sans Avestan",
+ "Noto Sans Bamum",
+ "Noto Sans Bassa Vah",
+ "Noto Sans Batak",
+ "Noto Sans Bhaiksuki",
+ "Noto Sans Brahmi",
+ "Noto Sans Buginese",
+ "Noto Sans Buhid",
+ "Noto Sans CanAborig",
+ "Noto Sans Canadian Aboriginal",
+ "Noto Sans Canadian Aboriginal Regular",
+ "Noto Sans Carian",
+ "Noto Sans CaucAlban",
+ "Noto Sans Caucasian Albanian",
+ "Noto Sans Chakma",
+ "Noto Sans Cham",
+ "Noto Sans Coptic",
+ "Noto Sans Cuneiform",
+ "Noto Sans Cypriot",
+ "Noto Sans Duployan",
+ "Noto Sans EgyptHiero",
+ "Noto Sans Egyptian Hieroglyphs",
+ "Noto Sans Elbasan",
+ "Noto Sans Glagolitic",
+ "Noto Sans Gothic",
+ "Noto Sans Gunjala Gondi",
+ "Noto Sans Gunjala Gondi Regular",
+ "Noto Sans Hanifi Rohingya",
+ "Noto Sans HanifiRohg",
+ "Noto Sans Hanunoo",
+ "Noto Sans Hatran",
+ "Noto Sans ImpAramaic",
+ "Noto Sans Imperial Aramaic",
+ "Noto Sans InsPahlavi",
+ "Noto Sans InsParthi",
+ "Noto Sans Inscriptional Pahlavi",
+ "Noto Sans Inscriptional Parthian",
+ "Noto Sans Javanese",
+ "Noto Sans Kaithi",
+ "Noto Sans Kannada",
+ "Noto Sans Kannada Black",
+ "Noto Sans Kannada ExtraBold",
+ "Noto Sans Kannada ExtraLight",
+ "Noto Sans Kannada Light",
+ "Noto Sans Kannada Medium",
+ "Noto Sans Kannada SemiBold",
+ "Noto Sans Kannada Thin",
+ "Noto Sans Kayah Li",
+ "Noto Sans Kharoshthi",
+ "Noto Sans Khojki",
+ "Noto Sans Khudawadi",
+ "Noto Sans Lepcha",
+ "Noto Sans Limbu",
+ "Noto Sans Linear A",
+ "Noto Sans Linear B",
+ "Noto Sans Lisu",
+ "Noto Sans Lycian",
+ "Noto Sans Lydian",
+ "Noto Sans Mahajani",
+ "Noto Sans Mandaic",
+ "Noto Sans Manichaean",
+ "Noto Sans Marchen",
+ "Noto Sans Masaram Gondi",
+ "Noto Sans Masaram Gondi Regular",
+ "Noto Sans Meetei Mayek",
+ "Noto Sans Mende Kikakui",
+ "Noto Sans Meroitic",
+ "Noto Sans Miao",
+ "Noto Sans Modi",
+ "Noto Sans Mongolian",
+ "Noto Sans Mro",
+ "Noto Sans Multani",
+ "Noto Sans Myanmar",
+ "Noto Sans Myanmar Blk",
+ "Noto Sans Myanmar ExtBd",
+ "Noto Sans Myanmar ExtLt",
+ "Noto Sans Myanmar Light",
+ "Noto Sans Myanmar Med",
+ "Noto Sans Myanmar SemBd",
+ "Noto Sans Myanmar Thin",
+ "Noto Sans NKo",
+ "Noto Sans Nabataean",
+ "Noto Sans New Tai Lue",
+ "Noto Sans Newa",
+ "Noto Sans Ol Chiki",
+ "Noto Sans Old Hungarian",
+ "Noto Sans Old Italic",
+ "Noto Sans Old North Arabian",
+ "Noto Sans Old Permic",
+ "Noto Sans Old Persian",
+ "Noto Sans Old South Arabian",
+ "Noto Sans Old Turkic",
+ "Noto Sans OldHung",
+ "Noto Sans OldNorArab",
+ "Noto Sans OldSouArab",
+ "Noto Sans Oriya",
+ "Noto Sans Osage",
+ "Noto Sans Osmanya",
+ "Noto Sans Pahawh Hmong",
+ "Noto Sans Palmyrene",
+ "Noto Sans Pau Cin Hau",
+ "Noto Sans PhagsPa",
+ "Noto Sans Phoenician",
+ "Noto Sans PsaPahlavi",
+ "Noto Sans Psalter Pahlavi",
+ "Noto Sans Rejang",
+ "Noto Sans Samaritan",
+ "Noto Sans Saurashtra",
+ "Noto Sans Sharada",
+ "Noto Sans Siddham",
+ "Noto Sans Sora Sompeng",
+ "Noto Sans SoraSomp",
+ "Noto Sans Sundanese",
+ "Noto Sans Syloti Nagri",
+ "Noto Sans Syriac",
+ "Noto Sans Tagalog",
+ "Noto Sans Tagbanwa",
+ "Noto Sans Tai Le",
+ "Noto Sans Tai Tham",
+ "Noto Sans Tai Viet",
+ "Noto Sans Takri",
+ "Noto Sans Thaana",
+ "Noto Sans Tifinagh",
+ "Noto Sans Tirhuta",
+ "Noto Sans Ugaritic",
+ "Noto Sans Vai",
+ "Noto Sans Wancho",
+ "Noto Sans Warang Citi",
+ "Noto Sans Yi",
+ "Noto Sans Zawgyi",
+ "Noto Sans Zawgyi Blk",
+ "Noto Sans Zawgyi ExtBd",
+ "Noto Sans Zawgyi ExtLt",
+ "Noto Sans Zawgyi Light",
+ "Noto Sans Zawgyi Med",
+ "Noto Sans Zawgyi SemBd",
+ "Noto Sans Zawgyi Thin",
+ "Noto Serif Ahom",
+ "Noto Serif Balinese",
+ "Noto Serif Hmong Nyiakeng",
+ "Noto Serif Myanmar",
+ "Noto Serif Myanmar Blk",
+ "Noto Serif Myanmar ExtBd",
+ "Noto Serif Myanmar ExtLt",
+ "Noto Serif Myanmar Light",
+ "Noto Serif Myanmar Med",
+ "Noto Serif Myanmar SemBd",
+ "Noto Serif Myanmar Thin",
+ "Noto Serif Yezidi",
+ "Noto Serif Yezidi Regular",
+ "Optima",
+ "Oriya MN",
+ "Oriya Sangam MN",
+ "PT Mono",
+ "PT Sans",
+ "PT Sans Caption",
+ "PT Sans Narrow",
+ "PT Serif",
+ "PT Serif Caption",
+ "Palatino",
+ "Papyrus",
+ "Party LET",
+ "Phosphate",
+ "Phông chữ Hệ thống",
+ "PingFang HK",
+ "PingFang HK Light",
+ "PingFang SC",
+ "PingFang TC",
+ "Plantagenet Cherokee",
+ "Police système",
+ "Raanana",
+ "Rendszerbetűtípus",
+ "Rockwell",
+ "STIX Two Math",
+ "STIX Two Math Regular",
+ "STIX Two Text",
+ "STIX Two Text Regular",
+ "STIXGeneral",
+ "STIXIntegralsD",
+ "STIXIntegralsSm",
+ "STIXIntegralsUp",
+ "STIXIntegralsUpD",
+ "STIXIntegralsUpSm",
+ "STIXNonUnicode",
+ "STIXSizeFiveSym",
+ "STIXSizeFourSym",
+ "STIXSizeOneSym",
+ "STIXSizeThreeSym",
+ "STIXSizeTwoSym",
+ "STIXVariants",
+ "STSong",
+ "Sana",
+ "Sathu",
+ "Savoye LET",
+ "Shree Devanagari 714",
+ "SignPainter",
+ "SignPainter-HouseScript",
+ "SignPainter-HouseScript Semibold",
+ "Silom",
+ "Sinhala MN",
+ "Sinhala Sangam MN",
+ "Sistem Fontu",
+ "Skia",
+ "Snell Roundhand",
+ "Songti SC",
+ "Songti TC",
+ "Sukhumvit Set",
+ "Superclarendon",
+ "Symbol",
+ "Systeemlettertype",
+ "System Font",
+ "Systemschrift",
+ "Systemskrift",
+ "Systemtypsnitt",
+ "Systémové písmo",
+ "Tahoma",
+ "Tamil MN",
+ "Tamil Sangam MN",
+ "Telugu MN",
+ "Telugu Sangam MN",
+ "Thonburi",
+ "Times",
+ "Times New Roman",
+ "Tipo de letra del sistema",
+ "Tipo de letra do sistema",
+ "Tipus de lletra del sistema",
+ "Trattatello",
+ "Trebuchet MS",
+ "Verdana",
+ "Waseem",
+ "Webdings",
+ "Wingdings",
+ "Wingdings 2",
+ "Wingdings 3",
+ "Zapf Dingbats",
+ "Zapfino",
+ "Γραμματοσειρά συστήματος",
+ "Системний шрифт",
+ "Системный шрифт",
+ "גופן מערכת",
+ "البيان",
+ "التاريخ",
+ "النيل",
+ "بغداد",
+ "بيروت",
+ "جيزة",
+ "خط النظام",
+ "دمشق",
+ "ديوان ثلث",
+ "ديوان كوفي",
+ "صنعاء",
+ "فارسي",
+ "فرح",
+ "كوفي",
+ "منى",
+ "مِصحفي",
+ "مِصحفي ذهبي",
+ "نديم",
+ "نسخ",
+ "وسيم",
+ "आई॰टी॰एफ़॰ देवनागरी",
+ "आई॰टी॰एफ़॰ देवनागरी मराठी",
+ "कोहिनूर देवनागरी",
+ "देवनागरी एम॰टी॰",
+ "देवनागरी संगम एम॰एन॰",
+ "श्री देवनागरी ७१४",
+ "แบบอักษรระบบ",
+ "システムフォント",
+ "ヒラギノ丸ゴ Pro",
+ "ヒラギノ丸ゴ Pro W4",
+ "ヒラギノ丸ゴ ProN",
+ "ヒラギノ丸ゴ ProN W4",
+ "ヒラギノ明朝 Pro",
+ "ヒラギノ明朝 Pro W3",
+ "ヒラギノ明朝 Pro W6",
+ "ヒラギノ明朝 ProN",
+ "ヒラギノ明朝 ProN W3",
+ "ヒラギノ明朝 ProN W6",
+ "ヒラギノ角ゴ Pro",
+ "ヒラギノ角ゴ Pro W3",
+ "ヒラギノ角ゴ Pro W6",
+ "ヒラギノ角ゴ ProN",
+ "ヒラギノ角ゴ ProN W3",
+ "ヒラギノ角ゴ ProN W6",
+ "ヒラギノ角ゴ Std",
+ "ヒラギノ角ゴ Std W8",
+ "ヒラギノ角ゴ StdN",
+ "ヒラギノ角ゴ StdN W8",
+ "ヒラギノ角ゴ 簡体中文",
+ "ヒラギノ角ゴ 簡体中文 W3",
+ "ヒラギノ角ゴ 簡体中文 W6",
+ "ヒラギノ角ゴシック",
+ "ヒラギノ角ゴシック W0",
+ "ヒラギノ角ゴシック W1",
+ "ヒラギノ角ゴシック W2",
+ "ヒラギノ角ゴシック W3",
+ "ヒラギノ角ゴシック W4",
+ "ヒラギノ角ゴシック W5",
+ "ヒラギノ角ゴシック W6",
+ "ヒラギノ角ゴシック W7",
+ "ヒラギノ角ゴシック W8",
+ "ヒラギノ角ゴシック W9",
+ "冬青黑体简体中文",
+ "冬青黑体简体中文 W3",
+ "冬青黑体简体中文 W6",
+ "冬青黑體簡體中文",
+ "冬青黑體簡體中文 W3",
+ "冬青黑體簡體中文 W6",
+ "宋体-简",
+ "宋体-繁",
+ "宋體-簡",
+ "宋體-繁",
+ "系統字體",
+ "系统字体",
+ "苹方-港",
+ "苹方-简",
+ "苹方-繁",
+ "蘋方-港",
+ "蘋方-簡",
+ "蘋方-繁",
+ "黑体-简",
+ "黑体-繁",
+ "黑體-簡",
+ "黑體-繁",
+ "黒体-簡",
+ "黒体-繁",
+ "시스템 서체"
+ ],
+ "source": "inherited from Holo (captured from Jake's own Mac before it was upgraded to macOS 26). NOT re-verifiable: that machine now runs 26. Six family names were stored mojibaked (Shift-JIS read as UTF-16BE) and were repaired 2026-09-22."
+ },
+ "tahoe26": {
+ "weight": 0.65,
+ "fonts": [
+ "Academy Engraved LET",
+ "Al Bayan",
+ "Al Nile",
+ "Al Tarikh",
+ "American Typewriter",
+ "Andale Mono",
+ "Apple Braille",
+ "Apple Chancery",
+ "Apple Color Emoji",
+ "Apple SD Gothic Neo",
+ "Apple Symbols",
+ "AppleGothic",
+ "AppleMyungjo",
+ "Arial",
+ "Arial Black",
+ "Arial Hebrew",
+ "Arial Hebrew Scholar",
+ "Arial Narrow",
+ "Arial Rounded MT Bold",
+ "Arial Unicode MS",
+ "Athelas",
+ "Avenir",
+ "Avenir Black",
+ "Avenir Black Oblique",
+ "Avenir Book",
+ "Avenir Heavy",
+ "Avenir Light",
+ "Avenir Medium",
+ "Avenir Next",
+ "Avenir Next Demi Bold",
+ "Avenir Next Heavy",
+ "Avenir Next Medium",
+ "Avenir Next Ultra Light",
+ "Ayuthaya",
+ "Baghdad",
+ "Bangla MN",
+ "Bangla Sangam MN",
+ "Baskerville",
+ "Beirut",
+ "Big Caslon",
+ "Bodoni 72",
+ "Bodoni 72 Oldstyle",
+ "Bodoni 72 Smallcaps",
+ "Bodoni Ornaments",
+ "Bradley Hand",
+ "Brush Script MT",
+ "Chalkboard",
+ "Chalkboard SE",
+ "Chalkduster",
+ "Charter",
+ "Charter Black",
+ "Cochin",
+ "Comic Sans MS",
+ "Copperplate",
+ "Corsiva Hebrew",
+ "Courier",
+ "Courier New",
+ "DIN Alternate",
+ "DIN Condensed",
+ "Damascus",
+ "DecoType Naskh",
+ "Devanagari MT",
+ "Devanagari Sangam MN",
+ "Didot",
+ "Diwan Kufi",
+ "Diwan Thuluth",
+ "Euphemia UCAS",
+ "Farah",
+ "Farisi",
+ "Futura",
+ "GB18030 Bitmap",
+ "Galvji",
+ "Geeza Pro",
+ "Geneva",
+ "Georgia",
+ "Gill Sans",
+ "Grantha Sangam MN",
+ "Gujarati MT",
+ "Gujarati Sangam MN",
+ "Gurmukhi MN",
+ "Gurmukhi MT",
+ "Gurmukhi Sangam MN",
+ "Heiti SC",
+ "Heiti TC",
+ "Helvetica",
+ "Helvetica Neue",
+ "Hiragino Kaku Gothic Pro",
+ "Hiragino Kaku Gothic Std",
+ "Hiragino Kaku Gothic StdN",
+ "Hiragino Maru Gothic Pro",
+ "Hiragino Maru Gothic ProN",
+ "Hiragino Maru Gothic ProN W4",
+ "Hiragino Mincho Pro",
+ "Hiragino Mincho ProN",
+ "Hiragino Mincho ProN W3",
+ "Hiragino Mincho ProN W6",
+ "Hiragino Sans",
+ "Hiragino Sans GB",
+ "Hiragino Sans GB W3",
+ "Hiragino Sans GB W6",
+ "Hiragino Sans W0",
+ "Hiragino Sans W1",
+ "Hiragino Sans W2",
+ "Hiragino Sans W3",
+ "Hiragino Sans W4",
+ "Hiragino Sans W5",
+ "Hiragino Sans W6",
+ "Hiragino Sans W7",
+ "Hiragino Sans W8",
+ "Hiragino Sans W9",
+ "Hoefler Text",
+ "Hoefler Text Ornaments",
+ "ITF Devanagari",
+ "ITF Devanagari Marathi",
+ "Impact",
+ "InaiMathi",
+ "Iowan Old Style",
+ "Kailasa",
+ "Kannada MN",
+ "Kannada Sangam MN",
+ "Kefa III",
+ "Khmer MN",
+ "Khmer Sangam MN",
+ "Kohinoor Bangla",
+ "Kohinoor Devanagari",
+ "Kohinoor Devanagari Medium",
+ "Kohinoor Gujarati",
+ "Kohinoor Telugu",
+ "Kokonor",
+ "Krungthep",
+ "KufiStandardGK",
+ "Lao MN",
+ "Lao Sangam MN",
+ "Lucida Grande",
+ "Luminari",
+ "Malayalam MN",
+ "Malayalam Sangam MN",
+ "Marker Felt",
+ "Menlo",
+ "Microsoft Sans Serif",
+ "Mishafi",
+ "Mishafi Gold",
+ "Monaco",
+ "Mshtakan",
+ "MuktaMahee Bold",
+ "MuktaMahee ExtraBold",
+ "MuktaMahee ExtraLight",
+ "MuktaMahee Light",
+ "MuktaMahee Medium",
+ "MuktaMahee Regular",
+ "MuktaMahee SemiBold",
+ "Muna",
+ "Myanmar MN",
+ "Myanmar Sangam MN",
+ "Nadeem",
+ "New Peninim MT",
+ "Noteworthy",
+ "Noto Nastaliq Urdu",
+ "Noto Sans Adlam",
+ "Noto Sans Armenian",
+ "Noto Sans Armenian Blk",
+ "Noto Sans Armenian ExtBd",
+ "Noto Sans Armenian ExtLt",
+ "Noto Sans Armenian Light",
+ "Noto Sans Armenian Med",
+ "Noto Sans Armenian SemBd",
+ "Noto Sans Armenian Thin",
+ "Noto Sans Avestan",
+ "Noto Sans Bamum",
+ "Noto Sans Bassa Vah",
+ "Noto Sans Batak",
+ "Noto Sans Bhaiksuki",
+ "Noto Sans Brahmi",
+ "Noto Sans Buginese",
+ "Noto Sans Buhid",
+ "Noto Sans CanAborig",
+ "Noto Sans Carian",
+ "Noto Sans CaucAlban",
+ "Noto Sans Chakma",
+ "Noto Sans Cham",
+ "Noto Sans Coptic",
+ "Noto Sans Cuneiform",
+ "Noto Sans Cypriot",
+ "Noto Sans Duployan",
+ "Noto Sans EgyptHiero",
+ "Noto Sans Elbasan",
+ "Noto Sans Glagolitic",
+ "Noto Sans Gothic",
+ "Noto Sans Gunjala Gondi",
+ "Noto Sans HanifiRohg",
+ "Noto Sans Hanunoo",
+ "Noto Sans Hatran",
+ "Noto Sans ImpAramaic",
+ "Noto Sans InsPahlavi",
+ "Noto Sans InsParthi",
+ "Noto Sans Javanese",
+ "Noto Sans Kaithi",
+ "Noto Sans Kannada",
+ "Noto Sans Kannada Black",
+ "Noto Sans Kannada ExtraBold",
+ "Noto Sans Kannada ExtraLight",
+ "Noto Sans Kannada Light",
+ "Noto Sans Kannada Medium",
+ "Noto Sans Kannada SemiBold",
+ "Noto Sans Kannada Thin",
+ "Noto Sans Kayah Li",
+ "Noto Sans Kharoshthi",
+ "Noto Sans Khojki",
+ "Noto Sans Khudawadi",
+ "Noto Sans Lepcha",
+ "Noto Sans Limbu",
+ "Noto Sans Linear A",
+ "Noto Sans Linear B",
+ "Noto Sans Lisu",
+ "Noto Sans Lycian",
+ "Noto Sans Lydian",
+ "Noto Sans Mahajani",
+ "Noto Sans Mandaic",
+ "Noto Sans Manichaean",
+ "Noto Sans Marchen",
+ "Noto Sans Masaram Gondi",
+ "Noto Sans MeeteiMayek",
+ "Noto Sans Mende Kikakui",
+ "Noto Sans Meroitic",
+ "Noto Sans Miao",
+ "Noto Sans Modi",
+ "Noto Sans Mongolian",
+ "Noto Sans Mro",
+ "Noto Sans Multani",
+ "Noto Sans Myanmar",
+ "Noto Sans Myanmar Blk",
+ "Noto Sans Myanmar ExtBd",
+ "Noto Sans Myanmar ExtLt",
+ "Noto Sans Myanmar Light",
+ "Noto Sans Myanmar Med",
+ "Noto Sans Myanmar SemBd",
+ "Noto Sans Myanmar Thin",
+ "Noto Sans NKo",
+ "Noto Sans Nabataean",
+ "Noto Sans Nag Mundari",
+ "Noto Sans NewTaiLue",
+ "Noto Sans Newa",
+ "Noto Sans Ol Chiki",
+ "Noto Sans Old Italic",
+ "Noto Sans Old Permic",
+ "Noto Sans Old Turkic",
+ "Noto Sans OldHung",
+ "Noto Sans OldNorArab",
+ "Noto Sans OldPersian",
+ "Noto Sans OldSouArab",
+ "Noto Sans Oriya",
+ "Noto Sans Osage",
+ "Noto Sans Osmanya",
+ "Noto Sans Pahawh Hmong",
+ "Noto Sans Palmyrene",
+ "Noto Sans PauCinHau",
+ "Noto Sans PhagsPa",
+ "Noto Sans Phoenician",
+ "Noto Sans PsaPahlavi",
+ "Noto Sans Rejang",
+ "Noto Sans Samaritan",
+ "Noto Sans Saurashtra",
+ "Noto Sans Sharada",
+ "Noto Sans Siddham",
+ "Noto Sans SoraSomp",
+ "Noto Sans Sundanese",
+ "Noto Sans Syloti Nagri",
+ "Noto Sans Syriac",
+ "Noto Sans Tagalog",
+ "Noto Sans Tagbanwa",
+ "Noto Sans Tai Le",
+ "Noto Sans Tai Tham",
+ "Noto Sans Tai Viet",
+ "Noto Sans Takri",
+ "Noto Sans Thaana",
+ "Noto Sans Tifinagh",
+ "Noto Sans Tirhuta",
+ "Noto Sans Ugaritic",
+ "Noto Sans Vai",
+ "Noto Sans Wancho",
+ "Noto Sans WarangCiti",
+ "Noto Sans Yi",
+ "Noto Sans Zawgyi",
+ "Noto Sans Zawgyi Blk",
+ "Noto Sans Zawgyi ExtBd",
+ "Noto Sans Zawgyi ExtLt",
+ "Noto Sans Zawgyi Light",
+ "Noto Sans Zawgyi Med",
+ "Noto Sans Zawgyi SemBd",
+ "Noto Sans Zawgyi Thin",
+ "Noto Serif Ahom",
+ "Noto Serif Balinese",
+ "Noto Serif Hmong Nyiakeng",
+ "Noto Serif Myanmar",
+ "Noto Serif Myanmar Blk",
+ "Noto Serif Myanmar ExtBd",
+ "Noto Serif Myanmar ExtLt",
+ "Noto Serif Myanmar Light",
+ "Noto Serif Myanmar Med",
+ "Noto Serif Myanmar SemBd",
+ "Noto Serif Myanmar Thin",
+ "Noto Serif Yezidi",
+ "Optima",
+ "Oriya MN",
+ "Oriya Sangam MN",
+ "PT Mono",
+ "PT Sans",
+ "PT Sans Caption",
+ "PT Sans Narrow",
+ "PT Serif",
+ "PT Serif Caption",
+ "Palatino",
+ "Papyrus",
+ "Party LET",
+ "Phosphate",
+ "PingFang HK",
+ "PingFang MO",
+ "PingFang SC",
+ "PingFang TC",
+ "Plantagenet Cherokee",
+ "Raanana",
+ "Rockwell",
+ "STIX Two Math",
+ "STIX Two Text",
+ "STIXGeneral",
+ "STIXIntegralsD",
+ "STIXIntegralsSm",
+ "STIXIntegralsUp",
+ "STIXIntegralsUpD",
+ "STIXIntegralsUpSm",
+ "STIXNonUnicode",
+ "STIXSizeFiveSym",
+ "STIXSizeFourSym",
+ "STIXSizeOneSym",
+ "STIXSizeThreeSym",
+ "STIXSizeTwoSym",
+ "STIXVariants",
+ "STSong",
+ "Sana",
+ "Sathu",
+ "Savoye LET",
+ "Shree Devanagari 714",
+ "SignPainter-HouseScript",
+ "Silom",
+ "Sinhala MN",
+ "Sinhala Sangam MN",
+ "Skia",
+ "Snell Roundhand",
+ "Songti SC",
+ "Songti TC",
+ "Sukhumvit Set",
+ "Superclarendon",
+ "Symbol",
+ "System Font",
+ "Tahoma",
+ "Tamil MN",
+ "Tamil Sangam MN",
+ "Telugu MN",
+ "Telugu Sangam MN",
+ "Thonburi",
+ "Times",
+ "Times New Roman",
+ "Trattatello",
+ "Trebuchet MS",
+ "Verdana",
+ "Waseem",
+ "Webdings",
+ "Wingdings",
+ "Wingdings 2",
+ "Wingdings 3",
+ "Zapf Dingbats",
+ "Zapfino"
+ ],
+ "source": "jobharvest-mac, real macOS 26.6.2 build 25G83: /System/Library/Fonts + /Library/Fonts + ~/Library/Fonts, nameID 1, dot-prefixed (CoreText-private) families excluded; PingFang added because macOS 26 serves it from FontServices.framework/.../Reserved where a public-directory scan cannot see it"
+ },
+ "macos27": {
+ "weight": 0.15,
+ "fonts": [
+ "Academy Engraved LET",
+ "Al Bayan",
+ "Al Nile",
+ "Al Tarikh",
+ "American Typewriter",
+ "Andale Mono",
+ "Apple Braille",
+ "Apple Chancery",
+ "Apple Color Emoji",
+ "Apple SD Gothic Neo",
+ "Apple Symbols",
+ "AppleGothic",
+ "AppleMyungjo",
+ "Arial",
+ "Arial Black",
+ "Arial Hebrew",
+ "Arial Hebrew Scholar",
+ "Arial Narrow",
+ "Arial Rounded MT Bold",
+ "Arial Unicode MS",
+ "Athelas",
+ "Avenir",
+ "Avenir Black",
+ "Avenir Black Oblique",
+ "Avenir Book",
+ "Avenir Heavy",
+ "Avenir Light",
+ "Avenir Medium",
+ "Avenir Next",
+ "Avenir Next Demi Bold",
+ "Avenir Next Heavy",
+ "Avenir Next Medium",
+ "Avenir Next Ultra Light",
+ "Ayuthaya",
+ "Baghdad",
+ "Bangla MN",
+ "Bangla Sangam MN",
+ "Baskerville",
+ "Beirut",
+ "Big Caslon",
+ "Bodoni 72",
+ "Bodoni 72 Oldstyle",
+ "Bodoni 72 Smallcaps",
+ "Bodoni Ornaments",
+ "Bradley Hand",
+ "Brush Script MT",
+ "Chalkboard",
+ "Chalkboard SE",
+ "Chalkduster",
+ "Charter",
+ "Charter Black",
+ "Cochin",
+ "Comic Sans MS",
+ "Copperplate",
+ "Corsiva Hebrew",
+ "Courier",
+ "Courier New",
+ "DIN Alternate",
+ "DIN Condensed",
+ "Damascus",
+ "DecoType Naskh",
+ "Devanagari MT",
+ "Devanagari Sangam MN",
+ "Didot",
+ "Diwan Kufi",
+ "Diwan Thuluth",
+ "Euphemia UCAS",
+ "Farah",
+ "Farisi",
+ "Futura",
+ "GB18030 Bitmap",
+ "Galvji",
+ "Geeza Pro",
+ "Geneva",
+ "Georgia",
+ "Gill Sans",
+ "Grantha Sangam MN",
+ "Gujarati MT",
+ "Gujarati Sangam MN",
+ "Gurmukhi MN",
+ "Gurmukhi MT",
+ "Gurmukhi Sangam MN",
+ "Heiti SC",
+ "Heiti TC",
+ "Helvetica",
+ "Helvetica Neue",
+ "Hiragino Kaku Gothic Pro",
+ "Hiragino Kaku Gothic Std",
+ "Hiragino Kaku Gothic StdN",
+ "Hiragino Maru Gothic Pro",
+ "Hiragino Maru Gothic ProN",
+ "Hiragino Maru Gothic ProN W4",
+ "Hiragino Mincho Pro",
+ "Hiragino Mincho ProN",
+ "Hiragino Mincho ProN W3",
+ "Hiragino Mincho ProN W6",
+ "Hiragino Sans",
+ "Hiragino Sans GB",
+ "Hiragino Sans GB W3",
+ "Hiragino Sans GB W6",
+ "Hiragino Sans W0",
+ "Hiragino Sans W1",
+ "Hiragino Sans W2",
+ "Hiragino Sans W3",
+ "Hiragino Sans W4",
+ "Hiragino Sans W5",
+ "Hiragino Sans W6",
+ "Hiragino Sans W7",
+ "Hiragino Sans W8",
+ "Hiragino Sans W9",
+ "Hoefler Text",
+ "Hoefler Text Ornaments",
+ "ITF Devanagari",
+ "ITF Devanagari Marathi",
+ "Impact",
+ "InaiMathi",
+ "Iowan Old Style",
+ "Kailasa",
+ "Kannada MN",
+ "Kannada Sangam MN",
+ "Kefa III",
+ "Khmer MN",
+ "Khmer Sangam MN",
+ "Kohinoor Bangla",
+ "Kohinoor Devanagari",
+ "Kohinoor Gujarati",
+ "Kohinoor Telugu",
+ "Kokonor",
+ "Krungthep",
+ "KufiStandardGK",
+ "Lao MN",
+ "Lao Sangam MN",
+ "Lucida Grande",
+ "Luminari",
+ "Malayalam MN",
+ "Malayalam Sangam MN",
+ "Marker Felt",
+ "Menlo",
+ "Microsoft Sans Serif",
+ "Mishafi",
+ "Mishafi Gold",
+ "Monaco",
+ "Mshtakan",
+ "MuktaMahee Bold",
+ "MuktaMahee ExtraBold",
+ "MuktaMahee ExtraLight",
+ "MuktaMahee Light",
+ "MuktaMahee Medium",
+ "MuktaMahee Regular",
+ "MuktaMahee SemiBold",
+ "Muna",
+ "Myanmar MN",
+ "Myanmar Sangam MN",
+ "Nadeem",
+ "New Peninim MT",
+ "Noteworthy",
+ "Noto Nastaliq Urdu",
+ "Noto Sans Adlam",
+ "Noto Sans Armenian",
+ "Noto Sans Armenian Blk",
+ "Noto Sans Armenian ExtBd",
+ "Noto Sans Armenian ExtLt",
+ "Noto Sans Armenian Light",
+ "Noto Sans Armenian Med",
+ "Noto Sans Armenian SemBd",
+ "Noto Sans Armenian Thin",
+ "Noto Sans Avestan",
+ "Noto Sans Bamum",
+ "Noto Sans Bassa Vah",
+ "Noto Sans Batak",
+ "Noto Sans Bhaiksuki",
+ "Noto Sans Buginese",
+ "Noto Sans Buhid",
+ "Noto Sans Carian",
+ "Noto Sans CaucAlban",
+ "Noto Sans Chakma",
+ "Noto Sans Cham",
+ "Noto Sans Coptic",
+ "Noto Sans Cuneiform",
+ "Noto Sans Cypriot",
+ "Noto Sans Duployan",
+ "Noto Sans EgyptHiero",
+ "Noto Sans Elbasan",
+ "Noto Sans Glagolitic",
+ "Noto Sans Gothic",
+ "Noto Sans Gunjala Gondi",
+ "Noto Sans HanifiRohg",
+ "Noto Sans Hanunoo",
+ "Noto Sans Hatran",
+ "Noto Sans ImpAramaic",
+ "Noto Sans InsPahlavi",
+ "Noto Sans InsParthi",
+ "Noto Sans Javanese",
+ "Noto Sans Kaithi",
+ "Noto Sans Kannada",
+ "Noto Sans Kannada Black",
+ "Noto Sans Kannada ExtraBold",
+ "Noto Sans Kannada ExtraLight",
+ "Noto Sans Kannada Light",
+ "Noto Sans Kannada Medium",
+ "Noto Sans Kannada SemiBold",
+ "Noto Sans Kannada Thin",
+ "Noto Sans Kayah Li",
+ "Noto Sans Kharoshthi",
+ "Noto Sans Khojki",
+ "Noto Sans Khudawadi",
+ "Noto Sans Lepcha",
+ "Noto Sans Limbu",
+ "Noto Sans Linear A",
+ "Noto Sans Linear B",
+ "Noto Sans Lisu",
+ "Noto Sans Lycian",
+ "Noto Sans Lydian",
+ "Noto Sans Mahajani",
+ "Noto Sans Mandaic",
+ "Noto Sans Manichaean",
+ "Noto Sans Marchen",
+ "Noto Sans Masaram Gondi",
+ "Noto Sans MeeteiMayek",
+ "Noto Sans Mende Kikakui",
+ "Noto Sans Meroitic",
+ "Noto Sans Miao",
+ "Noto Sans Modi",
+ "Noto Sans Mongolian",
+ "Noto Sans Mro",
+ "Noto Sans Multani",
+ "Noto Sans Myanmar",
+ "Noto Sans Myanmar Blk",
+ "Noto Sans Myanmar ExtBd",
+ "Noto Sans Myanmar ExtLt",
+ "Noto Sans Myanmar Light",
+ "Noto Sans Myanmar Med",
+ "Noto Sans Myanmar SemBd",
+ "Noto Sans Myanmar Thin",
+ "Noto Sans NKo",
+ "Noto Sans Nabataean",
+ "Noto Sans Nag Mundari",
+ "Noto Sans NewTaiLue",
+ "Noto Sans Newa",
+ "Noto Sans Ol Chiki",
+ "Noto Sans Old Italic",
+ "Noto Sans Old Permic",
+ "Noto Sans Old Turkic",
+ "Noto Sans OldHung",
+ "Noto Sans OldNorArab",
+ "Noto Sans OldPersian",
+ "Noto Sans OldSouArab",
+ "Noto Sans Oriya",
+ "Noto Sans Osage",
+ "Noto Sans Osmanya",
+ "Noto Sans Pahawh Hmong",
+ "Noto Sans Palmyrene",
+ "Noto Sans PauCinHau",
+ "Noto Sans PhagsPa",
+ "Noto Sans Phoenician",
+ "Noto Sans PsaPahlavi",
+ "Noto Sans Rejang",
+ "Noto Sans Samaritan",
+ "Noto Sans Saurashtra",
+ "Noto Sans Sharada",
+ "Noto Sans Siddham",
+ "Noto Sans SoraSomp",
+ "Noto Sans Sundanese",
+ "Noto Sans Sunuwar",
+ "Noto Sans Syloti Nagri",
+ "Noto Sans Syriac",
+ "Noto Sans Tagalog",
+ "Noto Sans Tagbanwa",
+ "Noto Sans Tai Le",
+ "Noto Sans Tai Tham",
+ "Noto Sans Tai Viet",
+ "Noto Sans Takri",
+ "Noto Sans Thaana",
+ "Noto Sans Tifinagh",
+ "Noto Sans Tirhuta",
+ "Noto Sans Ugaritic",
+ "Noto Sans Vai",
+ "Noto Sans Wancho",
+ "Noto Sans WarangCiti",
+ "Noto Sans Yi",
+ "Noto Sans Zawgyi",
+ "Noto Sans Zawgyi Blk",
+ "Noto Sans Zawgyi ExtBd",
+ "Noto Sans Zawgyi ExtLt",
+ "Noto Sans Zawgyi Light",
+ "Noto Sans Zawgyi Med",
+ "Noto Sans Zawgyi SemBd",
+ "Noto Sans Zawgyi Thin",
+ "Noto Serif Ahom",
+ "Noto Serif Balinese",
+ "Noto Serif Hmong Nyiakeng",
+ "Noto Serif Myanmar",
+ "Noto Serif Myanmar Blk",
+ "Noto Serif Myanmar ExtBd",
+ "Noto Serif Myanmar ExtLt",
+ "Noto Serif Myanmar Light",
+ "Noto Serif Myanmar Med",
+ "Noto Serif Myanmar SemBd",
+ "Noto Serif Myanmar Thin",
+ "Noto Serif Yezidi",
+ "Optima",
+ "Oriya MN",
+ "Oriya Sangam MN",
+ "PT Mono",
+ "PT Sans",
+ "PT Sans Caption",
+ "PT Sans Narrow",
+ "PT Serif",
+ "PT Serif Caption",
+ "Palatino",
+ "Papyrus",
+ "Party LET",
+ "Phosphate",
+ "PingFang HK",
+ "PingFang MO",
+ "PingFang SC",
+ "PingFang TC",
+ "Plantagenet Cherokee",
+ "Raanana",
+ "Rockwell",
+ "STIX Two Math",
+ "STIX Two Text",
+ "STIXGeneral",
+ "STIXIntegralsD",
+ "STIXIntegralsSm",
+ "STIXIntegralsUp",
+ "STIXIntegralsUpD",
+ "STIXIntegralsUpSm",
+ "STIXNonUnicode",
+ "STIXSizeFiveSym",
+ "STIXSizeFourSym",
+ "STIXSizeOneSym",
+ "STIXSizeThreeSym",
+ "STIXSizeTwoSym",
+ "STIXVariants",
+ "STSong",
+ "Sana",
+ "Sathu",
+ "Savoye LET",
+ "Shree Devanagari 714",
+ "SignPainter-HouseScript",
+ "Silom",
+ "Sinhala MN",
+ "Sinhala Sangam MN",
+ "Skia",
+ "Snell Roundhand",
+ "Songti SC",
+ "Songti TC",
+ "Sukhumvit Set",
+ "Superclarendon",
+ "Symbol",
+ "System Font",
+ "Tahoma",
+ "Tamil MN",
+ "Tamil Sangam MN",
+ "Telugu MN",
+ "Telugu Sangam MN",
+ "Thonburi",
+ "Times",
+ "Times New Roman",
+ "Trattatello",
+ "Trebuchet MS",
+ "Verdana",
+ "Waseem",
+ "Webdings",
+ "Wingdings",
+ "Wingdings 2",
+ "Wingdings 3",
+ "Zapf Dingbats",
+ "Zapfino"
+ ],
+ "source": "jobharvest-mac, real macOS 27.0 build 26A428 (upgraded from 26.6.2 on 2026-09-22): /System/Library/Fonts + /Library/Fonts + ~/Library/Fonts, nameID 1, dot-prefixed (CoreText-private) families excluded, PingFang added (private Reserved ttc), apple-optional tier excluded. Verified clean: no Office, no user fonts."
+ }
+ },
+ "additions": [
+ {
+ "id": "apple-optional",
+ "kind": "bundle",
+ "prob": 0.818,
+ "source": "proprietary",
+ "measured": true,
+ "fonts": [
+ "Athelas Bold",
+ "Athelas Bold Italic",
+ "Athelas Italic",
+ "Athelas Regular",
+ "Avenir Next Condensed",
+ "Avenir Next Condensed Bold",
+ "Avenir Next Condensed Bold Italic",
+ "Avenir Next Condensed Demi Bold",
+ "Avenir Next Condensed Demi Bold Italic",
+ "Avenir Next Condensed Heavy",
+ "Avenir Next Condensed Heavy Italic",
+ "Avenir Next Condensed Italic",
+ "Avenir Next Condensed Medium",
+ "Avenir Next Condensed Medium Italic",
+ "Avenir Next Condensed Regular",
+ "Avenir Next Condensed Ultra Light",
+ "Avenir Next Condensed Ultra Light Italic",
+ "Herculanum",
+ "Hiragino Kaku Gothic Pro W3",
+ "Hiragino Kaku Gothic Pro W6",
+ "Hiragino Kaku Gothic ProN",
+ "Hiragino Kaku Gothic ProN W3",
+ "Hiragino Kaku Gothic ProN W6",
+ "Hiragino Kaku Gothic Std W8",
+ "Hiragino Kaku Gothic StdN W8",
+ "Hiragino Maru Gothic Pro W4",
+ "Hiragino Mincho Pro W3",
+ "Hiragino Mincho Pro W6",
+ "Iowan Old Style Black",
+ "Iowan Old Style Black Italic",
+ "Iowan Old Style Bold",
+ "Iowan Old Style Bold Italic",
+ "Iowan Old Style Italic",
+ "Iowan Old Style Roman",
+ "Iowan Old Style Titling",
+ "Marion",
+ "Marion Bold",
+ "Marion Italic",
+ "Marion Regular",
+ "Seravek",
+ "Seravek Bold",
+ "Seravek Bold Italic",
+ "Seravek ExtraLight",
+ "Seravek ExtraLight Italic",
+ "Seravek Italic",
+ "Seravek Light",
+ "Seravek Light Italic",
+ "Seravek Medium",
+ "Seravek Medium Italic",
+ "Superclarendon Black",
+ "Superclarendon Black Italic",
+ "Superclarendon Bold",
+ "Superclarendon Bold Italic",
+ "Superclarendon Italic",
+ "Superclarendon Light",
+ "Superclarendon Light Italic",
+ "Superclarendon Regular"
+ ],
+ "note": "Apple ships these as \"document support\" / optional Font Book downloads, not enabled by default (support.apple.com/en-us/108939). The fpgen corpus puts all of them on exactly 81.8% of Macs -- one atomic unit, not base."
+ },
+ {
+ "id": "meslo",
+ "kind": "bundle",
+ "prob": 0.04,
+ "source": "open",
+ "fonts": [
+ "Meslo LG S",
+ "Meslo LG M",
+ "Meslo LG L"
+ ],
+ "measured": true
+ },
+ {
+ "id": "cascadia",
+ "kind": "bundle",
+ "prob": 0.06,
+ "source": "open",
+ "fonts": [
+ "Cascadia Code",
+ "Cascadia Mono"
+ ],
+ "measured": true
+ },
+ {
+ "id": "dev",
+ "kind": "alacarte",
+ "prob": 0.07,
+ "source": "open",
+ "sizes": [
+ {
+ "n": 1,
+ "w": 0.32
+ },
+ {
+ "n": 2,
+ "w": 0.24
+ },
+ {
+ "n": 3,
+ "w": 0.17
+ },
+ {
+ "n": 4,
+ "w": 0.11
+ },
+ {
+ "n": 5,
+ "w": 0.07
+ },
+ {
+ "n": 6,
+ "w": 0.045
+ },
+ {
+ "n": 7,
+ "w": 0.025
+ },
+ {
+ "n": 8,
+ "w": 0.015
+ }
+ ],
+ "fonts": [
+ "Fira Code",
+ "Fira Mono",
+ "JetBrains Mono",
+ "Source Code Pro",
+ "Inconsolata",
+ "Hack",
+ "IBM Plex Mono",
+ "Roboto Mono",
+ "Anonymous Pro",
+ "Iosevka",
+ "Space Mono",
+ "Victor Mono",
+ "PT Mono",
+ "Overpass Mono"
+ ],
+ "measured": true
+ },
+ {
+ "id": "web",
+ "kind": "alacarte",
+ "prob": 0.27,
+ "source": "open",
+ "sizes": [
+ {
+ "n": 1,
+ "w": 0.32
+ },
+ {
+ "n": 2,
+ "w": 0.24
+ },
+ {
+ "n": 3,
+ "w": 0.17
+ },
+ {
+ "n": 4,
+ "w": 0.11
+ },
+ {
+ "n": 5,
+ "w": 0.07
+ },
+ {
+ "n": 6,
+ "w": 0.045
+ },
+ {
+ "n": 7,
+ "w": 0.025
+ },
+ {
+ "n": 8,
+ "w": 0.015
+ }
+ ],
+ "fonts": [
+ "Roboto",
+ "Open Sans",
+ "Lato",
+ "Montserrat",
+ "Poppins",
+ "Oswald",
+ "Raleway",
+ "Nunito",
+ "Nunito Sans",
+ "Inter",
+ "Roboto Condensed",
+ "Roboto Slab",
+ "Merriweather",
+ "Work Sans",
+ "Rubik",
+ "Mukta",
+ "PT Sans",
+ "PT Serif",
+ "Fira Sans",
+ "Josefin Sans",
+ "Bebas Neue",
+ "Barlow",
+ "Karla",
+ "DM Sans",
+ "Manrope",
+ "Quicksand",
+ "Playfair Display",
+ "Titillium Web",
+ "Cabin",
+ "Heebo",
+ "Source Sans 3",
+ "Source Serif 4"
+ ],
+ "measured": true
+ }
+ ]
+ },
+ "lin": {
+ "bases": {
+ "ubuntu2404": {
+ "weight": 0.45,
+ "fonts": [
+ "AR PL UKai CN",
+ "AR PL UKai HK",
+ "AR PL UKai TW",
+ "AR PL UKai TW MBE",
+ "AR PL UMing CN",
+ "AR PL UMing HK",
+ "AR PL UMing TW",
+ "AR PL UMing TW MBE",
+ "C059",
+ "D050000L",
+ "DejaVu Sans",
+ "DejaVu Sans Mono",
+ "DejaVu Serif",
+ "Droid Sans Fallback",
+ "Liberation Mono",
+ "Liberation Sans",
+ "Liberation Sans Narrow",
+ "Liberation Serif",
+ "Nimbus Mono PS",
+ "Nimbus Roman",
+ "Nimbus Sans",
+ "Nimbus Sans Narrow",
+ "Noto Color Emoji",
+ "Noto Kufi Arabic",
+ "Noto Looped Lao",
+ "Noto Looped Lao Bold",
+ "Noto Looped Lao Regular",
+ "Noto Looped Thai",
+ "Noto Looped Thai Bold",
+ "Noto Looped Thai Regular",
+ "Noto Mono",
+ "Noto Music",
+ "Noto Naskh Arabic",
+ "Noto Nastaliq Urdu",
+ "Noto Rashi Hebrew",
+ "Noto Sans",
+ "Noto Sans Adlam",
+ "Noto Sans Adlam Unjoined",
+ "Noto Sans AnatoHiero",
+ "Noto Sans Anatolian Hieroglyphs",
+ "Noto Sans Arabic",
+ "Noto Sans Armenian",
+ "Noto Sans Avestan",
+ "Noto Sans Balinese",
+ "Noto Sans Bamum",
+ "Noto Sans Bassa Vah",
+ "Noto Sans Batak",
+ "Noto Sans Bengali",
+ "Noto Sans Bhaiksuki",
+ "Noto Sans Brahmi",
+ "Noto Sans Buginese",
+ "Noto Sans Buhid",
+ "Noto Sans CJK HK",
+ "Noto Sans CJK JP",
+ "Noto Sans CJK KR",
+ "Noto Sans CJK SC",
+ "Noto Sans CJK TC",
+ "Noto Sans CanAborig",
+ "Noto Sans Canadian Aboriginal",
+ "Noto Sans Carian",
+ "Noto Sans CaucAlban",
+ "Noto Sans Caucasian Albanian",
+ "Noto Sans Chakma",
+ "Noto Sans Cham",
+ "Noto Sans Cherokee",
+ "Noto Sans Coptic",
+ "Noto Sans Cuneiform",
+ "Noto Sans Cypriot",
+ "Noto Sans Deseret",
+ "Noto Sans Devanagari",
+ "Noto Sans Display",
+ "Noto Sans Duployan",
+ "Noto Sans EgyptHiero",
+ "Noto Sans Egyptian Hieroglyphs",
+ "Noto Sans Elbasan",
+ "Noto Sans Elymaic",
+ "Noto Sans Ethiopic",
+ "Noto Sans Georgian",
+ "Noto Sans Glagolitic",
+ "Noto Sans Gothic",
+ "Noto Sans Grantha",
+ "Noto Sans Gujarati",
+ "Noto Sans Gunjala Gondi",
+ "Noto Sans Gurmukhi",
+ "Noto Sans Hanifi Rohingya",
+ "Noto Sans Hanunoo",
+ "Noto Sans Hatran",
+ "Noto Sans Hebrew",
+ "Noto Sans ImpAramaic",
+ "Noto Sans Imperial Aramaic",
+ "Noto Sans Indic Siyaq Numbers",
+ "Noto Sans InsPahlavi",
+ "Noto Sans InsParthi",
+ "Noto Sans Inscriptional Pahlavi",
+ "Noto Sans Inscriptional Parthian",
+ "Noto Sans Javanese",
+ "Noto Sans Kaithi",
+ "Noto Sans Kannada",
+ "Noto Sans Kayah Li",
+ "Noto Sans Kharoshthi",
+ "Noto Sans Khmer",
+ "Noto Sans Khojki",
+ "Noto Sans Khudawadi",
+ "Noto Sans Lao",
+ "Noto Sans Lepcha",
+ "Noto Sans Limbu",
+ "Noto Sans Linear A",
+ "Noto Sans Linear B",
+ "Noto Sans Lisu",
+ "Noto Sans Lycian",
+ "Noto Sans Lydian",
+ "Noto Sans Mahajani",
+ "Noto Sans Malayalam",
+ "Noto Sans Mandaic",
+ "Noto Sans Manichaean",
+ "Noto Sans Marchen",
+ "Noto Sans Masaram Gondi",
+ "Noto Sans Math",
+ "Noto Sans Mayan Numerals",
+ "Noto Sans Medefaidrin",
+ "Noto Sans Meetei Mayek",
+ "Noto Sans Mende Kikakui",
+ "Noto Sans Meroitic",
+ "Noto Sans Miao",
+ "Noto Sans Modi",
+ "Noto Sans Mongolian",
+ "Noto Sans Mono",
+ "Noto Sans Mono CJK HK",
+ "Noto Sans Mono CJK JP",
+ "Noto Sans Mono CJK KR",
+ "Noto Sans Mono CJK SC",
+ "Noto Sans Mono CJK TC",
+ "Noto Sans Mro",
+ "Noto Sans Multani",
+ "Noto Sans Myanmar",
+ "Noto Sans NKo",
+ "Noto Sans Nabataean",
+ "Noto Sans New Tai Lue",
+ "Noto Sans Newa",
+ "Noto Sans Nushu",
+ "Noto Sans Ogham",
+ "Noto Sans Ol Chiki",
+ "Noto Sans Old Hungarian",
+ "Noto Sans Old Italic",
+ "Noto Sans Old North Arabian",
+ "Noto Sans Old Permic",
+ "Noto Sans Old Persian",
+ "Noto Sans Old Sogdian",
+ "Noto Sans Old South Arabian",
+ "Noto Sans Old Turkic",
+ "Noto Sans OldHung",
+ "Noto Sans OldNorArab",
+ "Noto Sans OldSouArab",
+ "Noto Sans Oriya",
+ "Noto Sans Osage",
+ "Noto Sans Osmanya",
+ "Noto Sans Pahawh Hmong",
+ "Noto Sans Palmyrene",
+ "Noto Sans Pau Cin Hau",
+ "Noto Sans PhagsPa",
+ "Noto Sans Phoenician",
+ "Noto Sans PsaPahlavi",
+ "Noto Sans Psalter Pahlavi",
+ "Noto Sans Rejang",
+ "Noto Sans Runic",
+ "Noto Sans Samaritan",
+ "Noto Sans Saurashtra",
+ "Noto Sans Sharada",
+ "Noto Sans Shavian",
+ "Noto Sans Siddham",
+ "Noto Sans SignWrit",
+ "Noto Sans SignWriting",
+ "Noto Sans Sinhala",
+ "Noto Sans Sogdian",
+ "Noto Sans Sora Sompeng",
+ "Noto Sans Soyombo",
+ "Noto Sans Sundanese",
+ "Noto Sans Syloti Nagri",
+ "Noto Sans Symbols",
+ "Noto Sans Symbols2",
+ "Noto Sans Syriac",
+ "Noto Sans Tagalog",
+ "Noto Sans Tagbanwa",
+ "Noto Sans Tai Le",
+ "Noto Sans Tai Tham",
+ "Noto Sans Tai Viet",
+ "Noto Sans Takri",
+ "Noto Sans Tamil",
+ "Noto Sans Tamil Supplement",
+ "Noto Sans Telugu",
+ "Noto Sans Thaana",
+ "Noto Sans Thai",
+ "Noto Sans Tifinagh",
+ "Noto Sans Tifinagh APT",
+ "Noto Sans Tifinagh Adrar",
+ "Noto Sans Tifinagh Agraw Imazighen",
+ "Noto Sans Tifinagh Ahaggar",
+ "Noto Sans Tifinagh Air",
+ "Noto Sans Tifinagh Azawagh",
+ "Noto Sans Tifinagh Ghat",
+ "Noto Sans Tifinagh Hawad",
+ "Noto Sans Tifinagh Rhissa Ixa",
+ "Noto Sans Tifinagh SIL",
+ "Noto Sans Tifinagh Tawellemmet",
+ "Noto Sans Tirhuta",
+ "Noto Sans Ugaritic",
+ "Noto Sans Vai",
+ "Noto Sans Wancho",
+ "Noto Sans Warang Citi",
+ "Noto Sans Yi",
+ "Noto Sans Zanabazar",
+ "Noto Sans Zanabazar Square",
+ "Noto Serif",
+ "Noto Serif Ahom",
+ "Noto Serif Armenian",
+ "Noto Serif Balinese",
+ "Noto Serif Bengali",
+ "Noto Serif CJK HK",
+ "Noto Serif CJK JP",
+ "Noto Serif CJK KR",
+ "Noto Serif CJK SC",
+ "Noto Serif CJK TC",
+ "Noto Serif Devanagari",
+ "Noto Serif Display",
+ "Noto Serif Dogra",
+ "Noto Serif Ethiopic",
+ "Noto Serif Georgian",
+ "Noto Serif Grantha",
+ "Noto Serif Gujarati",
+ "Noto Serif Gurmukhi",
+ "Noto Serif Hebrew",
+ "Noto Serif Hmong Nyiakeng",
+ "Noto Serif Kannada",
+ "Noto Serif Khmer",
+ "Noto Serif Khojki",
+ "Noto Serif Lao",
+ "Noto Serif Malayalam",
+ "Noto Serif Myanmar",
+ "Noto Serif Sinhala",
+ "Noto Serif Tamil",
+ "Noto Serif Tamil Slanted",
+ "Noto Serif Tangut",
+ "Noto Serif Telugu",
+ "Noto Serif Thai",
+ "Noto Serif Tibetan",
+ "Noto Serif Yezidi",
+ "Noto Traditional Nushu",
+ "OpenSymbol",
+ "P052",
+ "Standard Symbols PS",
+ "URW Bookman",
+ "URW Gothic",
+ "Ubuntu",
+ "Ubuntu Mono",
+ "Ubuntu Sans",
+ "Ubuntu Sans Mono",
+ "Z003"
+ ],
+ "source": "ubuntu-24.04.5.1-desktop-amd64.manifest -> shipped .debs -> fc-scan (the namespace Firefox enumerates on Linux)"
+ },
+ "ubuntu2604": {
+ "weight": 0.55,
+ "fonts": [
+ "AR PL UKai CN",
+ "AR PL UKai HK",
+ "AR PL UKai TW",
+ "AR PL UKai TW MBE",
+ "AR PL UMing CN",
+ "AR PL UMing HK",
+ "AR PL UMing TW",
+ "AR PL UMing TW MBE",
+ "C059",
+ "D050000L",
+ "DejaVu Sans",
+ "DejaVu Sans Mono",
+ "DejaVu Serif",
+ "Droid Sans Fallback",
+ "FontAwesome",
+ "Lato",
+ "Lato Black",
+ "Lato Hairline",
+ "Lato Heavy",
+ "Lato Light",
+ "Lato Medium",
+ "Lato Semibold",
+ "Lato Thin",
+ "Liberation Mono",
+ "Liberation Sans",
+ "Liberation Sans Narrow",
+ "Liberation Serif",
+ "Nimbus Mono PS",
+ "Nimbus Roman",
+ "Nimbus Sans",
+ "Nimbus Sans Narrow",
+ "Noto Color Emoji",
+ "Noto Kufi Arabic",
+ "Noto Looped Lao",
+ "Noto Looped Lao Bold",
+ "Noto Looped Lao Regular",
+ "Noto Looped Thai",
+ "Noto Looped Thai Bold",
+ "Noto Looped Thai Regular",
+ "Noto Mono",
+ "Noto Music",
+ "Noto Naskh Arabic",
+ "Noto Nastaliq Urdu",
+ "Noto Rashi Hebrew",
+ "Noto Sans",
+ "Noto Sans Adlam",
+ "Noto Sans Adlam Unjoined",
+ "Noto Sans AnatoHiero",
+ "Noto Sans Anatolian Hieroglyphs",
+ "Noto Sans Arabic",
+ "Noto Sans Armenian",
+ "Noto Sans Avestan",
+ "Noto Sans Balinese",
+ "Noto Sans Bamum",
+ "Noto Sans Bassa Vah",
+ "Noto Sans Batak",
+ "Noto Sans Bengali",
+ "Noto Sans Bhaiksuki",
+ "Noto Sans Brahmi",
+ "Noto Sans Buginese",
+ "Noto Sans Buhid",
+ "Noto Sans CJK HK",
+ "Noto Sans CJK JP",
+ "Noto Sans CJK KR",
+ "Noto Sans CJK SC",
+ "Noto Sans CJK TC",
+ "Noto Sans CanAborig",
+ "Noto Sans Canadian Aboriginal",
+ "Noto Sans Carian",
+ "Noto Sans CaucAlban",
+ "Noto Sans Caucasian Albanian",
+ "Noto Sans Chakma",
+ "Noto Sans Cham",
+ "Noto Sans Cherokee",
+ "Noto Sans Coptic",
+ "Noto Sans Cuneiform",
+ "Noto Sans Cypriot",
+ "Noto Sans Deseret",
+ "Noto Sans Devanagari",
+ "Noto Sans Display",
+ "Noto Sans Duployan",
+ "Noto Sans EgyptHiero",
+ "Noto Sans Egyptian Hieroglyphs",
+ "Noto Sans Elbasan",
+ "Noto Sans Elymaic",
+ "Noto Sans Ethiopic",
+ "Noto Sans Georgian",
+ "Noto Sans Glagolitic",
+ "Noto Sans Gothic",
+ "Noto Sans Grantha",
+ "Noto Sans Gujarati",
+ "Noto Sans Gunjala Gondi",
+ "Noto Sans Gurmukhi",
+ "Noto Sans Hanifi Rohingya",
+ "Noto Sans Hanunoo",
+ "Noto Sans Hatran",
+ "Noto Sans Hebrew",
+ "Noto Sans ImpAramaic",
+ "Noto Sans Imperial Aramaic",
+ "Noto Sans Indic Siyaq Numbers",
+ "Noto Sans InsPahlavi",
+ "Noto Sans InsParthi",
+ "Noto Sans Inscriptional Pahlavi",
+ "Noto Sans Inscriptional Parthian",
+ "Noto Sans Javanese",
+ "Noto Sans Kaithi",
+ "Noto Sans Kannada",
+ "Noto Sans Kayah Li",
+ "Noto Sans Kharoshthi",
+ "Noto Sans Khmer",
+ "Noto Sans Khojki",
+ "Noto Sans Khudawadi",
+ "Noto Sans Lao",
+ "Noto Sans Lepcha",
+ "Noto Sans Limbu",
+ "Noto Sans Linear A",
+ "Noto Sans Linear B",
+ "Noto Sans Lisu",
+ "Noto Sans Lycian",
+ "Noto Sans Lydian",
+ "Noto Sans Mahajani",
+ "Noto Sans Malayalam",
+ "Noto Sans Mandaic",
+ "Noto Sans Manichaean",
+ "Noto Sans Marchen",
+ "Noto Sans Masaram Gondi",
+ "Noto Sans Math",
+ "Noto Sans Mayan Numerals",
+ "Noto Sans Medefaidrin",
+ "Noto Sans Meetei Mayek",
+ "Noto Sans Mende Kikakui",
+ "Noto Sans Meroitic",
+ "Noto Sans Miao",
+ "Noto Sans Modi",
+ "Noto Sans Mongolian",
+ "Noto Sans Mono",
+ "Noto Sans Mono CJK HK",
+ "Noto Sans Mono CJK JP",
+ "Noto Sans Mono CJK KR",
+ "Noto Sans Mono CJK SC",
+ "Noto Sans Mono CJK TC",
+ "Noto Sans Mro",
+ "Noto Sans Multani",
+ "Noto Sans Myanmar",
+ "Noto Sans NKo",
+ "Noto Sans Nabataean",
+ "Noto Sans New Tai Lue",
+ "Noto Sans Newa",
+ "Noto Sans Nushu",
+ "Noto Sans Ogham",
+ "Noto Sans Ol Chiki",
+ "Noto Sans Old Hungarian",
+ "Noto Sans Old Italic",
+ "Noto Sans Old North Arabian",
+ "Noto Sans Old Permic",
+ "Noto Sans Old Persian",
+ "Noto Sans Old Sogdian",
+ "Noto Sans Old South Arabian",
+ "Noto Sans Old Turkic",
+ "Noto Sans OldHung",
+ "Noto Sans OldNorArab",
+ "Noto Sans OldSouArab",
+ "Noto Sans Oriya",
+ "Noto Sans Osage",
+ "Noto Sans Osmanya",
+ "Noto Sans Pahawh Hmong",
+ "Noto Sans Palmyrene",
+ "Noto Sans Pau Cin Hau",
+ "Noto Sans PhagsPa",
+ "Noto Sans Phoenician",
+ "Noto Sans PsaPahlavi",
+ "Noto Sans Psalter Pahlavi",
+ "Noto Sans Rejang",
+ "Noto Sans Runic",
+ "Noto Sans Samaritan",
+ "Noto Sans Saurashtra",
+ "Noto Sans Sharada",
+ "Noto Sans Shavian",
+ "Noto Sans Siddham",
+ "Noto Sans SignWrit",
+ "Noto Sans SignWriting",
+ "Noto Sans Sinhala",
+ "Noto Sans Sogdian",
+ "Noto Sans Sora Sompeng",
+ "Noto Sans Soyombo",
+ "Noto Sans Sundanese",
+ "Noto Sans Syloti Nagri",
+ "Noto Sans Symbols",
+ "Noto Sans Symbols2",
+ "Noto Sans Syriac",
+ "Noto Sans Tagalog",
+ "Noto Sans Tagbanwa",
+ "Noto Sans Tai Le",
+ "Noto Sans Tai Tham",
+ "Noto Sans Tai Viet",
+ "Noto Sans Takri",
+ "Noto Sans Tamil",
+ "Noto Sans Tamil Supplement",
+ "Noto Sans Telugu",
+ "Noto Sans Thaana",
+ "Noto Sans Thai",
+ "Noto Sans Tifinagh",
+ "Noto Sans Tifinagh APT",
+ "Noto Sans Tifinagh Adrar",
+ "Noto Sans Tifinagh Agraw Imazighen",
+ "Noto Sans Tifinagh Ahaggar",
+ "Noto Sans Tifinagh Air",
+ "Noto Sans Tifinagh Azawagh",
+ "Noto Sans Tifinagh Ghat",
+ "Noto Sans Tifinagh Hawad",
+ "Noto Sans Tifinagh Rhissa Ixa",
+ "Noto Sans Tifinagh SIL",
+ "Noto Sans Tifinagh Tawellemmet",
+ "Noto Sans Tirhuta",
+ "Noto Sans Ugaritic",
+ "Noto Sans Vai",
+ "Noto Sans Wancho",
+ "Noto Sans Warang Citi",
+ "Noto Sans Yi",
+ "Noto Sans Zanabazar",
+ "Noto Sans Zanabazar Square",
+ "Noto Serif",
+ "Noto Serif Ahom",
+ "Noto Serif Armenian",
+ "Noto Serif Balinese",
+ "Noto Serif Bengali",
+ "Noto Serif CJK HK",
+ "Noto Serif CJK JP",
+ "Noto Serif CJK KR",
+ "Noto Serif CJK SC",
+ "Noto Serif CJK TC",
+ "Noto Serif Devanagari",
+ "Noto Serif Display",
+ "Noto Serif Dogra",
+ "Noto Serif Ethiopic",
+ "Noto Serif Georgian",
+ "Noto Serif Grantha",
+ "Noto Serif Gujarati",
+ "Noto Serif Gurmukhi",
+ "Noto Serif Hebrew",
+ "Noto Serif Hmong Nyiakeng",
+ "Noto Serif Kannada",
+ "Noto Serif Khmer",
+ "Noto Serif Khojki",
+ "Noto Serif Lao",
+ "Noto Serif Malayalam",
+ "Noto Serif Myanmar",
+ "Noto Serif Sinhala",
+ "Noto Serif Tamil",
+ "Noto Serif Tamil Slanted",
+ "Noto Serif Tangut",
+ "Noto Serif Telugu",
+ "Noto Serif Thai",
+ "Noto Serif Tibetan",
+ "Noto Serif Yezidi",
+ "Noto Traditional Nushu",
+ "OpenSymbol",
+ "P052",
+ "Standard Symbols PS",
+ "URW Bookman",
+ "URW Gothic",
+ "Ubuntu",
+ "Ubuntu Mono",
+ "Ubuntu Sans",
+ "Ubuntu Sans Mono",
+ "Z003"
+ ],
+ "source": "ubuntu-26.04.1-desktop-amd64.manifest -> shipped .debs -> fc-scan (the namespace Firefox enumerates on Linux)"
+ }
+ },
+ "additions": [
+ {
+ "id": "libreoffice",
+ "kind": "bundle",
+ "prob": 0.112,
+ "source": "open",
+ "fonts": [
+ "Caladea",
+ "Carlito",
+ "Liberation Sans",
+ "Liberation Serif",
+ "Liberation Mono",
+ "Liberation Sans Narrow",
+ "DejaVu Sans",
+ "DejaVu Serif",
+ "DejaVu Sans Mono",
+ "DejaVu Sans Condensed",
+ "DejaVu Serif Condensed",
+ "DejaVu Sans Light",
+ "DejaVu Math TeX Gyre",
+ "Source Sans 3",
+ "Source Serif 4",
+ "Source Code Pro",
+ "Noto Sans",
+ "Noto Serif",
+ "Noto Mono",
+ "Noto Sans Arabic",
+ "Noto Naskh Arabic",
+ "Noto Kufi Arabic",
+ "Noto Sans Hebrew",
+ "Noto Serif Hebrew",
+ "Noto Sans Armenian",
+ "Noto Serif Armenian",
+ "Noto Sans Georgian",
+ "Noto Serif Georgian",
+ "Noto Sans Lao",
+ "Noto Serif Lao",
+ "Noto Sans Lisu",
+ "Gentium Basic",
+ "Gentium Book Basic",
+ "Amiri",
+ "Amiri Quran",
+ "Scheherazade",
+ "Reem Kufi",
+ "David Libre",
+ "Alef",
+ "OpenSymbol",
+ "Rubik"
+ ],
+ "measured": true
+ },
+ {
+ "id": "distro-i18n",
+ "kind": "bundle",
+ "prob": 0.372,
+ "source": "open",
+ "fonts": [
+ "KacstBook",
+ "KacstOffice",
+ "Frank Ruehl CLM",
+ "Miriam CLM",
+ "Miriam Mono CLM",
+ "David CLM",
+ "Linux Libertine O",
+ "Linux Biolinum O",
+ "Linux Libertine Display O"
+ ],
+ "measured": true
+ },
+ {
+ "id": "meslo",
+ "kind": "bundle",
+ "prob": 0.06,
+ "source": "open",
+ "fonts": [
+ "Meslo LG S",
+ "Meslo LG M",
+ "Meslo LG L"
+ ],
+ "measured": true
+ },
+ {
+ "id": "cascadia",
+ "kind": "bundle",
+ "prob": 0.08,
+ "source": "open",
+ "fonts": [
+ "Cascadia Code",
+ "Cascadia Mono"
+ ],
+ "measured": true
+ },
+ {
+ "id": "dev",
+ "kind": "alacarte",
+ "prob": 0.174,
+ "source": "open",
+ "sizes": [
+ {
+ "n": 1,
+ "w": 0.32
+ },
+ {
+ "n": 2,
+ "w": 0.24
+ },
+ {
+ "n": 3,
+ "w": 0.17
+ },
+ {
+ "n": 4,
+ "w": 0.11
+ },
+ {
+ "n": 5,
+ "w": 0.07
+ },
+ {
+ "n": 6,
+ "w": 0.045
+ },
+ {
+ "n": 7,
+ "w": 0.025
+ },
+ {
+ "n": 8,
+ "w": 0.015
+ }
+ ],
+ "fonts": [
+ "Fira Code",
+ "Fira Mono",
+ "JetBrains Mono",
+ "Source Code Pro",
+ "Inconsolata",
+ "Hack",
+ "IBM Plex Mono",
+ "Roboto Mono",
+ "Anonymous Pro",
+ "Iosevka",
+ "Space Mono",
+ "Victor Mono",
+ "PT Mono",
+ "Overpass Mono",
+ "Ubuntu Mono"
+ ],
+ "measured": true
+ },
+ {
+ "id": "web",
+ "kind": "alacarte",
+ "prob": 0.195,
+ "source": "open",
+ "sizes": [
+ {
+ "n": 1,
+ "w": 0.32
+ },
+ {
+ "n": 2,
+ "w": 0.24
+ },
+ {
+ "n": 3,
+ "w": 0.17
+ },
+ {
+ "n": 4,
+ "w": 0.11
+ },
+ {
+ "n": 5,
+ "w": 0.07
+ },
+ {
+ "n": 6,
+ "w": 0.045
+ },
+ {
+ "n": 7,
+ "w": 0.025
+ },
+ {
+ "n": 8,
+ "w": 0.015
+ }
+ ],
+ "fonts": [
+ "Roboto",
+ "Open Sans",
+ "Lato",
+ "Montserrat",
+ "Poppins",
+ "Oswald",
+ "Raleway",
+ "Nunito",
+ "Nunito Sans",
+ "Inter",
+ "Roboto Condensed",
+ "Roboto Slab",
+ "Merriweather",
+ "Work Sans",
+ "Rubik",
+ "Mukta",
+ "PT Sans",
+ "PT Serif",
+ "Fira Sans",
+ "Josefin Sans",
+ "Bebas Neue",
+ "Barlow",
+ "Karla",
+ "DM Sans",
+ "Manrope",
+ "Quicksand",
+ "Playfair Display",
+ "Titillium Web",
+ "Cabin",
+ "Heebo",
+ "Source Sans 3",
+ "Source Serif 4"
+ ],
+ "measured": true
+ }
+ ]
+ }
+}
diff --git a/scripts/data/fpgen-model.json b/scripts/data/fpgen-model.json
new file mode 100644
index 000000000..93d041cf8
--- /dev/null
+++ b/scripts/data/fpgen-model.json
@@ -0,0 +1,14 @@
+{
+ "tag": "model-2/2026",
+ "asset": "model-release.zip",
+ "size": 1564571,
+ "sha256": "6530b8322cdaa4ec042921c8d9a0369a0e6e0269ba636c01a7203e4a2f109936",
+ "url": "https://github.com/scrapfly/fingerprint-generator/releases/download/model-2/2026/model-release.zip",
+ "repo": "scrapfly/fingerprint-generator",
+ "files": [
+ "fingerprint-network.json.zst",
+ "values.dat.zst",
+ "values.json.zst"
+ ],
+ "note": "fpgen's model data, pinned. fpgen fetches this itself on first import with TLS verification DISABLED, no checksum, and a release selection that cannot reach this tag -- see scripts/pin-fpgen-model.py. Bump by editing this file; the sha256 is the gate."
+}
diff --git a/scripts/data/open-fonts.txt b/scripts/data/open-fonts.txt
new file mode 100644
index 000000000..966f7cdef
--- /dev/null
+++ b/scripts/data/open-fonts.txt
@@ -0,0 +1,1717 @@
+# Fonts Camoufox may redistribute, by licence field.
+# Generated by scripts/font-metrics/licences.py -- do not edit.
+# Everything NOT in this list is measured into the metrics
+# database instead and rebuilt locally as a stand-in.
+linux/0__NotoSansOriya.ttc OFL-1.1
+linux/101__Iosevka-ExtraLight.ttf OFL-1.1
+linux/102__Inconsolata-ExtraExpandedExtraBold.ttf OFL-1.1
+linux/103__LinLibertine_RBI.otf OFL-1.1
+linux/105__Iosevka-Light.ttf OFL-1.1
+linux/106__Raleway-Italic[wght].ttf OFL-1.1
+linux/107__Lato-ExtraLightItalic.ttf OFL-1.1
+linux/108__Rubik[wght].ttf OFL-1.1
+linux/109__Iosevka-Italic.ttf OFL-1.1
+linux/10__NotoSansPauCinHau-Regular.ttf OFL-1.1
+linux/110__Inter-Italic[opsz,wght].ttf OFL-1.1
+linux/111__Iosevka-ThinItalic.ttf OFL-1.1
+linux/112__LinLibertine_RB.otf OFL-1.1
+linux/113__Inconsolata-SemiCondensedSemiBold.ttf OFL-1.1
+linux/114__NotoSerifGeorgian[wdth,wght].ttf OFL-1.1
+linux/115__NotoNaskhArabic-Bold.ttf OFL-1.1
+linux/116__Raleway[wght].ttf OFL-1.1
+linux/118__Carlito-Bold.ttf OFL-1.1
+linux/119__Inconsolata-ExpandedLight.ttf OFL-1.1
+linux/11__NotoSerifYezidi-Regular.otf OFL-1.1
+linux/120__Inconsolata-UltraExpandedExtraLight.ttf OFL-1.1
+linux/121__DejaVuMathTeXGyre.ttf CC0/PD
+linux/122__Nunito-Italic[wght].ttf OFL-1.1
+linux/124__FiraMono-Medium.ttf OFL-1.1
+linux/125__Amiri-Bold.ttf OFL-1.1
+linux/126__Iosevka-ExtendedExtraLightOblique.ttf OFL-1.1
+linux/127__LinLibertine_RZI.otf OFL-1.1
+linux/128__Poppins-Light.ttf OFL-1.1
+linux/12__NotoSansNKo-Regular.ttf OFL-1.1
+linux/130__Amiri-Regular.ttf OFL-1.1
+linux/131__Iosevka-ExtendedExtraBoldOblique.ttf OFL-1.1
+linux/132__DejaVuSansMono.ttf CC0/PD
+linux/133__Inconsolata-CondensedBlack.ttf OFL-1.1
+linux/134__Poppins-Thin.ttf OFL-1.1
+linux/135__Barlow-Bold.ttf OFL-1.1
+linux/137__Iosevka-ExtraLightOblique.ttf OFL-1.1
+linux/138__Carlito-Italic.ttf OFL-1.1
+linux/139__TitilliumWeb-ExtraLightItalic.ttf OFL-1.1
+linux/13__NotoSansBuhid-Regular.ttf OFL-1.1
+linux/140__Nunito[wght].ttf OFL-1.1
+linux/142__LinBiolinum_RI.otf OFL-1.1
+linux/143__Iosevka-HeavyOblique.ttf OFL-1.1
+linux/144__Inconsolata-UltraCondensedLight.ttf OFL-1.1
+linux/145__FiraSans-ExtraLightItalic.ttf OFL-1.1
+linux/148__Inconsolata-UltraExpandedBlack.ttf OFL-1.1
+linux/149__DejaVuSerifCondensed-Italic.ttf CC0/PD
+linux/14__NotoSansSamaritan-Regular.ttf OFL-1.1
+linux/150__DejaVuSerif-Italic.ttf CC0/PD
+linux/151__NotoMono-Regular.ttf OFL-1.1
+linux/152__NotoSans[wdth,wght].ttf OFL-1.1
+linux/153__FiraSans-LightItalic.ttf OFL-1.1
+linux/154__Poppins-ThinItalic.ttf OFL-1.1
+linux/156__FiraSans-SemiBoldItalic.ttf OFL-1.1
+linux/157__Poppins-SemiBoldItalic.ttf OFL-1.1
+linux/158__DejaVuSansMono-Bold.ttf CC0/PD
+linux/159__Iosevka-ExtendedLightOblique.ttf OFL-1.1
+linux/15__NotoSansMiao-Regular.ttf OFL-1.1
+linux/160__Barlow-ExtraLight.ttf OFL-1.1
+linux/161__Heebo[wght].ttf OFL-1.1
+linux/162__Inconsolata-CondensedBold.ttf OFL-1.1
+linux/163__Oswald[wght].ttf OFL-1.1
+linux/164__PlayfairDisplay-Italic[wght].ttf OFL-1.1
+linux/165__VictorMono-Italic[wght].ttf OFL-1.1
+linux/166__TitilliumWeb-SemiBold.ttf OFL-1.1
+linux/168__Barlow-MediumItalic.ttf OFL-1.1
+linux/169__TitilliumWeb-Bold.ttf OFL-1.1
+linux/16__NotoSansMandaic-Regular.ttf OFL-1.1
+linux/170__Karla[wght].ttf OFL-1.1
+linux/171__Inconsolata-UltraCondensedSemiBold.ttf OFL-1.1
+linux/172__Iosevka-Thin.ttf OFL-1.1
+linux/173__Cantarell-Italic.ttf OFL-1.1
+linux/175__Lato-ExtraLight.ttf OFL-1.1
+linux/176__Cantarell-Regular.ttf OFL-1.1
+linux/177__Mukta-Bold.ttf OFL-1.1
+linux/178__Inconsolata-SemiCondensedLight.ttf OFL-1.1
+linux/179__FiraSans-ExtraBoldItalic.ttf OFL-1.1
+linux/17__NotoSansTifinagh-Regular.otf OFL-1.1
+linux/180__Inconsolata-Expanded.ttf OFL-1.1
+linux/181__Barlow-SemiBold.ttf OFL-1.1
+linux/182__Inconsolata-ExpandedSemiBold.ttf OFL-1.1
+linux/183__Barlow-Italic.ttf OFL-1.1
+linux/184__Barlow-ExtraLightItalic.ttf OFL-1.1
+linux/185__LiberationMono-Italic.ttf OFL-1.1
+linux/186__Iosevka-ExtraBoldOblique.ttf OFL-1.1
+linux/187__TitilliumWeb-ExtraLight.ttf OFL-1.1
+linux/189__Poppins-Bold.ttf OFL-1.1
+linux/18__NotoSansTirhuta-Regular.ttf OFL-1.1
+linux/190__Inconsolata-ExtraBold.ttf OFL-1.1
+linux/191__Iosevka-ExtendedBoldOblique.ttf OFL-1.1
+linux/192__Inconsolata-Light.ttf OFL-1.1
+linux/193__Inconsolata-SemiExpandedBold.ttf OFL-1.1
+linux/194__DejaVuSerif-BoldItalic.ttf CC0/PD
+linux/195__Iosevka-ExtendedThinOblique.ttf OFL-1.1
+linux/196__Inconsolata-SemiExpandedLight.ttf OFL-1.1
+linux/197__Mukta-Light.ttf OFL-1.1
+linux/198__WorkSans[wght].ttf OFL-1.1
+linux/199__OpenSans-Italic[wdth,wght].ttf OFL-1.1
+linux/19__NotoSansSaurashtra-Regular.ttf OFL-1.1
+linux/1__NotoSansKannada.ttc OFL-1.1
+linux/200__Cabin-Italic[wdth,wght].ttf OFL-1.1
+linux/202__Iosevka-ExtendedMediumOblique.ttf OFL-1.1
+linux/203__NotoSansLao[wdth,wght].ttf OFL-1.1
+linux/205__Mukta-SemiBold.ttf OFL-1.1
+linux/207__RobotoCondensed[wght].ttf Apache-2.0
+linux/208__Inconsolata-SemiCondensed.ttf OFL-1.1
+linux/209__Inconsolata-CondensedSemiBold.ttf OFL-1.1
+linux/20__NotoSansCoptic-Regular.ttf OFL-1.1
+linux/210__Barlow-BoldItalic.ttf OFL-1.1
+linux/211__UbuntuMono-BoldItalic.ttf Ubuntu-FL-1.0
+linux/212__Inconsolata-UltraCondensedExtraBold.ttf OFL-1.1
+linux/213__NotoKufiArabic-Bold.ttf OFL-1.1
+linux/214__UbuntuSansMono-Italic[wght].ttf Ubuntu-FL-1.0
+linux/215__FiraSans-Bold.ttf OFL-1.1
+linux/217__IBMPlexMono-Thin.ttf OFL-1.1
+linux/218__IBMPlexMono-SemiBold.ttf OFL-1.1
+linux/219__TitilliumWeb-LightItalic.ttf OFL-1.1
+linux/21__NotoSansSylotiNagri-Regular.ttf OFL-1.1
+linux/221__FiraSans-Black.ttf OFL-1.1
+linux/222__Inconsolata-SemiCondensedBold.ttf OFL-1.1
+linux/223__IBMPlexMono-MediumItalic.ttf OFL-1.1
+linux/225__Inconsolata-ExtraCondensedExtraLight.ttf OFL-1.1
+linux/226__Quicksand[wght].ttf OFL-1.1
+linux/227__NotoSerifHebrew-Regular.ttf OFL-1.1
+linux/228__NotoSans-Regular.ttf OFL-1.1
+linux/229__SourceSans3-Italic[wght].ttf OFL-1.1
+linux/22__NotoSerifBalinese-Regular.ttf OFL-1.1
+linux/230__Montserrat[wght].ttf OFL-1.1
+linux/231__Amiri-Italic.ttf OFL-1.1
+linux/232__Lato-ThinItalic.ttf OFL-1.1
+linux/233__RobotoMono[wght].ttf OFL-1.1
+linux/234__Inconsolata-Medium.ttf OFL-1.1
+linux/235__NotoSansHebrew-Bold.ttf OFL-1.1
+linux/236__Poppins-ExtraLightItalic.ttf OFL-1.1
+linux/237__Inconsolata-SemiExpanded.ttf OFL-1.1
+linux/238__Manrope[wght].ttf OFL-1.1
+linux/239__DejaVuSansCondensed-BoldOblique.ttf CC0/PD
+linux/23__NotoSansMro-Regular.ttf OFL-1.1
+linux/240__Ubuntu-Bold.ttf Ubuntu-FL-1.0
+linux/241__SpaceMono-BoldItalic.ttf OFL-1.1
+linux/242__Cabin[wdth,wght].ttf OFL-1.1
+linux/243__Inconsolata-Condensed.ttf OFL-1.1
+linux/244__RobotoSlab[wght].ttf Apache-2.0
+linux/245__NotoSerifHebrew[wdth,wght].ttf OFL-1.1
+linux/246__Iosevka-LightOblique.ttf OFL-1.1
+linux/247__Poppins-ExtraBold.ttf OFL-1.1
+linux/248__ReemKufi[wght].ttf OFL-1.1
+linux/249__Iosevka-ExtendedMediumItalic.ttf OFL-1.1
+linux/24__NotoSansTaiViet-Regular.ttf OFL-1.1
+linux/250__Lato-BlackItalic.ttf OFL-1.1
+linux/252__NotoSansHebrew[wdth,wght].ttf OFL-1.1
+linux/253__DejaVuSansCondensed-Bold.ttf CC0/PD
+linux/255__UbuntuMono-Italic.ttf Ubuntu-FL-1.0
+linux/256__Inconsolata-SemiExpandedRegular.ttf OFL-1.1
+linux/257__DavidLibre-Regular.ttf OFL-1.1
+linux/259__Caladea-BoldItalic.ttf OFL-1.1
+linux/260__Iosevka-SemiBoldItalic.ttf OFL-1.1
+linux/261__BebasNeue-Regular.ttf OFL-1.1
+linux/262__IBMPlexMono-ExtraLight.ttf OFL-1.1
+linux/263__Inconsolata-SemiCondensedExtraLight.ttf OFL-1.1
+linux/264__LiberationSerif-Regular.ttf OFL-1.1
+linux/265__Iosevka-Medium.ttf OFL-1.1
+linux/266__Iosevka-ExtendedThinItalic.ttf OFL-1.1
+linux/267__IBMPlexMono-Medium.ttf OFL-1.1
+linux/268__SourceCodePro[wght].ttf OFL-1.1
+linux/269__Lato-MediumItalic.ttf OFL-1.1
+linux/26__NotoSansKayahLi-Regular.ttf OFL-1.1
+linux/270__Iosevka-Bold.ttf OFL-1.1
+linux/271__NotoSerif-Italic[wdth,wght].ttf OFL-1.1
+linux/273__Inconsolata-UltraExpanded.ttf OFL-1.1
+linux/274__NotoSansGeorgian-Bold.ttf OFL-1.1
+linux/275__OpenSans[wdth,wght].ttf OFL-1.1
+linux/276__Lato-Italic.ttf OFL-1.1
+linux/277__LiberationSans-Bold.ttf OFL-1.1
+linux/278__Inconsolata[wdth,wght].ttf OFL-1.1
+linux/279__Poppins-BlackItalic.ttf OFL-1.1
+linux/27__NotoSansMendeKikakui-Regular.ttf OFL-1.1
+linux/280__NotoSansArabic[wdth,wght].ttf OFL-1.1
+linux/281__Inconsolata-SemiExpandedExtraBold.ttf OFL-1.1
+linux/282__Inconsolata-UltraExpandedBold.ttf OFL-1.1
+linux/283__Hack-Regular.ttf MIT
+linux/284__Ubuntu-MediumItalic.ttf Ubuntu-FL-1.0
+linux/285__Inconsolata-SemiCondensedExtraBold.ttf OFL-1.1
+linux/286__FiraMono-Bold.ttf OFL-1.1
+linux/287__Iosevka-ExtendedExtraBoldItalic.ttf OFL-1.1
+linux/289__NotoSansCJK-Bold.ttc OFL-1.1
+linux/28__NotoSansBatak-Regular.ttf OFL-1.1
+linux/290__FiraSans-BoldItalic.ttf OFL-1.1
+linux/291__NotoSansLao-Bold.ttf OFL-1.1
+linux/292__Lato-Medium.ttf OFL-1.1
+linux/293__Iosevka-ExtendedExtraLightItalic.ttf OFL-1.1
+linux/294__NotoKufiArabic[wght].ttf OFL-1.1
+linux/295__JetBrainsMono[wght].ttf OFL-1.1
+linux/296__NunitoSans-Italic[YTLC,opsz,wdth,wght].ttf OFL-1.1
+linux/297__NotoSansMono[wdth,wght].ttf OFL-1.1
+linux/298__NotoSansLisu[wght].ttf OFL-1.1
+linux/29__NotoSansBuginese-Regular.ttf OFL-1.1
+linux/2__NotoSansArmenian.ttc OFL-1.1
+linux/300__Barlow-Light.ttf OFL-1.1
+linux/301__JosefinSans-Italic[wght].ttf OFL-1.1
+linux/302__Iosevka-ExtendedBoldItalic.ttf OFL-1.1
+linux/303__Poppins-Medium.ttf OFL-1.1
+linux/304__UbuntuSansMono[wght].ttf Ubuntu-FL-1.0
+linux/305__Hack-Bold.ttf MIT
+linux/307__Inter[opsz,wght].ttf OFL-1.1
+linux/308__Inconsolata-UltraExpandedLight.ttf OFL-1.1
+linux/30__NotoSansNewa-Regular.ttf OFL-1.1
+linux/310__LinLibertine_DR.otf OFL-1.1
+linux/312__IBMPlexMono-Regular.ttf OFL-1.1
+linux/313__Inconsolata-Black.ttf OFL-1.1
+linux/314__SourceCodePro-Italic[wght].ttf OFL-1.1
+linux/315__JetBrainsMono-Italic[wght].ttf OFL-1.1
+linux/316__JosefinSans[wght].ttf OFL-1.1
+linux/317__NotoSerifLao-Regular.ttf OFL-1.1
+linux/318__DejaVuSerif.ttf CC0/PD
+linux/319__Lato-LightItalic.ttf OFL-1.1
+linux/31__NotoSansWarangCiti-Regular.ttf OFL-1.1
+linux/320__TitilliumWeb-Regular.ttf OFL-1.1
+linux/321__TitilliumWeb-Black.ttf OFL-1.1
+linux/322__UbuntuMono[wght].ttf Ubuntu-FL-1.0
+linux/323__Iosevka-ExtendedBold.ttf OFL-1.1
+linux/324__LinLibertine_RI.otf OFL-1.1
+linux/326__DejaVuSansCondensed.ttf CC0/PD
+linux/327__AmiriQuran-Regular.ttf OFL-1.1
+linux/328__Lato-ExtraBold.ttf OFL-1.1
+linux/329__Lato-BoldItalic.ttf OFL-1.1
+linux/32__NotoSansHanunoo-Regular.ttf OFL-1.1
+linux/331__NotoSerif-Italic.ttf OFL-1.1
+linux/332__SourceSerif4[opsz,wght].ttf OFL-1.1
+linux/333__Poppins-Regular.ttf OFL-1.1
+linux/334__Inconsolata-CondensedLight.ttf OFL-1.1
+linux/335__FiraSans-ThinItalic.ttf OFL-1.1
+linux/336__TitilliumWeb-BoldItalic.ttf OFL-1.1
+linux/337__Lato-Regular.ttf OFL-1.1
+linux/338__Carlito-BoldItalic.ttf OFL-1.1
+linux/339__DejaVuSansMono-Oblique.ttf CC0/PD
+linux/33__NotoSansSharada-Regular.ttf OFL-1.1
+linux/340__Iosevka-Extended.ttf OFL-1.1
+linux/341__Roboto[wdth,wght].ttf OFL-1.1
+linux/342__Inconsolata-SemiCondensedRegular.ttf OFL-1.1
+linux/343__NotoSerifGeorgian-Bold.ttf OFL-1.1
+linux/344__Montserrat-Italic[wght].ttf OFL-1.1
+linux/345__Cantarell-BoldItalic.ttf OFL-1.1
+linux/346__Inconsolata-SemiCondensedBlack.ttf OFL-1.1
+linux/347__Lato-Bold.ttf OFL-1.1
+linux/348__Mukta-ExtraLight.ttf OFL-1.1
+linux/349__NotoSerifArmenian-Regular.ttf OFL-1.1
+linux/34__NotoSansKhojki-Regular.ttf OFL-1.1
+linux/350__Inconsolata-ExtraExpandedMedium.ttf OFL-1.1
+linux/351__Iosevka-SemiBoldOblique.ttf OFL-1.1
+linux/352__Ubuntu-BoldItalic.ttf Ubuntu-FL-1.0
+linux/353__IBMPlexMono-Bold.ttf OFL-1.1
+linux/354__Inconsolata-ExtraExpandedLight.ttf OFL-1.1
+linux/355__Iosevka-BoldOblique.ttf OFL-1.1
+linux/356__NotoSerifArmenian[wdth,wght].ttf OFL-1.1
+linux/357__Iosevka-ExtendedExtraLight.ttf OFL-1.1
+linux/358__Poppins-SemiBold.ttf OFL-1.1
+linux/359__Inconsolata-SemiBold.ttf OFL-1.1
+linux/35__NotoSansCanadianAboriginal-Regular.otf OFL-1.1
+linux/360__IBMPlexMono-ThinItalic.ttf OFL-1.1
+linux/361__SpaceMono-Italic.ttf OFL-1.1
+linux/363__DMSans-Italic[opsz,wght].ttf OFL-1.1
+linux/364__Iosevka-ExtraBold.ttf OFL-1.1
+linux/365__DMSans[opsz,wght].ttf OFL-1.1
+linux/367__FiraSans-Italic.ttf OFL-1.1
+linux/368__Inconsolata-UltraExpandedExtraBold.ttf OFL-1.1
+linux/369__Inconsolata-ExtraCondensedBlack.ttf OFL-1.1
+linux/36__NotoSansYi-Regular.ttf OFL-1.1
+linux/370__Inconsolata-ExtraCondensedExtraBold.ttf OFL-1.1
+linux/371__Inconsolata-UltraCondensedExtraLight.ttf OFL-1.1
+linux/372__Iosevka-ExtendedSemiBoldItalic.ttf OFL-1.1
+linux/374__Merriweather[opsz,wdth,wght].ttf OFL-1.1
+linux/375__FiraSans-MediumItalic.ttf OFL-1.1
+linux/376__FiraSans-Medium.ttf OFL-1.1
+linux/377__Inconsolata-CondensedMedium.ttf OFL-1.1
+linux/378__Iosevka-MediumItalic.ttf OFL-1.1
+linux/379__TitilliumWeb-SemiBoldItalic.ttf OFL-1.1
+linux/37__NotoSansTakri-Regular.ttf OFL-1.1
+linux/380__NotoNaskhArabic[wght].ttf OFL-1.1
+linux/381__Barlow-Regular.ttf OFL-1.1
+linux/382__DejaVuSerif-Bold.ttf CC0/PD
+linux/383__Iosevka-ExtraLightItalic.ttf OFL-1.1
+linux/384__Barlow-ThinItalic.ttf OFL-1.1
+linux/385__Inconsolata-ExpandedBlack.ttf OFL-1.1
+linux/386__IBMPlexMono-BoldItalic.ttf OFL-1.1
+linux/388__Roboto-Italic[wdth,wght].ttf OFL-1.1
+linux/38__NotoSansMahajani-Regular.ttf OFL-1.1
+linux/391__NotoSansGeorgian[wdth,wght].ttf OFL-1.1
+linux/392__Iosevka-ExtraBoldItalic.ttf OFL-1.1
+linux/393__Inconsolata-UltraCondensed.ttf OFL-1.1
+linux/394__Iosevka-ExtendedSemiBoldOblique.ttf OFL-1.1
+linux/395__DejaVuSansCondensed-Oblique.ttf CC0/PD
+linux/396__Barlow-Black.ttf OFL-1.1
+linux/397__Inconsolata-UltraCondensedRegular.ttf OFL-1.1
+linux/398__UbuntuSans-Italic[wdth,wght].ttf Ubuntu-FL-1.0
+linux/39__STIXTwoMath.otf OFL-1.1
+linux/3__NotoSansMyanmar.ttc OFL-1.1
+linux/400__FiraSans-ExtraLight.ttf OFL-1.1
+linux/401__Iosevka-Regular.ttf OFL-1.1
+linux/404__NotoSansLisu-Regular.ttf OFL-1.1
+linux/405__DavidLibre-Bold.ttf OFL-1.1
+linux/406__Mukta-ExtraBold.ttf OFL-1.1
+linux/407__Inconsolata-UltraExpandedMedium.ttf OFL-1.1
+linux/408__Inconsolata-UltraExpandedSemiBold.ttf OFL-1.1
+linux/409__SourceSerif4-Italic[opsz,wght].ttf OFL-1.1
+linux/40__NotoSansModi-Regular.ttf OFL-1.1
+linux/410__Iosevka-ExtendedThin.ttf OFL-1.1
+linux/412__WorkSans-Italic[wght].ttf OFL-1.1
+linux/414__Inconsolata-SemiExpandedMedium.ttf OFL-1.1
+linux/415__Poppins-MediumItalic.ttf OFL-1.1
+linux/416__Poppins-LightItalic.ttf OFL-1.1
+linux/417__Inconsolata-ExtraCondensedLight.ttf OFL-1.1
+linux/418__Iosevka-HeavyItalic.ttf OFL-1.1
+linux/419__UbuntuCondensed-Regular.ttf Ubuntu-FL-1.0
+linux/41__NotoSansNewTaiLue-Regular.ttf OFL-1.1
+linux/420__SpaceMono-Regular.ttf OFL-1.1
+linux/422__Barlow-Thin.ttf OFL-1.1
+linux/423__Inconsolata-UltraCondensedBold.ttf OFL-1.1
+linux/424__Inconsolata-ExpandedBold.ttf OFL-1.1
+linux/425__Inconsolata-CondensedExtraBold.ttf OFL-1.1
+linux/426__Inconsolata-ExtraExpanded.ttf OFL-1.1
+linux/428__FiraSans-BlackItalic.ttf OFL-1.1
+linux/429__Inconsolata-ExpandedExtraLight.ttf OFL-1.1
+linux/42__NotoSansRejang-Regular.ttf OFL-1.1
+linux/430__Iosevka-ExtendedSemiBold.ttf OFL-1.1
+linux/431__Inconsolata-UltraExpandedRegular.ttf OFL-1.1
+linux/433__NunitoSans[YTLC,opsz,wdth,wght].ttf OFL-1.1
+linux/434__Iosevka-Heavy.ttf OFL-1.1
+linux/435__IBMPlexMono-ExtraLightItalic.ttf OFL-1.1
+linux/436__Inconsolata-Regular.ttf OFL-1.1
+linux/437__NotoSansArmenian-Bold.ttf OFL-1.1
+linux/438__Iosevka-ExtendedLightItalic.ttf OFL-1.1
+linux/439__Cantarell-Bold.ttf OFL-1.1
+linux/43__NotoSansPahawhHmong-Regular.ttf OFL-1.1
+linux/440__Inconsolata-ExtraCondensed.ttf OFL-1.1
+linux/441__Ubuntu-Italic.ttf Ubuntu-FL-1.0
+linux/442__Iosevka-ExtendedHeavyItalic.ttf OFL-1.1
+linux/443__Iosevka-SemiBold.ttf OFL-1.1
+linux/444__Inconsolata-SemiExpandedSemiBold.ttf OFL-1.1
+linux/445__DejaVuSansMono-BoldOblique.ttf CC0/PD
+linux/446__Barlow-SemiBoldItalic.ttf OFL-1.1
+linux/447__IBMPlexMono-LightItalic.ttf OFL-1.1
+linux/448__Iosevka-BoldItalic.ttf OFL-1.1
+linux/449__Inconsolata-SemiExpandedBlack.ttf OFL-1.1
+linux/44__NotoSansOsage-Regular.ttf OFL-1.1
+linux/450__Inconsolata-ExpandedMedium.ttf OFL-1.1
+linux/451__Inconsolata-ExtraExpandedExtraLight.ttf OFL-1.1
+linux/452__FiraCode[wght].ttf OFL-1.1
+linux/454__DavidLibre-Medium.ttf OFL-1.1
+linux/456__Inconsolata-ExpandedExtraBold.ttf OFL-1.1
+linux/457__UbuntuSans[wdth,wght].ttf Ubuntu-FL-1.0
+linux/458__LinBiolinum_RB.otf OFL-1.1
+linux/459__FiraSans-SemiBold.ttf OFL-1.1
+linux/45__NotoSansJavanese-Regular.otf OFL-1.1
+linux/460__Mukta-Regular.ttf OFL-1.1
+linux/461__Lato-Thin.ttf OFL-1.1
+linux/462__PlayfairDisplay[wght].ttf OFL-1.1
+linux/463__Barlow-Medium.ttf OFL-1.1
+linux/464__Lato-SemiBoldItalic.ttf OFL-1.1
+linux/465__UbuntuMono-Bold.ttf Ubuntu-FL-1.0
+linux/466__Lato-Light.ttf OFL-1.1
+linux/467__Inconsolata-ExtraCondensedMedium.ttf OFL-1.1
+linux/468__UbuntuMono-Regular.ttf Ubuntu-FL-1.0
+linux/469__Iosevka-ExtendedItalic.ttf OFL-1.1
+linux/46__NotoSansElbasan-Regular.ttf OFL-1.1
+linux/470__RobotoCondensed-Italic[wght].ttf Apache-2.0
+linux/471__Poppins-ExtraBoldItalic.ttf OFL-1.1
+linux/472__IBMPlexMono-Light.ttf OFL-1.1
+linux/474__Merriweather-Italic[opsz,wdth,wght].ttf OFL-1.1
+linux/475__Inconsolata-ExtraExpandedSemiBold.ttf OFL-1.1
+linux/476__Inconsolata-UltraCondensedMedium.ttf OFL-1.1
+linux/477__Ubuntu-Italic[wdth,wght].ttf Ubuntu-FL-1.0
+linux/478__DejaVuSans-Oblique.ttf CC0/PD
+linux/479__Iosevka-ThinOblique.ttf OFL-1.1
+linux/47__NotoSansChakma-Regular.ttf OFL-1.1
+linux/480__DejaVuSans.ttf CC0/PD
+linux/481__DejaVuSerifCondensed-Bold.ttf CC0/PD
+linux/482__Karla-Italic[wght].ttf OFL-1.1
+linux/483__DejaVuSans-BoldOblique.ttf CC0/PD
+linux/484__Inconsolata-ExpandedRegular.ttf OFL-1.1
+linux/485__Carlito-Regular.ttf OFL-1.1
+linux/486__Inconsolata-ExtraExpandedRegular.ttf OFL-1.1
+linux/488__Inconsolata-Bold.ttf OFL-1.1
+linux/489__TitilliumWeb-Light.ttf OFL-1.1
+linux/48__NotoSansBamum-Regular.ttf OFL-1.1
+linux/490__SourceSans3[wght].ttf OFL-1.1
+linux/491__SpaceMono-Bold.ttf OFL-1.1
+linux/492__FiraSans-ExtraBold.ttf OFL-1.1
+linux/493__Lato-Black.ttf OFL-1.1
+linux/494__Inconsolata-SemiCondensedMedium.ttf OFL-1.1
+linux/496__Poppins-Italic.ttf OFL-1.1
+linux/497__RobotoMono-Italic[wght].ttf OFL-1.1
+linux/498__NotoSans-Italic[wdth,wght].ttf OFL-1.1
+linux/499__Iosevka-MediumOblique.ttf OFL-1.1
+linux/49__NotoSansThaana-Regular.ttf OFL-1.1
+linux/4__NotoSerifMyanmar.ttc OFL-1.1
+linux/500__Hack-Italic.ttf MIT
+linux/501__Caladea-Regular.ttf OFL-1.1
+linux/502__NotoSerifLao[wdth,wght].ttf OFL-1.1
+linux/504__Inconsolata-ExtraCondensedSemiBold.ttf OFL-1.1
+linux/505__Barlow-ExtraBold.ttf OFL-1.1
+linux/506__OverpassMono[wght].ttf OFL-1.1
+linux/508__Hack-BoldItalic.ttf MIT
+linux/509__Lato-ExtraBoldItalic.ttf OFL-1.1
+linux/50__NotoSansLisu-Regular.ttf OFL-1.1
+linux/511__Inconsolata-ExtraCondensedRegular.ttf OFL-1.1
+linux/512__DejaVuSerifCondensed.ttf CC0/PD
+linux/513__NotoSerifCJK-Regular.ttc OFL-1.1
+linux/514__FiraMono-Regular.ttf OFL-1.1
+linux/515__FiraSans-Light.ttf OFL-1.1
+linux/516__Ubuntu-Regular.ttf Ubuntu-FL-1.0
+linux/517__Iosevka-ExtendedHeavyOblique.ttf OFL-1.1
+linux/519__FiraSans-Regular.ttf OFL-1.1
+linux/51__NotoSansSyriac-Regular.ttf OFL-1.1
+linux/520__DejaVuSans-Bold.ttf CC0/PD
+linux/521__Poppins-Black.ttf OFL-1.1
+linux/522__VictorMono[wght].ttf OFL-1.1
+linux/523__IBMPlexMono-Italic.ttf OFL-1.1
+linux/524__NotoSerif[wdth,wght].ttf OFL-1.1
+linux/525__Barlow-BlackItalic.ttf OFL-1.1
+linux/526__NotoSansArabic-Bold.ttf OFL-1.1
+linux/527__Iosevka-Oblique.ttf OFL-1.1
+linux/528__Iosevka-LightItalic.ttf OFL-1.1
+linux/529__Inconsolata-ExtraExpandedBlack.ttf OFL-1.1
+linux/52__NotoSansKhudawadi-Regular.ttf OFL-1.1
+linux/530__Inconsolata-SemiExpandedExtraLight.ttf OFL-1.1
+linux/532__Inconsolata-UltraCondensedBlack.ttf OFL-1.1
+linux/534__Caladea-Bold.ttf OFL-1.1
+linux/535__Iosevka-ExtendedMedium.ttf OFL-1.1
+linux/536__Iosevka-ExtendedLight.ttf OFL-1.1
+linux/537__IBMPlexMono-SemiBoldItalic.ttf OFL-1.1
+linux/538__LinLibertine_RZ.otf OFL-1.1
+linux/539__Iosevka-ExtendedOblique.ttf OFL-1.1
+linux/53__NotoSansOsmanya-Regular.ttf OFL-1.1
+linux/540__Inconsolata-CondensedExtraLight.ttf OFL-1.1
+linux/541__Caladea-Italic.ttf OFL-1.1
+linux/542__DejaVuSans-ExtraLight.ttf CC0/PD
+linux/543__Mukta-Medium.ttf OFL-1.1
+linux/544__Amiri-BoldItalic.ttf OFL-1.1
+linux/545__Ubuntu-Medium.ttf Ubuntu-FL-1.0
+linux/546__NotoSansMasaramGondi-Regular.otf OFL-1.1
+linux/547__NotoSansTaiTham-Regular.ttf OFL-1.1
+linux/549__NotoSansCham-Regular.ttf OFL-1.1
+linux/54__NotoSansLimbu-Regular.ttf OFL-1.1
+linux/550__NotoSansMultani-Regular.ttf OFL-1.1
+linux/551__NotoSansPauCinHau-Regular.ttf OFL-1.1
+linux/552__NotoSerifYezidi-Regular.otf OFL-1.1
+linux/553__NotoSansNKo-Regular.ttf OFL-1.1
+linux/554__NotoSansBuhid-Regular.ttf OFL-1.1
+linux/555__NotoSansSamaritan-Regular.ttf OFL-1.1
+linux/556__NotoSansMiao-Regular.ttf OFL-1.1
+linux/557__NotoSansMandaic-Regular.ttf OFL-1.1
+linux/558__NotoSansTifinagh-Regular.otf OFL-1.1
+linux/559__NotoSansTirhuta-Regular.ttf OFL-1.1
+linux/55__NotoSansGunjalaGondi-Regular.otf OFL-1.1
+linux/560__NotoSansSaurashtra-Regular.ttf OFL-1.1
+linux/561__NotoSansCoptic-Regular.ttf OFL-1.1
+linux/562__NotoSansSylotiNagri-Regular.ttf OFL-1.1
+linux/563__NotoSerifBalinese-Regular.ttf OFL-1.1
+linux/564__NotoSansMro-Regular.ttf OFL-1.1
+linux/565__NotoSansTaiViet-Regular.ttf OFL-1.1
+linux/567__NotoSansKayahLi-Regular.ttf OFL-1.1
+linux/568__NotoSansMendeKikakui-Regular.ttf OFL-1.1
+linux/569__NotoSansBatak-Regular.ttf OFL-1.1
+linux/56__NotoSansSundanese-Regular.ttf OFL-1.1
+linux/570__NotoSansBuginese-Regular.ttf OFL-1.1
+linux/571__NotoSansNewa-Regular.ttf OFL-1.1
+linux/572__NotoSansWarangCiti-Regular.ttf OFL-1.1
+linux/573__NotoSansHanunoo-Regular.ttf OFL-1.1
+linux/574__NotoSansSharada-Regular.ttf OFL-1.1
+linux/575__NotoSansKhojki-Regular.ttf OFL-1.1
+linux/576__NotoSansCanadianAboriginal-Regular.otf OFL-1.1
+linux/577__NotoSansYi-Regular.ttf OFL-1.1
+linux/578__NotoSansTakri-Regular.ttf OFL-1.1
+linux/579__NotoSansMahajani-Regular.ttf OFL-1.1
+linux/580__STIXTwoMath.otf OFL-1.1
+linux/581__NotoSansModi-Regular.ttf OFL-1.1
+linux/582__NotoSansNewTaiLue-Regular.ttf OFL-1.1
+linux/583__NotoSansRejang-Regular.ttf OFL-1.1
+linux/584__NotoSansPahawhHmong-Regular.ttf OFL-1.1
+linux/585__NotoSansOsage-Regular.ttf OFL-1.1
+linux/586__NotoSansJavanese-Regular.otf OFL-1.1
+linux/587__NotoSansElbasan-Regular.ttf OFL-1.1
+linux/588__NotoSansChakma-Regular.ttf OFL-1.1
+linux/589__NotoSansBamum-Regular.ttf OFL-1.1
+linux/58__NotoSansLepcha-Regular.ttf OFL-1.1
+linux/590__NotoSansThaana-Regular.ttf OFL-1.1
+linux/591__NotoSansLisu-Regular.ttf OFL-1.1
+linux/592__NotoSansSyriac-Regular.ttf OFL-1.1
+linux/593__NotoSansKhudawadi-Regular.ttf OFL-1.1
+linux/594__NotoSansOsmanya-Regular.ttf OFL-1.1
+linux/595__NotoSansLimbu-Regular.ttf OFL-1.1
+linux/596__NotoSansGunjalaGondi-Regular.otf OFL-1.1
+linux/597__NotoSansSundanese-Regular.ttf OFL-1.1
+linux/599__NotoSansLepcha-Regular.ttf OFL-1.1
+linux/59__NotoSansMeeteiMayek-Regular.ttf OFL-1.1
+linux/5__NotoSansMasaramGondi-Regular.otf OFL-1.1
+linux/600__NotoSansMeeteiMayek-Regular.ttf OFL-1.1
+linux/601__NotoSansTagbanwa-Regular.ttf OFL-1.1
+linux/602__NotoSansBassaVah-Regular.ttf OFL-1.1
+linux/603__NotoSansOlChiki-Regular.ttf OFL-1.1
+linux/604__NotoSansAdlam-Regular.ttf OFL-1.1
+linux/605__NotoSansTaiLe-Regular.ttf OFL-1.1
+linux/606__NotoSansVai-Regular.ttf OFL-1.1
+linux/607__NotoSansTagalog-Regular.ttf OFL-1.1
+linux/608__NotoSansWancho-Regular.ttf OFL-1.1
+linux/60__NotoSansTagbanwa-Regular.ttf OFL-1.1
+linux/610__NotoSansSoraSompeng-Regular.ttf OFL-1.1
+linux/611__NotoSansMongolian-Regular.ttf OFL-1.1
+linux/61__NotoSansBassaVah-Regular.ttf OFL-1.1
+linux/62__NotoSansOlChiki-Regular.ttf OFL-1.1
+linux/63__NotoSansAdlam-Regular.ttf OFL-1.1
+linux/64__NotoSansTaiLe-Regular.ttf OFL-1.1
+linux/65__NotoSansVai-Regular.ttf OFL-1.1
+linux/66__NotoSansTagalog-Regular.ttf OFL-1.1
+linux/679__SourceSans3-Bold.otf OFL-1.1
+linux/67__NotoSansWancho-Regular.ttf OFL-1.1
+linux/680__SourceSans3-It.otf OFL-1.1
+linux/681__SourceSerif4-Regular.otf OFL-1.1
+linux/683__SourceSerif4-Bold.otf OFL-1.1
+linux/684__SourceSans3-BoldIt.otf OFL-1.1
+linux/685__SourceSerif4-BoldIt.otf OFL-1.1
+linux/687__SourceSans3-Regular.otf OFL-1.1
+linux/688__SourceSerif4-It.otf OFL-1.1
+linux/69__NotoSansSoraSompeng-Regular.ttf OFL-1.1
+linux/6__NotoSansTaiTham-Regular.ttf OFL-1.1
+linux/70__NotoSansMongolian-Regular.ttf OFL-1.1
+linux/71__NotoSansTC-VF.ttf OFL-1.1
+linux/72__NotoSansJP-VF.ttf OFL-1.1
+linux/73__NotoSansKR-VF.ttf OFL-1.1
+linux/74__NotoSansSC-VF.ttf OFL-1.1
+linux/78__NotoSansArmenian[wdth,wght].ttf OFL-1.1
+linux/79__Barlow-ExtraBoldItalic.ttf OFL-1.1
+linux/80__NotoSansMono-Regular.ttf OFL-1.1
+linux/82__Poppins-BoldItalic.ttf OFL-1.1
+linux/83__Poppins-ExtraLight.ttf OFL-1.1
+linux/84__Ubuntu-LightItalic.ttf Ubuntu-FL-1.0
+linux/85__FiraSans-Thin.ttf OFL-1.1
+linux/86__Rubik-Italic[wght].ttf OFL-1.1
+linux/87__Iosevka-ExtendedHeavy.ttf OFL-1.1
+linux/88__Iosevka-ExtendedExtraBold.ttf OFL-1.1
+linux/89__TitilliumWeb-Italic.ttf OFL-1.1
+linux/8__NotoSansCham-Regular.ttf OFL-1.1
+linux/90__Inconsolata-ExtraLight.ttf OFL-1.1
+linux/91__Barlow-LightItalic.ttf OFL-1.1
+linux/92__Lato-SemiBold.ttf OFL-1.1
+linux/93__LinLibertine_R.otf OFL-1.1
+linux/94__Inconsolata-ExtraCondensedBold.ttf OFL-1.1
+linux/95__Inconsolata-CondensedRegular.ttf OFL-1.1
+linux/96__Inconsolata-ExtraExpandedBold.ttf OFL-1.1
+linux/97__LinBiolinum_R.otf OFL-1.1
+linux/98__DejaVuSerifCondensed-BoldItalic.ttf CC0/PD
+linux/99__Ubuntu-Light.ttf Ubuntu-FL-1.0
+linux/9__NotoSansMultani-Regular.ttf OFL-1.1
+linux/openadd-DroidSansFallbackFull.ttf Apache-2.0
+linux/openadd-NotoLoopedLao-Regular.ttf OFL-1.1
+linux/openadd-NotoLoopedThai-Bold.ttf OFL-1.1
+linux/openadd-NotoMusic-Regular.ttf OFL-1.1
+linux/openadd-NotoNastaliqUrdu-Bold.ttf OFL-1.1
+linux/openadd-NotoRashiHebrew-Regular.ttf OFL-1.1
+linux/openadd-NotoSansAdlamUnjoined-Regular.ttf OFL-1.1
+linux/openadd-NotoSansAnatolianHieroglyphs-Regular.ttf OFL-1.1
+linux/openadd-NotoSansAvestan-Regular.ttf OFL-1.1
+linux/openadd-NotoSansBhaiksuki-Regular.ttf OFL-1.1
+linux/openadd-NotoSansBrahmi-Regular.ttf OFL-1.1
+linux/openadd-NotoSansCarian-Regular.ttf OFL-1.1
+linux/openadd-NotoSansCaucasianAlbanian-Regular.ttf OFL-1.1
+linux/openadd-NotoSansCuneiform-Regular.ttf OFL-1.1
+linux/openadd-NotoSansCypriot-Regular.ttf OFL-1.1
+linux/openadd-NotoSansDisplay-Italic.ttf OFL-1.1
+linux/openadd-NotoSansDuployan-Regular.ttf OFL-1.1
+linux/openadd-NotoSansEgyptianHieroglyphs-Regular.ttf OFL-1.1
+linux/openadd-NotoSansElymaic-Regular.ttf OFL-1.1
+linux/openadd-NotoSansGlagolitic-Regular.ttf OFL-1.1
+linux/openadd-NotoSansGothic-Regular.ttf OFL-1.1
+linux/openadd-NotoSansHatran-Regular.ttf OFL-1.1
+linux/openadd-NotoSansImperialAramaic-Regular.ttf OFL-1.1
+linux/openadd-NotoSansIndicSiyaqNumbers-Regular.ttf OFL-1.1
+linux/openadd-NotoSansInscriptionalPahlavi-Regular.ttf OFL-1.1
+linux/openadd-NotoSansInscriptionalParthian-Regular.ttf OFL-1.1
+linux/openadd-NotoSansKaithi-Regular.ttf OFL-1.1
+linux/openadd-NotoSansKharoshthi-Regular.ttf OFL-1.1
+linux/openadd-NotoSansLinearA-Regular.ttf OFL-1.1
+linux/openadd-NotoSansLinearB-Regular.ttf OFL-1.1
+linux/openadd-NotoSansLycian-Regular.ttf OFL-1.1
+linux/openadd-NotoSansLydian-Regular.ttf OFL-1.1
+linux/openadd-NotoSansManichaean-Regular.ttf OFL-1.1
+linux/openadd-NotoSansMarchen-Regular.ttf OFL-1.1
+linux/openadd-NotoSansMath-Regular.ttf OFL-1.1
+linux/openadd-NotoSansMayanNumerals-Regular.ttf OFL-1.1
+linux/openadd-NotoSansMeroitic-Regular.ttf OFL-1.1
+linux/openadd-NotoSansNabataean-Regular.ttf OFL-1.1
+linux/openadd-NotoSansNushu-Regular.ttf OFL-1.1
+linux/openadd-NotoSansOgham-Regular.ttf OFL-1.1
+linux/openadd-NotoSansOldHungarian-Regular.ttf OFL-1.1
+linux/openadd-NotoSansOldItalic-Regular.ttf OFL-1.1
+linux/openadd-NotoSansOldNorthArabian-Regular.ttf OFL-1.1
+linux/openadd-NotoSansOldPermic-Regular.ttf OFL-1.1
+linux/openadd-NotoSansOldPersian-Regular.ttf OFL-1.1
+linux/openadd-NotoSansOldSogdian-Regular.ttf OFL-1.1
+linux/openadd-NotoSansOldSouthArabian-Regular.ttf OFL-1.1
+linux/openadd-NotoSansOldTurkic-Regular.ttf OFL-1.1
+linux/openadd-NotoSansPalmyrene-Regular.ttf OFL-1.1
+linux/openadd-NotoSansPhagsPa-Regular.ttf OFL-1.1
+linux/openadd-NotoSansPhoenician-Regular.ttf OFL-1.1
+linux/openadd-NotoSansPsalterPahlavi-Regular.ttf OFL-1.1
+linux/openadd-NotoSansSiddham-Regular.ttf OFL-1.1
+linux/openadd-NotoSansSignWriting-Regular.ttf OFL-1.1
+linux/openadd-NotoSansSogdian-Regular.ttf OFL-1.1
+linux/openadd-NotoSansSymbols2-Regular.ttf OFL-1.1
+linux/openadd-NotoSansTamilSupplement-Regular.ttf OFL-1.1
+linux/openadd-NotoSansTifinaghAPT-Regular.ttf OFL-1.1
+linux/openadd-NotoSansTifinaghAdrar-Regular.ttf OFL-1.1
+linux/openadd-NotoSansTifinaghAgrawImazighen-Regular.ttf OFL-1.1
+linux/openadd-NotoSansTifinaghAhaggar-Regular.ttf OFL-1.1
+linux/openadd-NotoSansTifinaghAir-Regular.ttf OFL-1.1
+linux/openadd-NotoSansTifinaghAzawagh-Regular.ttf OFL-1.1
+linux/openadd-NotoSansTifinaghGhat-Regular.ttf OFL-1.1
+linux/openadd-NotoSansTifinaghHawad-Regular.ttf OFL-1.1
+linux/openadd-NotoSansTifinaghRhissaIxa-Regular.ttf OFL-1.1
+linux/openadd-NotoSansTifinaghSIL-Regular.ttf OFL-1.1
+linux/openadd-NotoSansTifinaghTawellemmet-Regular.ttf OFL-1.1
+linux/openadd-NotoSansUgaritic-Regular.ttf OFL-1.1
+linux/openadd-NotoSerifAhom-Regular.ttf OFL-1.1
+linux/openadd-NotoSerifDisplay-Italic.ttf OFL-1.1
+linux/openadd-NotoSerifNyiakengPuachueHmong-Regular.ttf OFL-1.1
+linux/openadd-NotoSerifTamilSlanted-Bold.ttf OFL-1.1
+linux/openadd-NotoSerifTangut-Regular.ttf OFL-1.1
+linux/openadd-NotoTraditionalNushu-Regular.ttf OFL-1.1
+linux/u__LiberationMono-Bold.ttf OFL-1.1
+linux/u__LiberationMono-BoldItalic.ttf OFL-1.1
+linux/u__LiberationMono-Regular.ttf OFL-1.1
+linux/u__LiberationSans-BoldItalic.ttf OFL-1.1
+linux/u__LiberationSans-Italic.ttf OFL-1.1
+linux/u__LiberationSans-Regular.ttf OFL-1.1
+linux/u__LiberationSerif-Bold.ttf OFL-1.1
+linux/u__LiberationSerif-BoldItalic.ttf OFL-1.1
+linux/u__LiberationSerif-Italic.ttf OFL-1.1
+linux/u__NotoLoopedLao-Bold.ttf OFL-1.1
+linux/u__NotoLoopedThai-Regular.ttf OFL-1.1
+linux/u__NotoNastaliqUrdu-Regular.ttf OFL-1.1
+linux/u__NotoRashiHebrew-Bold.ttf OFL-1.1
+linux/u__NotoSansAdlam-Bold.ttf OFL-1.1
+linux/u__NotoSansAdlamUnjoined-Bold.ttf OFL-1.1
+linux/u__NotoSansBamum-Bold.ttf OFL-1.1
+linux/u__NotoSansCanadianAboriginal-Bold.ttf OFL-1.1
+linux/u__NotoSansCham-Bold.ttf OFL-1.1
+linux/u__NotoSansDisplay-Bold.ttf OFL-1.1
+linux/u__NotoSansDisplay-BoldItalic.ttf OFL-1.1
+linux/u__NotoSansDisplay-Regular.ttf OFL-1.1
+linux/u__NotoSansJavanese-Bold.ttf OFL-1.1
+linux/u__NotoSansKayahLi-Bold.ttf OFL-1.1
+linux/u__NotoSansMeeteiMayek-Bold.ttf OFL-1.1
+linux/u__NotoSansOlChiki-Bold.ttf OFL-1.1
+linux/u__NotoSansSoraSompeng-Bold.ttf OFL-1.1
+linux/u__NotoSansSundanese-Bold.ttf OFL-1.1
+linux/u__NotoSansTaiTham-Bold.ttf OFL-1.1
+linux/u__NotoSansThaana-Bold.ttf OFL-1.1
+linux/u__NotoSerifDisplay-Bold.ttf OFL-1.1
+linux/u__NotoSerifDisplay-BoldItalic.ttf OFL-1.1
+linux/u__NotoSerifDisplay-Regular.ttf OFL-1.1
+linux/u__NotoSerifNyiakengPuachueHmong-Bold.ttf OFL-1.1
+linux/u__NotoSerifTamilSlanted-Regular.ttf OFL-1.1
+linux/u__NotoSerifYezidi-Bold.ttf OFL-1.1
+linux/u__Ubuntu-B.ttf Ubuntu-FL-1.0
+linux/u__UbuntuMono-BI.ttf Ubuntu-FL-1.0
+linux/u__UbuntuSansMono[wght].ttf Ubuntu-FL-1.0
+linux/z__Arimo-Italic[wght].ttf OFL-1.1
+linux/z__Arimo[wght].ttf OFL-1.1
+linux/z__Cousine-Bold.ttf OFL-1.1
+linux/z__Cousine-BoldItalic.ttf OFL-1.1
+linux/z__Cousine-Italic.ttf OFL-1.1
+linux/z__Cousine-Regular.ttf OFL-1.1
+linux/z__NotoColorEmoji-Regular.ttf OFL-1.1
+linux/z__NotoSansBalinese[wght].ttf OFL-1.1
+linux/z__NotoSansBengali[wdth,wght].ttf OFL-1.1
+linux/z__NotoSansCherokee[wght].ttf OFL-1.1
+linux/z__NotoSansDeseret-Regular.ttf OFL-1.1
+linux/z__NotoSansDevanagari[wdth,wght].ttf OFL-1.1
+linux/z__NotoSansEthiopic[wdth,wght].ttf OFL-1.1
+linux/z__NotoSansGrantha-Regular.ttf OFL-1.1
+linux/z__NotoSansGujarati[wdth,wght].ttf OFL-1.1
+linux/z__NotoSansGurmukhi[wdth,wght].ttf OFL-1.1
+linux/z__NotoSansKhmer[wdth,wght].ttf OFL-1.1
+linux/z__NotoSansMalayalam[wdth,wght].ttf OFL-1.1
+linux/z__NotoSansMedefaidrin[wght].ttf OFL-1.1
+linux/z__NotoSansRunic-Regular.ttf OFL-1.1
+linux/z__NotoSansShavian-Regular.ttf OFL-1.1
+linux/z__NotoSansSinhala[wdth,wght].ttf OFL-1.1
+linux/z__NotoSansSoyombo-Regular.ttf OFL-1.1
+linux/z__NotoSansSymbols2-Regular.ttf OFL-1.1
+linux/z__NotoSansSymbols[wght].ttf OFL-1.1
+linux/z__NotoSansTamil[wdth,wght].ttf OFL-1.1
+linux/z__NotoSansTelugu[wdth,wght].ttf OFL-1.1
+linux/z__NotoSansThai[wdth,wght].ttf OFL-1.1
+linux/z__NotoSansZanabazarSquare-Regular.ttf OFL-1.1
+linux/z__NotoSerifBengali[wdth,wght].ttf OFL-1.1
+linux/z__NotoSerifDevanagari[wdth,wght].ttf OFL-1.1
+linux/z__NotoSerifDogra-Regular.ttf OFL-1.1
+linux/z__NotoSerifEthiopic[wdth,wght].ttf OFL-1.1
+linux/z__NotoSerifGrantha-Regular.ttf OFL-1.1
+linux/z__NotoSerifGujarati[wght].ttf OFL-1.1
+linux/z__NotoSerifGurmukhi[wght].ttf OFL-1.1
+linux/z__NotoSerifKannada[wght].ttf OFL-1.1
+linux/z__NotoSerifKhmer[wdth,wght].ttf OFL-1.1
+linux/z__NotoSerifKhojki[wght].ttf OFL-1.1
+linux/z__NotoSerifMalayalam[wght].ttf OFL-1.1
+linux/z__NotoSerifNPHmong[wght].ttf OFL-1.1
+linux/z__NotoSerifSinhala[wdth,wght].ttf OFL-1.1
+linux/z__NotoSerifTamil-Italic[wdth,wght].ttf OFL-1.1
+linux/z__NotoSerifTamil[wdth,wght].ttf OFL-1.1
+linux/z__NotoSerifTelugu[wght].ttf OFL-1.1
+linux/z__NotoSerifThai[wdth,wght].ttf OFL-1.1
+linux/z__NotoSerifTibetan[wght].ttf OFL-1.1
+linux/z__Tinos-Bold.ttf OFL-1.1
+linux/z__Tinos-BoldItalic.ttf OFL-1.1
+linux/z__Tinos-Italic.ttf OFL-1.1
+linux/z__Tinos-Regular.ttf OFL-1.1
+macos/1004__NotoSansBassaVah-Regular.ttf OFL-1.1
+macos/1006__NotoSansPsalterPahlavi-Regular.ttf OFL-1.1
+macos/1007__NotoSansOlChiki-Regular.ttf OFL-1.1
+macos/1008__NotoSansLycian-Regular.ttf OFL-1.1
+macos/1011__NotoSansBrahmi-Regular.ttf OFL-1.1
+macos/1013__NotoSansMeroitic-Regular.ttf OFL-1.1
+macos/1015__NotoSansAdlam-Regular.ttf OFL-1.1
+macos/1017__STIXNonUni.otf OFL-1.1
+macos/1019__NotoSansTaiLe-Regular.ttf OFL-1.1
+macos/1021__NotoSansInscriptionalParthian-Regular.ttf OFL-1.1
+macos/1024__STIXIntSmReg.otf OFL-1.1
+macos/1028__NotoSansManichaean-Regular.ttf OFL-1.1
+macos/1029__NotoSansVai-Regular.ttf OFL-1.1
+macos/1031__NotoSansTagalog-Regular.ttf OFL-1.1
+macos/1034__NotoSansWancho-Regular.ttf OFL-1.1
+macos/1036__STIXIntUpBol.otf OFL-1.1
+macos/1038__STIXTwoText-Italic.ttf OFL-1.1
+macos/1040__NotoSansSoraSompeng-Regular.ttf OFL-1.1
+macos/1041__NotoSerifNyiakengPuachueHmong-Regular.ttf OFL-1.1
+macos/1044__NotoSansMongolian-Regular.ttf OFL-1.1
+macos/107__STIXTwoText.ttf OFL-1.1
+macos/108__NotoSansImperialAramaic-Regular.ttf OFL-1.1
+macos/1112__SourceSans3-Bold.otf OFL-1.1
+macos/1113__SourceSans3-It.otf OFL-1.1
+macos/1114__SourceSerif4-Regular.otf OFL-1.1
+macos/1116__SourceSerif4-Bold.otf OFL-1.1
+macos/1117__SourceSans3-BoldIt.otf OFL-1.1
+macos/1118__SourceSerif4-BoldIt.otf OFL-1.1
+macos/111__NotoSansCham-Regular.ttf OFL-1.1
+macos/1120__SourceSans3-Regular.otf OFL-1.1
+macos/1121__SourceSerif4-It.otf OFL-1.1
+macos/117__STIXNonUniIta.otf OFL-1.1
+macos/118__NotoSansLinearB-Regular.ttf OFL-1.1
+macos/119__NotoSansMultani-Regular.ttf OFL-1.1
+macos/120__NotoSansPauCinHau-Regular.ttf OFL-1.1
+macos/123__STIXNonUniBolIta.otf OFL-1.1
+macos/126__NotoSerifYezidi-Regular.otf OFL-1.1
+macos/130__NotoSansNKo-Regular.ttf OFL-1.1
+macos/133__STIXSizThreeSymReg.otf OFL-1.1
+macos/138__NotoSansOldItalic-Regular.ttf OFL-1.1
+macos/139__NotoSansPhagsPa-Regular.ttf OFL-1.1
+macos/141__NotoSansOldSouthArabian-Regular.ttf OFL-1.1
+macos/143__NotoSansBuhid-Regular.ttf OFL-1.1
+macos/147__NotoSansSamaritan-Regular.ttf OFL-1.1
+macos/149__NotoSansMiao-Regular.ttf OFL-1.1
+macos/152__NotoSansMandaic-Regular.ttf OFL-1.1
+macos/154__NotoSansTifinagh-Regular.otf OFL-1.1
+macos/155__NotoSansTirhuta-Regular.ttf OFL-1.1
+macos/156__NotoSansPhoenician-Regular.ttf OFL-1.1
+macos/158__NotoSansUgaritic-Regular.ttf OFL-1.1
+macos/160__NotoSansSaurashtra-Regular.ttf OFL-1.1
+macos/164__NotoSansOldNorthArabian-Regular.ttf OFL-1.1
+macos/165__NotoSansCoptic-Regular.ttf OFL-1.1
+macos/166__NotoSansSylotiNagri-Regular.ttf OFL-1.1
+macos/16__NotoSansOriya.ttc OFL-1.1
+macos/171__NotoSansLinearA-Regular.ttf OFL-1.1
+macos/172__NotoSerifBalinese-Regular.ttf OFL-1.1
+macos/173__NotoSansMro-Regular.ttf OFL-1.1
+macos/174__NotoSansTaiViet-Regular.ttf OFL-1.1
+macos/176__NotoSansKayahLi-Regular.ttf OFL-1.1
+macos/177__NotoSansMendeKikakui-Regular.ttf OFL-1.1
+macos/179__NotoSansCypriot-Regular.ttf OFL-1.1
+macos/17__NotoSansKannada.ttc OFL-1.1
+macos/185__NotoSansKaithi-Regular.ttf OFL-1.1
+macos/186__NotoSansDuployan-Regular.ttf OFL-1.1
+macos/188__NotoSansBatak-Regular.ttf OFL-1.1
+macos/191__STIXIntDBol.otf OFL-1.1
+macos/194__NotoSansBuginese-Regular.ttf OFL-1.1
+macos/195__NotoSansNabataean-Regular.ttf OFL-1.1
+macos/196__NotoSansNewa-Regular.ttf OFL-1.1
+macos/198__STIXIntUpDBol.otf OFL-1.1
+macos/199__NotoSansWarangCiti-Regular.ttf OFL-1.1
+macos/201__STIXSizFiveSymReg.otf OFL-1.1
+macos/202__NotoSansHanunoo-Regular.ttf OFL-1.1
+macos/203__NotoSansCarian-Regular.ttf OFL-1.1
+macos/205__NotoSansSharada-Regular.ttf OFL-1.1
+macos/206__STIXNonUniBol.otf OFL-1.1
+macos/207__NotoSansInscriptionalPahlavi-Regular.ttf OFL-1.1
+macos/208__NotoSansKhojki-Regular.ttf OFL-1.1
+macos/210__NotoSansCanadianAboriginal-Regular.otf OFL-1.1
+macos/212__NotoSansGlagolitic-Regular.ttf OFL-1.1
+macos/213__STIXIntUpSmBol.otf OFL-1.1
+macos/214__NotoSansYi-Regular.ttf OFL-1.1
+macos/215__STIXGeneralBol.otf OFL-1.1
+macos/216__NotoSansPalmyrene-Regular.ttf OFL-1.1
+macos/218__NotoSansTakri-Regular.ttf OFL-1.1
+macos/220__NotoSansMahajani-Regular.ttf OFL-1.1
+macos/223__NotoSansMarchen-Regular.ttf OFL-1.1
+macos/230__NotoSansCuneiform-Regular.ttf OFL-1.1
+macos/232__STIXTwoMath.otf OFL-1.1
+macos/234__NotoSansGothic-Regular.ttf OFL-1.1
+macos/237__STIXSizThreeSymBol.otf OFL-1.1
+macos/240__STIXIntUpDReg.otf OFL-1.1
+macos/241__NotoSansModi-Regular.ttf OFL-1.1
+macos/244__STIXGeneralBolIta.otf OFL-1.1
+macos/245__NotoSansNewTaiLue-Regular.ttf OFL-1.1
+macos/248__NotoSansRejang-Regular.ttf OFL-1.1
+macos/249__NotoSansOldTurkic-Regular.ttf OFL-1.1
+macos/24__NotoSansArmenian.ttc OFL-1.1
+macos/251__STIXIntUpReg.otf OFL-1.1
+macos/252__NotoSansOldPersian-Regular.ttf OFL-1.1
+macos/253__NotoSansPahawhHmong-Regular.ttf OFL-1.1
+macos/254__NotoSansOldPermic-Regular.ttf OFL-1.1
+macos/256__NotoSansAvestan-Regular.ttf OFL-1.1
+macos/260__NotoSansOsage-Regular.ttf OFL-1.1
+macos/261__NotoSansEgyptianHieroglyphs-Regular.ttf OFL-1.1
+macos/263__NotoSansJavanese-Regular.otf OFL-1.1
+macos/266__NotoSansElbasan-Regular.ttf OFL-1.1
+macos/267__STIXGeneralItalic.otf OFL-1.1
+macos/268__STIXSizTwoSymReg.otf OFL-1.1
+macos/26__NotoSansMyanmar.ttc OFL-1.1
+macos/270__NotoSansChakma-Regular.ttf OFL-1.1
+macos/271__NotoSansBamum-Regular.ttf OFL-1.1
+macos/275__NotoSansThaana-Regular.ttf OFL-1.1
+macos/276__NotoSansLisu-Regular.ttf OFL-1.1
+macos/277__STIXSizFourSymBol.otf OFL-1.1
+macos/278__STIXIntDReg.otf OFL-1.1
+macos/279__STIXVarBol.otf OFL-1.1
+macos/281__STIXIntUpSmReg.otf OFL-1.1
+macos/282__NotoSansSyriac-Regular.ttf OFL-1.1
+macos/284__NotoSansKhudawadi-Regular.ttf OFL-1.1
+macos/286__NotoSansOsmanya-Regular.ttf OFL-1.1
+macos/289__STIXSizFourSymReg.otf OFL-1.1
+macos/28__MuktaMahee.ttc OFL-1.1
+macos/290__NotoSansLimbu-Regular.ttf OFL-1.1
+macos/294__NotoSansGunjalaGondi-Regular.otf OFL-1.1
+macos/297__NotoSansSundanese-Regular.ttf OFL-1.1
+macos/298__NotoSansLydian-Regular.ttf OFL-1.1
+macos/304__STIXSizOneSymReg.otf OFL-1.1
+macos/311__NotoSansSiddham-Regular.otf OFL-1.1
+macos/312__STIXSizOneSymBol.otf OFL-1.1
+macos/313__STIXSizTwoSymBol.otf OFL-1.1
+macos/316__NotoSerifAhom-Regular.ttf OFL-1.1
+macos/317__NotoSansKharoshthi-Regular.ttf OFL-1.1
+macos/318__NotoSansLepcha-Regular.ttf OFL-1.1
+macos/319__NotoSansOldHungarian-Regular.ttf OFL-1.1
+macos/320__NotoSansBhaiksuki-Regular.ttf OFL-1.1
+macos/322__NotoSansMeeteiMayek-Regular.ttf OFL-1.1
+macos/323__NotoSansTagbanwa-Regular.ttf OFL-1.1
+macos/325__NotoSansCaucasianAlbanian-Regular.ttf OFL-1.1
+macos/332__NotoSansBassaVah-Regular.ttf OFL-1.1
+macos/334__NotoSansPsalterPahlavi-Regular.ttf OFL-1.1
+macos/335__NotoSansOlChiki-Regular.ttf OFL-1.1
+macos/336__NotoSansLycian-Regular.ttf OFL-1.1
+macos/339__NotoSansBrahmi-Regular.ttf OFL-1.1
+macos/341__NotoSansMeroitic-Regular.ttf OFL-1.1
+macos/343__NotoSansAdlam-Regular.ttf OFL-1.1
+macos/345__STIXNonUni.otf OFL-1.1
+macos/347__NotoSansTaiLe-Regular.ttf OFL-1.1
+macos/349__NotoSansInscriptionalParthian-Regular.ttf OFL-1.1
+macos/352__STIXIntSmReg.otf OFL-1.1
+macos/356__NotoSansManichaean-Regular.ttf OFL-1.1
+macos/357__NotoSansVai-Regular.ttf OFL-1.1
+macos/359__NotoSansTagalog-Regular.ttf OFL-1.1
+macos/362__NotoSansWancho-Regular.ttf OFL-1.1
+macos/364__STIXIntUpBol.otf OFL-1.1
+macos/366__STIXTwoText-Italic.ttf OFL-1.1
+macos/368__NotoSansSoraSompeng-Regular.ttf OFL-1.1
+macos/369__NotoSerifNyiakengPuachueHmong-Regular.ttf OFL-1.1
+macos/372__NotoSansMongolian-Regular.ttf OFL-1.1
+macos/424__NotoSansArmenian[wdth,wght].ttf OFL-1.1
+macos/425__Barlow-ExtraBoldItalic.ttf OFL-1.1
+macos/426__Poppins-BoldItalic.ttf OFL-1.1
+macos/427__Poppins-ExtraLight.ttf OFL-1.1
+macos/428__FiraSans-Thin.ttf OFL-1.1
+macos/429__Rubik-Italic[wght].ttf OFL-1.1
+macos/430__Iosevka-ExtendedHeavy.ttf OFL-1.1
+macos/431__Iosevka-ExtendedExtraBold.ttf OFL-1.1
+macos/432__TitilliumWeb-Italic.ttf OFL-1.1
+macos/433__Inconsolata-ExtraLight.ttf OFL-1.1
+macos/434__Barlow-LightItalic.ttf OFL-1.1
+macos/435__Lato-SemiBold.ttf OFL-1.1
+macos/436__Inconsolata-ExtraCondensedBold.ttf OFL-1.1
+macos/437__Inconsolata-CondensedRegular.ttf OFL-1.1
+macos/438__Inconsolata-ExtraExpandedBold.ttf OFL-1.1
+macos/439__Iosevka-ExtraLight.ttf OFL-1.1
+macos/440__Inconsolata-ExtraExpandedExtraBold.ttf OFL-1.1
+macos/441__Iosevka-Light.ttf OFL-1.1
+macos/442__Raleway-Italic[wght].ttf OFL-1.1
+macos/443__Lato-ExtraLightItalic.ttf OFL-1.1
+macos/444__Rubik[wght].ttf OFL-1.1
+macos/445__Iosevka-Italic.ttf OFL-1.1
+macos/446__Inter-Italic[opsz,wght].ttf OFL-1.1
+macos/447__Iosevka-ThinItalic.ttf OFL-1.1
+macos/448__Inconsolata-SemiCondensedSemiBold.ttf OFL-1.1
+macos/449__Raleway[wght].ttf OFL-1.1
+macos/450__Inconsolata-ExpandedLight.ttf OFL-1.1
+macos/451__Inconsolata-UltraExpandedExtraLight.ttf OFL-1.1
+macos/452__Nunito-Italic[wght].ttf OFL-1.1
+macos/454__FiraMono-Medium.ttf OFL-1.1
+macos/455__Iosevka-ExtendedExtraLightOblique.ttf OFL-1.1
+macos/456__Poppins-Light.ttf OFL-1.1
+macos/458__Iosevka-ExtendedExtraBoldOblique.ttf OFL-1.1
+macos/459__Inconsolata-CondensedBlack.ttf OFL-1.1
+macos/460__Poppins-Thin.ttf OFL-1.1
+macos/461__Barlow-Bold.ttf OFL-1.1
+macos/463__Iosevka-ExtraLightOblique.ttf OFL-1.1
+macos/464__TitilliumWeb-ExtraLightItalic.ttf OFL-1.1
+macos/465__Nunito[wght].ttf OFL-1.1
+macos/466__Iosevka-HeavyOblique.ttf OFL-1.1
+macos/467__Inconsolata-UltraCondensedLight.ttf OFL-1.1
+macos/468__FiraSans-ExtraLightItalic.ttf OFL-1.1
+macos/470__Inconsolata-UltraExpandedBlack.ttf OFL-1.1
+macos/471__FiraSans-LightItalic.ttf OFL-1.1
+macos/472__Poppins-ThinItalic.ttf OFL-1.1
+macos/474__FiraSans-SemiBoldItalic.ttf OFL-1.1
+macos/475__Poppins-SemiBoldItalic.ttf OFL-1.1
+macos/476__Iosevka-ExtendedLightOblique.ttf OFL-1.1
+macos/477__Barlow-ExtraLight.ttf OFL-1.1
+macos/478__Heebo[wght].ttf OFL-1.1
+macos/479__Inconsolata-CondensedBold.ttf OFL-1.1
+macos/480__Oswald[wght].ttf OFL-1.1
+macos/481__PlayfairDisplay-Italic[wght].ttf OFL-1.1
+macos/482__VictorMono-Italic[wght].ttf OFL-1.1
+macos/483__TitilliumWeb-SemiBold.ttf OFL-1.1
+macos/484__Barlow-MediumItalic.ttf OFL-1.1
+macos/485__TitilliumWeb-Bold.ttf OFL-1.1
+macos/486__Karla[wght].ttf OFL-1.1
+macos/487__Inconsolata-UltraCondensedSemiBold.ttf OFL-1.1
+macos/488__Iosevka-Thin.ttf OFL-1.1
+macos/490__Lato-ExtraLight.ttf OFL-1.1
+macos/491__Mukta-Bold.ttf OFL-1.1
+macos/492__Inconsolata-SemiCondensedLight.ttf OFL-1.1
+macos/493__FiraSans-ExtraBoldItalic.ttf OFL-1.1
+macos/494__Inconsolata-Expanded.ttf OFL-1.1
+macos/495__Barlow-SemiBold.ttf OFL-1.1
+macos/496__Inconsolata-ExpandedSemiBold.ttf OFL-1.1
+macos/497__Barlow-Italic.ttf OFL-1.1
+macos/498__Barlow-ExtraLightItalic.ttf OFL-1.1
+macos/499__Iosevka-ExtraBoldOblique.ttf OFL-1.1
+macos/500__TitilliumWeb-ExtraLight.ttf OFL-1.1
+macos/502__Poppins-Bold.ttf OFL-1.1
+macos/503__Inconsolata-ExtraBold.ttf OFL-1.1
+macos/504__Iosevka-ExtendedBoldOblique.ttf OFL-1.1
+macos/505__Inconsolata-Light.ttf OFL-1.1
+macos/506__Inconsolata-SemiExpandedBold.ttf OFL-1.1
+macos/507__Iosevka-ExtendedThinOblique.ttf OFL-1.1
+macos/508__Inconsolata-SemiExpandedLight.ttf OFL-1.1
+macos/509__Mukta-Light.ttf OFL-1.1
+macos/510__WorkSans[wght].ttf OFL-1.1
+macos/511__OpenSans-Italic[wdth,wght].ttf OFL-1.1
+macos/512__Cabin-Italic[wdth,wght].ttf OFL-1.1
+macos/513__Iosevka-ExtendedMediumOblique.ttf OFL-1.1
+macos/515__Mukta-SemiBold.ttf OFL-1.1
+macos/516__RobotoCondensed[wght].ttf Apache-2.0
+macos/517__Inconsolata-SemiCondensed.ttf OFL-1.1
+macos/518__Inconsolata-CondensedSemiBold.ttf OFL-1.1
+macos/519__Barlow-BoldItalic.ttf OFL-1.1
+macos/520__Inconsolata-UltraCondensedExtraBold.ttf OFL-1.1
+macos/521__FiraSans-Bold.ttf OFL-1.1
+macos/523__IBMPlexMono-Thin.ttf OFL-1.1
+macos/524__IBMPlexMono-SemiBold.ttf OFL-1.1
+macos/525__TitilliumWeb-LightItalic.ttf OFL-1.1
+macos/526__FiraSans-Black.ttf OFL-1.1
+macos/527__Inconsolata-SemiCondensedBold.ttf OFL-1.1
+macos/528__IBMPlexMono-MediumItalic.ttf OFL-1.1
+macos/530__Inconsolata-ExtraCondensedExtraLight.ttf OFL-1.1
+macos/531__Quicksand[wght].ttf OFL-1.1
+macos/532__SourceSans3-Italic[wght].ttf OFL-1.1
+macos/533__Montserrat[wght].ttf OFL-1.1
+macos/534__Lato-ThinItalic.ttf OFL-1.1
+macos/535__RobotoMono[wght].ttf OFL-1.1
+macos/536__Inconsolata-Medium.ttf OFL-1.1
+macos/537__Poppins-ExtraLightItalic.ttf OFL-1.1
+macos/538__Inconsolata-SemiExpanded.ttf OFL-1.1
+macos/539__Manrope[wght].ttf OFL-1.1
+macos/540__SpaceMono-BoldItalic.ttf OFL-1.1
+macos/541__Cabin[wdth,wght].ttf OFL-1.1
+macos/542__Inconsolata-Condensed.ttf OFL-1.1
+macos/543__RobotoSlab[wght].ttf Apache-2.0
+macos/544__Iosevka-LightOblique.ttf OFL-1.1
+macos/545__Poppins-ExtraBold.ttf OFL-1.1
+macos/546__Iosevka-ExtendedMediumItalic.ttf OFL-1.1
+macos/547__Lato-BlackItalic.ttf OFL-1.1
+macos/549__Inconsolata-SemiExpandedRegular.ttf OFL-1.1
+macos/550__Iosevka-SemiBoldItalic.ttf OFL-1.1
+macos/551__BebasNeue-Regular.ttf OFL-1.1
+macos/552__IBMPlexMono-ExtraLight.ttf OFL-1.1
+macos/553__Inconsolata-SemiCondensedExtraLight.ttf OFL-1.1
+macos/554__Iosevka-Medium.ttf OFL-1.1
+macos/555__Iosevka-ExtendedThinItalic.ttf OFL-1.1
+macos/556__IBMPlexMono-Medium.ttf OFL-1.1
+macos/557__SourceCodePro[wght].ttf OFL-1.1
+macos/558__Lato-MediumItalic.ttf OFL-1.1
+macos/559__Iosevka-Bold.ttf OFL-1.1
+macos/560__Inconsolata-UltraExpanded.ttf OFL-1.1
+macos/561__OpenSans[wdth,wght].ttf OFL-1.1
+macos/562__Lato-Italic.ttf OFL-1.1
+macos/563__Inconsolata[wdth,wght].ttf OFL-1.1
+macos/564__Poppins-BlackItalic.ttf OFL-1.1
+macos/565__Inconsolata-SemiExpandedExtraBold.ttf OFL-1.1
+macos/566__Inconsolata-UltraExpandedBold.ttf OFL-1.1
+macos/567__Hack-Regular.ttf MIT
+macos/568__Inconsolata-SemiCondensedExtraBold.ttf OFL-1.1
+macos/569__FiraMono-Bold.ttf OFL-1.1
+macos/570__Iosevka-ExtendedExtraBoldItalic.ttf OFL-1.1
+macos/571__FiraSans-BoldItalic.ttf OFL-1.1
+macos/572__Lato-Medium.ttf OFL-1.1
+macos/573__Iosevka-ExtendedExtraLightItalic.ttf OFL-1.1
+macos/574__JetBrainsMono[wght].ttf OFL-1.1
+macos/575__NunitoSans-Italic[YTLC,opsz,wdth,wght].ttf OFL-1.1
+macos/576__NotoSansLisu[wght].ttf OFL-1.1
+macos/577__Barlow-Light.ttf OFL-1.1
+macos/578__JosefinSans-Italic[wght].ttf OFL-1.1
+macos/579__Iosevka-ExtendedBoldItalic.ttf OFL-1.1
+macos/580__Poppins-Medium.ttf OFL-1.1
+macos/581__Hack-Bold.ttf MIT
+macos/583__Inter[opsz,wght].ttf OFL-1.1
+macos/584__Inconsolata-UltraExpandedLight.ttf OFL-1.1
+macos/586__IBMPlexMono-Regular.ttf OFL-1.1
+macos/587__Inconsolata-Black.ttf OFL-1.1
+macos/588__SourceCodePro-Italic[wght].ttf OFL-1.1
+macos/589__JetBrainsMono-Italic[wght].ttf OFL-1.1
+macos/590__JosefinSans[wght].ttf OFL-1.1
+macos/591__Lato-LightItalic.ttf OFL-1.1
+macos/592__TitilliumWeb-Regular.ttf OFL-1.1
+macos/593__TitilliumWeb-Black.ttf OFL-1.1
+macos/594__Iosevka-ExtendedBold.ttf OFL-1.1
+macos/596__Lato-ExtraBold.ttf OFL-1.1
+macos/597__Lato-BoldItalic.ttf OFL-1.1
+macos/599__SourceSerif4[opsz,wght].ttf OFL-1.1
+macos/600__Poppins-Regular.ttf OFL-1.1
+macos/601__Inconsolata-CondensedLight.ttf OFL-1.1
+macos/602__FiraSans-ThinItalic.ttf OFL-1.1
+macos/603__TitilliumWeb-BoldItalic.ttf OFL-1.1
+macos/604__Lato-Regular.ttf OFL-1.1
+macos/605__Iosevka-Extended.ttf OFL-1.1
+macos/606__Roboto[wdth,wght].ttf OFL-1.1
+macos/607__Inconsolata-SemiCondensedRegular.ttf OFL-1.1
+macos/608__Montserrat-Italic[wght].ttf OFL-1.1
+macos/609__Inconsolata-SemiCondensedBlack.ttf OFL-1.1
+macos/610__Lato-Bold.ttf OFL-1.1
+macos/611__Mukta-ExtraLight.ttf OFL-1.1
+macos/612__Inconsolata-ExtraExpandedMedium.ttf OFL-1.1
+macos/613__Iosevka-SemiBoldOblique.ttf OFL-1.1
+macos/614__IBMPlexMono-Bold.ttf OFL-1.1
+macos/615__Inconsolata-ExtraExpandedLight.ttf OFL-1.1
+macos/616__Iosevka-BoldOblique.ttf OFL-1.1
+macos/617__Iosevka-ExtendedExtraLight.ttf OFL-1.1
+macos/618__Poppins-SemiBold.ttf OFL-1.1
+macos/619__Inconsolata-SemiBold.ttf OFL-1.1
+macos/620__IBMPlexMono-ThinItalic.ttf OFL-1.1
+macos/621__SpaceMono-Italic.ttf OFL-1.1
+macos/622__DMSans-Italic[opsz,wght].ttf OFL-1.1
+macos/623__Iosevka-ExtraBold.ttf OFL-1.1
+macos/624__DMSans[opsz,wght].ttf OFL-1.1
+macos/625__FiraSans-Italic.ttf OFL-1.1
+macos/626__Inconsolata-UltraExpandedExtraBold.ttf OFL-1.1
+macos/627__Inconsolata-ExtraCondensedBlack.ttf OFL-1.1
+macos/628__Inconsolata-ExtraCondensedExtraBold.ttf OFL-1.1
+macos/629__Inconsolata-UltraCondensedExtraLight.ttf OFL-1.1
+macos/630__Iosevka-ExtendedSemiBoldItalic.ttf OFL-1.1
+macos/632__Merriweather[opsz,wdth,wght].ttf OFL-1.1
+macos/633__FiraSans-MediumItalic.ttf OFL-1.1
+macos/634__FiraSans-Medium.ttf OFL-1.1
+macos/635__Inconsolata-CondensedMedium.ttf OFL-1.1
+macos/636__Iosevka-MediumItalic.ttf OFL-1.1
+macos/637__TitilliumWeb-SemiBoldItalic.ttf OFL-1.1
+macos/638__Barlow-Regular.ttf OFL-1.1
+macos/639__Iosevka-ExtraLightItalic.ttf OFL-1.1
+macos/640__Barlow-ThinItalic.ttf OFL-1.1
+macos/641__Inconsolata-ExpandedBlack.ttf OFL-1.1
+macos/642__IBMPlexMono-BoldItalic.ttf OFL-1.1
+macos/644__Roboto-Italic[wdth,wght].ttf OFL-1.1
+macos/646__Iosevka-ExtraBoldItalic.ttf OFL-1.1
+macos/647__Inconsolata-UltraCondensed.ttf OFL-1.1
+macos/648__Iosevka-ExtendedSemiBoldOblique.ttf OFL-1.1
+macos/649__Barlow-Black.ttf OFL-1.1
+macos/650__Inconsolata-UltraCondensedRegular.ttf OFL-1.1
+macos/651__FiraSans-ExtraLight.ttf OFL-1.1
+macos/652__Iosevka-Regular.ttf OFL-1.1
+macos/654__NotoSansLisu-Regular.ttf OFL-1.1
+macos/655__Mukta-ExtraBold.ttf OFL-1.1
+macos/656__Inconsolata-UltraExpandedMedium.ttf OFL-1.1
+macos/657__Inconsolata-UltraExpandedSemiBold.ttf OFL-1.1
+macos/658__SourceSerif4-Italic[opsz,wght].ttf OFL-1.1
+macos/659__Iosevka-ExtendedThin.ttf OFL-1.1
+macos/65__NotoNastaliq.ttc OFL-1.1
+macos/661__WorkSans-Italic[wght].ttf OFL-1.1
+macos/663__Inconsolata-SemiExpandedMedium.ttf OFL-1.1
+macos/664__Poppins-MediumItalic.ttf OFL-1.1
+macos/665__Poppins-LightItalic.ttf OFL-1.1
+macos/666__Inconsolata-ExtraCondensedLight.ttf OFL-1.1
+macos/667__Iosevka-HeavyItalic.ttf OFL-1.1
+macos/668__SpaceMono-Regular.ttf OFL-1.1
+macos/669__Barlow-Thin.ttf OFL-1.1
+macos/670__Inconsolata-UltraCondensedBold.ttf OFL-1.1
+macos/671__Inconsolata-ExpandedBold.ttf OFL-1.1
+macos/672__Inconsolata-CondensedExtraBold.ttf OFL-1.1
+macos/673__Inconsolata-ExtraExpanded.ttf OFL-1.1
+macos/675__FiraSans-BlackItalic.ttf OFL-1.1
+macos/676__Inconsolata-ExpandedExtraLight.ttf OFL-1.1
+macos/677__Iosevka-ExtendedSemiBold.ttf OFL-1.1
+macos/678__Inconsolata-UltraExpandedRegular.ttf OFL-1.1
+macos/680__NunitoSans[YTLC,opsz,wdth,wght].ttf OFL-1.1
+macos/681__Iosevka-Heavy.ttf OFL-1.1
+macos/682__IBMPlexMono-ExtraLightItalic.ttf OFL-1.1
+macos/683__Inconsolata-Regular.ttf OFL-1.1
+macos/684__NotoSansArmenian-Bold.ttf OFL-1.1
+macos/685__Iosevka-ExtendedLightItalic.ttf OFL-1.1
+macos/686__Inconsolata-ExtraCondensed.ttf OFL-1.1
+macos/687__Iosevka-ExtendedHeavyItalic.ttf OFL-1.1
+macos/688__Iosevka-SemiBold.ttf OFL-1.1
+macos/689__Inconsolata-SemiExpandedSemiBold.ttf OFL-1.1
+macos/690__Barlow-SemiBoldItalic.ttf OFL-1.1
+macos/691__IBMPlexMono-LightItalic.ttf OFL-1.1
+macos/692__Iosevka-BoldItalic.ttf OFL-1.1
+macos/693__Inconsolata-SemiExpandedBlack.ttf OFL-1.1
+macos/694__Inconsolata-ExpandedMedium.ttf OFL-1.1
+macos/695__Inconsolata-ExtraExpandedExtraLight.ttf OFL-1.1
+macos/696__FiraCode[wght].ttf OFL-1.1
+macos/697__Inconsolata-ExpandedExtraBold.ttf OFL-1.1
+macos/698__FiraSans-SemiBold.ttf OFL-1.1
+macos/699__Mukta-Regular.ttf OFL-1.1
+macos/700__Lato-Thin.ttf OFL-1.1
+macos/701__PlayfairDisplay[wght].ttf OFL-1.1
+macos/702__Barlow-Medium.ttf OFL-1.1
+macos/703__Lato-SemiBoldItalic.ttf OFL-1.1
+macos/704__Lato-Light.ttf OFL-1.1
+macos/705__Inconsolata-ExtraCondensedMedium.ttf OFL-1.1
+macos/706__Iosevka-ExtendedItalic.ttf OFL-1.1
+macos/707__RobotoCondensed-Italic[wght].ttf Apache-2.0
+macos/708__Poppins-ExtraBoldItalic.ttf OFL-1.1
+macos/709__IBMPlexMono-Light.ttf OFL-1.1
+macos/711__Merriweather-Italic[opsz,wdth,wght].ttf OFL-1.1
+macos/712__Inconsolata-ExtraExpandedSemiBold.ttf OFL-1.1
+macos/713__Inconsolata-UltraCondensedMedium.ttf OFL-1.1
+macos/714__Iosevka-ThinOblique.ttf OFL-1.1
+macos/715__Karla-Italic[wght].ttf OFL-1.1
+macos/716__Inconsolata-ExpandedRegular.ttf OFL-1.1
+macos/717__Inconsolata-ExtraExpandedRegular.ttf OFL-1.1
+macos/719__Inconsolata-Bold.ttf OFL-1.1
+macos/720__TitilliumWeb-Light.ttf OFL-1.1
+macos/721__SourceSans3[wght].ttf OFL-1.1
+macos/722__SpaceMono-Bold.ttf OFL-1.1
+macos/723__FiraSans-ExtraBold.ttf OFL-1.1
+macos/724__Lato-Black.ttf OFL-1.1
+macos/725__Inconsolata-SemiCondensedMedium.ttf OFL-1.1
+macos/727__Poppins-Italic.ttf OFL-1.1
+macos/728__RobotoMono-Italic[wght].ttf OFL-1.1
+macos/729__Iosevka-MediumOblique.ttf OFL-1.1
+macos/730__Hack-Italic.ttf MIT
+macos/731__Inconsolata-ExtraCondensedSemiBold.ttf OFL-1.1
+macos/732__Barlow-ExtraBold.ttf OFL-1.1
+macos/733__OverpassMono[wght].ttf OFL-1.1
+macos/734__Hack-BoldItalic.ttf MIT
+macos/735__Lato-ExtraBoldItalic.ttf OFL-1.1
+macos/736__Inconsolata-ExtraCondensedRegular.ttf OFL-1.1
+macos/737__FiraMono-Regular.ttf OFL-1.1
+macos/738__FiraSans-Light.ttf OFL-1.1
+macos/739__Iosevka-ExtendedHeavyOblique.ttf OFL-1.1
+macos/740__FiraSans-Regular.ttf OFL-1.1
+macos/741__Poppins-Black.ttf OFL-1.1
+macos/742__VictorMono[wght].ttf OFL-1.1
+macos/743__IBMPlexMono-Italic.ttf OFL-1.1
+macos/744__Barlow-BlackItalic.ttf OFL-1.1
+macos/745__Iosevka-Oblique.ttf OFL-1.1
+macos/746__Iosevka-LightItalic.ttf OFL-1.1
+macos/747__Inconsolata-ExtraExpandedBlack.ttf OFL-1.1
+macos/748__Inconsolata-SemiExpandedExtraLight.ttf OFL-1.1
+macos/750__Inconsolata-UltraCondensedBlack.ttf OFL-1.1
+macos/751__Iosevka-ExtendedMedium.ttf OFL-1.1
+macos/752__Iosevka-ExtendedLight.ttf OFL-1.1
+macos/753__IBMPlexMono-SemiBoldItalic.ttf OFL-1.1
+macos/754__Iosevka-ExtendedOblique.ttf OFL-1.1
+macos/755__Inconsolata-CondensedExtraLight.ttf OFL-1.1
+macos/756__Mukta-Medium.ttf OFL-1.1
+macos/758__STIXIntSmBol.otf OFL-1.1
+macos/759__NotoSansMasaramGondi-Regular.otf OFL-1.1
+macos/760__STIXVar.otf OFL-1.1
+macos/761__NotoSansHatran-Regular.ttf OFL-1.1
+macos/766__STIXGeneral.otf OFL-1.1
+macos/767__NotoSansTaiTham-Regular.ttf OFL-1.1
+macos/779__STIXTwoText.ttf OFL-1.1
+macos/780__NotoSansImperialAramaic-Regular.ttf OFL-1.1
+macos/783__NotoSansCham-Regular.ttf OFL-1.1
+macos/789__STIXNonUniIta.otf OFL-1.1
+macos/790__NotoSansLinearB-Regular.ttf OFL-1.1
+macos/791__NotoSansMultani-Regular.ttf OFL-1.1
+macos/792__NotoSansPauCinHau-Regular.ttf OFL-1.1
+macos/795__STIXNonUniBolIta.otf OFL-1.1
+macos/798__NotoSerifYezidi-Regular.otf OFL-1.1
+macos/79__NotoSerifMyanmar.ttc OFL-1.1
+macos/802__NotoSansNKo-Regular.ttf OFL-1.1
+macos/805__STIXSizThreeSymReg.otf OFL-1.1
+macos/810__NotoSansOldItalic-Regular.ttf OFL-1.1
+macos/811__NotoSansPhagsPa-Regular.ttf OFL-1.1
+macos/813__NotoSansOldSouthArabian-Regular.ttf OFL-1.1
+macos/815__NotoSansBuhid-Regular.ttf OFL-1.1
+macos/819__NotoSansSamaritan-Regular.ttf OFL-1.1
+macos/821__NotoSansMiao-Regular.ttf OFL-1.1
+macos/824__NotoSansMandaic-Regular.ttf OFL-1.1
+macos/826__NotoSansTifinagh-Regular.otf OFL-1.1
+macos/827__NotoSansTirhuta-Regular.ttf OFL-1.1
+macos/828__NotoSansPhoenician-Regular.ttf OFL-1.1
+macos/830__NotoSansUgaritic-Regular.ttf OFL-1.1
+macos/832__NotoSansSaurashtra-Regular.ttf OFL-1.1
+macos/836__NotoSansOldNorthArabian-Regular.ttf OFL-1.1
+macos/837__NotoSansCoptic-Regular.ttf OFL-1.1
+macos/838__NotoSansSylotiNagri-Regular.ttf OFL-1.1
+macos/843__NotoSansLinearA-Regular.ttf OFL-1.1
+macos/844__NotoSerifBalinese-Regular.ttf OFL-1.1
+macos/845__NotoSansMro-Regular.ttf OFL-1.1
+macos/846__NotoSansTaiViet-Regular.ttf OFL-1.1
+macos/848__NotoSansKayahLi-Regular.ttf OFL-1.1
+macos/849__NotoSansMendeKikakui-Regular.ttf OFL-1.1
+macos/851__NotoSansCypriot-Regular.ttf OFL-1.1
+macos/857__NotoSansKaithi-Regular.ttf OFL-1.1
+macos/858__NotoSansDuployan-Regular.ttf OFL-1.1
+macos/860__NotoSansBatak-Regular.ttf OFL-1.1
+macos/863__STIXIntDBol.otf OFL-1.1
+macos/866__NotoSansBuginese-Regular.ttf OFL-1.1
+macos/867__NotoSansNabataean-Regular.ttf OFL-1.1
+macos/868__NotoSansNewa-Regular.ttf OFL-1.1
+macos/86__STIXIntSmBol.otf OFL-1.1
+macos/870__STIXIntUpDBol.otf OFL-1.1
+macos/871__NotoSansWarangCiti-Regular.ttf OFL-1.1
+macos/873__STIXSizFiveSymReg.otf OFL-1.1
+macos/874__NotoSansHanunoo-Regular.ttf OFL-1.1
+macos/875__NotoSansCarian-Regular.ttf OFL-1.1
+macos/877__NotoSansSharada-Regular.ttf OFL-1.1
+macos/878__STIXNonUniBol.otf OFL-1.1
+macos/879__NotoSansInscriptionalPahlavi-Regular.ttf OFL-1.1
+macos/87__NotoSansMasaramGondi-Regular.otf OFL-1.1
+macos/880__NotoSansKhojki-Regular.ttf OFL-1.1
+macos/882__NotoSansCanadianAboriginal-Regular.otf OFL-1.1
+macos/884__NotoSansGlagolitic-Regular.ttf OFL-1.1
+macos/885__STIXIntUpSmBol.otf OFL-1.1
+macos/886__NotoSansYi-Regular.ttf OFL-1.1
+macos/887__STIXGeneralBol.otf OFL-1.1
+macos/888__NotoSansPalmyrene-Regular.ttf OFL-1.1
+macos/88__STIXVar.otf OFL-1.1
+macos/890__NotoSansTakri-Regular.ttf OFL-1.1
+macos/892__NotoSansMahajani-Regular.ttf OFL-1.1
+macos/895__NotoSansMarchen-Regular.ttf OFL-1.1
+macos/89__NotoSansHatran-Regular.ttf OFL-1.1
+macos/902__NotoSansCuneiform-Regular.ttf OFL-1.1
+macos/904__STIXTwoMath.otf OFL-1.1
+macos/906__NotoSansGothic-Regular.ttf OFL-1.1
+macos/909__STIXSizThreeSymBol.otf OFL-1.1
+macos/912__STIXIntUpDReg.otf OFL-1.1
+macos/913__NotoSansModi-Regular.ttf OFL-1.1
+macos/916__STIXGeneralBolIta.otf OFL-1.1
+macos/917__NotoSansNewTaiLue-Regular.ttf OFL-1.1
+macos/920__NotoSansRejang-Regular.ttf OFL-1.1
+macos/921__NotoSansOldTurkic-Regular.ttf OFL-1.1
+macos/923__STIXIntUpReg.otf OFL-1.1
+macos/924__NotoSansOldPersian-Regular.ttf OFL-1.1
+macos/925__NotoSansPahawhHmong-Regular.ttf OFL-1.1
+macos/926__NotoSansOldPermic-Regular.ttf OFL-1.1
+macos/928__NotoSansAvestan-Regular.ttf OFL-1.1
+macos/932__NotoSansOsage-Regular.ttf OFL-1.1
+macos/933__NotoSansEgyptianHieroglyphs-Regular.ttf OFL-1.1
+macos/935__NotoSansJavanese-Regular.otf OFL-1.1
+macos/938__NotoSansElbasan-Regular.ttf OFL-1.1
+macos/939__STIXGeneralItalic.otf OFL-1.1
+macos/940__STIXSizTwoSymReg.otf OFL-1.1
+macos/942__NotoSansChakma-Regular.ttf OFL-1.1
+macos/943__NotoSansBamum-Regular.ttf OFL-1.1
+macos/947__NotoSansThaana-Regular.ttf OFL-1.1
+macos/948__NotoSansLisu-Regular.ttf OFL-1.1
+macos/949__STIXSizFourSymBol.otf OFL-1.1
+macos/94__STIXGeneral.otf OFL-1.1
+macos/950__STIXIntDReg.otf OFL-1.1
+macos/951__STIXVarBol.otf OFL-1.1
+macos/953__STIXIntUpSmReg.otf OFL-1.1
+macos/954__NotoSansSyriac-Regular.ttf OFL-1.1
+macos/956__NotoSansKhudawadi-Regular.ttf OFL-1.1
+macos/958__NotoSansOsmanya-Regular.ttf OFL-1.1
+macos/95__NotoSansTaiTham-Regular.ttf OFL-1.1
+macos/961__STIXSizFourSymReg.otf OFL-1.1
+macos/962__NotoSansLimbu-Regular.ttf OFL-1.1
+macos/966__NotoSansGunjalaGondi-Regular.otf OFL-1.1
+macos/969__NotoSansSundanese-Regular.ttf OFL-1.1
+macos/970__NotoSansLydian-Regular.ttf OFL-1.1
+macos/976__STIXSizOneSymReg.otf OFL-1.1
+macos/983__NotoSansSiddham-Regular.otf OFL-1.1
+macos/984__STIXSizOneSymBol.otf OFL-1.1
+macos/985__STIXSizTwoSymBol.otf OFL-1.1
+macos/988__NotoSerifAhom-Regular.ttf OFL-1.1
+macos/989__NotoSansKharoshthi-Regular.ttf OFL-1.1
+macos/990__NotoSansLepcha-Regular.ttf OFL-1.1
+macos/991__NotoSansOldHungarian-Regular.ttf OFL-1.1
+macos/992__NotoSansBhaiksuki-Regular.ttf OFL-1.1
+macos/994__NotoSansMeeteiMayek-Regular.ttf OFL-1.1
+macos/995__NotoSansTagbanwa-Regular.ttf OFL-1.1
+macos/997__NotoSansCaucasianAlbanian-Regular.ttf OFL-1.1
+windows/1039__SourceSans3-Bold.otf OFL-1.1
+windows/1040__SourceSans3-It.otf OFL-1.1
+windows/1041__SourceSerif4-Regular.otf OFL-1.1
+windows/1043__SourceSerif4-Bold.otf OFL-1.1
+windows/1044__SourceSans3-BoldIt.otf OFL-1.1
+windows/1045__SourceSerif4-BoldIt.otf OFL-1.1
+windows/1047__SourceSans3-Regular.otf OFL-1.1
+windows/1048__SourceSerif4-It.otf OFL-1.1
+windows/1099__SansSerifCollection.ttf OFL-1.1
+windows/304__STENCIL.TTF AFPL/URW
+windows/314__BAUHS93.TTF AFPL/URW
+windows/486__NotoSansArmenian[wdth,wght].ttf OFL-1.1
+windows/487__Barlow-ExtraBoldItalic.ttf OFL-1.1
+windows/489__Poppins-BoldItalic.ttf OFL-1.1
+windows/490__Poppins-ExtraLight.ttf OFL-1.1
+windows/491__FiraSans-Thin.ttf OFL-1.1
+windows/492__Rubik-Italic[wght].ttf OFL-1.1
+windows/493__Iosevka-ExtendedHeavy.ttf OFL-1.1
+windows/494__Iosevka-ExtendedExtraBold.ttf OFL-1.1
+windows/495__TitilliumWeb-Italic.ttf OFL-1.1
+windows/496__Inconsolata-ExtraLight.ttf OFL-1.1
+windows/497__Barlow-LightItalic.ttf OFL-1.1
+windows/498__Lato-SemiBold.ttf OFL-1.1
+windows/500__Inconsolata-ExtraCondensedBold.ttf OFL-1.1
+windows/501__Inconsolata-CondensedRegular.ttf OFL-1.1
+windows/502__Inconsolata-ExtraExpandedBold.ttf OFL-1.1
+windows/504__DejaVuSerifCondensed-BoldItalic.ttf CC0/PD
+windows/506__Iosevka-ExtraLight.ttf OFL-1.1
+windows/507__Inconsolata-ExtraExpandedExtraBold.ttf OFL-1.1
+windows/510__Iosevka-Light.ttf OFL-1.1
+windows/511__Raleway-Italic[wght].ttf OFL-1.1
+windows/512__Lato-ExtraLightItalic.ttf OFL-1.1
+windows/513__Rubik[wght].ttf OFL-1.1
+windows/514__Iosevka-Italic.ttf OFL-1.1
+windows/515__Inter-Italic[opsz,wght].ttf OFL-1.1
+windows/516__Iosevka-ThinItalic.ttf OFL-1.1
+windows/518__Inconsolata-SemiCondensedSemiBold.ttf OFL-1.1
+windows/519__NotoSerifGeorgian[wdth,wght].ttf OFL-1.1
+windows/520__NotoNaskhArabic-Bold.ttf OFL-1.1
+windows/521__Raleway[wght].ttf OFL-1.1
+windows/523__Carlito-Bold.ttf OFL-1.1
+windows/524__Inconsolata-ExpandedLight.ttf OFL-1.1
+windows/525__Inconsolata-UltraExpandedExtraLight.ttf OFL-1.1
+windows/526__DejaVuMathTeXGyre.ttf CC0/PD
+windows/527__Nunito-Italic[wght].ttf OFL-1.1
+windows/529__FiraMono-Medium.ttf OFL-1.1
+windows/530__Amiri-Bold.ttf OFL-1.1
+windows/531__Iosevka-ExtendedExtraLightOblique.ttf OFL-1.1
+windows/533__Poppins-Light.ttf OFL-1.1
+windows/535__Amiri-Regular.ttf OFL-1.1
+windows/536__Iosevka-ExtendedExtraBoldOblique.ttf OFL-1.1
+windows/537__DejaVuSansMono.ttf CC0/PD
+windows/538__Inconsolata-CondensedBlack.ttf OFL-1.1
+windows/539__Poppins-Thin.ttf OFL-1.1
+windows/540__Barlow-Bold.ttf OFL-1.1
+windows/542__Iosevka-ExtraLightOblique.ttf OFL-1.1
+windows/543__Carlito-Italic.ttf OFL-1.1
+windows/544__TitilliumWeb-ExtraLightItalic.ttf OFL-1.1
+windows/545__Nunito[wght].ttf OFL-1.1
+windows/548__Iosevka-HeavyOblique.ttf OFL-1.1
+windows/549__Inconsolata-UltraCondensedLight.ttf OFL-1.1
+windows/550__FiraSans-ExtraLightItalic.ttf OFL-1.1
+windows/553__Inconsolata-UltraExpandedBlack.ttf OFL-1.1
+windows/554__DejaVuSerifCondensed-Italic.ttf CC0/PD
+windows/555__DejaVuSerif-Italic.ttf CC0/PD
+windows/556__NotoMono-Regular.ttf OFL-1.1
+windows/557__NotoSans[wdth,wght].ttf OFL-1.1
+windows/558__FiraSans-LightItalic.ttf OFL-1.1
+windows/559__Poppins-ThinItalic.ttf OFL-1.1
+windows/561__FiraSans-SemiBoldItalic.ttf OFL-1.1
+windows/562__Poppins-SemiBoldItalic.ttf OFL-1.1
+windows/563__DejaVuSansMono-Bold.ttf CC0/PD
+windows/564__Iosevka-ExtendedLightOblique.ttf OFL-1.1
+windows/565__Barlow-ExtraLight.ttf OFL-1.1
+windows/566__Heebo[wght].ttf OFL-1.1
+windows/567__Inconsolata-CondensedBold.ttf OFL-1.1
+windows/568__Oswald[wght].ttf OFL-1.1
+windows/569__PlayfairDisplay-Italic[wght].ttf OFL-1.1
+windows/570__VictorMono-Italic[wght].ttf OFL-1.1
+windows/571__TitilliumWeb-SemiBold.ttf OFL-1.1
+windows/573__Barlow-MediumItalic.ttf OFL-1.1
+windows/574__TitilliumWeb-Bold.ttf OFL-1.1
+windows/575__Karla[wght].ttf OFL-1.1
+windows/576__Inconsolata-UltraCondensedSemiBold.ttf OFL-1.1
+windows/577__Iosevka-Thin.ttf OFL-1.1
+windows/579__Lato-ExtraLight.ttf OFL-1.1
+windows/580__Mukta-Bold.ttf OFL-1.1
+windows/581__Inconsolata-SemiCondensedLight.ttf OFL-1.1
+windows/582__FiraSans-ExtraBoldItalic.ttf OFL-1.1
+windows/583__Inconsolata-Expanded.ttf OFL-1.1
+windows/584__Barlow-SemiBold.ttf OFL-1.1
+windows/585__Inconsolata-ExpandedSemiBold.ttf OFL-1.1
+windows/586__Barlow-Italic.ttf OFL-1.1
+windows/587__Barlow-ExtraLightItalic.ttf OFL-1.1
+windows/588__LiberationMono-Italic.ttf OFL-1.1
+windows/589__Iosevka-ExtraBoldOblique.ttf OFL-1.1
+windows/590__TitilliumWeb-ExtraLight.ttf OFL-1.1
+windows/592__Poppins-Bold.ttf OFL-1.1
+windows/593__Inconsolata-ExtraBold.ttf OFL-1.1
+windows/594__Iosevka-ExtendedBoldOblique.ttf OFL-1.1
+windows/595__Inconsolata-Light.ttf OFL-1.1
+windows/596__Inconsolata-SemiExpandedBold.ttf OFL-1.1
+windows/597__DejaVuSerif-BoldItalic.ttf CC0/PD
+windows/598__Iosevka-ExtendedThinOblique.ttf OFL-1.1
+windows/599__Inconsolata-SemiExpandedLight.ttf OFL-1.1
+windows/600__Mukta-Light.ttf OFL-1.1
+windows/601__WorkSans[wght].ttf OFL-1.1
+windows/602__OpenSans-Italic[wdth,wght].ttf OFL-1.1
+windows/603__Cabin-Italic[wdth,wght].ttf OFL-1.1
+windows/605__Iosevka-ExtendedMediumOblique.ttf OFL-1.1
+windows/606__NotoSansLao[wdth,wght].ttf OFL-1.1
+windows/608__Mukta-SemiBold.ttf OFL-1.1
+windows/610__RobotoCondensed[wght].ttf Apache-2.0
+windows/611__Inconsolata-SemiCondensed.ttf OFL-1.1
+windows/612__Inconsolata-CondensedSemiBold.ttf OFL-1.1
+windows/613__Barlow-BoldItalic.ttf OFL-1.1
+windows/615__Inconsolata-UltraCondensedExtraBold.ttf OFL-1.1
+windows/616__NotoKufiArabic-Bold.ttf OFL-1.1
+windows/617__FiraSans-Bold.ttf OFL-1.1
+windows/619__IBMPlexMono-Thin.ttf OFL-1.1
+windows/61__NotoSansArmenian.ttc OFL-1.1
+windows/620__IBMPlexMono-SemiBold.ttf OFL-1.1
+windows/621__TitilliumWeb-LightItalic.ttf OFL-1.1
+windows/623__FiraSans-Black.ttf OFL-1.1
+windows/624__Inconsolata-SemiCondensedBold.ttf OFL-1.1
+windows/625__IBMPlexMono-MediumItalic.ttf OFL-1.1
+windows/627__Inconsolata-ExtraCondensedExtraLight.ttf OFL-1.1
+windows/628__Quicksand[wght].ttf OFL-1.1
+windows/629__NotoSerifHebrew-Regular.ttf OFL-1.1
+windows/630__NotoSans-Regular.ttf OFL-1.1
+windows/631__SourceSans3-Italic[wght].ttf OFL-1.1
+windows/632__Montserrat[wght].ttf OFL-1.1
+windows/633__Amiri-Italic.ttf OFL-1.1
+windows/634__Lato-ThinItalic.ttf OFL-1.1
+windows/635__RobotoMono[wght].ttf OFL-1.1
+windows/636__Inconsolata-Medium.ttf OFL-1.1
+windows/637__NotoSansHebrew-Bold.ttf OFL-1.1
+windows/638__Poppins-ExtraLightItalic.ttf OFL-1.1
+windows/639__Inconsolata-SemiExpanded.ttf OFL-1.1
+windows/640__Manrope[wght].ttf OFL-1.1
+windows/641__DejaVuSansCondensed-BoldOblique.ttf CC0/PD
+windows/642__SpaceMono-BoldItalic.ttf OFL-1.1
+windows/643__Cabin[wdth,wght].ttf OFL-1.1
+windows/644__Inconsolata-Condensed.ttf OFL-1.1
+windows/645__RobotoSlab[wght].ttf Apache-2.0
+windows/646__NotoSerifHebrew[wdth,wght].ttf OFL-1.1
+windows/647__Iosevka-LightOblique.ttf OFL-1.1
+windows/648__Poppins-ExtraBold.ttf OFL-1.1
+windows/649__ReemKufi[wght].ttf OFL-1.1
+windows/650__Iosevka-ExtendedMediumItalic.ttf OFL-1.1
+windows/651__Lato-BlackItalic.ttf OFL-1.1
+windows/653__NotoSansHebrew[wdth,wght].ttf OFL-1.1
+windows/654__DejaVuSansCondensed-Bold.ttf CC0/PD
+windows/657__Inconsolata-SemiExpandedRegular.ttf OFL-1.1
+windows/658__DavidLibre-Regular.ttf OFL-1.1
+windows/660__Caladea-BoldItalic.ttf OFL-1.1
+windows/661__Iosevka-SemiBoldItalic.ttf OFL-1.1
+windows/662__BebasNeue-Regular.ttf OFL-1.1
+windows/663__IBMPlexMono-ExtraLight.ttf OFL-1.1
+windows/664__Inconsolata-SemiCondensedExtraLight.ttf OFL-1.1
+windows/665__LiberationSerif-Regular.ttf OFL-1.1
+windows/666__Iosevka-Medium.ttf OFL-1.1
+windows/667__Iosevka-ExtendedThinItalic.ttf OFL-1.1
+windows/668__IBMPlexMono-Medium.ttf OFL-1.1
+windows/669__SourceCodePro[wght].ttf OFL-1.1
+windows/670__Lato-MediumItalic.ttf OFL-1.1
+windows/671__Iosevka-Bold.ttf OFL-1.1
+windows/672__NotoSerif-Italic[wdth,wght].ttf OFL-1.1
+windows/674__Inconsolata-UltraExpanded.ttf OFL-1.1
+windows/675__NotoSansGeorgian-Bold.ttf OFL-1.1
+windows/676__OpenSans[wdth,wght].ttf OFL-1.1
+windows/677__Lato-Italic.ttf OFL-1.1
+windows/678__LiberationSans-Bold.ttf OFL-1.1
+windows/679__Inconsolata[wdth,wght].ttf OFL-1.1
+windows/680__Poppins-BlackItalic.ttf OFL-1.1
+windows/681__NotoSansArabic[wdth,wght].ttf OFL-1.1
+windows/682__Inconsolata-SemiExpandedExtraBold.ttf OFL-1.1
+windows/683__Inconsolata-UltraExpandedBold.ttf OFL-1.1
+windows/684__Hack-Regular.ttf MIT
+windows/685__Inconsolata-SemiCondensedExtraBold.ttf OFL-1.1
+windows/686__FiraMono-Bold.ttf OFL-1.1
+windows/687__Iosevka-ExtendedExtraBoldItalic.ttf OFL-1.1
+windows/689__FiraSans-BoldItalic.ttf OFL-1.1
+windows/690__NotoSansLao-Bold.ttf OFL-1.1
+windows/691__Lato-Medium.ttf OFL-1.1
+windows/692__Iosevka-ExtendedExtraLightItalic.ttf OFL-1.1
+windows/693__NotoKufiArabic[wght].ttf OFL-1.1
+windows/694__JetBrainsMono[wght].ttf OFL-1.1
+windows/695__NunitoSans-Italic[YTLC,opsz,wdth,wght].ttf OFL-1.1
+windows/696__NotoSansLisu[wght].ttf OFL-1.1
+windows/698__Barlow-Light.ttf OFL-1.1
+windows/699__JosefinSans-Italic[wght].ttf OFL-1.1
+windows/700__Iosevka-ExtendedBoldItalic.ttf OFL-1.1
+windows/701__Poppins-Medium.ttf OFL-1.1
+windows/702__Hack-Bold.ttf MIT
+windows/704__Inter[opsz,wght].ttf OFL-1.1
+windows/705__Inconsolata-UltraExpandedLight.ttf OFL-1.1
+windows/709__IBMPlexMono-Regular.ttf OFL-1.1
+windows/710__Inconsolata-Black.ttf OFL-1.1
+windows/711__SourceCodePro-Italic[wght].ttf OFL-1.1
+windows/712__JetBrainsMono-Italic[wght].ttf OFL-1.1
+windows/713__JosefinSans[wght].ttf OFL-1.1
+windows/714__NotoSerifLao-Regular.ttf OFL-1.1
+windows/715__DejaVuSerif.ttf CC0/PD
+windows/716__Lato-LightItalic.ttf OFL-1.1
+windows/717__TitilliumWeb-Regular.ttf OFL-1.1
+windows/718__TitilliumWeb-Black.ttf OFL-1.1
+windows/720__Iosevka-ExtendedBold.ttf OFL-1.1
+windows/723__DejaVuSansCondensed.ttf CC0/PD
+windows/724__AmiriQuran-Regular.ttf OFL-1.1
+windows/725__Lato-ExtraBold.ttf OFL-1.1
+windows/726__Lato-BoldItalic.ttf OFL-1.1
+windows/728__NotoSerif-Italic.ttf OFL-1.1
+windows/729__SourceSerif4[opsz,wght].ttf OFL-1.1
+windows/730__Poppins-Regular.ttf OFL-1.1
+windows/731__Inconsolata-CondensedLight.ttf OFL-1.1
+windows/732__FiraSans-ThinItalic.ttf OFL-1.1
+windows/733__TitilliumWeb-BoldItalic.ttf OFL-1.1
+windows/734__Lato-Regular.ttf OFL-1.1
+windows/735__Carlito-BoldItalic.ttf OFL-1.1
+windows/736__DejaVuSansMono-Oblique.ttf CC0/PD
+windows/737__Iosevka-Extended.ttf OFL-1.1
+windows/738__Roboto[wdth,wght].ttf OFL-1.1
+windows/739__Inconsolata-SemiCondensedRegular.ttf OFL-1.1
+windows/740__NotoSerifGeorgian-Bold.ttf OFL-1.1
+windows/741__Montserrat-Italic[wght].ttf OFL-1.1
+windows/742__Inconsolata-SemiCondensedBlack.ttf OFL-1.1
+windows/743__Lato-Bold.ttf OFL-1.1
+windows/744__Mukta-ExtraLight.ttf OFL-1.1
+windows/745__NotoSerifArmenian-Regular.ttf OFL-1.1
+windows/746__Inconsolata-ExtraExpandedMedium.ttf OFL-1.1
+windows/747__Iosevka-SemiBoldOblique.ttf OFL-1.1
+windows/748__IBMPlexMono-Bold.ttf OFL-1.1
+windows/749__Inconsolata-ExtraExpandedLight.ttf OFL-1.1
+windows/750__Iosevka-BoldOblique.ttf OFL-1.1
+windows/751__NotoSerifArmenian[wdth,wght].ttf OFL-1.1
+windows/752__Iosevka-ExtendedExtraLight.ttf OFL-1.1
+windows/753__Poppins-SemiBold.ttf OFL-1.1
+windows/754__Inconsolata-SemiBold.ttf OFL-1.1
+windows/755__IBMPlexMono-ThinItalic.ttf OFL-1.1
+windows/756__SpaceMono-Italic.ttf OFL-1.1
+windows/758__DMSans-Italic[opsz,wght].ttf OFL-1.1
+windows/759__Iosevka-ExtraBold.ttf OFL-1.1
+windows/760__DMSans[opsz,wght].ttf OFL-1.1
+windows/762__FiraSans-Italic.ttf OFL-1.1
+windows/763__Inconsolata-UltraExpandedExtraBold.ttf OFL-1.1
+windows/764__Inconsolata-ExtraCondensedBlack.ttf OFL-1.1
+windows/765__Inconsolata-ExtraCondensedExtraBold.ttf OFL-1.1
+windows/766__Inconsolata-UltraCondensedExtraLight.ttf OFL-1.1
+windows/767__Iosevka-ExtendedSemiBoldItalic.ttf OFL-1.1
+windows/769__Merriweather[opsz,wdth,wght].ttf OFL-1.1
+windows/770__FiraSans-MediumItalic.ttf OFL-1.1
+windows/771__FiraSans-Medium.ttf OFL-1.1
+windows/772__Inconsolata-CondensedMedium.ttf OFL-1.1
+windows/773__Iosevka-MediumItalic.ttf OFL-1.1
+windows/774__TitilliumWeb-SemiBoldItalic.ttf OFL-1.1
+windows/775__NotoNaskhArabic[wght].ttf OFL-1.1
+windows/776__Barlow-Regular.ttf OFL-1.1
+windows/777__DejaVuSerif-Bold.ttf CC0/PD
+windows/778__Iosevka-ExtraLightItalic.ttf OFL-1.1
+windows/779__Barlow-ThinItalic.ttf OFL-1.1
+windows/780__Inconsolata-ExpandedBlack.ttf OFL-1.1
+windows/781__IBMPlexMono-BoldItalic.ttf OFL-1.1
+windows/783__Roboto-Italic[wdth,wght].ttf OFL-1.1
+windows/786__NotoSansGeorgian[wdth,wght].ttf OFL-1.1
+windows/787__Iosevka-ExtraBoldItalic.ttf OFL-1.1
+windows/788__Inconsolata-UltraCondensed.ttf OFL-1.1
+windows/789__Iosevka-ExtendedSemiBoldOblique.ttf OFL-1.1
+windows/790__DejaVuSansCondensed-Oblique.ttf CC0/PD
+windows/791__Barlow-Black.ttf OFL-1.1
+windows/792__Inconsolata-UltraCondensedRegular.ttf OFL-1.1
+windows/794__FiraSans-ExtraLight.ttf OFL-1.1
+windows/795__Iosevka-Regular.ttf OFL-1.1
+windows/798__NotoSansLisu-Regular.ttf OFL-1.1
+windows/799__DavidLibre-Bold.ttf OFL-1.1
+windows/800__Mukta-ExtraBold.ttf OFL-1.1
+windows/801__Inconsolata-UltraExpandedMedium.ttf OFL-1.1
+windows/802__Inconsolata-UltraExpandedSemiBold.ttf OFL-1.1
+windows/803__SourceSerif4-Italic[opsz,wght].ttf OFL-1.1
+windows/804__Iosevka-ExtendedThin.ttf OFL-1.1
+windows/806__WorkSans-Italic[wght].ttf OFL-1.1
+windows/808__Inconsolata-SemiExpandedMedium.ttf OFL-1.1
+windows/809__Poppins-MediumItalic.ttf OFL-1.1
+windows/810__Poppins-LightItalic.ttf OFL-1.1
+windows/811__Inconsolata-ExtraCondensedLight.ttf OFL-1.1
+windows/812__Iosevka-HeavyItalic.ttf OFL-1.1
+windows/813__SpaceMono-Regular.ttf OFL-1.1
+windows/815__Barlow-Thin.ttf OFL-1.1
+windows/816__Inconsolata-UltraCondensedBold.ttf OFL-1.1
+windows/817__Inconsolata-ExpandedBold.ttf OFL-1.1
+windows/818__Inconsolata-CondensedExtraBold.ttf OFL-1.1
+windows/819__Inconsolata-ExtraExpanded.ttf OFL-1.1
+windows/821__FiraSans-BlackItalic.ttf OFL-1.1
+windows/822__Inconsolata-ExpandedExtraLight.ttf OFL-1.1
+windows/823__Iosevka-ExtendedSemiBold.ttf OFL-1.1
+windows/824__Inconsolata-UltraExpandedRegular.ttf OFL-1.1
+windows/826__NunitoSans[YTLC,opsz,wdth,wght].ttf OFL-1.1
+windows/827__Iosevka-Heavy.ttf OFL-1.1
+windows/828__IBMPlexMono-ExtraLightItalic.ttf OFL-1.1
+windows/829__Inconsolata-Regular.ttf OFL-1.1
+windows/830__NotoSansArmenian-Bold.ttf OFL-1.1
+windows/831__Iosevka-ExtendedLightItalic.ttf OFL-1.1
+windows/832__Inconsolata-ExtraCondensed.ttf OFL-1.1
+windows/833__Iosevka-ExtendedHeavyItalic.ttf OFL-1.1
+windows/834__Iosevka-SemiBold.ttf OFL-1.1
+windows/835__Inconsolata-SemiExpandedSemiBold.ttf OFL-1.1
+windows/836__DejaVuSansMono-BoldOblique.ttf CC0/PD
+windows/837__Barlow-SemiBoldItalic.ttf OFL-1.1
+windows/838__IBMPlexMono-LightItalic.ttf OFL-1.1
+windows/839__Iosevka-BoldItalic.ttf OFL-1.1
+windows/840__Inconsolata-SemiExpandedBlack.ttf OFL-1.1
+windows/841__Inconsolata-ExpandedMedium.ttf OFL-1.1
+windows/842__Inconsolata-ExtraExpandedExtraLight.ttf OFL-1.1
+windows/843__FiraCode[wght].ttf OFL-1.1
+windows/845__DavidLibre-Medium.ttf OFL-1.1
+windows/847__Inconsolata-ExpandedExtraBold.ttf OFL-1.1
+windows/849__FiraSans-SemiBold.ttf OFL-1.1
+windows/850__Mukta-Regular.ttf OFL-1.1
+windows/851__Lato-Thin.ttf OFL-1.1
+windows/852__PlayfairDisplay[wght].ttf OFL-1.1
+windows/853__Barlow-Medium.ttf OFL-1.1
+windows/854__Lato-SemiBoldItalic.ttf OFL-1.1
+windows/856__Lato-Light.ttf OFL-1.1
+windows/857__Inconsolata-ExtraCondensedMedium.ttf OFL-1.1
+windows/859__Iosevka-ExtendedItalic.ttf OFL-1.1
+windows/860__RobotoCondensed-Italic[wght].ttf Apache-2.0
+windows/861__Poppins-ExtraBoldItalic.ttf OFL-1.1
+windows/862__IBMPlexMono-Light.ttf OFL-1.1
+windows/864__Merriweather-Italic[opsz,wdth,wght].ttf OFL-1.1
+windows/865__Inconsolata-ExtraExpandedSemiBold.ttf OFL-1.1
+windows/866__Inconsolata-UltraCondensedMedium.ttf OFL-1.1
+windows/867__DejaVuSans-Oblique.ttf CC0/PD
+windows/868__Iosevka-ThinOblique.ttf OFL-1.1
+windows/869__DejaVuSans.ttf CC0/PD
+windows/870__DejaVuSerifCondensed-Bold.ttf CC0/PD
+windows/871__Karla-Italic[wght].ttf OFL-1.1
+windows/872__DejaVuSans-BoldOblique.ttf CC0/PD
+windows/873__Inconsolata-ExpandedRegular.ttf OFL-1.1
+windows/874__Carlito-Regular.ttf OFL-1.1
+windows/875__Inconsolata-ExtraExpandedRegular.ttf OFL-1.1
+windows/877__Inconsolata-Bold.ttf OFL-1.1
+windows/878__TitilliumWeb-Light.ttf OFL-1.1
+windows/879__SourceSans3[wght].ttf OFL-1.1
+windows/87__NotoSansLisu-Regular.ttf OFL-1.1
+windows/880__SpaceMono-Bold.ttf OFL-1.1
+windows/881__FiraSans-ExtraBold.ttf OFL-1.1
+windows/882__Lato-Black.ttf OFL-1.1
+windows/883__Inconsolata-SemiCondensedMedium.ttf OFL-1.1
+windows/885__Poppins-Italic.ttf OFL-1.1
+windows/886__RobotoMono-Italic[wght].ttf OFL-1.1
+windows/887__NotoSans-Italic[wdth,wght].ttf OFL-1.1
+windows/888__Iosevka-MediumOblique.ttf OFL-1.1
+windows/889__Hack-Italic.ttf MIT
+windows/890__Caladea-Regular.ttf OFL-1.1
+windows/891__NotoSerifLao[wdth,wght].ttf OFL-1.1
+windows/893__Inconsolata-ExtraCondensedSemiBold.ttf OFL-1.1
+windows/894__Barlow-ExtraBold.ttf OFL-1.1
+windows/895__OverpassMono[wght].ttf OFL-1.1
+windows/897__Hack-BoldItalic.ttf MIT
+windows/898__Lato-ExtraBoldItalic.ttf OFL-1.1
+windows/900__Inconsolata-ExtraCondensedRegular.ttf OFL-1.1
+windows/901__DejaVuSerifCondensed.ttf CC0/PD
+windows/902__FiraMono-Regular.ttf OFL-1.1
+windows/903__FiraSans-Light.ttf OFL-1.1
+windows/904__Iosevka-ExtendedHeavyOblique.ttf OFL-1.1
+windows/906__FiraSans-Regular.ttf OFL-1.1
+windows/907__DejaVuSans-Bold.ttf CC0/PD
+windows/908__Poppins-Black.ttf OFL-1.1
+windows/909__VictorMono[wght].ttf OFL-1.1
+windows/910__IBMPlexMono-Italic.ttf OFL-1.1
+windows/911__NotoSerif[wdth,wght].ttf OFL-1.1
+windows/912__Barlow-BlackItalic.ttf OFL-1.1
+windows/913__NotoSansArabic-Bold.ttf OFL-1.1
+windows/914__Iosevka-Oblique.ttf OFL-1.1
+windows/915__Iosevka-LightItalic.ttf OFL-1.1
+windows/916__Inconsolata-ExtraExpandedBlack.ttf OFL-1.1
+windows/917__Inconsolata-SemiExpandedExtraLight.ttf OFL-1.1
+windows/919__Inconsolata-UltraCondensedBlack.ttf OFL-1.1
+windows/921__Caladea-Bold.ttf OFL-1.1
+windows/922__Iosevka-ExtendedMedium.ttf OFL-1.1
+windows/923__Iosevka-ExtendedLight.ttf OFL-1.1
+windows/924__IBMPlexMono-SemiBoldItalic.ttf OFL-1.1
+windows/926__Iosevka-ExtendedOblique.ttf OFL-1.1
+windows/927__Inconsolata-CondensedExtraLight.ttf OFL-1.1
+windows/928__Caladea-Italic.ttf OFL-1.1
+windows/929__DejaVuSans-ExtraLight.ttf CC0/PD
+windows/930__Mukta-Medium.ttf OFL-1.1
+windows/931__Amiri-BoldItalic.ttf OFL-1.1
+windows/956__NotoSansLisu-Regular.ttf OFL-1.1
+windows/Amiri-gidinject.ttf OFL-1.1
+windows/DejaVu_Sans-gid3inject.ttf CC0/PD
+windows/Fira_Code-gid3inject.ttf OFL-1.1
+windows/Iosevka-gid3inject.ttf OFL-1.1
+windows/Montserrat-gid3inject.ttf OFL-1.1
+windows/Noto_Kufi_Arabic-gid3inject.ttf OFL-1.1
+windows/Noto_Naskh_Arabic-gid3inject.ttf OFL-1.1
+windows/Noto_Sans-gid3inject.ttf OFL-1.1
+windows/Noto_Sans_Arabic-gid3inject.ttf OFL-1.1
+windows/Noto_Sans_Lao-gid3inject.ttf OFL-1.1
+windows/Noto_Serif-gid3inject.ttf OFL-1.1
+windows/Noto_Serif_Hebrew-gid3inject.ttf OFL-1.1
+windows/Noto_Serif_Lao-gid3inject.ttf OFL-1.1
+windows/Quicksand-gid3inject.ttf OFL-1.1
+windows/Reem_Kufi-gid3inject.ttf OFL-1.1
+windows/Rubik-gid3inject.ttf OFL-1.1
+windows/Sans_Serif_Collection-gid3inject.ttf OFL-1.1
+windows/Source_Code_Pro-gid3inject.ttf OFL-1.1
+windows/Source_Sans_3-gid3inject.ttf OFL-1.1
+windows/Source_Serif_4-gid3inject.ttf OFL-1.1
diff --git a/scripts/fetch-fonts.py b/scripts/fetch-fonts.py
new file mode 100644
index 000000000..c4b0c9942
--- /dev/null
+++ b/scripts/fetch-fonts.py
@@ -0,0 +1,238 @@
+#!/usr/bin/env python3
+"""Fetch the font bundle, which is a release asset rather than repo content.
+
+WHY IT IS NOT IN GIT
+--------------------
+The bundle is ~2.1 GB of font binaries. Committing it, even compressed, is the
+wrong trade:
+
+ * GitHub rejects any file over 100 MiB, so a single archive would have to be
+ split into ~9 parts (the bundle is ~770 MB as .tar.xz).
+ * An xz archive cannot be delta-compressed, so EVERY font update would append
+ another ~770 MB blob to history, permanently, paid by anyone who clones the
+ repo to fix a typo.
+
+Release assets allow 2 GB per file, so one asset holds the whole bundle with no
+splitting, no Git LFS, and no history growth. This is the same trust model the
+build already uses for the Firefox source itself (`make fetch` pulls a ~500 MB
+tarball from archive.mozilla.org), so a clone has never been buildable offline
+anyway.
+
+What IS tracked is `scripts/data/font-bundle.json`: the asset name, its size and
+its sha256. That pins exactly which bundle a given commit expects, so the build
+is reproducible even though the bytes live elsewhere -- and a mismatched or
+truncated download fails loudly here instead of silently producing a browser
+that reports fonts it cannot render.
+
+Only the compressed archive is kept. `bundle/fonts/` is extracted on demand and
+is gitignored; `--extract` materialises it, `--clean` removes it again.
+
+Usage:
+ python3 scripts/fetch-fonts.py # download + verify the archive
+ python3 scripts/fetch-fonts.py --extract # ...and unpack to bundle/fonts/
+ python3 scripts/fetch-fonts.py --check # verify only; non-zero if absent
+ python3 scripts/fetch-fonts.py --clean # drop the extracted directory
+"""
+
+import argparse
+import hashlib
+import json
+import os
+import shutil
+import subprocess
+import sys
+import tarfile
+
+REPO = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
+SPEC = os.path.join(REPO, 'scripts', 'data', 'font-bundle.json')
+BUNDLE_DIR = os.path.join(REPO, 'bundle')
+
+
+def load_spec():
+ if not os.path.exists(SPEC):
+ sys.exit(f'missing {SPEC}; the font bundle spec is required')
+ with open(SPEC, encoding='utf-8') as fh:
+ return json.load(fh)
+
+
+def digest(path, chunk=1 << 20):
+ h = hashlib.sha256()
+ with open(path, 'rb') as fh:
+ for block in iter(lambda: fh.read(chunk), b''):
+ h.update(block)
+ return h.hexdigest()
+
+
+def archive_path(spec):
+ return os.path.join(BUNDLE_DIR, spec['asset'])
+
+
+def stamp_path():
+ return os.path.join(BUNDLE_DIR, 'fonts', '.bundle-sha256')
+
+
+def already_extracted(spec):
+ """True when bundle/fonts/ was unpacked from exactly the pinned archive.
+
+ Lets `--extract` gate anything that needs the fonts present (scripts/stage-fonts.sh
+ runs before every `make run`) without re-decompressing 2.1 GB, or even
+ needing the archive to still be on disk. A bundle bump changes the sha256,
+ so the stale tree is replaced rather than trusted.
+ """
+ if not os.path.exists(os.path.join(BUNDLE_DIR, 'fonts', 'groups.json')):
+ return False
+ try:
+ with open(stamp_path(), encoding='utf-8') as fh:
+ return fh.read().strip() == spec['sha256']
+ except OSError:
+ return False
+
+
+def verify(spec, path, quiet=False):
+ """True when `path` is the archive this commit expects."""
+ if not os.path.exists(path):
+ return False
+ size = os.path.getsize(path)
+ if spec.get('size') and size != spec['size']:
+ if not quiet:
+ print(f'size mismatch: have {size}, expected {spec["size"]}', file=sys.stderr)
+ return False
+ got = digest(path)
+ if got != spec['sha256']:
+ if not quiet:
+ print(f'sha256 mismatch:\n have {got}\n expected {spec["sha256"]}', file=sys.stderr)
+ return False
+ return True
+
+
+def download(spec, path):
+ url = spec['url']
+ print(f'fetching {url}', file=sys.stderr)
+ os.makedirs(os.path.dirname(path), exist_ok=True)
+ tmp = path + '.part'
+ # aria2c is already a build dependency (see scripts/install-deps.sh); fall
+ # back to curl so a checkout without it can still fetch.
+ if shutil.which('aria2c'):
+ cmd = ['aria2c', '-x8', '-s8', '-k1M', '--allow-overwrite=true',
+ '-d', os.path.dirname(tmp), '-o', os.path.basename(tmp), url]
+ elif shutil.which('curl'):
+ cmd = ['curl', '-fL', '--retry', '3', '-o', tmp, url]
+ else:
+ sys.exit('neither aria2c nor curl is available to download the font bundle')
+ if subprocess.run(cmd).returncode != 0:
+ sys.exit('font bundle download failed')
+ os.replace(tmp, path)
+
+
+def extract(spec, path):
+ target = os.path.join(BUNDLE_DIR, 'fonts')
+ if os.path.isdir(target):
+ shutil.rmtree(target)
+ print(f'extracting {os.path.basename(path)} -> bundle/fonts/', file=sys.stderr)
+ with tarfile.open(path, 'r:xz') as tf:
+ # The archive is pinned by sha256 above, so its members are trusted;
+ # still refuse anything that escapes the bundle directory.
+ for member in tf.getmembers():
+ dest = os.path.realpath(os.path.join(BUNDLE_DIR, member.name))
+ if not dest.startswith(os.path.realpath(BUNDLE_DIR) + os.sep):
+ sys.exit(f'refusing to extract outside bundle/: {member.name}')
+ tf.extractall(BUNDLE_DIR)
+
+ # The v1 archive was built while 000_README.txt and cleanfonts.sh still sat
+ # inside bundle/fonts/. They are tracked at bundle/FONTS-README.txt and
+ # scripts/cleanfonts.sh now, so an extracted copy is a stale duplicate of a
+ # file git owns -- harmless (bundle/fonts/ is ignored) but confusing, and it
+ # would be folded back in if the bundle were rebuilt from this tree. Prune
+ # them; a future archive simply will not contain them.
+ for stray in ('000_README.txt', 'cleanfonts.sh'):
+ p = os.path.join(target, stray)
+ if os.path.exists(p):
+ os.remove(p)
+
+ # Records WHICH archive this tree came from, so a later --extract can skip
+ # the work instead of repeating it. Written last: a crash mid-extract leaves
+ # no stamp, so the partial tree is re-done rather than used.
+ with open(stamp_path(), 'w', encoding='utf-8') as fh:
+ fh.write(spec['sha256'] + '\n')
+
+ n = sum(len(f) for _, _, f in os.walk(target))
+ print(f'extracted {n} files', file=sys.stderr)
+
+
+def main():
+ ap = argparse.ArgumentParser(description=__doc__,
+ formatter_class=argparse.RawDescriptionHelpFormatter)
+ ap.add_argument('--extract', action='store_true', help='unpack to bundle/fonts/ after verifying')
+ ap.add_argument('--check', action='store_true', help='verify only; exit non-zero if missing/corrupt')
+ ap.add_argument('--clean', action='store_true', help='remove the extracted bundle/fonts/ directory')
+ ap.add_argument('--force', action='store_true', help='re-download even if the archive verifies')
+ ap.add_argument('--write-spec', metavar='ARCHIVE',
+ help='record a locally built archive in font-bundle.json (size + sha256), '
+ 'for publishing a new bundle release')
+ ap.add_argument('--tag', default=None, help='release tag to point --write-spec at')
+ args = ap.parse_args()
+
+ if args.write_spec:
+ src = args.write_spec
+ if not os.path.exists(src):
+ sys.exit(f'no such archive: {src}')
+ existing = json.load(open(SPEC, encoding='utf-8')) if os.path.exists(SPEC) else {}
+ tag = args.tag or existing.get('tag') or 'font-bundle-v1'
+ asset = os.path.basename(src)
+ spec = {
+ 'tag': tag,
+ 'asset': asset,
+ 'size': os.path.getsize(src),
+ 'sha256': digest(src),
+ 'url': existing.get('urlTemplate', 'https://github.com/{repo}/releases/download/{tag}/{asset}')
+ .format(repo=existing.get('repo', 'JWriter20/camoufox'), tag=tag, asset=asset),
+ 'repo': existing.get('repo', 'JWriter20/camoufox'),
+ 'urlTemplate': 'https://github.com/{repo}/releases/download/{tag}/{asset}',
+ 'note': 'The font bundle is a release asset, not repo content. '
+ 'See scripts/fetch-fonts.py. Regenerate with --write-spec after rebuilding it.',
+ }
+ os.makedirs(os.path.dirname(SPEC), exist_ok=True)
+ with open(SPEC, 'w', encoding='utf-8') as fh:
+ json.dump(spec, fh, indent=1)
+ fh.write('\n')
+ print(f'wrote {SPEC}')
+ print(f' asset {asset} ({spec["size"] / 1e6:.0f} MB)')
+ print(f' sha256 {spec["sha256"]}')
+ print(f' url {spec["url"]}')
+ return 0
+
+ spec = load_spec()
+ path = archive_path(spec)
+
+ if args.clean:
+ target = os.path.join(BUNDLE_DIR, 'fonts')
+ if os.path.isdir(target):
+ shutil.rmtree(target)
+ print('removed bundle/fonts/', file=sys.stderr)
+ return 0
+
+ if args.check:
+ if verify(spec, path):
+ print(f'OK: {spec["asset"]} matches font-bundle.json')
+ return 0
+ print(f'font bundle missing or corrupt: run `make fetch-fonts` '
+ f'(expected {spec["asset"]}, sha256 {spec["sha256"][:12]}...)', file=sys.stderr)
+ return 1
+
+ if args.extract and not args.force and already_extracted(spec):
+ print(f'OK: bundle/fonts/ already unpacked from {spec["asset"]}', file=sys.stderr)
+ return 0
+
+ if args.force or not verify(spec, path, quiet=True):
+ download(spec, path)
+ if not verify(spec, path):
+ sys.exit('downloaded font bundle failed verification')
+ print(f'OK: {spec["asset"]} verified ({os.path.getsize(path) / 1e6:.0f} MB)', file=sys.stderr)
+
+ if args.extract:
+ extract(spec, path)
+ return 0
+
+
+if __name__ == '__main__':
+ raise SystemExit(main())
diff --git a/scripts/fetch-langpacks.py b/scripts/fetch-langpacks.py
new file mode 100755
index 000000000..597a0dcbf
--- /dev/null
+++ b/scripts/fetch-langpacks.py
@@ -0,0 +1,53 @@
+#!/usr/bin/env python3
+"""Download the official Firefox language packs that scripts/package.py bakes into
+every package as packaged locales (see scripts/inject-locales.py).
+
+The XPIs are identical across platforms; the only platform-specific pack is
+macOS's ja-JP-mac. They must match the Firefox base version exactly: string
+keys change between releases, and a mismatched pack would localize some
+content-exposed strings and leave others English.
+
+Usage: scripts/fetch-langpacks.py e.g. 152.0.4
+Writes bundle/langpacks/.xpi and bundle/langpacks/VERSION.
+"""
+import json, os, re, sys, urllib.request, zipfile
+from concurrent.futures import ThreadPoolExecutor
+
+BASE = "https://archive.mozilla.org/pub/firefox/releases/{version}/{platform}/xpi/"
+DEST = os.path.join(os.path.dirname(os.path.abspath(__file__)), "..", "bundle", "langpacks")
+
+
+def listing(version, platform):
+ html = urllib.request.urlopen(BASE.format(version=version, platform=platform), timeout=60).read().decode()
+ return sorted(set(re.findall(r">([A-Za-z-]+)\.xpi<", html)))
+
+
+def fetch(version, platform, code):
+ path = os.path.join(DEST, f"{code}.xpi")
+ data = urllib.request.urlopen(BASE.format(version=version, platform=platform) + f"{code}.xpi", timeout=120).read()
+ with open(path + ".part", "wb") as f:
+ f.write(data)
+ with zipfile.ZipFile(path + ".part") as z:
+ manifest = json.loads(z.read("manifest.json"))
+ gecko = manifest["browser_specific_settings"]["gecko"]
+ major = version.split(".")[0]
+ if not gecko["strict_min_version"].startswith(major + ".") or code not in manifest["languages"]:
+ raise SystemExit(f"{code}: unexpected manifest {gecko} {list(manifest['languages'])}")
+ os.replace(path + ".part", path)
+ return code
+
+
+def main():
+ version = sys.argv[1]
+ os.makedirs(DEST, exist_ok=True)
+ jobs = [("linux-x86_64", c) for c in listing(version, "linux-x86_64") if c != "en-US"]
+ jobs += [("mac", c) for c in listing(version, "mac") if c not in {j[1] for j in jobs} and c != "en-US"]
+ with ThreadPoolExecutor(8) as pool:
+ done = list(pool.map(lambda j: fetch(version, *j), jobs))
+ with open(os.path.join(DEST, "VERSION"), "w") as f:
+ f.write(version + "\n")
+ print(f"{len(done)} language packs for Firefox {version} in {os.path.normpath(DEST)}")
+
+
+if __name__ == "__main__":
+ main()
diff --git a/scripts/font-metrics/licences.py b/scripts/font-metrics/licences.py
new file mode 100755
index 000000000..ef450a6ef
--- /dev/null
+++ b/scripts/font-metrics/licences.py
@@ -0,0 +1,268 @@
+#!/usr/bin/env python3
+"""Classify every bundled font by whether Camoufox may redistribute it.
+
+Camoufox has shipped `bundle/fonts` under a README that calls it "solely for
+academic and research purposes", which is not a licence and does not survive
+the project earning money. This script reads the licence fields every font
+carries in its `name` table (IDs 13 and 14, with 0 and 8 as corroboration) and
+sorts the bundle into three buckets:
+
+ ship a licence that plainly permits redistribution -- OFL, Apache-2.0,
+ the Ubuntu Font Licence, MIT, CC-BY, GPL with the font exception,
+ and public domain
+ drop a vendor licence that plainly does not -- Microsoft, Apple,
+ Monotype, Adobe, Linotype, Bitstream's non-Vera faces
+ review anything else, which is listed rather than guessed at
+
+Only the `ship` bucket is written to the output list. `review` is a hard failure
+by default: a font nobody has classified must not be shipped by accident, and
+the whole point of the exercise is that the shipped set can be defended.
+
+This is a REPORT, not a filter: Camoufox ships the full bundle, and the buckets
+exist so the licence exposure of what ships is known and reviewable. Removing a
+bucket from the bundle is a deliberate, separate decision -- see
+bundle/FONTS-README.txt for what is currently shipped and why.
+
+Usage:
+ python3 scripts/font-metrics/licences.py [--bundle bundle/fonts]
+ [--out scripts/data/open-fonts.txt] [--report report.json]
+ [--allow-review]
+"""
+
+import argparse
+import json
+import os
+import re
+import sys
+from collections import Counter, defaultdict
+
+REPO = os.path.dirname(os.path.dirname(os.path.dirname(os.path.abspath(__file__))))
+FONT_EXT = (".ttf", ".otf", ".ttc", ".otc", ".dfont")
+OSDIRS = ("linux", "macos", "windows")
+
+# ORDER MATTERS, AND DENY COMES FIRST.
+#
+# A restrictive licence can quote a permissive one. Microsoft's font licence
+# reads "...Any other use is prohibited. The following license, based on the MIT
+# license (...), applies to the [Hebrew OpenType Layout logic]..." -- a
+# permissive clause covering one *component*, inside a licence that forbids
+# redistribution of the font itself. Checking ALLOW first matched "MIT license"
+# and put Times New Roman, Courier New, Segoe UI and Calibri into the shippable
+# donor set, which is the precise failure this whole exercise exists to avoid.
+# So the order is:
+#
+# 1. restrictive PHRASING anywhere in the licence is decisive ("supplied
+# font", "any other use is prohibited")
+# 2. a CANONICAL, self-describing licence statement in the licence field is
+# believed even against a proprietary-looking owner -- Noto is OFL and
+# still credits Monotype as the foundry that drew it, and dropping Noto
+# would empty the donor set
+# 3. a proprietary OWNER in the copyright or vendor field is decisive
+# 4. only then is a loosely-matched permissive licence believed
+#
+# Anything unmatched is "review", and review is not shipped.
+
+# Matched against the copyright and vendor fields only. A foundry that does not
+# license its fonts for redistribution is decisive whatever else the licence
+# text happens to quote.
+DENY_OWNER = [
+ ("Microsoft", r"microsoft corporation|microsoft typography"),
+ ("Apple", r"apple inc|apple computer"),
+ ("Monotype", r"monotype (imaging|corporation|typography)|the monotype"),
+ ("Adobe", r"adobe (systems|inc)\b|adobe\.com/type"),
+ ("Linotype", r"linotype"),
+ ("ITC", r"international typeface"),
+ ("Bitstream", r"bitstream inc"),
+ ("Founder", r"beijing founder|founder group"),
+ ("DynaComware", r"dynacomware"),
+ ("Morisawa", r"morisawa"),
+ ("Sandoll", r"sandoll"),
+ ("Ascender", r"ascender corporation"),
+ ("Agfa", r"agfa monotype"),
+]
+
+# Matched against the whole licence text: phrasing that forbids redistribution
+# outright, whatever else the text may quote.
+DENY_TERMS = [
+ ("supplied-font-EULA", r"supplied font"),
+ ("use-prohibited", r"any other use is prohibited|other uses are prohibited"),
+ ("no-redistribution", r"may not be (copied|distributed|redistributed|sold|"
+ r"modified|reproduced)"),
+ ("no-redistribution", r"(shall|must) not be (copied|distributed|"
+ r"redistributed)"),
+ ("licence-required", r"unauthorized (use|copying)|requires a (valid )?"
+ r"licen[cs]e|licensed for use"),
+ ("EULA", r"end user licen[cs]e agreement"),
+ ("proprietary", r"proprietary (and confidential|software)"),
+]
+
+# Canonical, SELF-DESCRIBING statements, matched against the licence field
+# alone. "This Font Software is licensed under the SIL Open Font License"
+# describes the font itself; "The following license, based on the MIT license,
+# applies to the [Hebrew layout logic]" describes a component, which is why MIT
+# is deliberately not in this list -- a font whose only permissive signal is a
+# quoted MIT clause goes to review rather than to the donor set.
+STRONG_ALLOW = [
+ ("OFL-1.1", r"licensed under the sil open font license|"
+ r"this font software is licensed under the sil open font"),
+ ("Apache-2.0", r"licensed under the apache license"),
+ ("Ubuntu-FL-1.0", r"licensed under the ubuntu font licen[cs]e"),
+ ("GPL+FE", r"licensed under the gnu general public license.{0,80}"
+ r"font exception"),
+ ("CC-BY", r"licensed under.{0,40}creative commons attribution"),
+]
+
+# Only reached when nothing above fired.
+ALLOW = [
+ ("OFL-1.1", r"sil open font license|scripts\.sil\.org/ofl|openfontlicense"),
+ ("Apache-2.0", r"apache license|apache\.org/licenses"),
+ ("Ubuntu-FL-1.0", r"ubuntu font licence|ubuntu font license"),
+ ("MIT", r"\bmit license\b|opensource\.org/licenses/mit"),
+ ("CC-BY", r"creativecommons\.org/licenses/by|creative commons attribution"),
+ ("CC0/PD", r"creativecommons\.org/publicdomain|public domain"),
+ ("GPL+FE", r"gnu general public license.*font exception|gpl.*font exception"),
+ ("Bitstream-Vera", r"bitstream vera"),
+ ("AFPL/URW", r"urw\+\+|aladdin free public license"),
+]
+
+
+def classify(fields):
+ """(bucket, label) for one font, from its name-table licence fields."""
+ owner = " ".join((fields.get("copyright", ""),
+ fields.get("vendor", ""))).lower()
+ text = " | ".join(v for v in fields.values() if v).lower()
+
+ licence = fields.get("licence", "").lower()
+
+ for label, pattern in DENY_TERMS:
+ if re.search(pattern, text):
+ return "drop", label
+ for label, pattern in STRONG_ALLOW:
+ if re.search(pattern, licence):
+ return "ship", label
+ for label, pattern in DENY_OWNER:
+ if re.search(pattern, owner):
+ return "drop", label
+ for label, pattern in ALLOW:
+ if re.search(pattern, text):
+ return "ship", label
+ if not text.strip(" |"):
+ return "review", "no licence fields"
+ return "review", "unclassified"
+
+
+FIELDS = {13: "licence", 14: "licenceUrl", 0: "copyright", 8: "vendor",
+ 11: "vendorUrl", 7: "trademark"}
+
+
+def licence_text(path, index=0):
+ """The name-table fields a licence decision is made from, kept separate.
+
+ Separate because the copyright and vendor fields carry more weight than the
+ licence body: a foundry that does not license for redistribution is decisive
+ even when the licence body quotes a permissive licence for one component.
+ """
+ from fontTools.ttLib import TTFont
+
+ font = TTFont(path, fontNumber=index, lazy=True, ignoreDecompileErrors=True)
+ try:
+ if "name" not in font:
+ return {}
+ table = font["name"]
+ out = {}
+ for name_id, key in FIELDS.items():
+ value = table.getDebugName(name_id)
+ if value:
+ out[key] = value.strip()
+ return out
+ finally:
+ font.close()
+
+
+def faces_in(path):
+ if path.lower().endswith((".ttc", ".otc")):
+ from fontTools.ttLib import TTCollection
+ try:
+ with TTCollection(path, lazy=True) as collection:
+ return list(range(len(collection.fonts)))
+ except Exception:
+ return [0]
+ return [0]
+
+
+def main():
+ ap = argparse.ArgumentParser(description=__doc__,
+ formatter_class=argparse.RawDescriptionHelpFormatter)
+ ap.add_argument("--bundle", default=os.path.join(REPO, "bundle", "fonts"))
+ ap.add_argument("--out", default=os.path.join(REPO, "scripts", "data", "open-fonts.txt"))
+ ap.add_argument("--report", default=None)
+ ap.add_argument("--allow-review", action="store_true",
+ help="write the list even though some fonts are unclassified")
+ args = ap.parse_args()
+
+ buckets = defaultdict(list)
+ labels = Counter()
+ for os_dir in OSDIRS:
+ root = os.path.join(args.bundle, os_dir)
+ if not os.path.isdir(root):
+ continue
+ for name in sorted(os.listdir(root)):
+ if not name.lower().endswith(FONT_EXT):
+ continue
+ path = os.path.join(root, name)
+ rel = "%s/%s" % (os_dir, name)
+ verdicts = set()
+ label = "unreadable"
+ for index in faces_in(path):
+ try:
+ bucket, label = classify(licence_text(path, index))
+ except Exception as exc:
+ bucket, label = "review", "unreadable: %s" % type(exc).__name__
+ verdicts.add(bucket)
+ # A collection ships only if EVERY face in it may ship: the file is
+ # indivisible.
+ bucket = ("drop" if "drop" in verdicts
+ else "review" if "review" in verdicts else "ship")
+ buckets[bucket].append({"file": rel, "label": label,
+ "bytes": os.path.getsize(path)})
+ labels[(bucket, label)] += 1
+
+ print("%-8s %6s %10s" % ("bucket", "files", "MB"))
+ for bucket in ("ship", "drop", "review"):
+ rows = buckets[bucket]
+ print("%-8s %6d %10.1f" % (bucket, len(rows),
+ sum(r["bytes"] for r in rows) / 1e6))
+ print()
+ for (bucket, label), count in sorted(labels.items(),
+ key=lambda kv: (kv[0][0], -kv[1])):
+ print(" %-7s %-18s %d" % (bucket, label, count))
+
+ if buckets["review"] and not args.allow_review:
+ print()
+ print("%d fonts are unclassified and would not be shipped. Classify them "
+ "in ALLOW/DENY, or pass --allow-review to write the list anyway:"
+ % len(buckets["review"]), file=sys.stderr)
+ for row in buckets["review"][:20]:
+ print(" %s (%s)" % (row["file"], row["label"]), file=sys.stderr)
+ if len(buckets["review"]) > 20:
+ print(" ... and %d more" % (len(buckets["review"]) - 20), file=sys.stderr)
+
+ os.makedirs(os.path.dirname(args.out), exist_ok=True)
+ with open(args.out, "w") as fh:
+ fh.write("# Fonts Camoufox may redistribute, by licence field.\n"
+ "# Generated by scripts/font-metrics/licences.py -- do not edit.\n"
+ "# Everything NOT in this list is measured into the metrics\n"
+ "# database instead and rebuilt locally as a stand-in.\n")
+ for row in buckets["ship"]:
+ fh.write("%s\t%s\n" % (row["file"], row["label"]))
+ print("\nwrote %s (%d files)" % (args.out, len(buckets["ship"])))
+
+ if args.report:
+ with open(args.report, "w") as fh:
+ json.dump({k: v for k, v in buckets.items()}, fh, indent=1)
+ print("wrote %s" % args.report)
+ return 0 if not buckets["review"] or args.allow_review else 1
+
+
+if __name__ == "__main__":
+ raise SystemExit(main())
diff --git a/scripts/gen-contentaccessible-manifest.py b/scripts/gen-contentaccessible-manifest.py
new file mode 100644
index 000000000..0bc832469
--- /dev/null
+++ b/scripts/gen-contentaccessible-manifest.py
@@ -0,0 +1,113 @@
+#!/usr/bin/env python3
+"""
+Record which files a stock Firefox release exposes to web content.
+
+Packages flagged `contentaccessible=yes` in chrome.manifest can be loaded as
+subresources by any page, from any origin (caps/nsScriptSecurityManager.cpp
+checks the target's flag and not the source), so any file Camoufox adds, drops
+or renames there is page-detectable.
+
+ python3 scripts/gen-contentaccessible-manifest.py /path/to/firefox
+
+Writes scripts/data/contentaccessible-manifest.json, which
+tests/patches/contentaccessible-parity.py diffs a build against. Re-run it on a
+Firefox uplift; the guard refuses to compare across versions.
+"""
+
+import json
+import re
+import subprocess
+import sys
+from pathlib import Path
+
+REPO_ROOT = Path(__file__).resolve().parent.parent
+OUT = REPO_ROOT / "scripts" / "data" / "contentaccessible-manifest.json"
+JARS = ("browser/omni.ja", "omni.ja")
+
+
+def zip_entries(jar: Path) -> dict:
+ """Map member -> size. Uses unzip, not zipfile: Firefox's optimized jars
+ have the central directory at the front and zipfile cannot open them."""
+ out = subprocess.run(["unzip", "-l", str(jar)], capture_output=True, text=True).stdout
+ entries = {}
+ for line in out.splitlines():
+ parts = line.split(None, 3)
+ if len(parts) == 4 and parts[0].isdigit() and not parts[3].endswith("/"):
+ entries[parts[3]] = int(parts[0])
+ return entries
+
+
+def zip_read(jar: Path, member: str) -> str:
+ return subprocess.run(
+ ["unzip", "-p", str(jar), member], capture_output=True
+ ).stdout.decode("utf8", "replace")
+
+
+def resolve(target: str, base: str) -> tuple:
+ """A manifest target -> (jar, prefix). Most are relative to the manifest, but
+ `resource` entries may name a resource:// URI, which lands elsewhere."""
+ if target.startswith("resource://gre/"):
+ return "omni.ja", target[len("resource://gre/"):]
+ if target.startswith("resource://devtools/"):
+ return "browser/omni.ja", "chrome/devtools/modules/devtools/" + target[len("resource://devtools/"):]
+ return None, base + target
+
+
+def packages(root: Path) -> dict:
+ """{jar|kind|name: [jar-relative prefix, ...]} for every contentaccessible package."""
+ found = {}
+ for jar in JARS:
+ path = root / jar
+ if not path.exists():
+ continue
+ for member in [m for m in zip_entries(path) if m.endswith("chrome.manifest")]:
+ base = member.rsplit("/", 1)[0] + "/" if "/" in member else ""
+ for line in zip_read(path, member).splitlines():
+ if "contentaccessible=yes" not in line:
+ continue
+ kind, name, target = line.split()[:3]
+ other_jar, prefix = resolve(target, base)
+ found.setdefault(f"{other_jar or jar}|{kind}|{name}", set()).add(prefix)
+ return {k: sorted(v) for k, v in found.items()}
+
+
+def firefox_version(root: Path) -> str:
+ ini = (root / "application.ini").read_text(errors="replace")
+ match = re.search(r"^Version=(.+)$", ini, re.M)
+ return match.group(1).strip() if match else "unknown"
+
+
+def main() -> int:
+ if len(sys.argv) != 2:
+ print(__doc__)
+ return 2
+ root = Path(sys.argv[1]).resolve()
+ if root.is_file():
+ root = root.parent
+ if not (root / "application.ini").exists():
+ print(f"FAIL: {root} is not a Firefox install (no application.ini)")
+ return 1
+
+ pkgs = packages(root)
+ listings = {jar: zip_entries(root / jar) for jar in JARS if (root / jar).exists()}
+
+ manifest = {"firefox_version": firefox_version(root), "packages": {}}
+ total = 0
+ for key, prefixes in sorted(pkgs.items()):
+ jar = key.split("|", 1)[0]
+ files = sorted(
+ name for name in listings.get(jar, {})
+ if any(name.startswith(p) for p in prefixes)
+ )
+ manifest["packages"][key] = {"prefixes": prefixes, "files": files}
+ total += len(files)
+
+ OUT.parent.mkdir(parents=True, exist_ok=True)
+ OUT.write_text(json.dumps(manifest, indent=1, sort_keys=True) + "\n")
+ print(f"Firefox {manifest['firefox_version']}: {len(pkgs)} packages, {total} files")
+ print(f"wrote {OUT.relative_to(REPO_ROOT)}")
+ return 0
+
+
+if __name__ == "__main__":
+ sys.exit(main())
diff --git a/scripts/gen-font-groups.py b/scripts/gen-font-groups.py
new file mode 100644
index 000000000..101272d68
--- /dev/null
+++ b/scripts/gen-font-groups.py
@@ -0,0 +1,146 @@
+#!/usr/bin/env python3
+"""Regenerate pythonlib/camoufox/font-groups.json from the per-OS font manifest.
+
+The manifest (scripts/data/font-manifests.json) models a real machine's font set
+as ONE OS-version base plus independent additions, and it distinguishes two kinds
+of addition because real users install them differently:
+
+ kind "bundle" branded software whose fonts arrive as one indivisible
+ download (Office, LibreOffice, the Pan-European FOD pack).
+ Present or absent as a unit, at its own probability.
+ kind "alacarte" a category people install piecemeal (developer and web
+ fonts). Present at its own probability, and then only
+ `sizes` of its members are actually installed.
+
+font-groups.json is that model projected onto the families Camoufox can really
+report: each unit's font list is intersected with fonts.json, which is itself
+generated from the bundle (scripts/gen-fonts-json.py). Emitting it here rather
+than maintaining it by hand is what keeps the draw's probabilities equal to the
+manifest's, and it is why `prob`, `requiresLocale` and `sizes` survive the trip
+-- the previous hand-written file kept only {id, fonts}, so the draw had no
+choice but to treat every unit as equally likely.
+
+Usage (after the bundle or the manifest changed, and AFTER gen-fonts-json.py):
+ python3 scripts/gen-font-groups.py
+"""
+
+import argparse
+import json
+import os
+
+REPO = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
+OS_KEYS = ('win', 'mac', 'lin')
+
+
+def build_bases(manifest, reportable):
+ """The reportable projection of each OS's VERSION BASES, with their weights.
+
+ A real machine has exactly one OS-version base, in full: only the additions
+ vary from box to box. Windows 11's base is Windows 10's plus a handful of
+ families, but macOS 26's is not a superset of Sonoma's -- each has families
+ the other does not -- so the bases have to be drawn as whole alternatives
+ rather than as "core plus the newer version's extras".
+ """
+ out = {}
+ for os_key in OS_KEYS:
+ pool = set(reportable.get(os_key, []))
+ bases = []
+ for base_id, base in manifest[os_key]['bases'].items():
+ if not base.get('weight'):
+ continue
+ fonts = [f for f in base['fonts'] if f in pool]
+ if not fonts:
+ continue
+ bases.append({'id': base_id, 'weight': base['weight'], 'fonts': fonts})
+ total = sum(b['weight'] for b in bases)
+ if total:
+ for b in bases:
+ b['weight'] = round(b['weight'] / total, 6)
+ out[os_key] = bases
+ return out
+
+
+def build(manifest, reportable):
+ """The reportable projection of each OS's additions, in manifest order."""
+ out = {}
+ for os_key in OS_KEYS:
+ pool = set(reportable.get(os_key, []))
+ units = []
+ for addition in manifest[os_key]['additions']:
+ fonts = [f for f in addition['fonts'] if f in pool]
+ if not fonts:
+ # Nothing this unit names can be reported under this OS, so a
+ # draw could never produce it; leaving it out keeps the file a
+ # faithful list of what can actually happen.
+ continue
+ unit = {
+ 'id': addition['id'],
+ 'kind': addition['kind'],
+ 'prob': addition['prob'],
+ 'fonts': fonts,
+ }
+ if addition.get('requiresLocale'):
+ unit['requiresLocale'] = addition['requiresLocale']
+ if addition['kind'] == 'alacarte':
+ # Renormalise the size distribution over what survives the
+ # intersection: a category whose 32 names came down to 9 cannot
+ # install 12 of them.
+ sizes = [s for s in addition.get('sizes', []) if s['n'] <= len(fonts)]
+ if not sizes:
+ sizes = [{'n': len(fonts), 'w': 1.0}]
+ total = sum(s['w'] for s in sizes)
+ unit['sizes'] = [{'n': s['n'], 'w': round(s['w'] / total, 6)} for s in sizes]
+ units.append(unit)
+ out[os_key] = units
+ return out
+
+
+def main():
+ ap = argparse.ArgumentParser(description=__doc__,
+ formatter_class=argparse.RawDescriptionHelpFormatter)
+ ap.add_argument('--manifest', default=os.path.join(REPO, 'scripts', 'data', 'font-manifests.json'))
+ ap.add_argument('--fonts', default=os.path.join(REPO, 'pythonlib', 'camoufox', 'fonts.json'))
+ ap.add_argument('--out', default=os.path.join(REPO, 'pythonlib', 'camoufox', 'font-groups.json'))
+ ap.add_argument('--out-bases', default=os.path.join(REPO, 'pythonlib', 'camoufox', 'font-bases.json'))
+ args = ap.parse_args()
+
+ with open(args.manifest) as fh:
+ manifest = json.load(fh)
+ with open(args.fonts) as fh:
+ reportable = json.load(fh)
+
+ groups = build(manifest, reportable)
+ with open(args.out, 'w') as fh:
+ json.dump(groups, fh, indent=1, ensure_ascii=False, sort_keys=False)
+ fh.write('\n')
+
+ bases = build_bases(manifest, reportable)
+ with open(args.out_bases, 'w') as fh:
+ json.dump(bases, fh, indent=1, ensure_ascii=False, sort_keys=False)
+ fh.write('\n')
+
+ for os_key in OS_KEYS:
+ for b in bases[os_key]:
+ print('%s: base %-10s weight=%-8s %d families' % (os_key, b['id'], b['weight'], len(b['fonts'])))
+ units = groups[os_key]
+ bundles = [u for u in units if u['kind'] == 'bundle']
+ alacarte = [u for u in units if u['kind'] == 'alacarte']
+ print('%s: %d units (%d bundle, %d alacarte), %d families'
+ % (os_key, len(units), len(bundles), len(alacarte),
+ sum(len(u['fonts']) for u in units)))
+ for u in units:
+ extra = ''
+ if u.get('requiresLocale'):
+ extra = ' locale=%s' % u['requiresLocale']
+ if u['kind'] == 'alacarte':
+ exp = sum(s['n'] * s['w'] for s in u['sizes'])
+ extra += ' E[n]=%.2f of %d' % (exp, len(u['fonts']))
+ print(' %-14s %-9s p=%-6s n=%-3d%s'
+ % (u['id'], u['kind'], u['prob'], len(u['fonts']), extra))
+ print('wrote %s' % args.out)
+ print('wrote %s' % args.out_bases)
+ return 0
+
+
+if __name__ == '__main__':
+ raise SystemExit(main())
diff --git a/scripts/gen-fonts-json.py b/scripts/gen-fonts-json.py
new file mode 100755
index 000000000..06a984cb3
--- /dev/null
+++ b/scripts/gen-fonts-json.py
@@ -0,0 +1,340 @@
+#!/usr/bin/env python3
+"""Regenerate pythonlib/camoufox/fonts.json FROM the actual bundled fonts.
+
+fonts.json[os] is the pool the per-launch font draw reports from
+(fingerprints._generate_random_font_subset) and the list update_fonts() merges
+in for callers that pass their own `fonts=`. Every name in it MUST be a family
+the packaged browser can render under that OS's bundled fontconfig, or the
+browser reports a font it cannot draw (a reverse leak). So this script reads
+the group directories that OS reads with fc-scan (bundle/fonts/groups.json
+stores each face once, under the set of OSes that use it), and then keeps only
+the names the per-OS
+font manifest (scripts/data/font-manifests.json) can ever report:
+
+ reportable[os] = fc-scan(the groups reads) # what fontconfig publishes
+ + SCAN_FAMILIES additions # opsz instance families
+ + ALIASES (rewritten by fonts.conf) # Courier -> Courier New ...
+ + SHIPPED_BY_BROWSER # Twemoji Mozilla
+ INTERSECT names(font-manifests.json) # bases + additions + MARKER_FONTS
+ + REPORTABLE_EXTRA # camoufox-only additions
+
+The intersection is deliberate: the bundle carries families a real OS never
+presents as families (weight-variant subfamilies such as "Barlow Black" that
+DirectWrite folds into "Barlow", the bare "Sitka" and "Segoe UI Variable"
+umbrella names, CJK families a stock Windows install does not report), and
+those stay renderable but are never reported. The renderable-but-unreported names
+are written next to the output (fonts.json.unreported.txt is NOT produced in
+the package; pass --dump-union to see them) so the gap stays visible.
+
+Usage (build machine, after the bundle changed):
+ python3 scripts/gen-fonts-json.py [--bundle bundle/fonts]
+ [--out pythonlib/camoufox/fonts.json]
+ [--manifest scripts/data/font-manifests.json]
+ [--print-bases] [--dump-union DIR]
+
+The manifest lists, per OS, the base font sets of each OS version (with their
+real-world share) and the optional additions (Office, LibreOffice, developer
+and web fonts) with their install probability, per OS. --print-bases prints
+the OS base lists (intersected with the result) as Python literals for the
+_ESSENTIAL_FONTS_* constants in pythonlib/camoufox/fingerprints.py, which must
+be kept in step with this file.
+"""
+import argparse
+import json
+import os
+import subprocess
+import sys
+
+REPO = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
+OSDIRS = {'win': 'windows', 'mac': 'macos', 'lin': 'linux'}
+FONT_EXT = ('.ttf', '.otf', '.ttc', '.dfont')
+
+# Mirrors the block in bundle/fontconfig/windows/fonts.conf.
+SCAN_FAMILIES = {
+ 'win': {
+ 'Sitka': ['Sitka Small', 'Sitka Subheading', 'Sitka Heading', 'Sitka Display', 'Sitka Banner'],
+ 'Segoe UI Variable': ['Segoe UI Variable Small', 'Segoe UI Variable Text', 'Segoe UI Variable Display'],
+ },
+ 'mac': {},
+ 'lin': {},
+}
+
+# Mirrors the alias block in bundle/fontconfig/windows/fonts.conf: names with no
+# file of their own that fonts.conf rewrites to a bundled target. The target
+# MUST be bundled.
+ALIASES = {
+ 'win': {
+ 'Courier': 'Courier New',
+ 'Helvetica': 'Arial',
+ 'MS Sans Serif': 'Microsoft Sans Serif',
+ 'Small Fonts': 'Arial',
+ 'MS Serif': 'Times New Roman',
+ 'Roman': 'Times New Roman',
+ 'Times': 'Times New Roman',
+ 'Calibri Light': 'Calibri',
+ 'Candara Light': 'Candara',
+ 'Corbel Light': 'Corbel',
+ 'Leelawadee UI Semilight': 'Leelawadee UI',
+ 'Nirmala Text Semilight': 'Nirmala UI',
+ 'Nirmala UI Semilight': 'Nirmala UI',
+ },
+ # macOS registers each weight of these TTCs as its own family name, so a
+ # real Mac reports them (they are in the macOS base manifest); fontconfig
+ # only registers the base family, and the block in
+ # bundle/fontconfig/macos/fonts.conf rewrites each to it. fc-scan cannot see
+ # these eight, so they are listed here and reported always (they are in
+ # _ESSENTIAL_FONTS_MACOS), which is what the real base does. The PingFang
+ # Light and MuktaMahee rewrites in that block are not listed: PingFang is
+ # not bundled, and "MuktaMahee Regular" is a scanned family already.
+ 'mac': {
+ 'American Typewriter Semibold': 'American Typewriter',
+ 'Apple SD Gothic Neo ExtraBold': 'Apple SD Gothic Neo',
+ 'Futura Bold': 'Futura',
+ 'InaiMathi Bold': 'InaiMathi',
+ 'Kohinoor Devanagari Medium': 'Kohinoor Devanagari',
+ 'Noto Sans Canadian Aboriginal Regular': 'Noto Sans Canadian Aboriginal',
+ 'STIX Two Math Regular': 'STIX Two Math',
+ 'STIX Two Text Regular': 'STIX Two Text',
+ },
+ # The same block is copied into the linux conf, where one rewrite is live
+ # ("Noto Sans Canadian Aboriginal Regular"). A real Ubuntu does not report
+ # that name, so it stays unreported there; scripts/verify-fonts.py warns.
+ # Metric-compatible aliases every stock Linux fontconfig ships
+ # (30-metric-aliases.conf, copied into bundle/fontconfig/linux/fonts.conf):
+ # a page asking for Arial gets Liberation Sans at Arial's exact metrics, so
+ # a real Ubuntu Firefox "has" these names. Targets are all bundled.
+ 'lin': {
+ 'Arial': 'Liberation Sans',
+ 'Arial Narrow': 'Liberation Sans Narrow',
+ 'Helvetica': 'Liberation Sans',
+ 'Helvetica Narrow': 'Nimbus Sans Narrow',
+ 'Times': 'Liberation Serif',
+ 'Times New Roman': 'Liberation Serif',
+ 'Courier': 'Liberation Mono',
+ 'Courier New': 'Liberation Mono',
+ 'Calibri': 'Carlito',
+ 'Cambria': 'Caladea',
+ 'Palatino': 'P052',
+ 'Palatino Linotype': 'P052',
+ 'Bookman Old Style': 'URW Bookman',
+ 'Century Schoolbook': 'C059',
+ 'Avant Garde': 'URW Gothic',
+ 'Zapf Chancery': 'Z003',
+ 'Symbol': 'Standard Symbols PS',
+ },
+}
+
+# Families the BROWSER ships (dist/bin/fonts/TwemojiMozilla.ttf, staged by the
+# Firefox build into the same fonts/ dir the bundled fontconfig scans), so an
+# fc-scan over bundle/fonts cannot see them. The manifest lists it for win only
+# (it is in the Windows base, measured); lin keeps camoufox's long-standing
+# CreepJS marker.
+SHIPPED_BY_BROWSER = {'win': ['Twemoji Mozilla'], 'mac': [], 'lin': ['Twemoji Mozilla']}
+
+# The CreepJS OS-marker families the font draw adds back after the random
+# subset (when bundled). They are reportable even when no base or addition
+# names them, so they count as wanted here. Twin of _*_MARKER_FONTS in
+# pythonlib/camoufox/fingerprints.py.
+MARKER_FONTS = {
+ 'win': ['Segoe UI', 'Tahoma', 'Cambria Math', 'Nirmala UI'],
+ 'mac': ['Helvetica Neue', 'PingFang HK', 'PingFang SC', 'PingFang TC'],
+ 'lin': ['Noto Sans', 'Noto Serif', 'DejaVu Sans Mono', 'Arimo', 'Cousine', 'Tinos', 'Twemoji Mozilla'],
+}
+
+# Reportable names that are NOT in the manifest for that OS. Each entry is a
+# deliberate camoufox deviation and must be renderable (checked below).
+REPORTABLE_EXTRA = {
+ 'win': [],
+ 'mac': [],
+ # Firefox exposes its bundled Twemoji Mozilla to content on Linux; it has
+ # been a _LINUX_MARKER_FONTS entry since the font draw was introduced.
+ 'lin': ['Twemoji Mozilla'],
+}
+
+
+
+def bundle_dirs_for(bundle, os_key, sub):
+ """The directories this OS renders from: its groups, else the old per-OS dir."""
+ groups = os.path.join(bundle, 'groups.json')
+ if os.path.exists(groups):
+ with open(groups, encoding='utf-8') as fh:
+ read_by = json.load(fh).get('readBy', {}).get(os_key, [])
+ dirs = [os.path.join(bundle, g) for g in read_by if os.path.isdir(os.path.join(bundle, g))]
+ if dirs:
+ return dirs
+ return [os.path.join(bundle, sub)]
+
+
+def scan_families(directory):
+ """Families fontconfig publishes from one directory, or several.
+
+ The bundle stores each face once, in a directory named for the set of OSes
+ that use it (bundle/fonts/groups.json), so an OS's renderable set is the
+ union of the groups its letter appears in -- not one per-OS directory.
+ """
+ directories = [directory] if isinstance(directory, str) else list(directory)
+ files = []
+ for d in directories:
+ if not os.path.isdir(d):
+ sys.exit(f'bundle dir missing: {d}')
+ for dp, _dn, fn in os.walk(d):
+ for f in fn:
+ if f.lower().endswith(FONT_EXT):
+ files.append(os.path.join(dp, f))
+ if not files:
+ sys.exit(f'no font files under {directories} (is the bundle restored?)')
+ fams = set()
+ # fc-scan takes many files at once; chunk to keep argv bounded.
+ for i in range(0, len(files), 200):
+ out = subprocess.run(
+ ['fc-scan', '--format', '%{family}\n', *files[i:i + 200]],
+ capture_output=True, text=True, check=True,
+ ).stdout
+ for line in out.splitlines():
+ for fam in line.split(','):
+ fam = fam.strip()
+ if fam:
+ fams.add(fam)
+ return fams
+
+
+def load_manifest(args):
+ with open(args.manifest, encoding='utf-8') as fh:
+ return json.load(fh)
+
+
+def manifest_names(man, os_key):
+ names = set()
+ for base in man[os_key]['bases'].values():
+ names.update(base['fonts'])
+ for add in man[os_key]['additions']:
+ names.update(add['fonts'])
+ return names
+
+
+
+def require_bundle(bundle):
+ """The font bundle is a release asset; fail with the fix, not a stack trace."""
+ if os.path.isdir(bundle) and os.listdir(bundle):
+ return
+ sys.exit(
+ f'font bundle not present at {bundle}.\n'
+ f'It ships as a release asset rather than repo content (~2.1 GB); run:\n'
+ f' make fonts-extract\n'
+ f'See scripts/fetch-fonts.py for why it is not in git.'
+ )
+
+
+def main():
+ ap = argparse.ArgumentParser(description=__doc__, formatter_class=argparse.RawDescriptionHelpFormatter)
+ ap.add_argument('--bundle', default=os.path.join(REPO, 'bundle', 'fonts'))
+ ap.add_argument('--out', default=os.path.join(REPO, 'pythonlib', 'camoufox', 'fonts.json'))
+ ap.add_argument('--manifest', default=os.path.join(REPO, 'scripts', 'data', 'font-manifests.json'),
+ help='per-OS font manifest (bases + additions)')
+ ap.add_argument('--print-bases', action='store_true', help='print OS base lists as Python literals')
+ ap.add_argument('--dump-union', default=None, help='dir to write -union.txt / -unreported.txt')
+ args = ap.parse_args()
+ require_bundle(os.path.join(args.bundle, "fonts")
+ if not args.bundle.rstrip("/").endswith("fonts") else args.bundle)
+
+ man = load_manifest(args)
+ result = {}
+ bases_out = {}
+ for os_key, sub in OSDIRS.items():
+ union = scan_families(bundle_dirs_for(args.bundle, os_key, sub))
+ for src, added in SCAN_FAMILIES[os_key].items():
+ if src in union:
+ union.update(added)
+ for name, target in ALIASES[os_key].items():
+ if target not in union:
+ sys.exit(f'{os_key}: alias {name} -> {target}: target is not bundled')
+ union.add(name)
+ union.update(SHIPPED_BY_BROWSER[os_key])
+
+ wanted = manifest_names(man, os_key) | set(MARKER_FONTS[os_key])
+ reportable = union & wanted
+ # An alias is rewritten unconditionally by fonts.conf, so it is renderable
+ # for every identity whose list has the target; report it always (the
+ # bases below carry it, and the real OS resolves every one of them).
+ reportable |= set(ALIASES[os_key])
+ # Families whose mere presence makes CreepJS-class detectors infer
+ # Windows 11 (measured 2026-09-14: a Linux identity that drew Cascadia
+ # was read as "Windows 11 vs UA Linux"). The manifest models them as a
+ # rare developer install on Linux/macOS; the detector cost outweighs the
+ # realism, so they are never reported (or rendered) off Windows.
+ if os_key in ('lin', 'mac'):
+ reportable -= {'Cascadia Code', 'Cascadia Mono', 'Cascadia Code PL', 'Cascadia Mono PL'}
+ for name in REPORTABLE_EXTRA[os_key]:
+ if name not in union:
+ sys.exit(f'{os_key}: REPORTABLE_EXTRA {name} is not renderable')
+ reportable.add(name)
+ unbundled = sorted(wanted - union)
+ unreported = sorted(union - reportable)
+ result[os_key] = sorted(reportable)
+ print(f'{os_key}: {len(union)} renderable families from '
+ f'{"+".join(os.path.basename(d) for d in bundle_dirs_for(args.bundle, os_key, sub))}, '
+ f'{len(result[os_key])} reportable, {len(unreported)} renderable-but-unreported, '
+ f'{len(unbundled)} manifest names unbundled', file=sys.stderr)
+ if args.dump_union:
+ os.makedirs(args.dump_union, exist_ok=True)
+ for tag, data in (('union', sorted(union)), ('unreported', unreported), ('unbundled', unbundled)):
+ with open(os.path.join(args.dump_union, f'{os_key}-{tag}.txt'), 'w', encoding='utf-8') as fh:
+ fh.write('\n'.join(data) + '\n')
+ bases_out[os_key] = {
+ key: sorted((set(base['fonts']) & reportable) | set(ALIASES[os_key]))
+ for key, base in man[os_key]['bases'].items()
+ if base['fonts'] and not base.get('deferred')
+ }
+
+ with open(args.out, 'w', encoding='utf-8') as fh:
+ # Same shape as before: {"win": [...], "mac": [...], "lin": [...]}, each
+ # list sorted, tab-indented and wrapped so diffs stay reviewable.
+ fh.write('{\n')
+ for i, os_key in enumerate(('win', 'mac', 'lin')):
+ rows, row = [], []
+ for name in result[os_key]:
+ row.append(json.dumps(name, ensure_ascii=False))
+ if len(', '.join(row)) > 88:
+ rows.append('\t\t' + ', '.join(row))
+ row = []
+ if row:
+ rows.append('\t\t' + ', '.join(row))
+ fh.write(f'\t"{os_key}": [\n' + ',\n'.join(rows) + '\n\t]' + (',' if i < 2 else '') + '\n')
+ fh.write('}\n')
+ print(f'wrote {args.out}', file=sys.stderr)
+
+ if args.print_bases:
+ for os_key, bases in bases_out.items():
+ for key, fonts in bases.items():
+ print(f'# {os_key} base {key}: {len(fonts)} families')
+ print(json.dumps(fonts, ensure_ascii=False))
+ # additions pools, for the record
+ for os_key in OSDIRS:
+ base_all = set()
+ for b in bases_out[os_key].values():
+ base_all.update(b)
+ print(f'# {os_key} additions pool (reportable minus every base): {len(set(result[os_key]) - base_all)}')
+
+ # _ESSENTIAL_FONTS_* is the floor UNDER whichever base was drawn, so it
+ # is the INTERSECTION of the bases, not any one of them. Making it a
+ # superset of one base silently forces that base's exclusive families
+ # onto every identity -- which is what made a macOS 26 identity keep
+ # claiming 131 Sonoma-only families -- and it must still carry the alias
+ # names fonts.conf rewrites unconditionally, which always render.
+ for os_key in OSDIRS:
+ bases = list(bases_out[os_key].values())
+ if not bases:
+ continue
+ common = set(bases[0])
+ for b in bases[1:]:
+ common &= set(b)
+ common |= set(ALIASES[os_key])
+ common &= set(result[os_key])
+ suffix = {'win': 'WINDOWS', 'mac': 'MACOS', 'lin': 'LINUX'}[os_key]
+ print(f'# _ESSENTIAL_FONTS_{suffix}: {len(common)} families '
+ f'(intersection of {len(bases)} base(s) + aliases)')
+ print(json.dumps(sorted(common), ensure_ascii=False))
+
+
+if __name__ == '__main__':
+ main()
diff --git a/scripts/inject-locales.py b/scripts/inject-locales.py
new file mode 100644
index 000000000..de38bc006
--- /dev/null
+++ b/scripts/inject-locales.py
@@ -0,0 +1,122 @@
+#!/usr/bin/env python3
+"""Package Firefox locales into an app dir the way a Mozilla multi-locale build does.
+
+A langpack add-on is NOT equivalent to a localized build: the parent process
+pre-creates nsContentUtils' shared string bundles (dom.properties, HtmlForm,
+...) at startup, before add-on langpacks register, and caches them for the
+process lifetime -- so constraint-validation messages stay English under a
+langpack while XML parse errors go localized (measured on stock 152.0.4). A
+Mozilla fr repack localizes both. This script turns official langpack XPIs
+into PACKAGED locales: resources go into omni.ja / browser/omni.ja, chrome
+`locale` lines into their chrome.manifest, and the code into
+res/multilocale.txt, which LocaleService reads once at startup -- so the
+locale is selectable by intl.locale.requested before any bundle exists.
+
+Usage: inject-locales.py --source-tree [...]
+ app-resources-dir: dir holding omni.ja + browser/omni.ja
+ (Linux/Windows: the install dir; macOS: Camoufox.app/Contents/Resources)
+Skips the `branding` package so the build keeps its own branding.
+"""
+import json, os, sys, zipfile
+
+SKIP_PACKAGES = {"branding"}
+PLATFORM_FLAGS = {"macosx": "os=Darwin", "linux": "os=LikeUnix", "android": "os=Android", "win": "os=WINNT"}
+
+
+def _mozpack(source_tree):
+ """Mozilla's jar reader/writer: omni.ja is an *optimized* jar (central directory
+ and preload index first) that Python's zipfile cannot read."""
+ for rel in ("python/mozbuild", "python/mozboot", "third_party/python/six",
+ "testing/mozbase/mozfile", "third_party/python/looseversion"):
+ sys.path.insert(0, os.path.join(source_tree, rel))
+ from mozpack.mozjar import JarReader, JarWriter
+ return JarReader, JarWriter
+
+
+def rewrite_jar(mozpack, path, add_files, manifest_lines, locales_txt=None):
+ """Rebuild a jar with extra entries, appended chrome/chrome.manifest lines and an
+ optional res/multilocale.txt, keeping the original compression and preload order."""
+ JarReader, JarWriter = mozpack
+ reader = JarReader(path)
+ names = list(reader.entries)
+ if manifest_lines and "chrome/chrome.manifest" not in reader.entries:
+ raise SystemExit(f"{path}: no chrome/chrome.manifest to register locales in")
+ preloaded = []
+ if reader.last_preloaded:
+ preloaded = names[:names.index(reader.last_preloaded) + 1]
+ tmp = path + ".tmp"
+ with JarWriter(tmp, compress_level=9) as writer:
+ for name in names:
+ if name in add_files:
+ continue # replaced below
+ entry = reader[name]
+ data = entry.read()
+ if name == "chrome/chrome.manifest" and manifest_lines:
+ text = data.decode()
+ if not text.endswith("\n"):
+ text += "\n"
+ have = set(text.splitlines())
+ data = (text + "".join(l + "\n" for l in manifest_lines if l not in have)).encode()
+ elif name == "res/multilocale.txt" and locales_txt is not None:
+ data = (locales_txt + "\n").encode()
+ writer.add(name, data, compress=entry.compressed)
+ if locales_txt is not None and "res/multilocale.txt" not in reader.entries:
+ writer.add("res/multilocale.txt", (locales_txt + "\n").encode())
+ for name, data in sorted(add_files.items()):
+ writer.add(name, data)
+ if preloaded:
+ writer.preload(preloaded)
+ os.replace(tmp, path)
+
+
+def main():
+ import argparse
+ parser = argparse.ArgumentParser(description="Package Firefox locales from language packs")
+ parser.add_argument("--source-tree", required=True, help="Firefox source tree (for mozpack)")
+ parser.add_argument("res_dir", help="dir holding omni.ja and browser/omni.ja")
+ parser.add_argument("xpis", nargs="+", help="official language pack XPIs")
+ args = parser.parse_args()
+ mozpack = _mozpack(args.source_tree)
+ JarReader = mozpack[0]
+ res_dir, xpis = args.res_dir, args.xpis
+ gre_jar = os.path.join(res_dir, "omni.ja")
+ app_jar = os.path.join(res_dir, "browser", "omni.ja")
+ locales = [l.strip() for l in JarReader(gre_jar)["res/multilocale.txt"].read().decode().split(",") if l.strip()]
+ gre_files, app_files, gre_lines, app_lines = {}, {}, [], []
+ for xpi in xpis:
+ with zipfile.ZipFile(xpi) as z:
+ manifest = json.loads(z.read("manifest.json"))
+ (code, lang), = manifest["languages"].items()
+ for pkg, target in lang["chrome_resources"].items():
+ if pkg in SKIP_PACKAGES:
+ continue
+ for platform, rel in (target.items() if isinstance(target, dict) else [(None, target)]):
+ # xpi paths: chrome/... -> GRE jar chrome/...; browser/chrome/... -> app jar chrome/...
+ if rel.startswith("browser/chrome/"):
+ line, lines = f"locale {pkg} {code} {rel[len('browser/chrome/'):]}", app_lines
+ elif rel.startswith("chrome/"):
+ line, lines = f"locale {pkg} {code} {rel[len('chrome/'):]}", gre_lines
+ else:
+ raise SystemExit(f"{xpi}: unexpected chrome path {rel}")
+ if platform:
+ line += " " + PLATFORM_FLAGS[platform]
+ lines.append(line)
+ for name in z.namelist():
+ if name.endswith("/") or name == "manifest.json" or name.startswith("META-INF/"):
+ continue
+ if "/locale/branding/" in name:
+ continue
+ if name.startswith("browser/"):
+ app_files[name[len("browser/"):]] = z.read(name)
+ else:
+ gre_files[name] = z.read(name)
+ if code not in locales:
+ locales.append(code)
+ print(f" {code}: {manifest['version']}")
+ rewrite_jar(mozpack, gre_jar, gre_files, gre_lines, ",".join(locales))
+ rewrite_jar(mozpack, app_jar, app_files, app_lines)
+ print(f"packaged locales: {','.join(locales)} (gre +{len(gre_files)} files, app +{len(app_files)} files)")
+
+
+if __name__ == "__main__":
+ main()
diff --git a/scripts/package.py b/scripts/package.py
index fb18a79e9..4011402df 100644
--- a/scripts/package.py
+++ b/scripts/package.py
@@ -2,6 +2,8 @@
import argparse
import glob
+import hashlib
+import json
import os
import shutil
import sys
@@ -10,10 +12,79 @@
from _mixin import find_src_dir, get_moz_target, list_files, run, temp_cd
-UNNEEDED_PATHS = {'uninstall', 'pingsender.exe', 'pingsender', 'vaapitest', 'glxtest'}
+# glxtest and vaapitest are NOT here: Firefox runs them at startup to learn what
+# the GPU and the video stack can do, and without them nsIGfxInfo has no data,
+# so the driver blocklist refuses every WebGL context ("WebglAllowWindowsNativeGl:
+# false restricts context creation on this system ... Exhausted GL driver
+# options", measured 2026-09-18 against stock 152.0.4 on the same machine, which
+# returned a full WebGL 2.0 context from the real GPU). The launcher papers over
+# it with webgl.force-enabled; shipping the two probes is what makes the browser
+# decide the way stock does in the first place. ~50 KB.
+UNNEEDED_PATHS = {'uninstall', 'pingsender.exe', 'pingsender'}
-def add_includes_to_package(package_file, includes, fonts, new_file, target):
+def inject_locales(target_dir, target, version, src_dir):
+ """Bake the official language packs in as packaged locales.
+
+ Without them a spoofed non-English locale localizes Intl/number/date
+ formatting but leaves every browser-provided string that content can read
+ (input.validationMessage, XML parse errors) in English -- a mix no real
+ Firefox produces. A langpack add-on does not fix it: the parent pre-creates
+ those string bundles before add-ons start. Packaged locales are what a
+ Mozilla localized build has, selected by intl.locale.requested (pythonlib).
+ """
+ langpacks = os.path.join('bundle', 'langpacks')
+ version_file = os.path.join(langpacks, 'VERSION')
+ base_version = version.split('-')[0]
+ have = open(version_file).read().strip() if os.path.exists(version_file) else None
+ if have != base_version:
+ # Not in git (bundle/langpacks is ignored): fetch them from
+ # archive.mozilla.org the way `make fetch` fetches the source.
+ run(join([sys.executable, os.path.join('scripts', 'fetch-langpacks.py'), base_version]))
+ have = open(version_file).read().strip() if os.path.exists(version_file) else None
+ if have != base_version:
+ raise FileNotFoundError(
+ f"bundle/langpacks is for Firefox {have}, need {base_version}: "
+ f"run scripts/fetch-langpacks.py {base_version}"
+ )
+ # Mozilla's macOS Japanese build is ja-JP-mac; every other platform ships ja.
+ skip = 'ja' if target == 'macos' else 'ja-JP-mac'
+ xpis = sorted(
+ path for path in glob.glob(os.path.join(langpacks, '*.xpi'))
+ if os.path.basename(path)[:-4] != skip
+ )
+ run(join([sys.executable, os.path.join('scripts', 'inject-locales.py'),
+ '--source-tree', src_dir, target_dir, *xpis]))
+
+
+
+def font_groups_for(groups_file, oses):
+ """Group directories the named OSes read, or None if the bundle predates groups."""
+ if not os.path.exists(groups_file):
+ return None
+ with open(groups_file, encoding='utf-8') as fh:
+ read_by = json.load(fh).get('readBy', {})
+ key = {'linux': 'lin', 'macos': 'mac', 'windows': 'win'}
+ out = set()
+ for o in oses:
+ out.update(read_by.get(key.get(o, o), []))
+ return sorted(out)
+
+
+def legacy_font_copy(target, fonts, fonts_dir):
+ """The pre-groups layout: one full copy of each OS's set under fonts//."""
+ if target == 'linux':
+ for font in fonts or []:
+ shutil.copytree(os.path.join('bundle', 'fonts', font),
+ os.path.join(fonts_dir, font), dirs_exist_ok=True)
+ else:
+ os.makedirs(fonts_dir, exist_ok=True)
+ for font in fonts or []:
+ for file in list_files(root_dir=os.path.join('bundle', 'fonts', font), suffix='*'):
+ shutil.copy2(file, os.path.join(fonts_dir, os.path.basename(file)))
+
+
+def add_includes_to_package(package_file, includes, fonts, new_file, target, version, src_dir):
with tempfile.TemporaryDirectory() as temp_dir:
# Extract package
run(join(['7z', 'x', package_file, f'-o{temp_dir}']), exit_on_fail=False)
@@ -28,6 +99,8 @@ def add_includes_to_package(package_file, includes, fonts, new_file, target):
fonts=fonts,
new_file=new_file,
target=target,
+ version=version,
+ src_dir=src_dir,
)
if target == 'macos':
@@ -79,23 +152,45 @@ def add_includes_to_package(package_file, includes, fonts, new_file, target):
else:
shutil.copy2(include, target_dir)
- # Add the font folders under fonts/
+ # Add the fonts under fonts/.
+ #
+ # The bundle stores each face ONCE, in a directory named for the set of
+ # OSes that use it (L, M, W, LM, LW, MW, LMW -- bundle/fonts/groups.json).
+ # Storing a copy per OS instead made 41% of the bundle byte-identical
+ # duplicates. `fonts` still names OSes; the groups each one reads are
+ # looked up here, so the set a package ships is unchanged.
fonts_dir = os.path.join(target_dir, 'fonts')
- if target == 'linux':
- for font in fonts or []:
- shutil.copytree(
- os.path.join('bundle', 'fonts', font),
- os.path.join(fonts_dir, font),
- dirs_exist_ok=True,
- )
- # Non-linux systems cannot read fonts within subfolders.
- # Instead, we walk the fonts/ directory and copy all files.
+ groups_file = os.path.join('bundle', 'fonts', 'groups.json')
+ wanted = font_groups_for(groups_file, fonts or [])
+ if wanted is None:
+ legacy_font_copy(target, fonts, fonts_dir)
+ elif target == 'linux':
+ # Linux resolves fonts through fontconfig, which is handed the exact
+ # group directories for the claimed OS at launch (utils._generate_fontconfig),
+ # so the subdirectories are the per-OS gate and must be preserved.
+ for g in wanted:
+ shutil.copytree(os.path.join('bundle', 'fonts', g),
+ os.path.join(fonts_dir, g), dirs_exist_ok=True)
+ shutil.copy2(groups_file, os.path.join(fonts_dir, 'groups.json'))
else:
+ # macOS (CoreText) and Windows (DirectWrite) activate ONE flat
+ # directory and cannot read subfolders, so there is no directory
+ # gate on those targets -- the font allowlist is what restricts a
+ # lookup (font-hijacker.patch). Flatten, skipping any face whose
+ # bytes are already present.
os.makedirs(fonts_dir, exist_ok=True)
- for font in fonts or []:
- for file in list_files(root_dir=os.path.join('bundle', 'fonts', font), suffix='*'):
+ seen = set()
+ for g in wanted:
+ for file in list_files(root_dir=os.path.join('bundle', 'fonts', g), suffix='*'):
+ with open(file, 'rb') as fh:
+ digest = hashlib.sha256(fh.read()).hexdigest()
+ if digest in seen:
+ continue
+ seen.add(digest)
shutil.copy2(file, os.path.join(fonts_dir, os.path.basename(file)))
+ inject_locales(target_dir, target, version, src_dir)
+
# Remove unneeded paths
for path in UNNEEDED_PATHS:
if os.path.isdir(os.path.join(target_dir, path)):
@@ -173,6 +268,8 @@ def main():
fonts=args.fonts,
new_file=new_name,
target=args.os,
+ version=args.version,
+ src_dir=os.path.abspath(src_dir),
)
print(f"Packaging complete for {args.os}")
diff --git a/scripts/pin-fpgen-model.py b/scripts/pin-fpgen-model.py
new file mode 100755
index 000000000..ec3a1847a
--- /dev/null
+++ b/scripts/pin-fpgen-model.py
@@ -0,0 +1,155 @@
+#!/usr/bin/env python3
+"""Install a pinned fpgen model, instead of letting fpgen fetch one itself.
+
+WHY THIS EXISTS
+---------------
+`fpgen` (scrapfly/fingerprint-generator) is where Camoufox's synthetic
+fingerprints come from. It does not ship its model; it downloads one the first
+time it is imported, and again whenever the files on disk are over five weeks
+old. That fetch has four problems, all of them in fpgen/pkgman.py:
+
+ 1. TLS verification is DISABLED on both the API call and the download
+ (`httpx.get(..., verify=False)`, `httpx.stream(..., verify=False)`), so
+ anyone on the network path can serve the model.
+ 2. The archive is never checksummed -- it goes straight into
+ `zipfile.ZipFile(...).extractall(DATA_DIR)`, which is also not guarded
+ against path traversal.
+ 3. The GitHub API is called unauthenticated, sharing a 60-request/hour limit
+ with every other job on the runner's IP.
+ 4. It takes the FIRST release the API lists and that release's first `.zip`.
+ GitHub sorts releases by `created_at`, and `model-4/2025` and
+ `model-2/2026` carry an identical `created_at` (2025-03-22T11:41:12Z,
+ inherited from the tag's commit), so the tie breaks toward the lower id
+ and fpgen always lands on the 2025 model. The 2026 model is unreachable
+ through that path.
+
+So an unpinned Camoufox generates from an April-2025 corpus -- newest Firefox
+137, newest GPU an RTX 40 -- and cannot be talked into anything newer.
+
+This script puts the model named by scripts/data/fpgen-model.json where fpgen
+looks, with TLS verification on and the sha256 checked, before anything imports
+fpgen. fpgen then finds recent files and never calls the network.
+
+Locating the data directory must NOT import fpgen: importing is what triggers
+the download this script exists to prevent. importlib.util.find_spec() reads the
+module's origin without executing it.
+
+Usage:
+ python3 scripts/pin-fpgen-model.py # install if not already pinned
+ python3 scripts/pin-fpgen-model.py --check # verify only; non-zero if not pinned
+ python3 scripts/pin-fpgen-model.py --force # re-download and reinstall
+"""
+
+import argparse
+import hashlib
+import importlib.util
+import json
+import os
+import ssl
+import sys
+import tempfile
+import urllib.request
+import zipfile
+
+REPO = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
+SPEC = os.path.join(REPO, 'scripts', 'data', 'fpgen-model.json')
+STAMP = '.pinned-model'
+
+
+def load_spec():
+ with open(SPEC, encoding='utf-8') as fh:
+ return json.load(fh)
+
+
+def data_dir():
+ """fpgen's data directory, found WITHOUT importing fpgen."""
+ spec = importlib.util.find_spec('fpgen')
+ if spec is None or not spec.origin:
+ sys.exit('fpgen is not installed; `pip install -e pythonlib` first')
+ return os.path.join(os.path.dirname(spec.origin), 'data')
+
+
+def digest(path, chunk=1 << 20):
+ h = hashlib.sha256()
+ with open(path, 'rb') as fh:
+ for block in iter(lambda: fh.read(chunk), b''):
+ h.update(block)
+ return h.hexdigest()
+
+
+def is_pinned(spec, d):
+ """True when the pinned model is already in place."""
+ try:
+ with open(os.path.join(d, STAMP), encoding='utf-8') as fh:
+ if fh.read().strip() != spec['sha256']:
+ return False
+ except OSError:
+ return False
+ return all(os.path.exists(os.path.join(d, f)) for f in spec['files'])
+
+
+def download(spec, dest):
+ # Verification ON, unlike fpgen's own fetch. create_default_context()
+ # verifies the chain and the hostname.
+ ctx = ssl.create_default_context()
+ print(f'fetching {spec["url"]}', file=sys.stderr)
+ req = urllib.request.Request(spec['url'], headers={'User-Agent': 'camoufox-build'})
+ with urllib.request.urlopen(req, context=ctx, timeout=60) as r, open(dest, 'wb') as fh:
+ while chunk := r.read(1 << 20):
+ fh.write(chunk)
+ size = os.path.getsize(dest)
+ if spec.get('size') and size != spec['size']:
+ sys.exit(f'size mismatch: got {size}, expected {spec["size"]}')
+ got = digest(dest)
+ if got != spec['sha256']:
+ sys.exit(f'sha256 mismatch:\n got {got}\n expected {spec["sha256"]}')
+
+
+def install(spec, archive, d):
+ os.makedirs(d, exist_ok=True)
+ with zipfile.ZipFile(archive) as z:
+ # fpgen extracts without checking; do not copy that. A member escaping
+ # the data directory would write anywhere the build user can.
+ for name in z.namelist():
+ target = os.path.realpath(os.path.join(d, name))
+ if not target.startswith(os.path.realpath(d) + os.sep):
+ sys.exit(f'refusing to extract outside the data dir: {name}')
+ z.extractall(d)
+ # Written last: an interrupted extract leaves no stamp, so the next run
+ # reinstalls rather than trusting a partial model.
+ with open(os.path.join(d, STAMP), 'w', encoding='utf-8') as fh:
+ fh.write(spec['sha256'] + '\n')
+
+
+def main():
+ ap = argparse.ArgumentParser(description=__doc__,
+ formatter_class=argparse.RawDescriptionHelpFormatter)
+ ap.add_argument('--check', action='store_true', help='verify only; non-zero if not pinned')
+ ap.add_argument('--force', action='store_true', help='reinstall even if already pinned')
+ args = ap.parse_args()
+
+ spec = load_spec()
+ d = data_dir()
+
+ if args.check:
+ if is_pinned(spec, d):
+ print(f'OK: fpgen model pinned to {spec["tag"]}')
+ return 0
+ print(f'fpgen model is NOT pinned to {spec["tag"]}; run scripts/pin-fpgen-model.py',
+ file=sys.stderr)
+ return 1
+
+ if is_pinned(spec, d) and not args.force:
+ print(f'OK: fpgen model already pinned to {spec["tag"]}', file=sys.stderr)
+ return 0
+
+ with tempfile.TemporaryDirectory() as tmp:
+ archive = os.path.join(tmp, 'model-release.zip')
+ download(spec, archive)
+ install(spec, archive, d)
+ print(f'OK: pinned fpgen model {spec["tag"]} -> {d}', file=sys.stderr)
+ return 0
+
+
+if __name__ == '__main__':
+ raise SystemExit(main())
diff --git a/scripts/pref-diff.py b/scripts/pref-diff.py
new file mode 100644
index 000000000..ae0d87545
--- /dev/null
+++ b/scripts/pref-diff.py
@@ -0,0 +1,238 @@
+#!/usr/bin/env python3
+"""
+Audit Camoufox's pref overrides against a stock Firefox release.
+
+settings/camoufox.cfg sets ~375 prefs. A pref that changes page-observable
+behaviour is a fingerprint, and one that already matches stock is dead weight.
+Nothing until now said which was which.
+
+ python3 scripts/pref-diff.py --stock /path/to/firefox
+
+Reads every pref stock Firefox actually exposes (Marionette, chrome context),
+then reports each camoufox.cfg override as:
+
+ REDUNDANT same value stock already has -- the line can go
+ DEVIATION differs from stock -- the deviation surface, page-observable first
+ NEW stock does not carry this pref at all
+ LOCKED lockPref(), so a caller cannot put it back
+
+Scope: what camoufox.cfg sets. Prefs changed by policies.json, by a patch, or at
+launch by pythonlib are not covered -- `--camoufox BIN` adds a live diff of a
+built browser when Marionette is reachable on it, which is the wider check.
+
+`--json out.json` writes the full result.
+"""
+
+import argparse
+import json
+import re
+import subprocess
+import sys
+import tempfile
+from pathlib import Path
+
+REPO_ROOT = Path(__file__).resolve().parent.parent
+sys.path.insert(0, str(REPO_ROOT / "tests" / "patches"))
+from helpers import Marionette, free_port # noqa: E402
+
+CFG = REPO_ROOT / "settings" / "camoufox.cfg"
+
+DUMP_JS = """
+const out = {};
+const p = Services.prefs;
+for (const name of p.getChildList('')) {
+ let v = null;
+ try {
+ switch (p.getPrefType(name)) {
+ case p.PREF_BOOL: v = p.getBoolPref(name); break;
+ case p.PREF_INT: v = p.getIntPref(name); break;
+ case p.PREF_STRING: v = p.getStringPref(name); break;
+ default: v = null;
+ }
+ } catch (e) { v = ''; }
+ out[name] = v;
+}
+return out;
+"""
+
+# Prefixes a page can observe directly, or whose effect a page can measure. A
+# deviation here is a leak until argued otherwise; the rest still needs a human,
+# it is just lower priority.
+PAGE_OBSERVABLE = (
+ "dom.", "javascript.", "gfx.", "webgl.", "media.", "network.cookie.",
+ "network.http.", "privacy.", "intl.", "font.", "browser.display.",
+ "layout.", "ui.", "image.", "canvas.", "apz.", "general.", "widget.",
+ "security.", "browser.zoom.", "devtools.", "accessibility.", "fission.",
+ "browser.cache.", "browser.sessionhistory.", "print.", "svg.", "mathml.",
+)
+
+PREF_CALL = re.compile(
+ r'^\s*(?Pdefault[pP]ref|lock[pP]ref|sticky[pP]ref|clear[pP]ref|pref)\('
+ r'\s*"(?P[^"]+)"\s*(?:,\s*(?P.+?))?\s*\)\s*;'
+)
+
+
+def parse_literal(raw: str):
+ """A JS literal from camoufox.cfg as a Python value, or the raw text."""
+ if raw is None:
+ return None
+ raw = raw.strip()
+ if raw in ("true", "false"):
+ return raw == "true"
+ if re.fullmatch(r"-?\d+", raw):
+ return int(raw)
+ if len(raw) >= 2 and raw[0] == raw[-1] and raw[0] in "\"'":
+ return raw[1:-1]
+ return raw
+
+
+def cfg_overrides() -> list:
+ """Every pref camoufox.cfg sets: {name, value, kind, line}."""
+ rows = []
+ for n, line in enumerate(CFG.read_text(errors="replace").splitlines(), 1):
+ if line.lstrip().startswith("//"):
+ continue
+ m = PREF_CALL.match(line)
+ if m:
+ rows.append({
+ "pref": m.group("name"),
+ "value": parse_literal(m.group("value")),
+ "kind": m.group("kind"),
+ "line": n,
+ })
+ return rows
+
+
+def launcher_overrides() -> list:
+ """Every pref the launcher sets for one default identity.
+
+ camoufox.cfg is only half the pref surface a page meets: pythonlib adds its
+ own at launch (CAMOU_PREFS plus Playwright's firefoxUserPrefs), and those
+ are the ones that carry the identity. Values that come from a draw differ
+ per launch -- what this is for is the NAMES, and whether each one deviates
+ from stock at all.
+ """
+ sys.path.insert(0, str(REPO_ROOT / "pythonlib"))
+ from camoufox.utils import launch_options # noqa: PLC0415
+
+ options = launch_options(i_know_what_im_doing=True, headless=True)
+ prefs = options.get("firefox_user_prefs") or {}
+ return [
+ {"pref": name, "value": value, "kind": "launcher", "line": "launcher"}
+ for name, value in sorted(prefs.items())
+ ]
+
+
+def dump_prefs(binary: Path, timeout: float = 90) -> dict:
+ """Every pref this binary exposes, read in chrome context."""
+ port = free_port()
+ profile = tempfile.mkdtemp(prefix="prefdiff-")
+ Path(profile, "user.js").write_text(
+ f'user_pref("marionette.port", {port});\n'
+ 'user_pref("browser.shell.checkDefaultBrowser", false);\n'
+ 'user_pref("datareporting.policy.dataSubmissionPolicyBypassNotification", true);\n'
+ )
+ proc = subprocess.Popen(
+ [str(binary), "-headless", "--marionette", "--remote-allow-system-access",
+ "--no-remote", "--profile", profile, "about:blank"],
+ stdout=subprocess.DEVNULL, stderr=subprocess.DEVNULL,
+ )
+ try:
+ client = Marionette(port, timeout=timeout)
+ try:
+ return client.js(DUMP_JS)
+ finally:
+ client.close()
+ finally:
+ proc.kill()
+ proc.wait(timeout=10)
+
+
+def main() -> int:
+ ap = argparse.ArgumentParser()
+ ap.add_argument("--stock", required=True, type=Path, help="a stock Firefox binary")
+ ap.add_argument("--camoufox", type=Path, help="optional: live diff of a built browser")
+ ap.add_argument("--json", type=Path)
+ ap.add_argument("--show", choices=["deviation", "redundant", "new", "all"],
+ default="deviation")
+ ap.add_argument("--launcher", action="store_true",
+ help="also audit the prefs pythonlib sets at launch")
+ args = ap.parse_args()
+
+ overrides = cfg_overrides()
+ print(f"camoufox.cfg : {len(overrides)} pref calls")
+ if args.launcher:
+ launcher = launcher_overrides()
+ print(f"pythonlib : {len(launcher)} prefs at launch (one default identity)")
+ # The launcher is read last by the browser, so where both set a pref the
+ # launcher's value is the one a page meets.
+ cfg_only = [r for r in overrides if r["pref"] not in {l["pref"] for l in launcher}]
+ overrides = cfg_only + launcher
+ print(f"stock : {args.stock}")
+ stock = dump_prefs(args.stock)
+ print(f" {len(stock)} prefs readable\n")
+
+ rows = []
+ for row in overrides:
+ name, want = row["pref"], row["value"]
+ if row["kind"].lower() == "clearpref":
+ verdict = "CLEARED"
+ elif name not in stock:
+ verdict = "NEW"
+ elif stock[name] == want:
+ verdict = "REDUNDANT"
+ else:
+ verdict = "DEVIATION"
+ rows.append({
+ **row,
+ "stock": stock.get(name),
+ "verdict": verdict,
+ "page_observable": name.startswith(PAGE_OBSERVABLE),
+ "locked": row["kind"].lower() == "lockpref",
+ })
+
+ by = lambda v: [r for r in rows if r["verdict"] == v] # noqa: E731
+ deviations = by("DEVIATION")
+ observable = [r for r in deviations if r["page_observable"]]
+
+ print(f"REDUNDANT {len(by('REDUNDANT')):4} already stock's value; the line can go")
+ print(f"DEVIATION {len(deviations):4} differs from stock")
+ print(f" page-observable {len(observable):4} <- triage first")
+ print(f" other {len(deviations) - len(observable):4}")
+ print(f"NEW {len(by('NEW')):4} stock does not carry this pref")
+ print(f"CLEARED {len(by('CLEARED')):4}")
+ print(f"locked {sum(1 for r in rows if r['locked']):4} caller cannot override\n")
+
+ show = {"deviation": deviations, "redundant": by("REDUNDANT"),
+ "new": by("NEW"), "all": rows}[args.show]
+ if show:
+ order = sorted(show, key=lambda r: (not r["page_observable"], r["pref"]))
+ print(f"{'':2}{'pref':52} {'stock':>16} {'camoufox':>16} cfg")
+ for r in order:
+ mark = "!" if r["page_observable"] else " "
+ where = r["line"] if r["kind"] == "launcher" else f":{r['line']}"
+ print(f"{mark} {r['pref']:52} {str(r['stock'])[:16]:>16} "
+ f"{str(r['value'])[:16]:>16} {where}")
+
+ if args.camoufox:
+ print(f"\ncamoufox : {args.camoufox}")
+ try:
+ live = dump_prefs(args.camoufox)
+ except Exception as exc: # noqa: BLE001
+ print(f" live diff unavailable ({type(exc).__name__}); "
+ f"camoufox exposes Marionette only through its own launcher")
+ live = None
+ if live:
+ drift = [n for n in set(stock) & set(live) if stock[n] != live[n]]
+ known = {r["pref"] for r in rows}
+ print(f" {len(drift)} live differences, "
+ f"{len([n for n in drift if n not in known])} not from camoufox.cfg")
+
+ if args.json:
+ args.json.write_text(json.dumps(rows, indent=1) + "\n")
+ print(f"\nfull result -> {args.json}")
+ return 0
+
+
+if __name__ == "__main__":
+ sys.exit(main())
diff --git a/scripts/stage-fonts.sh b/scripts/stage-fonts.sh
index 69421b885..38b04480f 100755
--- a/scripts/stage-fonts.sh
+++ b/scripts/stage-fonts.sh
@@ -8,6 +8,14 @@
# content font, and every glyph renders as a tofu box. That is silent: the
# browser chrome still has system fonts, so only page content is affected.
#
+# What gets staged is the bundle's GROUP directories, not a copy per OS. The
+# bundle stores each face once under a directory named for the set of OSes that
+# use it (L, M, W, LM, LW, MW, LMW -- bundle/fonts/groups.json);
+# utils._generate_fontconfig reads groups.json at launch and hands fontconfig
+# only the groups the claimed OS may see. Staging the groups verbatim is what
+# lets that per-OS gate work against an unpackaged build too, exactly as it does
+# in a package.
+#
# Idempotent, and cheap enough to run before every launch.
set -e
@@ -26,12 +34,33 @@ if [ ! -d "$dist_bin" ]; then
exit 0 # nothing built yet
fi
+# The bundle is a release asset rather than repo content, so a fresh checkout
+# has no bundle/fonts/ at all. Say so with the command that fixes it instead of
+# failing inside cp. (The Makefile target depends on fonts-extract, so reaching
+# this means the script was run directly.)
+bundle_fonts="$repo_root/bundle/fonts"
+if [ ! -f "$bundle_fonts/groups.json" ]; then
+ echo "no font bundle at bundle/fonts/ -- run: make fonts-extract" >&2
+ exit 1
+fi
+
+if [ ! -f "$dist_bin/fonts/groups.json" ]; then
+ mkdir -p "$dist_bin/fonts"
+ # By name, not a wildcard: bundle/fonts/ also holds fetch-fonts.py's
+ # .bundle-sha256 bookkeeping file, which has no business in a browser's font
+ # directory. groups.json goes last, so an interrupted copy leaves no marker
+ # and the next run stages again instead of trusting a partial tree.
+ read -r -a groups <<<"$(python3 -c \
+ 'import json,sys; print(" ".join(json.load(open(sys.argv[1]))["groups"]))' \
+ "$bundle_fonts/groups.json")"
+ for g in "${groups[@]}"; do
+ cp -r "$bundle_fonts/$g" "$dist_bin/fonts/"
+ done
+ cp "$bundle_fonts/groups.json" "$dist_bin/fonts/groups.json"
+ echo "staged fonts/ (${#groups[@]} groups)"
+fi
+
for dir in linux macos windows; do
- if [ ! -d "$dist_bin/fonts/$dir" ]; then
- mkdir -p "$dist_bin/fonts"
- cp -r "$repo_root/bundle/fonts/$dir" "$dist_bin/fonts/"
- echo "staged fonts/$dir"
- fi
if [ ! -d "$dist_bin/fontconfig/$dir" ]; then
mkdir -p "$dist_bin/fontconfig"
cp -r "$repo_root/bundle/fontconfig/$dir" "$dist_bin/fontconfig/"
diff --git a/scripts/verify-fonts.py b/scripts/verify-fonts.py
new file mode 100755
index 000000000..150da0279
--- /dev/null
+++ b/scripts/verify-fonts.py
@@ -0,0 +1,418 @@
+#!/usr/bin/env python3
+"""Verify the font bundle, the per-OS fontconfig and fonts.json agree.
+
+The invariant this guards: every family the Python launcher can REPORT for an
+OS (pythonlib/camoufox/fonts.json[os], plus the essential / variant / marker
+constants in pythonlib/camoufox/fingerprints.py) is a family the packaged
+browser can RENDER under that OS's bundled fontconfig. A name that fails this
+is a reverse leak: the page is told the font exists and then measures the
+fallback.
+
+For each OS it
+ 1. generates a runtime fonts.conf the way pythonlib/camoufox/utils.py does
+ (the cwd-relative rewritten to an absolute bundle/fonts, which is the
+ Linux package layout: fonts/{linux,windows,macos} plus the browser's own
+ TwemojiMozilla.ttf) and runs fc-list against it;
+ 2. checks fonts.json[os] is a subset of what fc-list publishes, allowing the
+ alias names bundle/fontconfig//fonts.conf rewrites (checked with
+ fc-match: the alias must resolve to its bundled target);
+ 3. checks the CSS generics resolve to a family in fonts.json[os];
+ 4. checks every essential / variant / marker name is in fonts.json[os];
+ 5. draws _generate_random_font_subset a few times (when the camoufox package
+ imports) and checks each draw is inside fonts.json[os] and contains the
+ essentials and markers;
+ 6. checks scripts/package.py's flattening is safe: no basename collides
+ across the OS dirs that share a package, and no OS dir has subfolders;
+ 7. lists files over GitHub's 100 MB push limit (a warning, not a failure).
+
+Usage: python3 scripts/verify-fonts.py [--bundle bundle] [--cache DIR] [--quick]
+--quick skips the fc-list step (it builds a fontconfig cache over ~4 GB of
+fonts the first time, which takes a few minutes).
+Exit status is non-zero on any failure.
+"""
+import argparse
+import ast
+import glob
+import hashlib
+import json
+import os
+import re
+import subprocess
+import sys
+import tempfile
+
+REPO = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
+OSDIRS = {'win': 'windows', 'mac': 'macos', 'lin': 'linux'}
+GENERICS = ['sans-serif', 'serif', 'monospace', 'cursive', 'fantasy', 'system-ui']
+# Alias names each conf rewrites (pattern rules whose test is one of these).
+GIB = 1024 ** 3
+failures = []
+warnings = []
+
+
+def fail(msg):
+ failures.append(msg)
+ print('FAIL:', msg)
+
+
+def warn(msg):
+ warnings.append(msg)
+ print('WARN:', msg)
+
+
+def load_constants():
+ """Read the font constants from fingerprints.py without importing it."""
+ path = os.path.join(REPO, 'pythonlib', 'camoufox', 'fingerprints.py')
+ tree = ast.parse(open(path, encoding='utf-8').read())
+ consts = {}
+ for node in tree.body:
+ if isinstance(node, ast.Assign) and len(node.targets) == 1 and isinstance(node.targets[0], ast.Name):
+ name = node.targets[0].id
+ if 'FONTS' in name and name.startswith('_'):
+ consts[name] = ast.literal_eval(node.value)
+ return consts
+
+
+def conf_aliases(conf_text):
+ """(alias -> target) for every family rewrite."""
+ out = {}
+ for m in re.finditer(
+ r'\s*\s*([^<]+)\s*\s*'
+ r'\s*([^<]+)',
+ conf_text,
+ ):
+ out[m.group(1)] = m.group(2)
+ return out
+
+
+def conf_alias_elements(conf_text):
+ """Names rewritten by elements (stock 30-metric-aliases / urw-base35
+ style): family -> list of candidate targets, in preference order. Which
+ candidate wins depends on what is bundled, so the check accepts any
+ reportable candidate."""
+ out = {}
+ for m in re.finditer(r']*>\s*([^<]+)(.*?)', conf_text, re.S):
+ cands = re.findall(r'([^<]+)', m.group(2))
+ if cands:
+ out.setdefault(m.group(1), []).extend(cands)
+ return out
+
+
+def runtime_conf(os_key, scan_dirs, cache_dir, tmpdir):
+ """The conf this OS actually launches with.
+
+ `scan_dirs` must be the group directories this OS reads, NOT the bundle root:
+ fontconfig scans RECURSIVELY, so naming the root would let every OS
+ reach every other OS's faces and the per-OS gate would go unchecked -- which
+ is precisely what the group layout replaced the Windows reject globs with.
+ utils._generate_fontconfig emits one per group for the same reason.
+ """
+ src = os.path.join(REPO, 'bundle', 'fontconfig', OSDIRS[os_key], 'fonts.conf')
+ text = open(src, encoding='utf-8').read()
+ marker = 'fonts'
+ if marker not in text:
+ fail(f'{os_key}: fonts.conf lacks {marker} (utils._generate_fontconfig rewrites exactly that)')
+ dirs = ''.join(f'{d}' for d in scan_dirs)
+ text = text.replace(marker, dirs)
+ text = text.replace('fontconfig', f'{cache_dir}')
+ path = os.path.join(tmpdir, f'fonts-{os_key}.conf')
+ open(path, 'w', encoding='utf-8').write(text)
+ return path, text
+
+
+def fc_pattern(name):
+ # fc-match parses an unescaped '-' as the family/size separator, so
+ # "sans-serif" would query family "sans" and "system-ui" family "system".
+ return name.replace('\\', '\\\\').replace('-', '\\-').replace(':', '\\:')
+
+
+def fc(cmd, conf):
+ env = dict(os.environ, FONTCONFIG_FILE=conf)
+ env.pop('FONTCONFIG_PATH', None)
+ return subprocess.run(cmd, capture_output=True, text=True, env=env, check=True).stdout
+
+
+
+def require_bundle(bundle):
+ """The font bundle is a release asset; fail with the fix, not a stack trace."""
+ if os.path.isdir(bundle) and os.listdir(bundle):
+ return
+ sys.exit(
+ f'font bundle not present at {bundle}.\n'
+ f'It ships as a release asset rather than repo content (~2.1 GB); run:\n'
+ f' make fonts-extract\n'
+ f'See scripts/fetch-fonts.py for why it is not in git.'
+ )
+
+
+def main():
+ ap = argparse.ArgumentParser(description=__doc__, formatter_class=argparse.RawDescriptionHelpFormatter)
+ ap.add_argument('--bundle', default=os.path.join(REPO, 'bundle'))
+ ap.add_argument('--cache', default=None, help='fontconfig cache dir (default: a temp dir)')
+ ap.add_argument('--quick', action='store_true', help='skip fc-list / fc-match')
+ ap.add_argument('--draws', type=int, default=20)
+ args = ap.parse_args()
+ require_bundle(os.path.join(args.bundle, "fonts")
+ if not args.bundle.rstrip("/").endswith("fonts") else args.bundle)
+
+ fonts_root = os.path.abspath(os.path.join(args.bundle, 'fonts'))
+ fonts_json = json.load(open(os.path.join(REPO, 'pythonlib', 'camoufox', 'fonts.json'), encoding='utf-8'))
+ consts = load_constants()
+
+ # Browser-shipped fonts live beside the bundle in the package (fonts/ holds
+ # TwemojiMozilla.ttf from the Firefox build plus the per-OS subdirs).
+ extra_dirs = sorted({os.path.dirname(p) for p in glob.glob(os.path.join(REPO, 'camoufox-*', 'browser', 'fonts', 'TwemojiMozilla.ttf'))})[:1]
+ if not extra_dirs:
+ warn('no camoufox-*/browser/fonts/TwemojiMozilla.ttf found; "Twemoji Mozilla" is treated as browser-shipped')
+
+ # 6. bundle layout. Each face is stored ONCE, in a directory named for the
+ # set of OSes that use it (L, M, W, LM, LW, MW, LMW). An OS reads the
+ # groups its letter appears in; macOS and Windows packages flatten those
+ # groups into one directory, so basenames must not collide within a
+ # package's group set.
+ groups_file = os.path.join(fonts_root, 'groups.json')
+ if not os.path.exists(groups_file):
+ fail(f'{groups_file} is missing; run scripts/gen-font-groups.py')
+ read_by, groups = {}, []
+ else:
+ with open(groups_file, encoding='utf-8') as fh:
+ gj = json.load(fh)
+ read_by, groups = gj.get('readBy', {}), gj.get('groups', [])
+
+ names, digests = {}, {}
+ for g in groups:
+ d = os.path.join(fonts_root, g)
+ if not os.path.isdir(d) or not os.listdir(d):
+ fail(f'group {g}/ is missing or empty under {fonts_root}')
+ continue
+ names[g] = {}
+ for dp, _dn, fn in os.walk(d):
+ for f in fn:
+ if dp != d:
+ fail(f'{g}/{os.path.relpath(os.path.join(dp, f), d)} is in a subfolder; '
+ f'package.py flattens groups for macOS/Windows')
+ names[g].setdefault(f.lower(), []).append(f)
+ fp = os.path.join(dp, f)
+ size = os.path.getsize(fp)
+ if size > 100 * 1024 * 1024:
+ # Not a defect: it is why the bundle ships as a release asset
+ # (2 GB per file) instead of repo content (100 MiB per file).
+ # Reported so the constraint stays visible to anyone who
+ # proposes tracking the fonts in git again.
+ print(f"note: {g}/{f} is {size / 1024 / 1024:.1f} MiB -- over GitHub's "
+ f"100 MiB in-repo limit, within the 2 GB release-asset limit")
+ with open(fp, 'rb') as fh:
+ digests.setdefault(hashlib.sha256(fh.read()).hexdigest(), []).append(f'{g}/{f}')
+
+ dupes = {h: v for h, v in digests.items() if len(v) > 1}
+ if dupes:
+ sample = sorted(dupes.values())[:3]
+ fail(f'{len(dupes)} contents are stored more than once; the point of the group '
+ f'layout is one copy per face: {sample}')
+ elif digests:
+ print(f'OK: {len(digests)} faces, each stored exactly once')
+
+ # every OS must have somewhere to read from, and its flattened set must not clash
+ for os_key in ('win', 'mac', 'lin'):
+ gs = [g for g in read_by.get(os_key, []) if g in names]
+ if not gs:
+ fail(f'{os_key} reads no existing group')
+ continue
+ flat = {}
+ for g in gs:
+ for low in names[g]:
+ flat.setdefault(low, []).append(g)
+ clash = {k: v for k, v in flat.items() if len(v) > 1}
+ if clash:
+ fail(f'{os_key}: {len(clash)} basenames collide across {"+".join(gs)} '
+ f'(a flattened package would clobber): {sorted(clash)[:5]}')
+ else:
+ print(f'OK: {os_key} reads {"+".join(gs)} -- {len(flat)} files, no basename collisions')
+
+ with tempfile.TemporaryDirectory(prefix='camoufox-verify-fonts-') as tmp:
+ cache = args.cache or os.path.join(tmp, 'cache')
+ os.makedirs(cache, exist_ok=True)
+ for os_key, sub in OSDIRS.items():
+ print(f'\n== {os_key} ({sub}/)')
+ reportable = fonts_json[os_key]
+ if reportable != sorted(reportable) or len(set(reportable)) != len(reportable):
+ fail(f'{os_key}: fonts.json list is not sorted/unique')
+ rset = set(reportable)
+ scan = [os.path.join(fonts_root, g) for g in read_by.get(os_key, []) if g in names]
+ if not scan:
+ scan = [fonts_root] # pre-groups bundle; utils.py falls back the same way
+ conf, text = runtime_conf(os_key, [*scan, *extra_dirs], cache, tmp)
+ aliases = conf_aliases(text)
+ alias_elems = conf_alias_elements(text)
+
+ # 4. constants
+ suffix = {'win': 'WINDOWS', 'mac': 'MACOS', 'lin': 'LINUX'}[os_key]
+ essential = consts[f'_ESSENTIAL_FONTS_{suffix}']
+ markers = consts[f'_{suffix}_MARKER_FONTS']
+ prob, variant = consts[f'_BASE_VARIANT_FONTS_{suffix}']
+ for label, lst in (('essential', essential), ('marker', markers), ('variant', variant)):
+ missing = sorted(set(lst) - rset)
+ if missing:
+ fail(f'{os_key}: {label} names not in fonts.json: {missing}')
+ else:
+ print(f'OK: {len(lst)} {label} names all in fonts.json[{os_key}] ({len(reportable)})')
+ # A variant drawn with probability < 1 is a tier ON TOP of the base,
+ # so it must be disjoint from it. At probability 1 there is only one
+ # OS version left to spoof (Windows 10 was dropped 2026-09-22), the
+ # variant IS part of that base, and the overlap is correct -- it is
+ # then only used to subtract on a native host that lacks it.
+ if prob < 1.0 and set(essential) & set(variant):
+ fail(f'{os_key}: essential and variant overlap: {sorted(set(essential) & set(variant))}')
+ # An unconditional pattern rewrite whose TARGET is reportable makes the
+ # alias renderable for every identity, so the alias must be reported by
+ # every identity too (essential). Rewrites to an unbundled/unreported
+ # target are inert (the allowlist blocks the target) and only noted.
+ skip = {'MS Shell Dlg 2', 'MONO', 'mono', 'sans', 'sans serif', *GENERICS}
+ live = {a: t for a, t in aliases.items() if a not in skip and t in rset}
+ inert = sorted(a for a, t in aliases.items() if a not in skip and t not in rset)
+ not_always = sorted(set(live) - set(essential))
+ if not_always:
+ msg = (f'{os_key}: fonts.conf rewrites {not_always} unconditionally to a reportable target, '
+ f'so they render for every identity but are not always reported (_ESSENTIAL_FONTS_{suffix})')
+ # Renderable-but-unreported is the safe direction of the invariant;
+ # it is a hard failure only where the real OS reports the name
+ # (Windows: every box resolves the GDI substitutes; macOS: the TTC
+ # weight names are real families there).
+ (fail if os_key in ('win', 'mac') else warn)(msg)
+ elif live:
+ print(f'OK: {len(live)} live alias rewrites are all essential (always reported)')
+ if inert:
+ print(f'note: {len(inert)} alias rewrites are inert for {os_key} (target not reportable): {inert[:4]}...')
+
+ # 5. draws
+ sys.path.insert(0, os.path.join(REPO, 'pythonlib'))
+ try:
+ from camoufox.fingerprints import _generate_random_font_subset # noqa: E402
+ except Exception as e: # pragma: no cover - optional deps
+ warn(f'camoufox package not importable ({e.__class__.__name__}: {e}); skipping draw check')
+ else:
+ target = {'win': 'windows', 'mac': 'macos', 'lin': 'linux'}[os_key]
+ sizes = []
+ for _ in range(args.draws):
+ draw = _generate_random_font_subset(target)
+ sizes.append(len(draw))
+ if len(set(draw)) != len(draw):
+ fail(f'{os_key}: draw has duplicates')
+ extra = sorted(set(draw) - rset)
+ if extra:
+ fail(f'{os_key}: draw reports names outside fonts.json: {extra[:5]}')
+ missing = sorted((set(essential) | set(markers)) - set(draw))
+ if missing:
+ fail(f'{os_key}: draw lacks essential/marker names: {missing[:5]}')
+ vs = set(variant) & set(draw)
+ if vs and vs != set(variant):
+ fail(f'{os_key}: variant drawn partially: {sorted(vs)}')
+ print(f'OK: {args.draws} draws inside fonts.json; sizes {min(sizes)}..{max(sizes)} of {len(reportable)} (base {len(essential)})')
+
+ if args.quick:
+ continue
+
+ # 1./2. fc-list
+ out = fc(['fc-list', '--format', '%{family}\n'], conf)
+ published = set()
+ for line in out.splitlines():
+ for fam in line.split(','):
+ fam = fam.strip()
+ if fam:
+ published.add(fam)
+ pub_lower = {f.lower() for f in published}
+ print(f'fc-list publishes {len(published)} families under the {os_key} conf')
+
+ # 2b. the group gate itself. Everything above only proves an OS can
+ # render what it reports; this proves it CANNOT reach what it must
+ # not. That direction is invisible to fonts.json and to the draw
+ # tests, and it is the whole reason the groups exist: a face is
+ # kept out of an identity's reach by not being in a group that
+ # identity reads. If the root leaked in, an emoji or CJK glyph
+ # could fall back to Segoe UI Emoji / PingFang on a machine
+ # claiming Linux -- a leak no reported name would reveal.
+ allowed = {os.path.realpath(d) for d in [*scan, *extra_dirs]}
+ scanned = {line.strip() for line in
+ fc(['fc-list', '--format', '%{file}\n'], conf).splitlines() if line.strip()}
+ stray = sorted(f for f in scanned
+ if os.path.realpath(os.path.dirname(f)) not in allowed)
+ if stray:
+ fail(f'{os_key}: fontconfig reaches {len(stray)} faces outside the groups '
+ f'{os_key} reads -- they are glyph-fallback candidates for this '
+ f'identity: {[os.path.relpath(f, fonts_root) for f in stray[:5]]}')
+ else:
+ print(f'OK: {len(scanned)} faces reachable, all inside '
+ f'{"+".join(g for g in read_by.get(os_key, []) if g in names) or "fonts/"}')
+ unrenderable = [f for f in reportable if f.lower() not in pub_lower]
+ resolved = []
+ for name in list(unrenderable):
+ if name in aliases:
+ got = fc(['fc-match', '--format', '%{family}\n', fc_pattern(name)], conf).split(',')[0].strip()
+ if got.lower() == aliases[name].lower() and aliases[name] in rset:
+ resolved.append((name, got))
+ unrenderable.remove(name)
+ else:
+ fail(f'{os_key}: alias {name} resolves to {got!r}, expected {aliases[name]!r} (must be in fonts.json)')
+ elif name in alias_elems:
+ got = fc(['fc-match', '--format', '%{family}\n', fc_pattern(name)], conf).split(',')[0].strip()
+ if got.lower() != name.lower() and got in rset:
+ resolved.append((name, got))
+ unrenderable.remove(name)
+ else:
+ fail(f'{os_key}: {name} resolves to {got!r}, not a reportable candidate of {alias_elems[name][:3]}')
+ elif name == 'Twemoji Mozilla' and not extra_dirs:
+ unrenderable.remove(name) # browser-shipped; see warning above
+ if unrenderable:
+ fail(f'{os_key}: {len(unrenderable)} fonts.json names fc-list does not publish: {unrenderable[:10]}')
+ else:
+ print(f'OK: all {len(reportable)} fonts.json[{os_key}] names are published or alias-resolved ({len(resolved)} aliases)')
+ for name, got in resolved:
+ print(f' alias {name} -> {got}')
+ unreported = sorted(published - rset)
+ print(f'note: {len(unreported)} published families are not reportable (pruned by the allowlist)')
+
+ # 3. generics (+ the Windows dialog family)
+ for g in GENERICS + (['MS Shell Dlg 2'] if os_key == 'win' else []):
+ got = fc(['fc-match', '--format', '%{family}\n', fc_pattern(g)], conf).split(',')[0].strip()
+ if got in rset:
+ print(f'OK: {g} -> {got}')
+ elif g == 'system-ui':
+ # Gecko resolves system-ui itself (the platform UI font /
+ # font.name-list.system-ui); the fontconfig rule is advisory.
+ print(f'note: {g} -> {got!r} (not reportable; Gecko resolves system-ui itself)')
+ else:
+ fail(f'{os_key}: {g} resolves to {got!r}, which is not in fonts.json[{os_key}]')
+ # rejects and scan-time families in the windows conf
+ if os_key == 'win':
+ for fam in ('Sitka Small', 'Segoe UI Variable Text'):
+ if fam.lower() not in pub_lower:
+ fail(f'win: scan-time family {fam} not published (check the block)')
+ else:
+ print(f'OK: scan-time family {fam} published')
+ rejected = re.findall(r'\*/fonts/windows/([^<]+)', text)
+ if rejected:
+ files = set()
+ for g in read_by.get('win', []):
+ gd = os.path.join(fonts_root, g)
+ if os.path.isdir(gd):
+ files |= set(os.listdir(gd))
+ dangling = [r for r in rejected if r not in files]
+ if dangling:
+ warn(f'win: {len(dangling)} reject globs name files not in any Windows group: {dangling[:5]}')
+ for r in []:
+ if '[' in r:
+ warn(f'win: reject glob {r!r} contains [ ] which fontconfig treats as a character class')
+
+ print()
+ for w in warnings:
+ print('WARN:', w)
+ if failures:
+ print(f'\n{len(failures)} FAILURE(S)')
+ for f_ in failures:
+ print(' -', f_)
+ sys.exit(1)
+ print('\nALL CHECKS PASSED')
+
+
+if __name__ == '__main__':
+ main()
diff --git a/service-tester/README.md b/service-tester/README.md
index fddf1ea15..abe8afeb6 100644
--- a/service-tester/README.md
+++ b/service-tester/README.md
@@ -102,7 +102,7 @@ python run_tests.py [options]
6 browser contexts run simultaneously — 3 macOS profiles and 3 Linux profiles — each with:
-- A unique fingerprint generated by camoufox via BrowserForge (navigator, screen, WebGL, fonts, voices, audio/canvas seeds)
+- A unique fingerprint generated by camoufox via fpgen (navigator, screen, WebGL, fonts, voices, audio/canvas seeds)
- A distinct timezone
- Its own proxy, with WebRTC ICE candidates spoofed to the proxy's IP
diff --git a/settings/camoucfg.jvv b/settings/camoucfg.jvv
index 5eb520663..5dfa791dd 100644
--- a/settings/camoucfg.jvv
+++ b/settings/camoucfg.jvv
@@ -88,6 +88,12 @@
"mediaDevices:webcams": "int[>=0]",
"mediaDevices:speakers": "int[>=0]",
"mediaDevices:enabled": "bool",
+ "mediaDevices:microphoneLabels": "array[str]",
+ "mediaDevices:microphoneGroups": "array[str]",
+ "mediaDevices:webcamLabels": "array[str]",
+ "mediaDevices:webcamGroups": "array[str]",
+ "mediaDevices:speakerLabels": "array[str]",
+ "mediaDevices:speakerGroups": "array[str]",
"media:spoof_codecs": "bool",
"webGl:renderer$__WEBGL": "str",
diff --git a/settings/camoufox.cfg b/settings/camoufox.cfg
index 52217292c..65c4e110e 100644
--- a/settings/camoufox.cfg
+++ b/settings/camoufox.cfg
@@ -2,8 +2,13 @@
// CAMOUFOX FUNCTIONALITY
// =================================================================
-// Use dark theme
-defaultPref("extensions.activeThemeID", "firefox-compact-dark@mozilla.org");
+// Theme: stock default ("System theme — auto"). The former forced
+// "firefox-compact-dark" is a lightweight theme: :root[lwtheme] removes the
+// 1 px nav-bar separator, so the chrome was 85 px tall where every stock
+// Firefox on the same host measures 86 (outerHeight - innerHeight,
+// mozInnerScreenY), and the theme is applied asynchronously after the first
+// window, so a page open during startup saw the viewport resize by 1 px.
+// Measured 2026-09-14 against stock 153 headless on Linux.
// Allow remote
defaultPref("devtools.debugger.remote-enabled", true);
@@ -84,7 +89,10 @@ defaultPref("fission.autostart", true);
defaultPref("fission.webContentIsolationStrategy", 0);
// Use dark theme by default
-defaultPref("ui.systemUsesDarkTheme", 1);
+// Colour scheme follows the host like stock Firefox: pinning
+// ui.systemUsesDarkTheme made prefers-color-scheme disagree with a dark
+// desktop (measured on Windows 11, 2026-09-14). Spoof it per identity through
+// the launcher instead when the identity is not the host.
// Enable PDFJS
defaultPref("pdfjs.disabled", false);
@@ -130,9 +138,8 @@ defaultPref("browser.device-migration.help-menu.hidden", true);
// Theme adjustments
defaultPref("toolkit.legacyUserProfileCustomizations.stylesheets", true); // Enable userChrome/userContent
-defaultPref("browser.display.focus_ring_on_anything", true); // Remove focus indicator for links
-defaultPref("browser.display.focus_ring_style", 0);
-defaultPref("browser.display.focus_ring_width", 0);
+// Focus rings: Firefox defaults (the custom ring prefs changed :focus-visible
+// rendering, which is page-measurable).
// Cookie banners (commented out since uBlock covers this)
// defaultPref("cookiebanners.service.mode", 2); // Reject cookie banners if possible
@@ -176,9 +183,11 @@ defaultPref("browser.urlbar.autoFill.adaptiveHistory.enabled", false);
defaultPref("browser.urlbar.maxRichResults", 0); // Disable URL bar dropdown results
// Autoplay
-defaultPref("media.autoplay.default", 0); // Allow autoplay
-defaultPref("media.block-autoplay-until-in-foreground", true);
-defaultPref("media.autoplay.blocking_policy", 0);
+// Autoplay: Firefox defaults (block audible autoplay until user activation).
+// Forcing autoplay on made HTMLMediaElement.getAutoplayPolicy() report
+// "allowed"/"allowed" where every stock Firefox says "allowed-muted"/"disallowed"
+// (measured on all three OSes, 2026-09-14). Scripts that need autoplay get it
+// the way a user does: after a trusted click.
// Startup/New Tab
defaultPref("browser.startup.page", 0); // Show blank page on startup
@@ -224,7 +233,6 @@ defaultPref("extensions.pocket.showHome", false);
defaultPref("identity.fxaccounts.enabled", false);
defaultPref("findbar.highlightAll", false);
defaultPref("layout.word_select.eat_space_to_next_word", false);
-defaultPref("privacy.popups.showBrowserMessage", false);
defaultPref("browser.tabs.cardPreview.enabled", false);
defaultPref("browser.backspace_action", 2);
defaultPref("reader.parse-on-load.enabled", false);
@@ -327,10 +335,14 @@ defaultPref("captivedetect.canonicalURL", "");
// defaultPref("image.mem.decode_bytes_at_a_time", 16384); // default=16384; alt=65536; chunk size for calls to the image decoders
// defaultPref("media.memory_cache_max_size", 8192); // default=8192; AF=65536; alt=131072
-// Disable DNS prefetching
-defaultPref("network.dns.disablePrefetch", true);
-defaultPref("network.dns.disablePrefetchFromHTTPS", true); // (FF127+ false)
-defaultPref("network.prefetch-next", false);
+// Speculative loading stays at Firefox's defaults. `` is
+// page-readable: the prefetch is a real request, so it lands in the document's
+// own PerformanceResourceTiming entries. Measured 2026-09-18 against stock
+// 152.0.4 on the same host -- stock reported the entry (initiatorType "other",
+// transferSize 200300), camoufox reported none, from three lines of page JS
+// with no gesture and no permission. dns-prefetch is not directly readable but
+// belongs to the same speculative surface (see also
+// network.http.speculative-parallel-limit, restored for rel=preconnect).
defaultPref("network.predictor.enabled", false);
defaultPref("browser.preferences.defaultPerformanceSettings.enabled", false);
@@ -358,6 +370,11 @@ defaultPref("browser.sessionstore.upgradeBackup.maxUpgradeBackups", 0);
// no-op (#326, #196). Keep Firefox's stock default so the value, and its growth
// across navigations, matches a real browser.
defaultPref("browser.sessionhistory.max_entries", 50);
+// At 0 the page is never kept alive across a navigation, so `pageshow.persisted`
+// reads false where stock's reads true. That difference is real and page-visible
+// (LEAKS row 106) and stays for now: juggler cannot report a bfcache restore, so
+// enabling it breaks page.go_back(). Paired with docShell.disallowBFCache in
+// juggler/content/main.js, which is what actually enforces it.
defaultPref("browser.sessionhistory.max_total_viewers", 0);
defaultPref("browser.fullscreen.autohide", false);
@@ -495,14 +512,18 @@ defaultPref("datareporting.policy.dataSubmissionPolicyBypassNotification", true)
// This preference breaks our authentication flow.
defaultPref("network.auth.use_redirect_for_retries", false);
-// Disable BFCache in parent process.
-// We also separately disable BFCache in content via docSchell property.
+// Disable BFCache in the parent process; the content side is
+// docShell.disallowBFCache in juggler/content/main.js. Both are a deviation from
+// stock that a page can read (LEAKS row 106) -- see the note there for why they
+// are still here.
defaultPref("fission.bfcacheInParent", false);
-// Disable first-party-based cookie partitioning.
-// When it is enabled, we have to retain "thirdPartyCookie^" permissions
-// in the storageState.
-defaultPref("network.cookie.cookieBehavior", 4);
+// network.cookie.cookieBehavior stays at Firefox's default (5, dynamic
+// first-party isolation). Playwright sets 4 so storageState need not carry
+// "thirdPartyCookie^" permissions, but a cross-site iframe can read the
+// difference: document.hasStorageAccess() resolves true and first-party
+// cookies/localStorage are visible inside the frame, where stock Firefox
+// partitions them.
// Increase max number of child web processes so that new pages
// get a new process by default and we have a process isolation
@@ -540,8 +561,18 @@ defaultPref("browser.tabs.warnOnOpen", false);
// Do not warn on quitting Firefox
defaultPref("browser.warnOnQuit", false);
-// Disable popup-blocker
-defaultPref("dom.disable_open_during_load", false);
+// Popup blocker: Firefox's default (ON), unlike Playwright and geckodriver,
+// which both ship it off. With it off, a page that calls window.open() without
+// user activation gets a window where stock gets null -- one bit, one line of
+// JS, no permission and nothing the page has to wait for.
+//
+// The reason it used to be off is that turning it on takes window.open() from
+// page.evaluate() with it (null, ~35 upstream tests). That is now handled
+// where it belongs: juggler lifts the blocker for the docShell only while an
+// explicit Runtime.evaluate/callFunction is on the stack
+// (nsIDocShell.driverPopupsAllowed, patches/popup-blocker-parity.patch), which
+// grants no user activation and is invisible to page script.
+// defaultPref("dom.disable_open_during_load", false); // removed: stock is true
// Disable the ProcessHangMonitor
defaultPref("dom.ipc.reportProcessHangs", false);
@@ -550,10 +581,13 @@ defaultPref("hangmonitor.timeout", 0);
// Allow the application to have focus even it runs in the background
defaultPref("focusmanager.testmode", true);
-// No ICC color correction. We need this for reproducible screenshots.
-// See https://developer.mozilla.org/en/docs/Mozilla/Firefox/Releases/3.5/ICC_color_correction_in_Firefox.
-defaultPref("gfx.color_management.mode", 0);
-defaultPref("gfx.color_management.rendering_intent", 3);
+// ICC colour management: keep Firefox's defaults (mode 2 = tagged images,
+// rendering_intent 0). Playwright's test profile turns it off for reproducible
+// screenshots, and this file used to copy that -- but it is page-readable: draw a
+// PNG carrying a wide-gamut ICC profile onto a canvas and read a pixel. Stock
+// 152.0.4 converts ROMM-tagged (200,50,50) to (255,0,62); with mode 0 it stays
+// (200,50,50), identical to the untagged image, which no default Firefox does
+// (all OSes).
// Always use network provider for geolocation tests so we bypass the
// macOS dialog raised by the corelocation provider
@@ -598,7 +632,11 @@ defaultPref("toolkit.shutdown.fastShutdownStage", 3);
defaultPref("prompts.contentPromptSubDialog", false);
// Do not use system colors - they are affected by themes.
-defaultPref("ui.use_standins_for_native_colors", true);
+// System colours are the host's real ones, as in stock Firefox. The standins
+// replaced Highlight/SelectedItem/-moz-Dialog/AccentColor... with Firefox's
+// built-in palette (rgb(51,153,255) etc.), which no stock desktop shows
+// (measured on all three OSes, 2026-09-14).
+defaultPref("ui.use_standins_for_native_colors", false);
// Turn off the Push service.
defaultPref("dom.push.serverURL", "");
@@ -751,7 +789,16 @@ defaultPref("geo.wifi.scan", false);
defaultPref("javascript.options.showInConsole", true);
// Disable download and usage of OpenH264: and Widevine plugins
-defaultPref("media.gmp-manager.updateEnabled", false);
+// Gecko Media Plugins (OpenH264, Widevine) download on first run in stock
+// Firefox; with updates disabled RTCRtpReceiver.getCapabilities() never lists
+// H264 (#713) and requestMediaKeySystemAccess("com.widevine.alpha") never
+// resolves, while stock Windows/macOS grant it (measured 2026-09-14).
+defaultPref("media.gmp-manager.updateEnabled", true);
+
+// media.navigator.permission.fake stays off, as in stock Firefox: it is
+// page-readable (getUserMedia({fake: true}) prompts and never resolves instead
+// of resolving at once). The identity's devices count as real hardware in
+// media-device-spoofing.patch instead (prompt, sharing indicator, labels).
// Do not prompt with long usernames or passwords in URLs
defaultPref("network.http.phishy-userpass-length", 255);
@@ -759,9 +806,9 @@ defaultPref("network.http.phishy-userpass-length", 255);
// Do not prompt for temporary redirects
defaultPref("network.http.prompt-temp-redirect", false);
-// Disable speculative connections so they are not reported as leaking
-// when they are hanging around
-defaultPref("network.http.speculative-parallel-limit", 0);
+// network.http.speculative-parallel-limit stays at Firefox's default:
+// Playwright's 0 turns into a no-op, which Resource
+// Timing shows (a full handshake where stock has connectStart == connectEnd).
// Do not automatically switch between offline and online
defaultPref("network.manage-offline-status", false);
@@ -819,3 +866,42 @@ defaultPref("layout.spellcheckDefault", 0);
// enabled (Firefox 146 default), simple HTTP proxies (CONNECT-only) like the
// Playwright test fixture break. Stock Playwright Firefox builds disable this.
defaultPref("dom.security.https_first", false);
+
+// Storage quota is deliberately NOT pinned here. navigator.storage.estimate()
+// .quota is min(disk capacity / 10, 10 GiB) and a fixed limit of 50 GiB -- the
+// value this used to set -- is both a constant on every host and exactly
+// nsRFPService::GetSpoofedStorageLimit(). The launcher derives the limit from
+// the host's own disk instead (pythonlib utils._stock_profile_disk_capacity_kb),
+// so a bare launch keeps Gecko's own measurement.
+
+// Camoufox: the launcher's per-identity prefs (pythonlib firefox_user_prefs),
+// applied at STARTUP. Playwright's non-persistent launch writes no user.js and
+// only sends these through juggler's Browser.enable after startup, so a pref
+// Gecko reads while starting up raced or never applied (intl.locale.requested vs
+// the parent's pre-created string bundles; mirror-once prefs). Read last so an
+// identity pref overrides a default above; Browser.enable later re-sets the same
+// values, which is a no-op. See pythonlib utils.get_pref_env_vars.
+(function () {
+ let raw = "";
+ for (let i = 1; ; i++) {
+ const part = getenv("CAMOU_PREFS_" + i);
+ if (!part) {
+ break;
+ }
+ raw += part;
+ }
+ if (!raw) {
+ return;
+ }
+ let prefs;
+ try {
+ prefs = JSON.parse(raw);
+ } catch (e) {
+ return;
+ }
+ for (const name of Object.keys(prefs)) {
+ try {
+ defaultPref(name, prefs[name]);
+ } catch (e) {}
+ }
+})();
diff --git a/settings/chrome.css b/settings/chrome.css
index cc9174730..f1fd99b82 100644
--- a/settings/chrome.css
+++ b/settings/chrome.css
@@ -1,173 +1,11 @@
/*
- Minimalistic theme
- Based on https://github.com/Jamir-boop/minimalisticfox
+ Camoufox chrome stylesheet.
+
+ The former "minimalistic theme" shrank the tab strip to 25 px and the
+ nav-bar to 30 px, which made the window chrome ~55 CSS px tall. A page can
+ measure that (outerHeight - innerHeight, mozInnerScreenY) and every stock
+ Firefox shows ~85-90 px on Windows/GNOME; the presets camoufox draws its
+ outer/inner sizes from also come from stock chrome. Keep the UI at stock
+ size so the geometry the page sees is coherent with a real browser
+ (measured 2026-09-14: 55/57 vs 86/90).
*/
-
-:root {
- --tab-block-margin: 0 !important;
-}
-.tabbrowser-tab {
- padding-inline: 0 !important;
- max-height: 30px !important;
-}
-.tab-context-line {
- display: none !important;
-}
-*/ .tab-background {
- /* border-block: 2px solid var(--identity-icon-color,transparent) !important; */
- border-radius: 0px !important;
- max-height: 30px !important;
-}
-
-/* Disable tab dragging and use it for window movement */
-#TabsToolbar {
- -moz-window-dragging: drag !important;
-}
-
-.tabbrowser-tab {
- -moz-window-dragging: inherit !important;
-}
-
-.tab-content {
- pointer-events: none !important;
-}
-
-/* Tab and url height */
-
-:root {
- --tab-min-height: 25px !important;
- --tab-max-height: 25px !important;
- --toolbar-field-focus-border-color: transparent !important;
-}
-
-#navigator-toolbox :-moz-any(#nav-bar) {
- min-height: 30px !important;
- max-height: 30px !important;
- margin-top: 0px !important;
- z-index: 5 !important;
-}
-
-/* fix urlbar being too high in ff 74 */
-* {
- --urlbar-toolbar-height: 30px !important;
-}
-
-/* Center tab icons */
-.tab-background {
- min-height: 0 !important;
-}
-.tabbrowser-tab[fadein] {
- max-width: 100% !important;
-}
-.tab-text {
- margin: 0 auto !important;
-}
-
-/* Center tab icon */
-.tab-icon-stack {
- margin-inline-start: auto;
-}
-.tab-label-container {
- max-width: min-content;
- margin-inline-end: auto;
-}
-
-/* Window handles */
-.titlebar-spacer[type="pre-tabs"] {
- width: 100px !important;
-}
-
-.titlebar-buttonbox-container {
- width: 100px !important;
- display: flex !important;
- justify-content: flex-end !important;
-}
-
-.titlebar-spacer[type="post-tabs"] {
- width: 0px !important;
-}
-
-/* Keeps the .titlebar-spacer[type="pre-tabs"] and [type="post-tabs"] consistent in all window sizes */
-:root:not([sizemode="normal"]) .titlebar-spacer[type="pre-tabs"] {
- display: block !important;
-}
-@media (max-width: 500px) {
- .titlebar-spacer[type="post-tabs"] {
- display: block !important;
- }
-}
-
-/* Deactivating close, minimize and maximize buttons */
-.tab-close-button,
-#TabsToolbar .toolbarbutton-1 {
- display: none !important;
-}
-
-/* Context menu */
-menupopup,
-panel {
- --panel-border-radius: 0px !important;
-}
-
-/* Set menu popups to black on dark mode */
-@media (prefers-color-scheme: dark) {
- menupopup,
- panel {
- --panel-background: black !important;
- }
-}
-
-/*
- * Items inside menu
- * menu, menuitem:where([_moz-menuactive]:not([disabled="true"])){
- * background-color: #242429 !important;
- * }
- */
-
-#nav-bar toolbarspring {
- min-width: 0px !important;
- max-width: 0px !important;
-}
-
-/* Make URL bar black when not focused */
-#urlbar-container {
- --urlbar-container-height: 30px !important;
-}
-
-#urlbar {
- --urlbar-height: 30px !important;
- --urlbar-toolbar-height: 30px !important;
- min-height: 30px !important;
- max-height: 30px !important;
-}
-
-#urlbar:not(:focus-within):not([open]) > #urlbar-background {
- background-color: transparent !important;
- border: none !important;
-}
-
-#urlbar:not(:focus-within):not([open]) .urlbar-icon:not([open]) {
- fill: white !important;
- fill-opacity: 0.6 !important;
-}
-
-/* Make tab background transparent when focused */
-.tabbrowser-tab[selected="true"] .tab-background {
- background-color: transparent !important;
- outline: none !important;
- box-shadow: none !important;
-}
-
-/* Cleanup menu bar */
-#tracking-protection-icon-container,
-#tab-notification-deck,
-#star-button-box,
-#urlbar-go-button,
-#unified-extensions-button,
-.customize-context-pinToToolbar,
-#PersonalToolbar,
-toolbar#nav-bar > .titlebar-buttonbox-container,
-toolbar#nav-bar > .titlebar-spacer,
-#appMenu-library-remotetabs-button {
- display: none !important;
-}
diff --git a/settings/distribution/policies.json b/settings/distribution/policies.json
index 292ef4288..b5ec1e366 100644
--- a/settings/distribution/policies.json
+++ b/settings/distribution/policies.json
@@ -20,7 +20,6 @@
"DontCheckDefaultBrowser": true,
"DisableFirefoxAccounts": true,
"DisableFormHistory": true,
- "HardwareAcceleration": false,
"WindowsSSO": false,
"PasswordManagerEnabled": false,
"OfferToSaveLogins": false,
diff --git a/settings/properties.json b/settings/properties.json
index 81f4ded52..f51b27a64 100644
--- a/settings/properties.json
+++ b/settings/properties.json
@@ -97,6 +97,12 @@
{ "property": "mediaDevices:webcams", "type": "uint" },
{ "property": "mediaDevices:speakers", "type": "uint" },
{ "property": "mediaDevices:enabled", "type": "bool" },
+ { "property": "mediaDevices:microphoneLabels", "type": "array" },
+ { "property": "mediaDevices:microphoneGroups", "type": "array" },
+ { "property": "mediaDevices:webcamLabels", "type": "array" },
+ { "property": "mediaDevices:webcamGroups", "type": "array" },
+ { "property": "mediaDevices:speakerLabels", "type": "array" },
+ { "property": "mediaDevices:speakerGroups", "type": "array" },
{ "property": "media:spoof_codecs", "type": "bool" },
{ "property": "allowMainWorld", "type": "bool" },
{ "property": "disableWorldIsolation", "type": "bool" },
diff --git a/tests/patches/config-overrides.py b/tests/patches/config-overrides.py
index 46df3a121..2c51b62a4 100644
--- a/tests/patches/config-overrides.py
+++ b/tests/patches/config-overrides.py
@@ -82,16 +82,25 @@ async def test():
else:
raise RuntimeError("Could not find a valid preset") from last_error
- # --- Test 2: without config_overrides, seed is non-zero ---
- print("\n=== Test 2: default (no overrides) gets non-zero seed ===")
+ # --- Test 2: without config_overrides, the perturbation is OFF (seed 0) ---
+ # Glyph-advance perturbation moves every measured text width off the value
+ # the same font gives on a real machine, so the default is 0; an explicit
+ # non-zero seed must still be honoured (opt-in).
+ print("\n=== Test 2: default (no overrides) seed is 0, explicit seed honoured ===")
preset2 = get_random_preset(os="macos")
fp2 = generate_context_fingerprint(preset=preset2)
seed2 = fp2["config"]["fonts:spacing_seed"]
- if seed2 != 0:
- print(f" Default seed is {seed2} (non-zero): PASS")
+ if seed2 == 0:
+ print(" Default seed is 0 (perturbation off): PASS")
else:
- failures.append("Default seed is 0 — should be random non-zero")
- print(f" Default seed is 0: FAIL")
+ failures.append(f"Default seed is {seed2} — should be 0 (perturbation off by default)")
+ print(f" Default seed is {seed2}: FAIL")
+ fp2b = generate_context_fingerprint(preset=preset2, config_overrides={"fonts:spacing_seed": 12345})
+ if fp2b["config"]["fonts:spacing_seed"] == 12345:
+ print(" Explicit seed 12345 honoured: PASS")
+ else:
+ failures.append("Explicit fonts:spacing_seed override was not honoured")
+ print(" Explicit seed override: FAIL")
# --- Test 3: init_script contains setFontSpacingSeed(0) when overridden ---
print("\n=== Test 3: init_script emits setFontSpacingSeed(0) ===")
diff --git a/tests/patches/contentaccessible-parity.py b/tests/patches/contentaccessible-parity.py
new file mode 100644
index 000000000..df38389a4
--- /dev/null
+++ b/tests/patches/contentaccessible-parity.py
@@ -0,0 +1,232 @@
+r"""
+Camoufox must expose web content the same files a stock Firefox release does.
+
+Twelve chrome/resource packages are flagged `contentaccessible=yes`. Any page,
+from any origin, can load their files as subresources -- ALLOW_CHROME in
+caps/nsScriptSecurityManager.cpp checks the target package's flag and never the
+source -- so a file Camoufox adds or drops there is a one-line build tell:
+
+ const s = document.createElement('script');
+ s.onload = () => BUILD_IS_NOT_STOCK;
+ s.src = 'chrome://browser/content/browser-development-helpers.js';
+
+Two checks. The file set of every package is diffed against
+scripts/data/contentaccessible-manifest.json (recorded from a stock release by
+scripts/gen-contentaccessible-manifest.py). Then a page actually loads a sample,
+so the static diff cannot pass while the surface is really different.
+
+ python tests/patches/contentaccessible-parity.py
+"""
+
+import json
+import re
+import subprocess
+import sys
+from pathlib import Path
+
+# The live probe drives a real browser, and a wedged launch would otherwise hang
+# the whole patch-guard run. Fail loudly instead.
+LIVE_TIMEOUT_S = 180
+
+sys.path.insert(0, str(Path(__file__).resolve().parent))
+from helpers import resolve_binary # noqa: E402
+
+REPO_ROOT = Path(__file__).resolve().parent.parent.parent
+MANIFEST = REPO_ROOT / "scripts" / "data" / "contentaccessible-manifest.json"
+
+# Loaded from a page and asserted against stock Firefox 152.0.4. Each entry is
+# (url, must_load). Regenerate by running the same probe against a stock build.
+LIVE_PROBES = [
+ ("chrome://global/content/aboutSupport.js", True),
+ ("chrome://global/content/crashes.js", True),
+ ("chrome://browser/content/browser-init.js", True),
+ ("chrome://browser/content/browser-development-helpers.js", False),
+ ("chrome://browser/content/does-not-exist-control.js", False),
+]
+
+PROBE_JS = """
+async ([urls]) => {
+ const out = {};
+ for (const u of urls) {
+ out[u] = await new Promise(res => {
+ const s = document.createElement('script');
+ s.onload = () => res(true);
+ s.onerror = () => res(false);
+ s.src = u;
+ document.head.appendChild(s);
+ setTimeout(() => res(null), 5000);
+ });
+ }
+ return out;
+}
+"""
+
+
+def loose_entries(base: Path) -> dict:
+ """Member -> size, for an UNPACKAGED build.
+
+ `mach build` leaves dist/bin without omni.ja: the same resources sit as
+ loose files, at exactly the paths they would have inside the jar, under
+ dist/bin/browser/ for browser/omni.ja and dist/bin/ for omni.ja. CI tests the
+ unpackaged tree (see tests.yml, "Package the binary for the test jobs" --
+ there is no omni.ja to rebuild there), so requiring the jar made this guard
+ unrunnable on exactly the builds it is meant to gate.
+ """
+ out = {}
+ for f in base.rglob('*'):
+ if f.is_file():
+ out[f.relative_to(base).as_posix()] = f.stat().st_size
+ return out
+
+
+def package_listing(root: Path, jar: str) -> dict:
+ """The file set of one jar, from the jar if packaged, else from the tree.
+
+ Returns None when neither is present, so the caller can say which.
+ """
+ path = root / jar
+ if path.exists():
+ return zip_entries(path)
+ base = root / 'browser' if jar == 'browser/omni.ja' else root
+ # chrome/ is the only part of dist/bin the manifest describes; walking all
+ # of dist/bin would also pull in the binary, the fonts and the libs.
+ if (base / 'chrome').is_dir():
+ return loose_entries(base)
+ return None
+
+
+def zip_entries(jar: Path) -> dict:
+ """Member -> size. unzip, not zipfile: Firefox's optimized jars put the
+ central directory at the front and zipfile cannot open them."""
+ out = subprocess.run(["unzip", "-l", str(jar)], capture_output=True, text=True).stdout
+ entries = {}
+ for line in out.splitlines():
+ parts = line.split(None, 3)
+ if len(parts) == 4 and parts[0].isdigit() and not parts[3].endswith("/"):
+ entries[parts[3]] = int(parts[0])
+ return entries
+
+
+def static_check(binary: Path, manifest: dict, failures: list) -> None:
+ root = binary.parent
+ ini = root / "application.ini"
+ if ini.exists():
+ match = re.search(r"^Version=(.+)$", ini.read_text(errors="replace"), re.M)
+ # Camoufox appends its own release to the Firefox version ("152.0.4-beta.30");
+ # only the Firefox part decides whether the recorded file set still applies.
+ built = match.group(1).strip().split("-")[0] if match else "unknown"
+ if built != manifest["firefox_version"]:
+ failures.append(
+ f"manifest records Firefox {manifest['firefox_version']} but this build is "
+ f"{built} -- re-run scripts/gen-contentaccessible-manifest.py against a "
+ f"stock {built} release"
+ )
+ return
+
+ listings = {}
+ for jar in ("browser/omni.ja", "omni.ja"):
+ listing = package_listing(root, jar)
+ if listing is None:
+ failures.append(
+ f"{jar} not found next to the binary, and no loose chrome/ tree "
+ f"to read instead -- nothing to compare against stock"
+ )
+ return
+ listings[jar] = listing
+
+ for key, spec in sorted(manifest["packages"].items()):
+ jar = key.split("|", 1)[0]
+ built = sorted(
+ name for name in listings[jar]
+ if any(name.startswith(p) for p in spec["prefixes"])
+ )
+ stock = set(spec["files"])
+ missing = sorted(stock - set(built))
+ extra = sorted(set(built) - stock)
+ for name in missing:
+ failures.append(f"{key}: MISSING vs stock -- {name}")
+ for name in extra:
+ failures.append(f"{key}: EXTRA vs stock -- {name}")
+ if not missing and not extra:
+ print(f" ok {key.split('|', 2)[2]:32} {len(built):>5} files")
+
+
+def run_probe(binary: Path) -> dict:
+ """The probe itself, run in a child process (see live_check)."""
+ from camoufox.sync_api import Camoufox
+
+ urls = [u for u, _ in LIVE_PROBES]
+ # i_know_what_im_doing is what makes executable_path stick; without it the
+ # launcher falls back to the downloaded official build and this guard would
+ # silently measure a different browser.
+ with Camoufox(
+ headless=True, executable_path=str(binary), env={}, i_know_what_im_doing=True
+ ) as browser:
+ page = browser.new_page()
+ page.goto("about:blank")
+ return page.evaluate(PROBE_JS, [urls])
+
+
+def live_check(binary: Path, failures: list) -> None:
+ """Drive a real browser, in a CHILD PROCESS under a timeout.
+
+ Playwright's sync API blocks without servicing Python signals, so an
+ in-process alarm cannot bound a wedged launch -- only killing the process
+ can, and an unbounded guard would hang the whole patch-guard run.
+ """
+ proc = subprocess.run(
+ [sys.executable, str(Path(__file__).resolve()), "--probe", str(binary)],
+ capture_output=True, text=True, timeout=LIVE_TIMEOUT_S,
+ )
+ if proc.returncode != 0:
+ failures.append(f"live probe failed: {proc.stderr.strip().splitlines()[-1:] or proc.stdout}")
+ return
+ results = json.loads(proc.stdout)
+
+ for url, must_load in LIVE_PROBES:
+ got = results.get(url)
+ if got is None:
+ failures.append(f"live: {url} timed out")
+ elif got != must_load:
+ verb = "did not load but stock loads it" if must_load else "loaded but stock does not ship it"
+ failures.append(f"live: {url} {verb}")
+ else:
+ print(f" ok {'loads' if must_load else 'absent':7} {url}")
+
+
+def main() -> int:
+ if not MANIFEST.exists():
+ print(f"FAIL: {MANIFEST.relative_to(REPO_ROOT)} is missing; generate it first")
+ return 1
+ manifest = json.loads(MANIFEST.read_text())
+ binary = resolve_binary()
+ failures = []
+
+ print(f"Stock baseline: Firefox {manifest['firefox_version']}, "
+ f"{sum(len(p['files']) for p in manifest['packages'].values())} files "
+ f"in {len(manifest['packages'])} packages\n")
+
+ print("Package file sets:")
+ static_check(binary, manifest, failures)
+ print("\nLoaded from a page:")
+ try:
+ live_check(binary, failures)
+ except subprocess.TimeoutExpired:
+ failures.append(f"live probe did not finish within {LIVE_TIMEOUT_S}s (wedged launch?)")
+ except Exception as exc: # noqa: BLE001
+ failures.append(f"live probe could not run: {exc}")
+
+ print()
+ if failures:
+ for failure in failures:
+ print(f"FAIL: {failure}")
+ return 1
+ print("PASS: the content-reachable surface matches a stock Firefox release.")
+ return 0
+
+
+if __name__ == "__main__":
+ if len(sys.argv) == 3 and sys.argv[1] == "--probe":
+ print(json.dumps(run_probe(Path(sys.argv[2]))))
+ sys.exit(0)
+ sys.exit(main())
diff --git a/tests/patches/gfx-probes-packaged.py b/tests/patches/gfx-probes-packaged.py
new file mode 100644
index 000000000..687479785
--- /dev/null
+++ b/tests/patches/gfx-probes-packaged.py
@@ -0,0 +1,160 @@
+r"""
+The GPU probes ship, so the browser decides about graphics the way stock does.
+
+Firefox runs two small helper binaries at startup -- `glxtest` (GL/EGL) and
+`vaapitest` (video decode) -- and feeds what they report into nsIGfxInfo. Without
+them gfxInfo has nothing, and the driver blocklist refuses **every** WebGL
+context:
+
+ WebGL creation failed:
+ * WebglAllowWindowsNativeGl:false restricts context creation on this system.
+ * Exhausted GL driver options. (FEATURE_FAILURE_WEBGL_EXHAUSTED_DRIVERS)
+
+`scripts/package.py` used to drop both as "unneeded" (~50 KB), and the launcher
+covered for it with `webgl.force-enabled`, so the breakage only showed on a
+launch that did not go through pythonlib -- measured 2026-09-18: stock Firefox
+152.0.4 on this machine returned a full WebGL 2.0 context from the real GPU and
+camoufox returned `null` from `canvas.getContext('webgl')`.
+
+Three checks, because each alone can pass while the others are broken: the
+packaging list must not name them, the build under test must have them beside
+the binary, and a bare launch -- no pythonlib, so no `webgl.force-enabled` --
+must still get a context.
+
+ python tests/patches/gfx-probes-packaged.py
+"""
+
+import http.server
+import json
+import shutil
+import socketserver
+import subprocess
+import sys
+import tempfile
+import threading
+from pathlib import Path
+
+sys.path.insert(0, str(Path(__file__).resolve().parent))
+from helpers import resolve_binary # noqa: E402
+
+REPO_ROOT = Path(__file__).resolve().parents[2]
+PROBES = ("glxtest", "vaapitest")
+LOAD_TIMEOUT_S = 90
+
+PAGE = b"""gfx-probes"""
+
+
+def serve():
+ """The page, plus the endpoint it posts its answer back to."""
+ received = {}
+ done = threading.Event()
+
+ class H(http.server.BaseHTTPRequestHandler):
+ def do_GET(self):
+ self.send_response(200)
+ self.send_header("Content-Type", "text/html")
+ self.send_header("Content-Length", str(len(PAGE)))
+ self.end_headers()
+ self.wfile.write(PAGE)
+
+ def do_POST(self):
+ body = self.rfile.read(int(self.headers.get("Content-Length", "0")))
+ try:
+ received.update(json.loads(body))
+ except ValueError:
+ received["_parse_error"] = body[:200].decode("utf-8", "replace")
+ self.send_response(200)
+ self.end_headers()
+ done.set()
+
+ def log_message(self, *args):
+ pass
+
+ socketserver.TCPServer.allow_reuse_address = True
+ srv = socketserver.TCPServer(("127.0.0.1", 0), H)
+ threading.Thread(target=srv.serve_forever, daemon=True).start()
+ return srv, srv.server_address[1], received, done
+
+
+def packaging_drops_probes() -> list:
+ """The names package.py refuses to ship, as the source declares them."""
+ text = (REPO_ROOT / "scripts" / "package.py").read_text()
+ unneeded = text.split("UNNEEDED_PATHS = {", 1)[1].split("}", 1)[0]
+ return [name for name in PROBES if f"'{name}'" in unneeded or f'"{name}"' in unneeded]
+
+
+def webgl_report(binary: Path) -> dict:
+ """What a plain WebGL request does in a bare launch of this build."""
+ srv, port, received, done = serve()
+ profile = tempfile.mkdtemp(prefix="gfxprobe-")
+ Path(profile, "user.js").write_text(
+ 'user_pref("browser.shell.checkDefaultBrowser", false);\n'
+ 'user_pref("datareporting.policy.dataSubmissionPolicyBypassNotification", true);\n'
+ )
+ proc = subprocess.Popen(
+ [str(binary), "-headless", "-no-remote", "-profile", profile,
+ f"http://127.0.0.1:{port}/"],
+ stdout=subprocess.DEVNULL, stderr=subprocess.DEVNULL,
+ )
+ try:
+ if not done.wait(LOAD_TIMEOUT_S):
+ return {"context": None, "note": f"no report within {LOAD_TIMEOUT_S}s"}
+ return dict(received)
+ finally:
+ proc.terminate()
+ proc.wait(timeout=20)
+ srv.shutdown()
+ shutil.rmtree(profile, ignore_errors=True)
+
+
+def main() -> int:
+ failures = []
+
+ dropped = packaging_drops_probes()
+ if dropped:
+ failures.append(f"scripts/package.py drops {', '.join(dropped)} from the package")
+
+ binary = resolve_binary()
+ install = binary.parent
+ missing = [name for name in PROBES if not (install / name).exists()]
+ if missing:
+ failures.append(f"{install} has no {', '.join(missing)}")
+
+ report = webgl_report(binary)
+ error = report.get("error") or ""
+ if report.get("context") is not True:
+ # Only the blocklist refusal is this guard's business. A machine with no
+ # usable GL at all (a bare CI container) fails for its own reasons and
+ # would otherwise turn this into a flaky gate; the missing-probe defect
+ # has a signature, so match that.
+ blocklisted = "Exhausted GL driver options" in error or "restricts context creation" in error
+ if blocklisted:
+ failures.append(f"a bare launch was refused a WebGL context by the blocklist: {error}")
+ else:
+ print(f"NOTE: no WebGL context here, and not from the blocklist: "
+ f"{error or report.get('note') or report}")
+
+ print(json.dumps({"packaging_drops": dropped, "missing_from_install": missing,
+ "webgl": report}, indent=2))
+ for failure in failures:
+ print(f"FAIL: {failure}")
+ if failures:
+ return 1
+ print("PASS: glxtest and vaapitest ship, and WebGL works without a pref forcing it")
+ return 0
+
+
+if __name__ == "__main__":
+ raise SystemExit(main())
diff --git a/tests/patches/hardware-acceleration-policy.py b/tests/patches/hardware-acceleration-policy.py
new file mode 100644
index 000000000..e4bfa4c01
--- /dev/null
+++ b/tests/patches/hardware-acceleration-policy.py
@@ -0,0 +1,89 @@
+r"""
+Verify hardware compositing is not disabled by policy.
+
+settings/distribution/policies.json used to carry the enterprise policy
+"HardwareAcceleration": false, which locks layers.acceleration.disabled=true.
+Stock Firefox ships no policies, so every camoufox window ran software WebRender
+with no hardware video decoding -- page-visible through
+MediaCapabilities.decodingInfo(...).powerEfficient (false where stock is true),
+the HDR probe and rendering behaviour, on every OS. The graphics decision log
+read over Marionette showed "HW_COMPOSITING: Disabled by
+layers.acceleration.disabled=true (FEATURE_FAILURE_COMP_PREF)".
+
+This guard checks the shipped policy file, then launches the binary headed on a
+private Xvfb display and reads, in chrome context: the active policies, the pref
+(value and lock), and the HW_COMPOSITING decision log -- which must not name the
+pref as the reason (Xvfb has no GPU, so compositing may be unavailable for other
+reasons; only FEATURE_FAILURE_COMP_PREF means the policy is back).
+
+ python tests/patches/hardware-acceleration-policy.py
+"""
+
+import json
+import subprocess
+import sys
+import tempfile
+from pathlib import Path
+
+sys.path.insert(0, str(Path(__file__).resolve().parent))
+from helpers import Marionette, free_port, hidden_display, marionette_args, resolve_binary # noqa: E402
+
+REPO_ROOT = Path(__file__).resolve().parents[2]
+
+JS = """
+const gi = Cc["@mozilla.org/gfx/info;1"].getService(Ci.nsIGfxInfo);
+const hw = (gi.getFeatureLog().features || []).find(f => f.name === "HW_COMPOSITING");
+return {
+ policies: Object.keys(Services.policies.getActivePolicies() || {}),
+ locked: Services.prefs.prefIsLocked("layers.acceleration.disabled"),
+ disabled: Services.prefs.getBoolPref("layers.acceleration.disabled", false),
+ hwLog: hw ? hw.log.map(e => [e.type, e.status, e.message, e.failureId].join(" | ")) : [],
+};
+"""
+
+
+def main() -> int:
+ failures = []
+ policies = json.loads((REPO_ROOT / "settings/distribution/policies.json").read_text())["policies"]
+ if "HardwareAcceleration" in policies:
+ failures.append(f"policies.json sets HardwareAcceleration={policies['HardwareAcceleration']!r}")
+
+ binary = resolve_binary()
+ port = free_port()
+ with tempfile.TemporaryDirectory() as profile, hidden_display() as display:
+ Path(profile, "user.js").write_text(f'user_pref("marionette.port", {port});\n')
+ proc = subprocess.Popen(
+ [str(binary), "-no-remote", "-profile", profile, *marionette_args(), "about:blank"],
+ env={**__import__("os").environ, "DISPLAY": display, "MOZ_ENABLE_WAYLAND": "0"},
+ stdout=subprocess.DEVNULL, stderr=subprocess.DEVNULL,
+ )
+ try:
+ m = Marionette(port)
+ state = m.js(JS)
+ m.close()
+ finally:
+ proc.kill()
+ proc.wait()
+
+ print(f" active policies : {', '.join(sorted(state['policies'])) or '(none)'}")
+ print(f" layers.acceleration.disabled : {state['disabled']} (locked: {state['locked']})")
+ for entry in state["hwLog"]:
+ print(f" HW_COMPOSITING log : {entry}")
+ if "HardwareAcceleration" in state["policies"]:
+ failures.append("the running browser has the HardwareAcceleration policy active")
+ if state["disabled"] or state["locked"]:
+ failures.append("layers.acceleration.disabled is set or locked")
+ if any("FEATURE_FAILURE_COMP_PREF" in e for e in state["hwLog"]):
+ failures.append("hardware compositing is disabled by pref")
+
+ print()
+ if failures:
+ for f in failures:
+ print(f"FAIL: {f}")
+ return 1
+ print("PASS: no policy or pref disables hardware compositing.")
+ return 0
+
+
+if __name__ == "__main__":
+ sys.exit(main())
diff --git a/tests/patches/helpers.py b/tests/patches/helpers.py
index ec3704a47..6ba36cb91 100644
--- a/tests/patches/helpers.py
+++ b/tests/patches/helpers.py
@@ -57,3 +57,111 @@ async def launch_camoufox(
raise RuntimeError(
f"Could not find a valid preset after {max_attempts} attempts"
) from last_error
+
+
+# --- chrome-context inspection (Marionette) on a hidden display -----------------
+#
+# Some guards assert browser-UI state a page cannot read (a URL-bar label, a chrome
+# overlay, the graphics decision log). They drive Marionette's chrome context.
+# Marionette itself shows the remote-control cue, so these always run on a PRIVATE
+# Xvfb display -- never on a real screen.
+
+import contextlib
+import json
+import os
+import shutil
+import socket
+import subprocess
+import time
+from pathlib import Path
+from typing import Iterator, List
+
+
+def resolve_binary() -> Path:
+ """The camoufox binary under test: the runner's CAMOUFOX_EXECUTABLE_PATH, else
+ CAMOUFOX_BINARY, else the newest in-tree Linux build (never another target's
+ objdir, which cannot execute here)."""
+ for var in ("CAMOUFOX_EXECUTABLE_PATH", "CAMOUFOX_BINARY"):
+ if os.environ.get(var):
+ return Path(os.environ[var]).resolve()
+ root = Path(__file__).resolve().parents[2]
+ matches = sorted(root.glob("camoufox-*/obj-*-linux-gnu/dist/bin/camoufox-bin"))
+ if not matches:
+ raise SystemExit("no camoufox binary: set CAMOUFOX_EXECUTABLE_PATH")
+ return matches[-1]
+
+
+@contextlib.contextmanager
+def hidden_display() -> Iterator[str]:
+ """A private Xvfb display for the duration of the block."""
+ if not shutil.which("Xvfb"):
+ raise SystemExit("Xvfb is required for this guard")
+ for n in range(140, 160):
+ if not os.path.exists(f"/tmp/.X11-unix/X{n}"):
+ break
+ display = f":{n}"
+ proc = subprocess.Popen(["Xvfb", display, "-screen", "0", "1400x900x24", "-nolisten", "tcp"],
+ stdout=subprocess.DEVNULL, stderr=subprocess.DEVNULL)
+ time.sleep(1.5)
+ try:
+ yield display
+ finally:
+ proc.terminate()
+
+
+def free_port() -> int:
+ with socket.socket() as s:
+ s.bind(("127.0.0.1", 0))
+ return s.getsockname()[1]
+
+
+class Marionette:
+ """Minimal Marionette client: length-prefixed JSON over TCP, chrome context."""
+
+ def __init__(self, port: int, timeout: float = 60):
+ deadline = time.time() + timeout
+ while True:
+ try:
+ self.sock = socket.create_connection(("127.0.0.1", port), timeout=5)
+ break
+ except OSError:
+ if time.time() > deadline:
+ raise
+ time.sleep(0.5)
+ self.sock.settimeout(timeout)
+ self._id = 0
+ self._recv() # server hello
+ self.call("WebDriver:NewSession", {"capabilities": {}})
+ self.call("Marionette:SetContext", {"value": "chrome"})
+
+ def _recv(self):
+ buf = b""
+ while b":" not in buf:
+ buf += self.sock.recv(1)
+ size, rest = buf.split(b":", 1)
+ while len(rest) < int(size):
+ rest += self.sock.recv(int(size) - len(rest))
+ return json.loads(rest)
+
+ def call(self, command: str, params: dict):
+ self._id += 1
+ data = json.dumps([0, self._id, command, params]).encode()
+ self.sock.sendall(str(len(data)).encode() + b":" + data)
+ while True:
+ msg = self._recv()
+ if isinstance(msg, list) and msg[1] == self._id:
+ if msg[2]:
+ raise RuntimeError(f"{command}: {msg[2]}")
+ return msg[3]
+
+ def js(self, script: str):
+ """Run chrome-context JS (in the browser window) and return its JSON value."""
+ return self.call("WebDriver:ExecuteScript", {"script": script, "args": []}).get("value")
+
+ def close(self):
+ with contextlib.suppress(Exception):
+ self.sock.close()
+
+
+def marionette_args() -> List[str]:
+ return ["--marionette", "--remote-allow-system-access"]
diff --git a/tests/patches/humanize-edge-deadlock.py b/tests/patches/humanize-edge-deadlock.py
index ed67e039b..baf8d8b08 100644
--- a/tests/patches/humanize-edge-deadlock.py
+++ b/tests/patches/humanize-edge-deadlock.py
@@ -21,12 +21,14 @@
PageHandler.js:566 currentX > boundingBox.width <-- intermediate points
PageHandler.js:589 x >= boundingBox.width <-- requested endpoint
-This is reachable rather than theoretical: MouseTrajectories.hpp:65-74 rounds
-every point to `int`, and :83-86 generates the curve's control knots with a
-+/-80px boundary around the endpoints -- so a target within 80px of an edge
-produces a curve that sweeps across the boundary column and lands on it exactly.
-Points *beyond* the edge are skipped safely by the `continue`; points *on* it
-are dispatched and hang.
+This is reachable rather than theoretical, and it stayed reachable when the
+generator was replaced. Trajectory points are rounded to whole pixels, and the
+path does not stay between its endpoints: measured over 400 random moves,
+Cursory's paths stray a median of 33-57px perpendicular to the straight line
+(up to 214px), and 69% leave the box spanned by their own endpoints entirely.
+So a target anywhere near an edge produces a curve that sweeps across the
+boundary column and lands on it exactly. Points *beyond* the edge are skipped
+safely by the `continue`; points *on* it are dispatched and hang.
Run against a specific build:
CAMOUFOX_EXECUTABLE_PATH=/path/to/camoufox-bin python3 tests/patches/humanize-edge-deadlock.py
diff --git a/tests/patches/humanize-mouse-trajectory.py b/tests/patches/humanize-mouse-trajectory.py
index be8043c40..c2dec4f93 100644
--- a/tests/patches/humanize-mouse-trajectory.py
+++ b/tests/patches/humanize-mouse-trajectory.py
@@ -1,17 +1,23 @@
"""
-Verify humanize=True produces a native cursor trajectory (daijro/camoufox#677).
+Verify humanize=True produces a human cursor trajectory (daijro/camoufox#677).
Camoufox's cursor humanization has a single call site: the `mousemove` branch of
`sendEvents()` in additions/juggler/protocol/PageHandler.js, which calls
-`ChromeUtils.camouGetMouseTrajectory(...)` and dispatches the intermediate
-points. The Firefox 146 Juggler migration (commit 03c1230) rewrote that helper
-and silently dropped the branch, so from FF146 through v152 `humanize=True`
-emitted only the endpoint mousemove -- no trajectory at all.
-
-This is runtime-only: the C++ generator (MouseTrajectories.hpp), the ChromeUtils
-bindings, and the config plumbing all stay intact and every patch applies
-cleanly, so nothing fails loudly. Only driving a real browser and counting the
-emitted mousemove events catches it.
+`humanizedSteps()` (additions/juggler/input/CursorTrajectory.js) and dispatches
+the intermediate points. The Firefox 146 Juggler migration (commit 03c1230)
+rewrote that helper and silently dropped the branch, so from FF146 through v152
+`humanize=True` emitted only the endpoint mousemove -- no trajectory at all.
+
+This is runtime-only: the generator, its vendored Cursory backend and the config
+plumbing all stay intact and every patch applies cleanly, so nothing fails
+loudly. Only driving a real browser and counting the emitted mousemove events
+catches it.
+
+The timing check is the other half. Camoufox used to emit trajectory points on a
+flat 10ms metronome, which is a giveaway on its own: no hand moves a mouse at a
+perfectly constant rate. Cursory carries each recording's own timing, so the
+gaps between events must come out uneven -- and a regression that reverted to a
+fixed cadence would otherwise pass every other assertion here.
Run against a specific build:
CAMOUFOX_EXECUTABLE_PATH=/path/to/camoufox-bin python tests/patches/humanize-mouse-trajectory.py
@@ -23,6 +29,8 @@
What PASS means:
* humanize=True expands one long mouse.move into many intermediate
mousemove events, ending exactly on the requested destination;
+ * those events are spread over a plausible human duration, with uneven
+ gaps between them rather than a fixed cadence;
* a humanized click still lands on the target element;
* without humanize, each move emits only its endpoint (pins the other
direction so accidental always-on humanization is also caught).
@@ -34,16 +42,36 @@
from camoufox.async_api import AsyncCamoufox
-DEST = (1100, 650)
+# The far corner of the move, clamped to the viewport the identity happened to
+# draw. It used to be a flat (1100, 650), which silently tested nothing whenever
+# the drawn window was smaller than that: the move landed outside the content
+# area, no mousemove was delivered, and the run failed reporting only the start
+# point. Drawn windows vary far more than they used to (fpgen), and one was
+# 924x1364 -- narrower than the old x.
+DEST_MAX = (1100, 650)
BODY = ''
RECORDER = """
window.moves = [];
- addEventListener("mousemove", e => moves.push([e.clientX, e.clientY]));
+ addEventListener("mousemove", e => moves.push([e.clientX, e.clientY, performance.now()]));
"""
+# The default humanize ceiling is 1.5s; anything under 50ms for a ~1200px move
+# means the trajectory is being emitted as fast as the event loop allows.
+MIN_DURATION_MS = 50
+MAX_DURATION_MS = 3000
+
EXECUTABLE_PATH = os.environ.get("CAMOUFOX_EXECUTABLE_PATH")
+async def _dest_within(page):
+ """DEST_MAX, or the far corner of this viewport if it is smaller."""
+ viewport = await page.evaluate("({w: innerWidth, h: innerHeight})")
+ return (
+ min(DEST_MAX[0], viewport["w"] - 10),
+ min(DEST_MAX[1], viewport["h"] - 10),
+ )
+
+
def _launch_kwargs(humanize):
kwargs = dict(headless=True, os="linux", humanize=humanize)
if EXECUTABLE_PATH:
@@ -56,9 +84,10 @@ async def _collect_moves(humanize):
page = await browser.new_page()
await page.set_content(BODY)
await page.evaluate(RECORDER)
+ dest = await _dest_within(page)
await page.mouse.move(20, 20)
- await page.mouse.move(*DEST)
- return await page.evaluate("moves")
+ await page.mouse.move(*dest)
+ return await page.evaluate("moves"), dest
async def _humanized_click_hits_target():
@@ -76,22 +105,52 @@ async def _humanized_click_hits_target():
return await page.evaluate("moves"), await page.evaluate("clicked")
+def _gaps(moves):
+ """Inter-event gaps, in ms, of the trajectory that followed the first move."""
+ times = [m[2] for m in moves[1:]]
+ return [round(b - a, 1) for a, b in zip(times, times[1:])]
+
+
async def main() -> int:
passed = True
- humanized = await _collect_moves(True)
+ humanized, dest = await _collect_moves(True)
print("\n=== humanize=True ===")
- print(f" mousemove events: {len(humanized)} (endpoint: {humanized[-1] if humanized else None})")
- if len(humanized) >= 10 and humanized[-1] == list(DEST):
+ print(f" mousemove events: {len(humanized)} (endpoint: {humanized[-1][:2] if humanized else None})")
+ if len(humanized) >= 10 and humanized[-1][:2] == list(dest):
print(" PASS: humanized trajectory emitted, ending on destination")
else:
passed = False
print(" FAIL: expected >=10 intermediate points ending exactly on the destination")
- plain = await _collect_moves(False)
+ gaps = _gaps(humanized)
+ duration = round(sum(gaps), 1)
+ distinct = len(set(gaps))
+ print(f" duration: {duration}ms over {len(gaps)} gaps; {distinct} distinct gap values")
+ print(f" gaps (first 12): {gaps[:12]}")
+ if MIN_DURATION_MS <= duration <= MAX_DURATION_MS:
+ print(f" PASS: movement spans a plausible human duration")
+ else:
+ passed = False
+ print(f" FAIL: expected {MIN_DURATION_MS}-{MAX_DURATION_MS}ms, got {duration}ms")
+ # A metronome would produce one or two distinct values (the fixed step, plus
+ # scheduler noise clustering around it). Real recorded timing does not. The
+ # page clock is clamped to 1 ms and the recorded steps mostly sit between 12
+ # and 20 ms, so the number of distinct values cannot scale with the number
+ # of gaps: requiring len(gaps) // 4 failed uneven runs like
+ # [19, 18, 18, 17, 88, 18, 21, 15, ...] whenever event delivery was steady.
+ # A fixed 10 ms cadence gives about three values within a few ms of each other.
+ spread = (max(gaps) - min(gaps)) if gaps else 0
+ if distinct >= 6 and spread >= 20:
+ print(" PASS: gaps are uneven, not a fixed cadence")
+ else:
+ passed = False
+ print(f" FAIL: only {distinct} distinct gaps (spread {spread}ms) across {len(gaps)} -- looks like a fixed cadence")
+
+ plain, plain_dest = await _collect_moves(False)
print("\n=== humanize off ===")
- print(f" mousemove events: {plain}")
- if plain == [[20, 20], list(DEST)]:
+ print(f" mousemove events: {[m[:2] for m in plain]}")
+ if [m[:2] for m in plain] == [[20, 20], list(plain_dest)]:
print(" PASS: only endpoints emitted")
else:
passed = False
diff --git a/tests/patches/media-devices-coherence.py b/tests/patches/media-devices-coherence.py
new file mode 100644
index 000000000..a6c7eae99
--- /dev/null
+++ b/tests/patches/media-devices-coherence.py
@@ -0,0 +1,142 @@
+"""
+Verify media-device spoofing (media-device-spoofing.patch + pythonlib
+media-devices.json) presents ONE coherent machine.
+
+Stock Firefox exposes, before any getUserMedia grant, at most one device per
+input kind with empty labels/ids and no audiooutput; after a capture it lists
+the OS's own device names with distinct deviceIds and grouped groupIds, and
+the captured track carries the very label/deviceId/groupId of one listed
+device. Camoufox used to (a) crash the content process on the first
+enumerateDevices() when the identity had a camera and no microphone
+(InsertElementAt(1) on an empty array), (b) expose every configured device
+pre-grant, (c) label everything "Default Audio Device"/"Default Video
+Device" with one shared raw id per kind, and (d) capture the HOST's devices
+on getUserMedia, so track labels contradicted the enumerated list.
+
+Playwright's Firefox has no microphone/camera permission, so the prompt is
+auto-granted with media.navigator.permission.disabled -- which is also how a
+stock browser comes to expose labels (an active capture).
+
+Run against a specific build:
+ CAMOUFOX_EXECUTABLE_PATH=/path/to/camoufox-bin python3 tests/patches/media-devices-coherence.py
+
+What PASS means, for each spoofed OS and for the camera-only identity:
+ * pre-grant: <=1 audioinput, <=1 videoinput, 0 audiooutput, no labels;
+ * getUserMedia({audio}) succeeds iff the identity has a microphone, and
+ the track's label/deviceId/groupId equal an enumerated audioinput;
+ * getUserMedia({video}) succeeds iff the identity has a camera;
+ * post-grant labels are OS-style (never the fake engine's names), ids are
+ distinct, a microphone and a speaker of the same sound card share a
+ groupId, and every configured device is listed;
+ * the camera-only identity does not crash the page.
+"""
+
+import asyncio
+import os
+import sys
+
+from camoufox.async_api import AsyncCamoufox
+
+EXECUTABLE_PATH = os.environ.get("CAMOUFOX_EXECUTABLE_PATH")
+SPOOFED_OSES = ["windows", "macos", "linux"]
+FAKE_NAMES = ("Default Audio Device", "Default Video Device", "Fake Video Group", "Fake Audio Group")
+
+ENUM_JS = """async () => {
+ const d = await navigator.mediaDevices.enumerateDevices();
+ return d.map(x => ({kind: x.kind, label: x.label, id: x.deviceId, group: x.groupId}));
+}"""
+GUM_JS = """async (c) => {
+ try {
+ const s = await navigator.mediaDevices.getUserMedia(c);
+ window.__streams = (window.__streams || []).concat([s]);
+ return s.getTracks().map(t => { const st = t.getSettings(); return {kind: t.kind, label: t.label, id: st.deviceId, group: st.groupId}; });
+ } catch (e) { return {error: e.name}; }
+}"""
+
+
+def _launch_kwargs(spoofed_os, config=None):
+ kwargs = dict(
+ headless=True,
+ os=spoofed_os,
+ firefox_user_prefs={"media.navigator.permission.disabled": True},
+ )
+ if config:
+ kwargs["config"] = config
+ kwargs["i_know_what_im_doing"] = True
+ if EXECUTABLE_PATH:
+ kwargs["executable_path"] = EXECUTABLE_PATH
+ return kwargs
+
+
+async def _check(spoofed_os, config=None) -> bool:
+ label = f"[{spoofed_os}{' camera-only' if config else ''}]"
+ async with AsyncCamoufox(**_launch_kwargs(spoofed_os, config)) as browser:
+ page = await browser.new_page()
+ await page.goto("https://example.com/")
+ pre = await page.evaluate(ENUM_JS)
+ n = lambda kind, devs: sum(1 for d in devs if d["kind"] == kind) # noqa: E731
+ if n("audioinput", pre) > 1 or n("videoinput", pre) > 1 or n("audiooutput", pre) > 0 or any(d["label"] for d in pre):
+ print(f" {label} FAIL: pre-grant shape {[(d['kind'], d['label']) for d in pre]}")
+ return False
+ has_mic = n("audioinput", pre) == 1
+ has_cam = n("videoinput", pre) == 1
+
+ audio = await page.evaluate(GUM_JS, {"audio": True})
+ if has_mic and not isinstance(audio, list):
+ print(f" {label} FAIL: getUserMedia(audio) {audio} although a microphone is listed")
+ return False
+ if not has_mic and isinstance(audio, list):
+ print(f" {label} FAIL: getUserMedia(audio) succeeded without a microphone")
+ return False
+ video = await page.evaluate(GUM_JS, {"video": True})
+ if has_cam and not isinstance(video, list):
+ print(f" {label} FAIL: getUserMedia(video) {video} although a camera is listed")
+ return False
+ if not has_cam and isinstance(video, list):
+ print(f" {label} FAIL: getUserMedia(video) succeeded without a camera")
+ return False
+
+ post = await page.evaluate(ENUM_JS)
+ if not has_mic and not has_cam:
+ print(f" {label} ok (no input devices; nothing to expose)")
+ return True
+ labelled = [d for d in post if d["label"]]
+ if not labelled:
+ print(f" {label} FAIL: no labels exposed after capture")
+ return False
+ for d in labelled:
+ if d["label"] in FAKE_NAMES or not d["id"] or not d["group"]:
+ print(f" {label} FAIL: fake/empty device {d}")
+ return False
+ ids = [d["id"] for d in labelled]
+ if len(set(ids)) != len(ids):
+ print(f" {label} FAIL: duplicate deviceIds {ids}")
+ return False
+ for tracks in (audio, video):
+ if isinstance(tracks, list):
+ for t in tracks:
+ if not any(d["label"] == t["label"] and d["id"] == t["id"] and d["group"] == t["group"] for d in labelled):
+ print(f" {label} FAIL: captured track {t} is not one of the enumerated devices")
+ return False
+ if has_mic and n("audiooutput", post) == 0:
+ print(f" {label} FAIL: no audiooutput listed after a microphone grant")
+ return False
+ shape = ", ".join(f"{d['kind']}:{d['label']}" for d in labelled)
+ print(f" {label} ok ({shape})")
+ return True
+
+
+async def main() -> int:
+ ok = True
+ for spoofed_os in SPOOFED_OSES:
+ ok &= await _check(spoofed_os)
+ # The identity that used to segfault: a camera and no microphone.
+ ok &= await _check("linux", {"mediaDevices:enabled": True, "mediaDevices:micros": 0, "mediaDevices:webcams": 1,
+ "mediaDevices:speakers": 1, "mediaDevices:webcamLabels": ["Integrated Camera: Integrated C (04f2:b6d9)"],
+ "mediaDevices:speakerLabels": ["Built-in Audio Analog Stereo"]})
+ print("PASS: media devices coherent" if ok else "FAIL")
+ return 0 if ok else 1
+
+
+if __name__ == "__main__":
+ sys.exit(asyncio.run(main()))
diff --git a/tests/patches/near-edge-mouse-deadlock.py b/tests/patches/near-edge-mouse-deadlock.py
index 03d5ccdd9..91173f1f7 100644
--- a/tests/patches/near-edge-mouse-deadlock.py
+++ b/tests/patches/near-edge-mouse-deadlock.py
@@ -49,8 +49,9 @@
* humanized trajectory -- how it is actually hit in the field. Every
PageHandler starts at `_lastTrackedPos = {x: 0, y: 0}` (PageHandler.js:86),
so a session's FIRST humanized move always departs from the top-left corner,
- and with the +/-80px knot boundary from MouseTrajectories.hpp the curve rides
- the y==0 row. On a stock build a first humanized click hung on 5 of 20 cold
+ and since a generated curve wanders well off the straight line (median
+ 33-57px perpendicular, 69% of paths leaving their own endpoint box) it
+ rides the y==0 row. On a stock build a first humanized click hung on 5 of 20 cold
pages; all five had dispatched a point at y==0 and the 15 that completed had
dispatched none. Sampled here rather than asserted deterministically, since
whether the curve touches the row is random.
diff --git a/tests/patches/popup-blocker-parity.py b/tests/patches/popup-blocker-parity.py
new file mode 100644
index 000000000..0759be7ca
--- /dev/null
+++ b/tests/patches/popup-blocker-parity.py
@@ -0,0 +1,157 @@
+r"""
+The popup blocker is Firefox's, and only the driver has a key.
+
+`dom.disable_open_during_load` is ON in Firefox, so a page that calls
+window.open() without a user gesture gets null. Playwright and geckodriver both
+ship it off, and that is a one-bit tell any page can read with no permission and
+nothing to wait for:
+
+ const w = window.open('', '_blank');
+ if (w) { w.close(); /* not a stock browser */ }
+
+Camoufox keeps the blocker on and lifts it for the docShell only while an
+explicit juggler Runtime.evaluate / Runtime.callFunction is on the stack
+(nsIDocShell.driverPopupsAllowed, patches/popup-blocker-parity.patch), so
+page.evaluate(() => window.open(...)) still works. The window is SYNCHRONOUS:
+a popup opened after an `await` inside the evaluated function is blocked, as it
+would be on stock, or a page polling window.open() on a timer would eventually
+land inside somebody else's evaluate.
+
+Both directions are checked here, because either one regressing is silent:
+losing the driver's key breaks ~35 upstream tests, and losing the blocker puts
+the tell back.
+
+ python tests/patches/popup-blocker-parity.py
+"""
+
+import asyncio
+import http.server
+import socketserver
+import sys
+import threading
+from pathlib import Path
+
+sys.path.insert(0, str(Path(__file__).resolve().parent))
+from helpers import resolve_binary # noqa: E402
+
+TIMEOUT_MS = 30_000
+
+PAGE = b"""popup-parity
+"""
+
+
+def serve():
+ class H(http.server.BaseHTTPRequestHandler):
+ def do_GET(self):
+ self.send_response(200)
+ self.send_header("Content-Type", "text/html")
+ self.send_header("Content-Length", str(len(PAGE)))
+ self.end_headers()
+ self.wfile.write(PAGE)
+
+ def log_message(self, *args):
+ pass
+
+ socketserver.TCPServer.allow_reuse_address = True
+ srv = socketserver.TCPServer(("127.0.0.1", 0), H)
+ threading.Thread(target=srv.serve_forever, daemon=True).start()
+ return srv, srv.server_address[1]
+
+
+async def probe(binary, port):
+ from camoufox.async_api import AsyncCamoufox
+
+ async with AsyncCamoufox(headless=True, executable_path=str(binary),
+ i_know_what_im_doing=True) as browser:
+ context = await browser.new_context()
+ page = await context.new_page()
+ page.set_default_timeout(TIMEOUT_MS)
+ await page.goto(f"http://127.0.0.1:{port}/")
+ opened = await page.evaluate("() => document.body.dataset.pageOpened")
+ if opened not in ("true", "false"):
+ raise RuntimeError(f"the page never recorded its window.open result: {opened!r}")
+ out = {"page_opened": opened == "true"}
+
+ # The driver's own call: this one must work, popup and all.
+ try:
+ async with context.expect_page(timeout=10_000) as popup_info:
+ out["evaluate_opened"] = await page.evaluate(
+ "() => !!window.open('about:blank', '_evalopen')"
+ )
+ popup = await popup_info.value
+ out["popup_seen"] = True
+ await popup.close()
+ except Exception as exc: # noqa: BLE001 - reported, not raised
+ out["evaluate_opened"] = False
+ out["popup_seen"] = False
+ out["evaluate_error"] = str(exc)[:120]
+
+ # ... and it must not have handed the document an activation.
+ out["activation"] = await page.evaluate(
+ "() => [navigator.userActivation.hasBeenActive, navigator.userActivation.isActive]"
+ )
+ out["autoplay"] = await page.evaluate(
+ "() => navigator.getAutoplayPolicy('mediaelement')"
+ )
+
+ # Past the synchronous window the blocker is back.
+ out["async_opened"] = await page.evaluate(
+ "async () => { await new Promise(r => setTimeout(r, 40));"
+ " return !!window.open('about:blank', '_lateopen'); }"
+ )
+ return out
+
+
+def main() -> int:
+ binary = resolve_binary()
+ srv, port = serve()
+ try:
+ out = asyncio.run(probe(binary, port))
+ finally:
+ srv.shutdown()
+
+ failures = []
+ if out["page_opened"]:
+ failures.append(
+ "a page script opened a popup with no user activation "
+ "(dom.disable_open_during_load is off, or driverPopupsAllowed is stuck on)"
+ )
+ if not out["evaluate_opened"] or not out["popup_seen"]:
+ failures.append(
+ "page.evaluate(() => window.open(...)) did not open a popup "
+ f"({out.get('evaluate_error', 'no error reported')})"
+ )
+ if out["activation"] != [False, False]:
+ failures.append(f"the evaluate granted a user activation: {out['activation']}")
+ if out["autoplay"] != "allowed-muted":
+ failures.append(
+ f"autoplay policy is {out['autoplay']!r}, not stock's 'allowed-muted' "
+ "without activation"
+ )
+ if out["async_opened"]:
+ failures.append(
+ "a popup opened after an await inside an evaluate was allowed -- the "
+ "driver's window is meant to be synchronous only"
+ )
+
+ print(out)
+ for failure in failures:
+ print(f"FAIL: {failure}")
+ if failures:
+ return 1
+ print("PASS: the page is blocked like stock, the driver's evaluate is not, "
+ "and no activation was granted")
+ return 0
+
+
+if __name__ == "__main__":
+ raise SystemExit(main())
diff --git a/tests/patches/search-service-init.py b/tests/patches/search-service-init.py
index 4d29a5ae0..f2b6340aa 100644
--- a/tests/patches/search-service-init.py
+++ b/tests/patches/search-service-init.py
@@ -59,9 +59,13 @@
def resolve_binary(argv: List[str]) -> Optional[Path]:
if "--binary" in argv:
return Path(argv[argv.index("--binary") + 1]).resolve()
- if os.environ.get("CAMOUFOX_BINARY"):
- return Path(os.environ["CAMOUFOX_BINARY"]).resolve()
- matches = sorted(REPO_ROOT.glob("camoufox-*/obj-*/dist/bin/camoufox-bin"))
+ # ci.run_patch_guards passes the binary under test as CAMOUFOX_EXECUTABLE_PATH;
+ # ignoring it made this guard run the newest objdir instead -- after a macOS
+ # cross build, an arm64 Mach-O that cannot execute here ("Exec format error").
+ for var in ("CAMOUFOX_EXECUTABLE_PATH", "CAMOUFOX_BINARY"):
+ if os.environ.get(var):
+ return Path(os.environ[var]).resolve()
+ matches = sorted(REPO_ROOT.glob("camoufox-*/obj-*-linux-gnu/dist/bin/camoufox-bin"))
return matches[-1] if matches else None
diff --git a/tests/patches/startup-prefs.py b/tests/patches/startup-prefs.py
new file mode 100644
index 000000000..d2375ba32
--- /dev/null
+++ b/tests/patches/startup-prefs.py
@@ -0,0 +1,58 @@
+r"""
+Verify launcher prefs are applied at STARTUP.
+
+Playwright's non-persistent launch writes no user.js: firefox_user_prefs only
+reach the browser through juggler's Browser.enable, after startup. Anything Gecko
+reads while starting up raced or never applied -- intl.locale.requested lost the
+race against the parent's pre-created dom.properties bundle on Windows
+(fr-FR validation messages English in 3 of 4 launches), and mirror-once prefs
+were ignored. pythonlib now also passes the prefs as CAMOU_PREFS_1..N and
+settings/camoufox.cfg (autoconfig, evaluated before any service reads prefs)
+applies them.
+
+The guard passes a page-visible pref ONLY through CAMOU_PREFS_1 (not through
+firefox_user_prefs, so juggler never sets it): dom.gamepad.enabled=false removes
+navigator.getGamepads ([Pref="dom.gamepad.enabled"]). A control launch without
+it must still expose getGamepads, so the check is not vacuous.
+
+ python tests/patches/startup-prefs.py
+"""
+
+import json
+import sys
+from pathlib import Path
+
+sys.path.insert(0, str(Path(__file__).resolve().parent))
+from helpers import resolve_binary # noqa: E402
+
+
+def gamepads_type(binary: Path, env=None) -> str:
+ from camoufox.sync_api import Camoufox
+ with Camoufox(headless=True, executable_path=str(binary), env=env or {}, i_know_what_im_doing=True) as b:
+ page = b.new_page()
+ page.goto("about:blank")
+ return page.evaluate("typeof navigator.getGamepads")
+
+
+def main() -> int:
+ binary = resolve_binary()
+ control = gamepads_type(binary)
+ applied = gamepads_type(binary, env={"CAMOU_PREFS_1": json.dumps({"dom.gamepad.enabled": False})})
+ print(f" control launch : typeof navigator.getGamepads = {control}")
+ print(f" CAMOU_PREFS_1 applied : typeof navigator.getGamepads = {applied}")
+ failures = []
+ if control != "function":
+ failures.append(f"control launch: getGamepads is {control} (expected function) -- check is vacuous")
+ if applied != "undefined":
+ failures.append("a pref passed via CAMOU_PREFS was not applied at startup (camoufox.cfg block missing?)")
+ print()
+ if failures:
+ for f in failures:
+ print(f"FAIL: {f}")
+ return 1
+ print("PASS: CAMOU_PREFS reaches camoufox.cfg at startup.")
+ return 0
+
+
+if __name__ == "__main__":
+ sys.exit(main())
diff --git a/tests/patches/stock-parity-probes.py b/tests/patches/stock-parity-probes.py
new file mode 100644
index 000000000..6d96ffeb9
--- /dev/null
+++ b/tests/patches/stock-parity-probes.py
@@ -0,0 +1,298 @@
+r"""
+Page-observable differences from stock Firefox found in review, each checked as
+an invariant stock Firefox 152 holds:
+
+ canvas-system-font ctx.font = 'caption' (and the other CSS2 system-font
+ keywords) reads back the keyword, not '10px sans-serif'
+ webgl-state pixelStorei / hint / {alpha:false} read back what the page
+ set; UNMASKED_RENDERER_WEBGL without the extension is null
+ with INVALID_ENUM
+ webrtc-no-servers with webrtc:ipv4 spoofed, a connection with no iceServers
+ gathers no srflx, and getStats() ids carry no "camou"
+ gum-fake getUserMedia({audio: true, fake: true}) resolves without a
+ prompt
+ storage-partition a cross-site iframe's document.hasStorageAccess() is false
+ wheel-default page.mouse.wheel(0, 300) delivers the delta the caller
+ asked for: one event, deltaMode 0, deltaY 300
+ wheel-notches the same scroll with humanize=True arrives as 3 events
+ with wheelDeltaY a multiple of 120, as a physical wheel
+ query-cost matchMedia('(color: 8)') and navigator.hardwareConcurrency
+ cost about what matchMedia('(min-width: 1px)') and
+ navigator.userAgent do (no sync IPC per read)
+ timezone-cost with a launch-level timezone, local Date getters cost
+ about what UTC getters do
+ timezone-relaunch a persistent profile relaunched with another timezone
+ reports the new one, in the page and in a worker
+
+ python tests/patches/stock-parity-probes.py
+"""
+
+import http.server
+import json
+import socket
+import sys
+import tempfile
+import threading
+from pathlib import Path
+
+sys.path.insert(0, str(Path(__file__).resolve().parent))
+from helpers import resolve_binary # noqa: E402
+
+FRAME = b""""""
+PAGE = b""""""
+
+
+def serve():
+ class Handler(http.server.BaseHTTPRequestHandler):
+ def do_GET(self):
+ body = FRAME if self.path.startswith("/frame") else PAGE
+ self.send_response(200)
+ self.send_header("Content-Type", "text/html")
+ self.end_headers()
+ self.wfile.write(body)
+
+ def log_message(self, *args):
+ pass
+
+ with socket.socket() as s:
+ s.bind(("127.0.0.1", 0))
+ port = s.getsockname()[1]
+ server = http.server.ThreadingHTTPServer(("127.0.0.1", port), Handler)
+ threading.Thread(target=server.serve_forever, daemon=True).start()
+ return server, port
+
+
+PROBES = """async (port) => {
+ const out = {};
+ const c2d = document.createElement('canvas').getContext('2d');
+ out.canvasFonts = {};
+ for (const k of ['caption', 'icon', 'menu', 'message-box', 'small-caption', 'status-bar']) {
+ c2d.font = '10px sans-serif';
+ c2d.font = k;
+ out.canvasFonts[k] = c2d.font;
+ }
+
+ const gl = document.createElement('canvas').getContext('webgl', {alpha: false, stencil: true, depth: false});
+ if (gl) {
+ gl.pixelStorei(gl.UNPACK_FLIP_Y_WEBGL, true);
+ out.flipY = gl.getParameter(gl.UNPACK_FLIP_Y_WEBGL);
+ out.alphaBits = gl.getParameter(gl.ALPHA_BITS);
+ out.depthBits = gl.getParameter(gl.DEPTH_BITS);
+ gl.getError();
+ out.unmaskedNoExt = gl.getParameter(0x9246);
+ out.unmaskedNoExtError = gl.getError();
+ }
+ const gl2 = document.createElement('canvas').getContext('webgl2');
+ if (gl2) {
+ gl2.hint(0x8B8B, gl2.NICEST);
+ out.derivativeHint = gl2.getParameter(0x8B8B);
+ }
+
+ const pc = new RTCPeerConnection();
+ const cands = [];
+ pc.onicecandidate = e => { if (e.candidate) cands.push(e.candidate.candidate); };
+ pc.createDataChannel('x');
+ await pc.setLocalDescription();
+ await new Promise(r => {
+ const t = setTimeout(r, 6000);
+ pc.addEventListener('icegatheringstatechange', () => { if (pc.iceGatheringState === 'complete') { clearTimeout(t); setTimeout(r, 300); } });
+ });
+ out.candidates = cands;
+ out.statIds = [];
+ (await pc.getStats()).forEach((v, k) => out.statIds.push(String(k)));
+ pc.close();
+
+ try {
+ const r = await Promise.race([
+ navigator.mediaDevices.getUserMedia({audio: true, fake: true}).then(s => { s.getTracks().forEach(t => t.stop()); return 'resolved'; }),
+ new Promise(res => setTimeout(() => res('pending'), 3000)),
+ ]);
+ out.gumFake = r;
+ } catch (e) {
+ out.gumFake = 'rejected ' + e.name;
+ }
+
+ out.storageAccess = await new Promise(r => {
+ addEventListener('message', e => r(e.data.hasStorageAccess), {once: true});
+ const f = document.createElement('iframe');
+ f.src = `http://127.0.0.1:${port}/frame`;
+ document.body.appendChild(f);
+ setTimeout(() => r('timeout'), 5000);
+ });
+
+ // The result of every read is accumulated into `sink`, and `sink` is returned.
+ // Without that the JIT elides the whole loop for a side-effect-free getter --
+ // which it did for navigator.userAgent on a CI runner, timing the BASELINE at
+ // 0 ms and collapsing the comparison below into a flat 15 ms allowance.
+ let sink = 0;
+ const time = (fn) => {
+ const t = performance.now();
+ for (let i = 0; i < 20000; i++) sink += fn();
+ return performance.now() - t;
+ };
+ out.costColor = time(() => matchMedia('(color: 8)').matches ? 1 : 0);
+ out.costMinWidth = time(() => matchMedia('(min-width: 1px)').matches ? 1 : 0);
+ out.costHwc = time(() => navigator.hardwareConcurrency);
+ out.costUA = time(() => navigator.userAgent.length);
+ out.sink = sink;
+ // Fresh Date objects: a Date caches its local-time fields after one read.
+ let n = 0;
+ out.costLocalDate = time(() => new Date(1.6e12 + (n++) * 3.6e6).getHours());
+ out.costUTCDate = time(() => new Date(1.6e12 + (n++) * 3.6e6).getUTCHours());
+ out.timeZone = Intl.DateTimeFormat().resolvedOptions().timeZone;
+ return out;
+}"""
+
+
+PAGE = PAGE.replace(b"%PROBES%", PROBES.encode())
+
+
+def run_probes(binary, port):
+ from camoufox.sync_api import Camoufox
+
+ config = {"webrtc:ipv4": "203.0.113.7", "timezone": "Asia/Tokyo"}
+ with Camoufox(headless=True, executable_path=str(binary), config=config, i_know_what_im_doing=True) as b:
+ page = b.new_page()
+ page.goto(f"http://localhost:{port}/")
+ page.wait_for_function("() => document.body.dataset.result", timeout=60000)
+ out = json.loads(page.evaluate("() => document.body.dataset.result"))
+ if "error" in out:
+ raise RuntimeError(out["error"])
+ page.mouse.move(200, 200)
+ page.mouse.wheel(0, 300)
+ page.wait_for_timeout(800)
+ out["wheel"] = json.loads(page.evaluate("() => document.body.dataset.wheel || '[]'"))
+ return out
+
+
+def probe_wheel(binary, port, humanize):
+ """One scroll of 300px, with humanize on or off.
+
+ Off (the default) the caller's delta is delivered verbatim, which is what
+ upstream's own suite asserts. On, the scroll is quantised into the notches a
+ physical wheel produces. Both are shipped behaviour, so both are checked.
+ """
+ from camoufox.sync_api import Camoufox
+
+ with Camoufox(headless=True, executable_path=str(binary), humanize=humanize,
+ i_know_what_im_doing=True) as b:
+ page = b.new_page()
+ page.goto(f"http://localhost:{port}/")
+ page.mouse.move(200, 200)
+ page.mouse.wheel(0, 300)
+ page.wait_for_timeout(1500)
+ return json.loads(page.evaluate("() => document.body.dataset.wheel || '[]'"))
+
+
+def relaunch_timezones(binary, port):
+ from camoufox.sync_api import Camoufox
+
+ seen = []
+ with tempfile.TemporaryDirectory(prefix="parity-profile-") as profile:
+ for tz in ("Asia/Tokyo", "America/Chicago"):
+ with Camoufox(headless=True, executable_path=str(binary), persistent_context=True,
+ user_data_dir=profile, config={"timezone": tz}, i_know_what_im_doing=True) as ctx:
+ page = ctx.pages[0] if ctx.pages else ctx.new_page()
+ page.goto(f"http://localhost:{port}/")
+ # A worker reads the per-context store, where a stale value surfaced.
+ seen.append(page.evaluate("""async () => {
+ const w = new Worker(URL.createObjectURL(new Blob(
+ ["postMessage(Intl.DateTimeFormat().resolvedOptions().timeZone)"],
+ {type: 'text/javascript'})));
+ const worker = await new Promise(r => { w.onmessage = e => r(e.data); setTimeout(() => r('timeout'), 5000); });
+ return [Intl.DateTimeFormat().resolvedOptions().timeZone, worker];
+ }"""))
+ # prefs.js is written asynchronously; give a persisted value time to land.
+ page.wait_for_timeout(3000)
+ return seen
+
+
+def main() -> int:
+ binary = resolve_binary()
+ server, port = serve()
+ try:
+ out = run_probes(binary, port)
+ out["wheelHumanized"] = probe_wheel(binary, port, humanize=True)
+ relaunch = relaunch_timezones(binary, port)
+ finally:
+ server.shutdown()
+ print(json.dumps({**out, "relaunch": relaunch}, indent=1, default=str))
+
+ failures = []
+ for k, v in out["canvasFonts"].items():
+ if v != k:
+ failures.append(f"canvas-system-font: ctx.font = '{k}' read back {v!r}")
+ if "flipY" in out:
+ if out["flipY"] is not True:
+ failures.append(f"webgl-state: UNPACK_FLIP_Y_WEBGL after pixelStorei(true) = {out['flipY']}")
+ if out["alphaBits"] != 0:
+ failures.append(f"webgl-state: ALPHA_BITS on an {{alpha: false}} context = {out['alphaBits']}")
+ if out["unmaskedNoExt"] is not None or out["unmaskedNoExtError"] != 0x0500:
+ failures.append(f"webgl-state: UNMASKED_RENDERER_WEBGL without the extension = "
+ f"{out['unmaskedNoExt']!r}, error {out['unmaskedNoExtError']}")
+ else:
+ print("note: no WebGL context on this host; webgl-state not checked")
+ if "derivativeHint" in out and out["derivativeHint"] != 0x1102:
+ failures.append(f"webgl-state: FRAGMENT_SHADER_DERIVATIVE_HINT after hint(NICEST) = {out['derivativeHint']}")
+ if not out["candidates"]:
+ failures.append("webrtc-no-servers: no candidates at all -- check is vacuous")
+ if any(" typ srflx " in c for c in out["candidates"]):
+ failures.append(f"webrtc-no-servers: srflx gathered with no iceServers: {out['candidates']}")
+ if any("camou" in i for i in out["statIds"]):
+ failures.append(f"webrtc-no-servers: getStats id names camoufox: {out['statIds']}")
+ if out["gumFake"] != "resolved":
+ failures.append(f"gum-fake: getUserMedia({{fake: true}}) {out['gumFake']}")
+ if out["storageAccess"] is not False:
+ failures.append(f"storage-partition: cross-site iframe hasStorageAccess() = {out['storageAccess']}")
+ wheel = out["wheel"]
+ # Default: the delta the caller asked for, in pixels, as one event.
+ if len(wheel) != 1 or wheel[0]["mode"] != 0 or wheel[0]["dy"] != 300:
+ failures.append(f"wheel-default: wheel(0, 300) gave {wheel}")
+ # humanize=True: notches, each carrying one native tick.
+ humanized = out["wheelHumanized"]
+ if len(humanized) != 3 or any(e["wd"] % 120 for e in humanized):
+ failures.append(f"wheel-notches: humanized wheel(0, 300) gave {humanized}")
+ # 20000 reads of a value that lives in the config cost ~20 ms here, i.e.
+ # ~1 us each: a hash lookup, no IPC. The state this guards against is a sync
+ # IPC per read, measured at ~12 us each when it regressed -- 240 ms over the
+ # same loop. The allowance sits an order of magnitude below that and well
+ # above a healthy read, so neither a fast runner nor a slow one flips it.
+ if out["costColor"] > 5 * out["costMinWidth"] + 40:
+ failures.append(f"query-cost: (color) {out['costColor']:.0f} ms vs (min-width) {out['costMinWidth']:.0f} ms")
+ if out["costHwc"] > 5 * out["costUA"] + 40:
+ failures.append(f"query-cost: hardwareConcurrency {out['costHwc']:.0f} ms vs userAgent {out['costUA']:.0f} ms")
+ if out["timeZone"] != "Asia/Tokyo":
+ failures.append(f"timezone: launch-level zone not applied ({out['timeZone']}) -- timezone-cost is vacuous")
+ # Not widened like the two above: a healthy local-Date loop costs ~2 ms here
+ # against ~1 ms for UTC, and the regression this catches (DateTimeInfo
+ # rebuilt per call under a launch timezone) ran ~1 us per call, i.e. ~20 ms
+ # over this loop. A 40 ms allowance would step straight over it.
+ if out["costLocalDate"] > 5 * out["costUTCDate"] + 15:
+ failures.append(f"timezone-cost: getHours {out['costLocalDate']:.0f} ms vs getUTCHours {out['costUTCDate']:.0f} ms")
+ if relaunch != [["Asia/Tokyo"] * 2, ["America/Chicago"] * 2]:
+ failures.append(f"timezone-relaunch: persistent profile reported {relaunch}")
+
+ print()
+ if failures:
+ for f in failures:
+ print(f"FAIL: {f}")
+ return 1
+ print("PASS: page-observable behaviour matches stock Firefox on every probe.")
+ return 0
+
+
+if __name__ == "__main__":
+ sys.exit(main())
diff --git a/tests/patches/touchscreen-digitizer.py b/tests/patches/touchscreen-digitizer.py
index 3adc0f3e7..2de3dab72 100644
--- a/tests/patches/touchscreen-digitizer.py
+++ b/tests/patches/touchscreen-digitizer.py
@@ -150,9 +150,13 @@
def resolve_binary(argv) -> Optional[Path]:
if "--binary" in argv:
return Path(argv[argv.index("--binary") + 1]).resolve()
- if os.environ.get("CAMOUFOX_BINARY"):
- return Path(os.environ["CAMOUFOX_BINARY"]).resolve()
- matches = sorted(REPO_ROOT.glob("camoufox-*/obj-*/dist/bin/camoufox-bin"))
+ # ci.run_patch_guards passes the binary under test as CAMOUFOX_EXECUTABLE_PATH;
+ # ignoring it made this guard run the newest objdir instead -- after a macOS
+ # cross build, an arm64 Mach-O that cannot execute here ("Exec format error").
+ for var in ("CAMOUFOX_EXECUTABLE_PATH", "CAMOUFOX_BINARY"):
+ if os.environ.get(var):
+ return Path(os.environ[var]).resolve()
+ matches = sorted(REPO_ROOT.glob("camoufox-*/obj-*-linux-gnu/dist/bin/camoufox-bin"))
return matches[-1] if matches else None
diff --git a/tests/patches/visible-automation-cues.py b/tests/patches/visible-automation-cues.py
new file mode 100644
index 000000000..c0af9323e
--- /dev/null
+++ b/tests/patches/visible-automation-cues.py
@@ -0,0 +1,99 @@
+r"""
+Verify a Camoufox window shows no automation cue in the browser UI.
+
+Two cues a real Firefox never draws, neither readable by page JS:
+
+ 78. Every Playwright browser context is a Firefox container. A PUBLIC container
+ renders its name ("JUGGLER ") and colour in the URL bar and tab strip.
+ additions/juggler/TargetRegistry.js marks juggler's identities non-public.
+ 79. browser-init.patch adds a #cursor-highlighter dot following the mouse when
+ the `showcursor` config is true -- and the default used to be true.
+
+The guard launches camoufox through Playwright, headed on a private Xvfb display,
+with Marionette also enabled so the chrome document can be inspected. It opens a
+page in a new browser context, moves the mouse, and asserts: the tab really is in
+a juggler container (usercontextid > 0, so the check is not vacuous), that
+container is not a public identity, #userContext-icons is hidden, and no
+#cursor-highlighter exists. A second launch with showcursor=true asserts the
+opt-in still creates the element, so the id being checked is the real one.
+
+ python tests/patches/visible-automation-cues.py
+"""
+
+import os
+import sys
+import time
+from pathlib import Path
+
+sys.path.insert(0, str(Path(__file__).resolve().parent))
+from helpers import Marionette, free_port, hidden_display, marionette_args, resolve_binary # noqa: E402
+
+JS = """
+const out = [];
+for (const win of Services.wm.getEnumerator("navigator:browser")) {
+ const ids = win.gBrowser.browsers.map(b => Number(b.getAttribute("usercontextid") || 0));
+ out.push({
+ userContextIds: ids,
+ publicIdentities: ids.filter(id => id > 0 && ContextualIdentityService.getPublicIdentityFromId(id)),
+ iconsHidden: win.document.getElementById("userContext-icons")?.hidden ?? true,
+ label: win.document.getElementById("userContext-label")?.textContent || "",
+ cursorHighlighter: !!win.document.getElementById("cursor-highlighter"),
+ });
+}
+return out;
+"""
+
+
+def inspect(binary: Path, display: str, config=None):
+ from camoufox.sync_api import Camoufox
+ port = free_port()
+ os.environ.update(DISPLAY=display, MOZ_ENABLE_WAYLAND="0", GDK_BACKEND="x11")
+ os.environ.pop("WAYLAND_DISPLAY", None)
+ with Camoufox(headless=False, executable_path=str(binary), args=marionette_args(),
+ firefox_user_prefs={"marionette.port": port}, config=config or {},
+ i_know_what_im_doing=True) as browser:
+ context = browser.new_context()
+ page = context.new_page()
+ page.goto("about:blank")
+ page.mouse.move(400, 300)
+ time.sleep(2)
+ m = Marionette(port)
+ try:
+ return m.js(JS)
+ finally:
+ m.close()
+
+
+def main() -> int:
+ binary = resolve_binary()
+ failures = []
+ with hidden_display() as display:
+ windows = inspect(binary, display)
+ for w in windows:
+ print(f" window: contexts={w['userContextIds']} public={w['publicIdentities']} "
+ f"iconsHidden={w['iconsHidden']} label={w['label']!r} cursorHighlighter={w['cursorHighlighter']}")
+ if not any(i > 0 for w in windows for i in w["userContextIds"]):
+ failures.append("no tab in a juggler container -- the container check would be vacuous")
+ if any(w["publicIdentities"] for w in windows):
+ failures.append("a juggler container is a PUBLIC identity (URL-bar label shown)")
+ if not all(w["iconsHidden"] for w in windows):
+ failures.append("#userContext-icons is visible")
+ if any(w["cursorHighlighter"] for w in windows):
+ failures.append("#cursor-highlighter exists with the default config")
+
+ opted_in = inspect(binary, display, config={"showcursor": True})
+ print(f" showcursor=true -> cursorHighlighter={[w['cursorHighlighter'] for w in opted_in]}")
+ if not any(w["cursorHighlighter"] for w in opted_in):
+ failures.append("showcursor=true no longer creates #cursor-highlighter (checked id is stale)")
+
+ print()
+ if failures:
+ for f in failures:
+ print(f"FAIL: {f}")
+ return 1
+ print("PASS: no container label and no cursor overlay in the browser UI.")
+ return 0
+
+
+if __name__ == "__main__":
+ sys.exit(main())
diff --git a/tests/patches/windows-exe-manifest.py b/tests/patches/windows-exe-manifest.py
new file mode 100644
index 000000000..62beec7b5
--- /dev/null
+++ b/tests/patches/windows-exe-manifest.py
@@ -0,0 +1,69 @@
+r"""
+Verify camoufox.exe embeds Firefox's application manifest.
+
+config/rules.mk embeds $(srcdir)/.manifest, and browser/app only has
+firefox.exe.manifest, so --with-app-name=camoufox built a camoufox.exe with NO
+manifest: no Windows 10 supportedOS GUID, no Common-Controls v6 / mozglue
+side-by-side declaration, for the exe and every child process it launches.
+patches/windows-exe-manifest.patch adds browser/app/camoufox.exe.manifest as a
+byte-identical copy.
+
+Static guard (runs on any host): the patch creates exactly the source tree's
+firefox.exe.manifest; and when a Windows package is present in dist/, its
+camoufox.exe contains the Windows 10 supportedOS GUID.
+
+ python tests/patches/windows-exe-manifest.py
+"""
+
+import sys
+import zipfile
+from pathlib import Path
+
+REPO_ROOT = Path(__file__).resolve().parents[2]
+WIN10_GUID = b"8e0f7a12-bfb3-4fe8-b9a5-48fd50a15a9a"
+
+
+def patch_content(patch: Path) -> bytes:
+ lines = patch.read_text().splitlines()
+ start = next(i for i, l in enumerate(lines) if l.startswith("+++ b/browser/app/camoufox.exe.manifest"))
+ body = [l[1:] for l in lines[start + 2:] if l.startswith("+")]
+ return ("\n".join(body) + "\n").encode()
+
+
+def main() -> int:
+ failures = []
+ patch = REPO_ROOT / "patches/windows-exe-manifest.patch"
+ if not patch.exists():
+ failures.append("patches/windows-exe-manifest.patch is missing")
+ else:
+ added = patch_content(patch)
+ sources = sorted(REPO_ROOT.glob("camoufox-*/browser/app/firefox.exe.manifest"))
+ if sources:
+ if added != sources[-1].read_bytes():
+ failures.append(f"camoufox.exe.manifest differs from {sources[-1].relative_to(REPO_ROOT)}")
+ print(f" patch == {sources[-1].relative_to(REPO_ROOT)} : {added == sources[-1].read_bytes()}")
+ if WIN10_GUID not in added:
+ failures.append("the manifest does not declare Windows 10 supportedOS")
+
+ packages = sorted((REPO_ROOT / "dist").glob("camoufox-*-win.*.zip"))
+ if packages:
+ with zipfile.ZipFile(packages[-1]) as z:
+ exe = z.read("camoufox.exe")
+ embedded = WIN10_GUID in exe
+ print(f" {packages[-1].name}: camoufox.exe embeds the manifest : {embedded}")
+ if not embedded:
+ failures.append(f"{packages[-1].name}: camoufox.exe has no embedded manifest")
+ else:
+ print(" (no Windows package in dist/ -- package check skipped)")
+
+ print()
+ if failures:
+ for f in failures:
+ print(f"FAIL: {f}")
+ return 1
+ print("PASS: camoufox.exe gets Firefox's application manifest.")
+ return 0
+
+
+if __name__ == "__main__":
+ sys.exit(main())