texlive[73847] Master: asymptote 2.98 support files, x86_64-linux,

commits+karl at tug.org commits+karl at tug.org
Mon Feb 10 17:49:01 CET 2025


Revision: 73847
          https://tug.org/svn/texlive?view=revision&revision=73847
Author:   karl
Date:     2025-02-10 17:49:00 +0100 (Mon, 10 Feb 2025)
Log Message:
-----------
asymptote 2.98 support files, x86_64-linux, i386-linux, windows binaries

Modified Paths:
--------------
    trunk/Master/bin/i386-linux/asy
    trunk/Master/bin/x86_64-linux/asy
    trunk/Master/texmf-dist/asymptote/GUI/ContextWindow.py
    trunk/Master/texmf-dist/asymptote/GUI/CustMatTransform.py
    trunk/Master/texmf-dist/asymptote/GUI/SetCustomAnchor.py
    trunk/Master/texmf-dist/asymptote/GUI/Widg_addLabel.py
    trunk/Master/texmf-dist/asymptote/GUI/Widg_addPolyOpt.py
    trunk/Master/texmf-dist/asymptote/GUI/Widg_editBezier.py
    trunk/Master/texmf-dist/asymptote/GUI/Window1.py
    trunk/Master/texmf-dist/asymptote/GUI/configs/xasyconfig.cson
    trunk/Master/texmf-dist/asymptote/GUI/labelEditor.py
    trunk/Master/texmf-dist/asymptote/GUI/setup.py
    trunk/Master/texmf-dist/asymptote/GUI/xasy.py
    trunk/Master/texmf-dist/asymptote/GUI/xasy2asy.py
    trunk/Master/texmf-dist/asymptote/GUI/xasyArgs.py
    trunk/Master/texmf-dist/asymptote/GUI/xasyFile.py
    trunk/Master/texmf-dist/asymptote/GUI/xasyOptions.py
    trunk/Master/texmf-dist/asymptote/GUI/xasySvg.py
    trunk/Master/texmf-dist/asymptote/animation.asy
    trunk/Master/texmf-dist/asymptote/asy-keywords.el
    trunk/Master/texmf-dist/asymptote/asy-mode.el
    trunk/Master/texmf-dist/asymptote/feynman.asy
    trunk/Master/texmf-dist/asymptote/graph3.asy
    trunk/Master/texmf-dist/asymptote/grid3.asy
    trunk/Master/texmf-dist/asymptote/map.asy
    trunk/Master/texmf-dist/asymptote/mapArray.asy
    trunk/Master/texmf-dist/asymptote/plain.asy
    trunk/Master/texmf-dist/asymptote/plain_Label.asy
    trunk/Master/texmf-dist/asymptote/plain_arrows.asy
    trunk/Master/texmf-dist/asymptote/plain_bounds.asy
    trunk/Master/texmf-dist/asymptote/plain_boxes.asy
    trunk/Master/texmf-dist/asymptote/plain_constants.asy
    trunk/Master/texmf-dist/asymptote/plain_filldraw.asy
    trunk/Master/texmf-dist/asymptote/plain_margins.asy
    trunk/Master/texmf-dist/asymptote/plain_markers.asy
    trunk/Master/texmf-dist/asymptote/plain_paths.asy
    trunk/Master/texmf-dist/asymptote/plain_picture.asy
    trunk/Master/texmf-dist/asymptote/plain_prethree.asy
    trunk/Master/texmf-dist/asymptote/plain_scaling.asy
    trunk/Master/texmf-dist/asymptote/plain_shipout.asy
    trunk/Master/texmf-dist/asymptote/rational.asy
    trunk/Master/texmf-dist/asymptote/rationalSimplex.asy
    trunk/Master/texmf-dist/asymptote/slide.asy
    trunk/Master/texmf-dist/asymptote/three.asy
    trunk/Master/texmf-dist/asymptote/three_surface.asy
    trunk/Master/texmf-dist/asymptote/v3dheadertypes.asy
    trunk/Master/texmf-dist/asymptote/v3dtypes.asy
    trunk/Master/texmf-dist/asymptote/version.asy
    trunk/Master/texmf-dist/asymptote/webgl/asygl.js
    trunk/Master/texmf-dist/doc/asymptote/CAD.pdf
    trunk/Master/texmf-dist/doc/asymptote/TeXShopAndAsymptote.pdf
    trunk/Master/texmf-dist/doc/asymptote/asy-latex.pdf
    trunk/Master/texmf-dist/doc/asymptote/asyRefCard.pdf
    trunk/Master/texmf-dist/doc/asymptote/asymptote.pdf
    trunk/Master/texmf-dist/doc/asymptote/examples/AiryDisk.asy
    trunk/Master/texmf-dist/doc/asymptote/examples/RiemannSphere.asy
    trunk/Master/texmf-dist/doc/asymptote/examples/RiemannSurface.asy
    trunk/Master/texmf-dist/doc/asymptote/examples/RiemannSurfaceRoot.asy
    trunk/Master/texmf-dist/doc/asymptote/examples/arrows3.asy
    trunk/Master/texmf-dist/doc/asymptote/examples/axis3.asy
    trunk/Master/texmf-dist/doc/asymptote/examples/clockarray.asy
    trunk/Master/texmf-dist/doc/asymptote/examples/cyclohexane.asy
    trunk/Master/texmf-dist/doc/asymptote/examples/elevation.asy
    trunk/Master/texmf-dist/doc/asymptote/examples/extrudedcontour.asy
    trunk/Master/texmf-dist/doc/asymptote/examples/filesurface.asy
    trunk/Master/texmf-dist/doc/asymptote/examples/fillcontour.asy
    trunk/Master/texmf-dist/doc/asymptote/examples/gamma3.asy
    trunk/Master/texmf-dist/doc/asymptote/examples/intro.asy
    trunk/Master/texmf-dist/doc/asymptote/examples/pdb.asy
    trunk/Master/texmf-dist/doc/asymptote/examples/projectelevation.asy
    trunk/Master/texmf-dist/doc/asymptote/examples/slidedemo.asy
    trunk/Master/texmf-dist/doc/asymptote/examples/slope.asy
    trunk/Master/texmf-dist/doc/asymptote/examples/smoothelevation.asy
    trunk/Master/texmf-dist/doc/asymptote/examples/soccerball.asy
    trunk/Master/texmf-dist/doc/asymptote/examples/splitpatch.asy
    trunk/Master/texmf-dist/doc/asymptote/examples/teapot.asy
    trunk/Master/texmf-dist/doc/asymptote/examples/truncatedIcosahedron.asy
    trunk/Master/texmf-dist/doc/asymptote/examples/twistedtubes.asy
    trunk/Master/texmf-dist/doc/asymptote/examples/venn.asy
    trunk/Master/texmf-dist/doc/info/asy-faq.info
    trunk/Master/texmf-dist/doc/info/asymptote.info
    trunk/Master/texmf-dist/doc/man/man1/asy.1
    trunk/Master/texmf-dist/doc/man/man1/asy.man1.pdf
    trunk/Master/texmf-dist/doc/man/man1/xasy.man1.pdf
    trunk/Master/tlpkg/asymptote64/asy.exe
    trunk/Master/tlpkg/bin/tl-update-asy

Added Paths:
-----------
    trunk/Master/texmf-dist/asymptote/GUI/buildtool.py
    trunk/Master/texmf-dist/asymptote/GUI/xasyicons/
    trunk/Master/texmf-dist/asymptote/GUI/xasyicons/icons_rc.py
    trunk/Master/texmf-dist/asymptote/GUI/xasyqtui/
    trunk/Master/texmf-dist/asymptote/GUI/xasyqtui/custMatTransform.py
    trunk/Master/texmf-dist/asymptote/GUI/xasyqtui/labelTextEditor.py
    trunk/Master/texmf-dist/asymptote/GUI/xasyqtui/setCustomAnchor.py
    trunk/Master/texmf-dist/asymptote/GUI/xasyqtui/widg_addLabel.py
    trunk/Master/texmf-dist/asymptote/GUI/xasyqtui/widg_addPolyOpt.py
    trunk/Master/texmf-dist/asymptote/GUI/xasyqtui/widg_editBezier.py
    trunk/Master/texmf-dist/asymptote/GUI/xasyqtui/widgetPointEditor.py
    trunk/Master/texmf-dist/asymptote/GUI/xasyqtui/window1.py
    trunk/Master/texmf-dist/asymptote/GUI/xasyversion/
    trunk/Master/texmf-dist/asymptote/GUI/xasyversion/version.py
    trunk/Master/texmf-dist/asymptote/simplex2.asy

Removed Paths:
-------------
    trunk/Master/texmf-dist/asymptote/GUI/icons_rc.py
    trunk/Master/texmf-dist/asymptote/GUI/pyUIClass/

Modified: trunk/Master/bin/i386-linux/asy
===================================================================
(Binary files differ)

Modified: trunk/Master/bin/x86_64-linux/asy
===================================================================
(Binary files differ)

Modified: trunk/Master/texmf-dist/asymptote/GUI/ContextWindow.py
===================================================================
--- trunk/Master/texmf-dist/asymptote/GUI/ContextWindow.py	2025-02-10 15:30:00 UTC (rev 73846)
+++ trunk/Master/texmf-dist/asymptote/GUI/ContextWindow.py	2025-02-10 16:49:00 UTC (rev 73847)
@@ -3,26 +3,12 @@
 import PyQt5.QtWidgets as Qw
 import PyQt5.QtGui as Qg
 import PyQt5.QtCore as Qc
-import xasyVersion
 
-import xasyUtils as xu
 import xasy2asy as x2a
-import xasyFile as xf
-import xasyOptions as xo
-import UndoRedoStack as Urs
-import xasyArgs as xa
-import xasyBezierInterface as xbi
+
 from xasyTransform import xasyTransform as xT
-import xasyStrings as xs
 
-import PrimitiveShape
-import InplaceAddObj
 
-import CustMatTransform
-import SetCustomAnchor
-import GuidesManager
-import time
-
 class AnotherWindow(Qw.QWidget):
     def __init__(self, shape, parent):
         super().__init__()

Modified: trunk/Master/texmf-dist/asymptote/GUI/CustMatTransform.py
===================================================================
--- trunk/Master/texmf-dist/asymptote/GUI/CustMatTransform.py	2025-02-10 15:30:00 UTC (rev 73846)
+++ trunk/Master/texmf-dist/asymptote/GUI/CustMatTransform.py	2025-02-10 16:49:00 UTC (rev 73847)
@@ -5,7 +5,7 @@
 import PyQt5.QtCore as QtCore
 import numpy as numpy
 import xasy2asy as xasy2asy
-from pyUIClass.custMatTransform import Ui_Dialog
+from xasyqtui.custMatTransform import Ui_Dialog
 
 
 class CustMatTransform(QtWidgets.QDialog):

Modified: trunk/Master/texmf-dist/asymptote/GUI/SetCustomAnchor.py
===================================================================
--- trunk/Master/texmf-dist/asymptote/GUI/SetCustomAnchor.py	2025-02-10 15:30:00 UTC (rev 73846)
+++ trunk/Master/texmf-dist/asymptote/GUI/SetCustomAnchor.py	2025-02-10 16:49:00 UTC (rev 73847)
@@ -3,7 +3,7 @@
 import PyQt5.QtWidgets as QtWidgets
 import PyQt5.QtGui as QtGui
 import PyQt5.QtCore as QtCore
-from pyUIClass.setCustomAnchor import Ui_Dialog
+from xasyqtui.setCustomAnchor import Ui_Dialog
 
 
 class CustomAnchorDialog(QtWidgets.QDialog):

Modified: trunk/Master/texmf-dist/asymptote/GUI/Widg_addLabel.py
===================================================================
--- trunk/Master/texmf-dist/asymptote/GUI/Widg_addLabel.py	2025-02-10 15:30:00 UTC (rev 73846)
+++ trunk/Master/texmf-dist/asymptote/GUI/Widg_addLabel.py	2025-02-10 16:49:00 UTC (rev 73847)
@@ -1,6 +1,6 @@
 #!/usr/bin/env python3
 
-from pyUIClass.widg_addLabel import Ui_Form
+from xasyqtui.widg_addLabel import Ui_Form
 import PyQt5.QtWidgets as QtWidgets
 import PyQt5.QtGui as QtGui
 

Modified: trunk/Master/texmf-dist/asymptote/GUI/Widg_addPolyOpt.py
===================================================================
--- trunk/Master/texmf-dist/asymptote/GUI/Widg_addPolyOpt.py	2025-02-10 15:30:00 UTC (rev 73846)
+++ trunk/Master/texmf-dist/asymptote/GUI/Widg_addPolyOpt.py	2025-02-10 16:49:00 UTC (rev 73847)
@@ -1,6 +1,6 @@
 #!/usr/bin/env python3
 
-from pyUIClass.widg_addPolyOpt import Ui_Form
+from xasyqtui.widg_addPolyOpt import Ui_Form
 import PyQt5.QtWidgets as QtWidgets
 import PyQt5.QtGui as QtGui
 

Modified: trunk/Master/texmf-dist/asymptote/GUI/Widg_editBezier.py
===================================================================
--- trunk/Master/texmf-dist/asymptote/GUI/Widg_editBezier.py	2025-02-10 15:30:00 UTC (rev 73846)
+++ trunk/Master/texmf-dist/asymptote/GUI/Widg_editBezier.py	2025-02-10 16:49:00 UTC (rev 73847)
@@ -1,6 +1,6 @@
 #!/usr/bin/env python3
 
-from pyUIClass.widg_editBezier import Ui_Form
+from xasyqtui.widg_editBezier import Ui_Form
 
 import PyQt5.QtWidgets as QtWidgets
 import PyQt5.QtCore as QtCore

Modified: trunk/Master/texmf-dist/asymptote/GUI/Window1.py
===================================================================
--- trunk/Master/texmf-dist/asymptote/GUI/Window1.py	2025-02-10 15:30:00 UTC (rev 73846)
+++ trunk/Master/texmf-dist/asymptote/GUI/Window1.py	2025-02-10 16:49:00 UTC (rev 73847)
@@ -1,11 +1,11 @@
 #!/usr/bin/env python3
 
-from pyUIClass.window1 import Ui_MainWindow
+from xasyqtui.window1 import Ui_MainWindow
 
 import PyQt5.QtWidgets as Qw
 import PyQt5.QtGui as Qg
 import PyQt5.QtCore as Qc
-import xasyVersion
+from xasyversion.version import VERSION as xasyVersion
 
 import numpy as np
 import os
@@ -143,13 +143,14 @@
         if self.settings['asyBaseLocation'] is not None:
             os.environ['ASYMPTOTE_DIR'] = self.settings['asyBaseLocation']
 
-        if self.args.asypath is not None:
-            asyPath = self.args.asypath
-        else:
-            asyPath = self.settings['asyPath']
+        addrAsyArgsRaw: str = self.args.additionalAsyArgs or \
+            self.settings.get('additionalAsyArgs', "")
 
-        self.asyPath = asyPath
-        self.asyEngine = x2a.AsymptoteEngine(self.asyPath)
+        self.asyPath = self.args.asypath or self.settings.get('asyPath')
+        self.asyEngine = x2a.AsymptoteEngine(
+            self.asyPath,
+            None if not addrAsyArgsRaw else addrAsyArgsRaw.split(',')
+        )
 
         try:
             self.asyEngine.start()
@@ -936,7 +937,7 @@
         webbrowser.open_new(asyManualURL)
 
     def actionAbout(self):
-        Qw.QMessageBox.about(self,"xasy","This is xasy "+xasyVersion.xasyVersion+"; a graphical front end to the Asymptote vector graphics language: https://asymptote.sourceforge.io/")
+        Qw.QMessageBox.about(self,"xasy","This is xasy "+xasyVersion+"; a graphical front end to the Asymptote vector graphics language: https://asymptote.sourceforge.io/")
 
     def actionExport(self, pathToFile):
         asyFile = io.open(os.path.realpath(pathToFile), 'w')

Added: trunk/Master/texmf-dist/asymptote/GUI/buildtool.py
===================================================================
--- trunk/Master/texmf-dist/asymptote/GUI/buildtool.py	                        (rev 0)
+++ trunk/Master/texmf-dist/asymptote/GUI/buildtool.py	2025-02-10 16:49:00 UTC (rev 73847)
@@ -0,0 +1,122 @@
+#!/usr/bin/env python3
+import argparse
+import pathlib
+import sys
+import subprocess
+import shutil
+from typing import Optional
+
+from PyQt5.uic import compileUiDir
+import os
+
+BUILD_ROOT_DIRECTORY = pathlib.Path(os.path.dirname(os.path.abspath(__file__)))
+sys.path.append(str(BUILD_ROOT_DIRECTORY.parent))
+
+import determine_pkg_info
+
+XASY_ICONS_MODULE_NAME = "xasyicons"
+
+PY_UI_FILE_DIR = BUILD_ROOT_DIRECTORY / "xasyqtui"
+PY_ICONS_FILE_DIR = BUILD_ROOT_DIRECTORY / XASY_ICONS_MODULE_NAME
+PY_VERSION_MODULE_DIR = BUILD_ROOT_DIRECTORY / "xasyversion"
+
+
+def _map_ui_file(_: str, fileName: str):
+    return str(PY_UI_FILE_DIR), fileName
+
+
+def make_init_py_at_dir(dir_name: pathlib.Path):
+    (dir_name / "__init__.py").touch(exist_ok=True)
+
+
+def build_ui():
+    compileUiDir(
+        "windows",
+        map=_map_ui_file,
+        from_imports=True,
+        import_from=XASY_ICONS_MODULE_NAME,
+    )
+    make_init_py_at_dir(PY_UI_FILE_DIR)
+
+
+def build_icons():
+    PY_ICONS_FILE_DIR.mkdir(exist_ok=True)
+    make_init_py_at_dir(PY_ICONS_FILE_DIR)
+    subprocess.run(
+        [
+            "pyrcc5",
+            str(BUILD_ROOT_DIRECTORY / "res" / "icons.qrc"),
+            "-o",
+            str(PY_ICONS_FILE_DIR / "icons_rc.py"),
+        ]
+    )
+
+
+def determine_asy_version() -> str:
+    version_base = determine_pkg_info.determine_asy_pkg_info(
+        BUILD_ROOT_DIRECTORY.parent / "configure.ac"
+    ).get("version-base")
+    if not version_base:
+        return "0.0.0-SNAPSHOT"
+    return version_base
+
+
+def build_verison_module(version_override: Optional[str] = None):
+    PY_VERSION_MODULE_DIR.mkdir(exist_ok=True)
+    make_init_py_at_dir(PY_VERSION_MODULE_DIR)
+    if version_override is not None:
+        version = version_override
+    else:
+        version = determine_asy_version()
+    with open(PY_VERSION_MODULE_DIR / "version.py", "w", encoding="utf-8") as f:
+        f.write(f'VERSION="{version}"\n')
+
+
+def clean():
+    if PY_UI_FILE_DIR.exists():
+        shutil.rmtree(PY_UI_FILE_DIR)
+
+    if PY_ICONS_FILE_DIR.exists():
+        shutil.rmtree(PY_ICONS_FILE_DIR)
+
+    if PY_VERSION_MODULE_DIR.exists():
+        shutil.rmtree(PY_VERSION_MODULE_DIR)
+
+
+def parse_args():
+    parser = argparse.ArgumentParser()
+    subparsers = parser.add_subparsers(help="subcommands", dest="subcommand")
+    version_parser = subparsers.add_parser(
+        "buildversionmodule", help="build version module"
+    )
+    build_parser = subparsers.add_parser("build", help="build command")
+    for subparser in [build_parser, version_parser]:
+        subparser.add_argument("--version-override", required=False, type=str)
+
+    subparsers.add_parser("clean", help="clean command")
+    subparsers.add_parser("buildicons", help="build icons")
+    subparsers.add_parser("buildui", help="build ui files")
+
+    return parser.parse_args()
+
+
+def main():
+    args = parse_args()
+    if args.subcommand == "buildui":
+        build_ui()
+    elif args.subcommand == "buildicons":
+        build_icons()
+    elif args.subcommand == "buildversionmodule":
+        build_verison_module(args.version_override)
+    elif args.subcommand == "build":
+        build_ui()
+        build_icons()
+        build_verison_module(args.version_override)
+    elif args.subcommand == "clean":
+        clean()
+    else:
+        raise RuntimeError("Unknown subcommand")
+
+
+if __name__ == "__main__":
+    main()


Property changes on: trunk/Master/texmf-dist/asymptote/GUI/buildtool.py
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Modified: trunk/Master/texmf-dist/asymptote/GUI/configs/xasyconfig.cson
===================================================================
--- trunk/Master/texmf-dist/asymptote/GUI/configs/xasyconfig.cson	2025-02-10 15:30:00 UTC (rev 73846)
+++ trunk/Master/texmf-dist/asymptote/GUI/configs/xasyconfig.cson	2025-02-10 16:49:00 UTC (rev 73847)
@@ -1,6 +1,6 @@
 # Default Options for xasy
 
-# External editor. $asypath will be replaced by the current file. 
+# External editor. $asypath will be replaced by the current file.
 externalEditor: "vi"
 externalEditorArgs: ["$asypath"]
 
@@ -7,7 +7,7 @@
 # Path to Asymptote executable
 asyPath: "asy"
 
-# Overwrites the ASYMPTOTE_DIR Environment variable if set. Otherwise, leaves asymptote to decide. 
+# Overwrites the ASYMPTOTE_DIR Environment variable if set. Otherwise, leaves asymptote to decide.
 asyBaseLocation: null
 
 # Show Debugging Information
@@ -16,10 +16,10 @@
 # Default Pen Options
 defaultPenOptions: ""
 
-# Default Pen Color 
+# Default Pen Color
 defaultPenColor: "#000000"
 
-# 
+#
 defaultPenWidth: 0.5
 useLegacyDrawMode: false
 enableImmediatePreview: true
@@ -26,11 +26,11 @@
 useDegrees: false
 groupObjDefault: false
 
-# 
+#
 terminalFont: "Courier"
 terminalFontSize: 9
 
-# 
+#
 defaultShowAxes: true
 defaultShowGrid: false
 defaultGridSnap: false
@@ -52,6 +52,11 @@
 minimumMagnification: 0.01
 maximumMagnification: 100
 
+# SVG options
+# If null, use "rsvg-convert".
+# otherwise use the converter in the path
+rsvgConverterPath: null
+
 # Debug Mode
 debugMode: true
 

Deleted: trunk/Master/texmf-dist/asymptote/GUI/icons_rc.py
===================================================================
--- trunk/Master/texmf-dist/asymptote/GUI/icons_rc.py	2025-02-10 15:30:00 UTC (rev 73846)
+++ trunk/Master/texmf-dist/asymptote/GUI/icons_rc.py	2025-02-10 16:49:00 UTC (rev 73847)
@@ -1,2903 +0,0 @@
-# -*- coding: utf-8 -*-
-
-# Resource object code
-#
-# Created by: The Resource Compiler for PyQt5 (Qt v5.15.11)
-#
-# WARNING! All changes made in this file will be lost!
-
-from PyQt5 import QtCore
-
-qt_resource_data = b"\
-\x00\x00\x02\xab\
-\x3c\
-\x3f\x78\x6d\x6c\x20\x76\x65\x72\x73\x69\x6f\x6e\x3d\x22\x31\x2e\
-\x30\x22\x20\x65\x6e\x63\x6f\x64\x69\x6e\x67\x3d\x22\x75\x74\x66\
-\x2d\x38\x22\x3f\x3e\x0a\x3c\x21\x2d\x2d\x20\x47\x65\x6e\x65\x72\
-\x61\x74\x6f\x72\x3a\x20\x41\x64\x6f\x62\x65\x20\x49\x6c\x6c\x75\
-\x73\x74\x72\x61\x74\x6f\x72\x20\x31\x36\x2e\x32\x2e\x31\x2c\x20\
-\x53\x56\x47\x20\x45\x78\x70\x6f\x72\x74\x20\x50\x6c\x75\x67\x2d\
-\x49\x6e\x20\x2e\x20\x53\x56\x47\x20\x56\x65\x72\x73\x69\x6f\x6e\
-\x3a\x20\x36\x2e\x30\x30\x20\x42\x75\x69\x6c\x64\x20\x30\x29\x20\
-\x20\x2d\x2d\x3e\x0a\x3c\x21\x44\x4f\x43\x54\x59\x50\x45\x20\x73\
-\x76\x67\x20\x50\x55\x42\x4c\x49\x43\x20\x22\x2d\x2f\x2f\x57\x33\
-\x43\x2f\x2f\x44\x54\x44\x20\x53\x56\x47\x20\x31\x2e\x31\x2f\x2f\
-\x45\x4e\x22\x20\x22\x68\x74\x74\x70\x3a\x2f\x2f\x77\x77\x77\x2e\
-\x77\x33\x2e\x6f\x72\x67\x2f\x47\x72\x61\x70\x68\x69\x63\x73\x2f\
-\x53\x56\x47\x2f\x31\x2e\x31\x2f\x44\x54\x44\x2f\x73\x76\x67\x31\
-\x31\x2e\x64\x74\x64\x22\x3e\x0a\x3c\x73\x76\x67\x20\x76\x65\x72\
-\x73\x69\x6f\x6e\x3d\x22\x31\x2e\x31\x22\x20\x69\x64\x3d\x22\x4c\
-\x61\x79\x65\x72\x5f\x31\x22\x20\x78\x6d\x6c\x6e\x73\x3d\x22\x68\
-\x74\x74\x70\x3a\x2f\x2f\x77\x77\x77\x2e\x77\x33\x2e\x6f\x72\x67\
-\x2f\x32\x30\x30\x30\x2f\x73\x76\x67\x22\x20\x78\x6d\x6c\x6e\x73\
-\x3a\x78\x6c\x69\x6e\x6b\x3d\x22\x68\x74\x74\x70\x3a\x2f\x2f\x77\
-\x77\x77\x2e\x77\x33\x2e\x6f\x72\x67\x2f\x31\x39\x39\x39\x2f\x78\
-\x6c\x69\x6e\x6b\x22\x20\x78\x3d\x22\x30\x70\x78\x22\x20\x79\x3d\
-\x22\x30\x70\x78\x22\x0a\x09\x20\x77\x69\x64\x74\x68\x3d\x22\x35\
-\x31\x32\x70\x78\x22\x20\x68\x65\x69\x67\x68\x74\x3d\x22\x35\x31\
-\x32\x70\x78\x22\x20\x76\x69\x65\x77\x42\x6f\x78\x3d\x22\x30\x20\
-\x30\x20\x35\x31\x32\x20\x35\x31\x32\x22\x20\x65\x6e\x61\x62\x6c\
-\x65\x2d\x62\x61\x63\x6b\x67\x72\x6f\x75\x6e\x64\x3d\x22\x6e\x65\
-\x77\x20\x30\x20\x30\x20\x35\x31\x32\x20\x35\x31\x32\x22\x20\x78\
-\x6d\x6c\x3a\x73\x70\x61\x63\x65\x3d\x22\x70\x72\x65\x73\x65\x72\
-\x76\x65\x22\x3e\x0a\x3c\x67\x20\x69\x64\x3d\x22\x49\x63\x6f\x6e\
-\x5f\x35\x5f\x22\x3e\x0a\x09\x3c\x67\x3e\x0a\x09\x09\x3c\x70\x6f\
-\x6c\x79\x67\x6f\x6e\x20\x70\x6f\x69\x6e\x74\x73\x3d\x22\x34\x30\
-\x35\x2c\x31\x33\x36\x2e\x37\x39\x38\x20\x33\x37\x35\x2e\x32\x30\
-\x32\x2c\x31\x30\x37\x20\x32\x35\x36\x2c\x32\x32\x36\x2e\x32\x30\
-\x32\x20\x31\x33\x36\x2e\x37\x39\x38\x2c\x31\x30\x37\x20\x31\x30\
-\x37\x2c\x31\x33\x36\x2e\x37\x39\x38\x20\x32\x32\x36\x2e\x32\x30\
-\x32\x2c\x32\x35\x36\x20\x31\x30\x37\x2c\x33\x37\x35\x2e\x32\x30\
-\x32\x20\x31\x33\x36\x2e\x37\x39\x38\x2c\x34\x30\x35\x20\x32\x35\
-\x36\x2c\x32\x38\x35\x2e\x37\x39\x38\x20\x0a\x09\x09\x09\x33\x37\
-\x35\x2e\x32\x30\x32\x2c\x34\x30\x35\x20\x34\x30\x35\x2c\x33\x37\
-\x35\x2e\x32\x30\x32\x20\x32\x38\x35\x2e\x37\x39\x38\x2c\x32\x35\
-\x36\x20\x09\x09\x22\x2f\x3e\x0a\x09\x3c\x2f\x67\x3e\x0a\x3c\x2f\
-\x67\x3e\x0a\x3c\x2f\x73\x76\x67\x3e\x0a\
-\x00\x00\x03\xdc\
-\x3c\
-\x3f\x78\x6d\x6c\x20\x76\x65\x72\x73\x69\x6f\x6e\x3d\x22\x31\x2e\
-\x30\x22\x20\x65\x6e\x63\x6f\x64\x69\x6e\x67\x3d\x22\x75\x74\x66\
-\x2d\x38\x22\x3f\x3e\x0a\x3c\x21\x2d\x2d\x20\x47\x65\x6e\x65\x72\
-\x61\x74\x6f\x72\x3a\x20\x41\x64\x6f\x62\x65\x20\x49\x6c\x6c\x75\
-\x73\x74\x72\x61\x74\x6f\x72\x20\x31\x36\x2e\x32\x2e\x31\x2c\x20\
-\x53\x56\x47\x20\x45\x78\x70\x6f\x72\x74\x20\x50\x6c\x75\x67\x2d\
-\x49\x6e\x20\x2e\x20\x53\x56\x47\x20\x56\x65\x72\x73\x69\x6f\x6e\
-\x3a\x20\x36\x2e\x30\x30\x20\x42\x75\x69\x6c\x64\x20\x30\x29\x20\
-\x20\x2d\x2d\x3e\x0a\x3c\x21\x44\x4f\x43\x54\x59\x50\x45\x20\x73\
-\x76\x67\x20\x50\x55\x42\x4c\x49\x43\x20\x22\x2d\x2f\x2f\x57\x33\
-\x43\x2f\x2f\x44\x54\x44\x20\x53\x56\x47\x20\x31\x2e\x31\x2f\x2f\
-\x45\x4e\x22\x20\x22\x68\x74\x74\x70\x3a\x2f\x2f\x77\x77\x77\x2e\
-\x77\x33\x2e\x6f\x72\x67\x2f\x47\x72\x61\x70\x68\x69\x63\x73\x2f\
-\x53\x56\x47\x2f\x31\x2e\x31\x2f\x44\x54\x44\x2f\x73\x76\x67\x31\
-\x31\x2e\x64\x74\x64\x22\x3e\x0a\x3c\x73\x76\x67\x20\x76\x65\x72\
-\x73\x69\x6f\x6e\x3d\x22\x31\x2e\x31\x22\x20\x69\x64\x3d\x22\x4c\
-\x61\x79\x65\x72\x5f\x31\x22\x20\x78\x6d\x6c\x6e\x73\x3d\x22\x68\
-\x74\x74\x70\x3a\x2f\x2f\x77\x77\x77\x2e\x77\x33\x2e\x6f\x72\x67\
-\x2f\x32\x30\x30\x30\x2f\x73\x76\x67\x22\x20\x78\x6d\x6c\x6e\x73\
-\x3a\x78\x6c\x69\x6e\x6b\x3d\x22\x68\x74\x74\x70\x3a\x2f\x2f\x77\
-\x77\x77\x2e\x77\x33\x2e\x6f\x72\x67\x2f\x31\x39\x39\x39\x2f\x78\
-\x6c\x69\x6e\x6b\x22\x20\x78\x3d\x22\x30\x70\x78\x22\x20\x79\x3d\
-\x22\x30\x70\x78\x22\x0a\x09\x20\x77\x69\x64\x74\x68\x3d\x22\x35\
-\x31\x32\x70\x78\x22\x20\x68\x65\x69\x67\x68\x74\x3d\x22\x35\x31\
-\x32\x70\x78\x22\x20\x76\x69\x65\x77\x42\x6f\x78\x3d\x22\x30\x20\
-\x30\x20\x35\x31\x32\x20\x35\x31\x32\x22\x20\x73\x74\x79\x6c\x65\
-\x3d\x22\x65\x6e\x61\x62\x6c\x65\x2d\x62\x61\x63\x6b\x67\x72\x6f\
-\x75\x6e\x64\x3a\x6e\x65\x77\x20\x30\x20\x30\x20\x35\x31\x32\x20\
-\x35\x31\x32\x3b\x22\x20\x78\x6d\x6c\x3a\x73\x70\x61\x63\x65\x3d\
-\x22\x70\x72\x65\x73\x65\x72\x76\x65\x22\x3e\x0a\x3c\x67\x3e\x0a\
-\x09\x3c\x70\x61\x74\x68\x20\x64\x3d\x22\x4d\x32\x35\x36\x2c\x31\
-\x32\x38\x63\x2d\x38\x31\x2e\x39\x2c\x30\x2d\x31\x34\x35\x2e\x37\
-\x2c\x34\x38\x2e\x38\x2d\x32\x32\x34\x2c\x31\x32\x38\x63\x36\x37\
-\x2e\x34\x2c\x36\x37\x2e\x37\x2c\x31\x32\x34\x2c\x31\x32\x38\x2c\
-\x32\x32\x34\x2c\x31\x32\x38\x63\x39\x39\x2e\x39\x2c\x30\x2c\x31\
-\x37\x33\x2e\x34\x2d\x37\x36\x2e\x34\x2c\x32\x32\x34\x2d\x31\x32\
-\x36\x2e\x36\x0a\x09\x09\x43\x34\x32\x38\x2e\x32\x2c\x31\x39\x38\
-\x2e\x36\x2c\x33\x35\x34\x2e\x38\x2c\x31\x32\x38\x2c\x32\x35\x36\
-\x2c\x31\x32\x38\x7a\x20\x4d\x32\x35\x36\x2c\x33\x34\x37\x2e\x33\
-\x63\x2d\x34\x39\x2e\x34\x2c\x30\x2d\x38\x39\x2e\x36\x2d\x34\x31\
-\x2d\x38\x39\x2e\x36\x2d\x39\x31\x2e\x33\x63\x30\x2d\x35\x30\x2e\
-\x34\x2c\x34\x30\x2e\x32\x2d\x39\x31\x2e\x33\x2c\x38\x39\x2e\x36\
-\x2d\x39\x31\x2e\x33\x73\x38\x39\x2e\x36\x2c\x34\x31\x2c\x38\x39\
-\x2e\x36\x2c\x39\x31\x2e\x33\x0a\x09\x09\x43\x33\x34\x35\x2e\x36\
-\x2c\x33\x30\x36\x2e\x34\x2c\x33\x30\x35\x2e\x34\x2c\x33\x34\x37\
-\x2e\x33\x2c\x32\x35\x36\x2c\x33\x34\x37\x2e\x33\x7a\x22\x2f\x3e\
-\x0a\x09\x3c\x67\x3e\x0a\x09\x09\x3c\x70\x61\x74\x68\x20\x64\x3d\
-\x22\x4d\x32\x35\x36\x2c\x32\x32\x34\x63\x30\x2d\x37\x2e\x39\x2c\
-\x32\x2e\x39\x2d\x31\x35\x2e\x31\x2c\x37\x2e\x36\x2d\x32\x30\x2e\
-\x37\x63\x2d\x32\x2e\x35\x2d\x30\x2e\x34\x2d\x35\x2d\x30\x2e\x36\
-\x2d\x37\x2e\x36\x2d\x30\x2e\x36\x63\x2d\x32\x38\x2e\x38\x2c\x30\
-\x2d\x35\x32\x2e\x33\x2c\x32\x33\x2e\x39\x2d\x35\x32\x2e\x33\x2c\
-\x35\x33\x2e\x33\x63\x30\x2c\x32\x39\x2e\x34\x2c\x32\x33\x2e\x35\
-\x2c\x35\x33\x2e\x33\x2c\x35\x32\x2e\x33\x2c\x35\x33\x2e\x33\x0a\
-\x09\x09\x09\x73\x35\x32\x2e\x33\x2d\x32\x33\x2e\x39\x2c\x35\x32\
-\x2e\x33\x2d\x35\x33\x2e\x33\x63\x30\x2d\x32\x2e\x33\x2d\x30\x2e\
-\x32\x2d\x34\x2e\x36\x2d\x30\x2e\x34\x2d\x36\x2e\x39\x63\x2d\x35\
-\x2e\x35\x2c\x34\x2e\x33\x2d\x31\x32\x2e\x33\x2c\x36\x2e\x39\x2d\
-\x31\x39\x2e\x38\x2c\x36\x2e\x39\x43\x32\x37\x30\x2e\x33\x2c\x32\
-\x35\x36\x2c\x32\x35\x36\x2c\x32\x34\x31\x2e\x37\x2c\x32\x35\x36\
-\x2c\x32\x32\x34\x7a\x22\x2f\x3e\x0a\x09\x3c\x2f\x67\x3e\x0a\x3c\
-\x2f\x67\x3e\x0a\x3c\x2f\x73\x76\x67\x3e\x0a\
-\x00\x00\x04\xca\
-\x3c\
-\x3f\x78\x6d\x6c\x20\x76\x65\x72\x73\x69\x6f\x6e\x3d\x22\x31\x2e\
-\x30\x22\x20\x65\x6e\x63\x6f\x64\x69\x6e\x67\x3d\x22\x75\x74\x66\
-\x2d\x38\x22\x3f\x3e\x0a\x3c\x21\x2d\x2d\x20\x47\x65\x6e\x65\x72\
-\x61\x74\x6f\x72\x3a\x20\x41\x64\x6f\x62\x65\x20\x49\x6c\x6c\x75\
-\x73\x74\x72\x61\x74\x6f\x72\x20\x31\x39\x2e\x32\x2e\x31\x2c\x20\
-\x53\x56\x47\x20\x45\x78\x70\x6f\x72\x74\x20\x50\x6c\x75\x67\x2d\
-\x49\x6e\x20\x2e\x20\x53\x56\x47\x20\x56\x65\x72\x73\x69\x6f\x6e\
-\x3a\x20\x36\x2e\x30\x30\x20\x42\x75\x69\x6c\x64\x20\x30\x29\x20\
-\x20\x2d\x2d\x3e\x0a\x3c\x21\x44\x4f\x43\x54\x59\x50\x45\x20\x73\
-\x76\x67\x20\x50\x55\x42\x4c\x49\x43\x20\x22\x2d\x2f\x2f\x57\x33\
-\x43\x2f\x2f\x44\x54\x44\x20\x53\x56\x47\x20\x31\x2e\x31\x2f\x2f\
-\x45\x4e\x22\x20\x22\x68\x74\x74\x70\x3a\x2f\x2f\x77\x77\x77\x2e\
-\x77\x33\x2e\x6f\x72\x67\x2f\x47\x72\x61\x70\x68\x69\x63\x73\x2f\
-\x53\x56\x47\x2f\x31\x2e\x31\x2f\x44\x54\x44\x2f\x73\x76\x67\x31\
-\x31\x2e\x64\x74\x64\x22\x3e\x0a\x3c\x73\x76\x67\x20\x76\x65\x72\
-\x73\x69\x6f\x6e\x3d\x22\x31\x2e\x31\x22\x0a\x09\x20\x69\x64\x3d\
-\x22\x73\x76\x67\x34\x36\x31\x39\x22\x20\x69\x6e\x6b\x73\x63\x61\
-\x70\x65\x3a\x76\x65\x72\x73\x69\x6f\x6e\x3d\x22\x30\x2e\x39\x31\
-\x2b\x64\x65\x76\x65\x6c\x2b\x6f\x73\x78\x6d\x65\x6e\x75\x20\x72\
-\x31\x32\x39\x31\x31\x22\x20\x73\x6f\x64\x69\x70\x6f\x64\x69\x3a\
-\x64\x6f\x63\x6e\x61\x6d\x65\x3d\x22\x74\x72\x69\x61\x6e\x67\x6c\
-\x65\x2d\x73\x74\x72\x6f\x6b\x65\x64\x2d\x31\x35\x2e\x73\x76\x67\
-\x22\x20\x78\x6d\x6c\x6e\x73\x3a\x63\x63\x3d\x22\x68\x74\x74\x70\
-\x3a\x2f\x2f\x63\x72\x65\x61\x74\x69\x76\x65\x63\x6f\x6d\x6d\x6f\
-\x6e\x73\x2e\x6f\x72\x67\x2f\x6e\x73\x23\x22\x20\x78\x6d\x6c\x6e\
-\x73\x3a\x64\x63\x3d\x22\x68\x74\x74\x70\x3a\x2f\x2f\x70\x75\x72\
-\x6c\x2e\x6f\x72\x67\x2f\x64\x63\x2f\x65\x6c\x65\x6d\x65\x6e\x74\
-\x73\x2f\x31\x2e\x31\x2f\x22\x20\x78\x6d\x6c\x6e\x73\x3a\x69\x6e\
-\x6b\x73\x63\x61\x70\x65\x3d\x22\x68\x74\x74\x70\x3a\x2f\x2f\x77\
-\x77\x77\x2e\x69\x6e\x6b\x73\x63\x61\x70\x65\x2e\x6f\x72\x67\x2f\
-\x6e\x61\x6d\x65\x73\x70\x61\x63\x65\x73\x2f\x69\x6e\x6b\x73\x63\
-\x61\x70\x65\x22\x20\x78\x6d\x6c\x6e\x73\x3a\x72\x64\x66\x3d\x22\
-\x68\x74\x74\x70\x3a\x2f\x2f\x77\x77\x77\x2e\x77\x33\x2e\x6f\x72\
-\x67\x2f\x31\x39\x39\x39\x2f\x30\x32\x2f\x32\x32\x2d\x72\x64\x66\
-\x2d\x73\x79\x6e\x74\x61\x78\x2d\x6e\x73\x23\x22\x20\x78\x6d\x6c\
-\x6e\x73\x3a\x73\x6f\x64\x69\x70\x6f\x64\x69\x3d\x22\x68\x74\x74\
-\x70\x3a\x2f\x2f\x73\x6f\x64\x69\x70\x6f\x64\x69\x2e\x73\x6f\x75\
-\x72\x63\x65\x66\x6f\x72\x67\x65\x2e\x6e\x65\x74\x2f\x44\x54\x44\
-\x2f\x73\x6f\x64\x69\x70\x6f\x64\x69\x2d\x30\x2e\x64\x74\x64\x22\
-\x20\x78\x6d\x6c\x6e\x73\x3a\x73\x76\x67\x3d\x22\x68\x74\x74\x70\
-\x3a\x2f\x2f\x77\x77\x77\x2e\x77\x33\x2e\x6f\x72\x67\x2f\x32\x30\
-\x30\x30\x2f\x73\x76\x67\x22\x0a\x09\x20\x78\x6d\x6c\x6e\x73\x3d\
-\x22\x68\x74\x74\x70\x3a\x2f\x2f\x77\x77\x77\x2e\x77\x33\x2e\x6f\
-\x72\x67\x2f\x32\x30\x30\x30\x2f\x73\x76\x67\x22\x20\x78\x6d\x6c\
-\x6e\x73\x3a\x78\x6c\x69\x6e\x6b\x3d\x22\x68\x74\x74\x70\x3a\x2f\
-\x2f\x77\x77\x77\x2e\x77\x33\x2e\x6f\x72\x67\x2f\x31\x39\x39\x39\
-\x2f\x78\x6c\x69\x6e\x6b\x22\x20\x78\x3d\x22\x30\x70\x78\x22\x20\
-\x79\x3d\x22\x30\x70\x78\x22\x20\x77\x69\x64\x74\x68\x3d\x22\x36\
-\x34\x70\x78\x22\x20\x68\x65\x69\x67\x68\x74\x3d\x22\x36\x34\x70\
-\x78\x22\x0a\x09\x20\x76\x69\x65\x77\x42\x6f\x78\x3d\x22\x30\x20\
-\x30\x20\x31\x35\x20\x31\x35\x22\x20\x73\x74\x79\x6c\x65\x3d\x22\
-\x65\x6e\x61\x62\x6c\x65\x2d\x62\x61\x63\x6b\x67\x72\x6f\x75\x6e\
-\x64\x3a\x6e\x65\x77\x20\x30\x20\x30\x20\x31\x35\x20\x31\x35\x3b\
-\x22\x20\x78\x6d\x6c\x3a\x73\x70\x61\x63\x65\x3d\x22\x70\x72\x65\
-\x73\x65\x72\x76\x65\x22\x3e\x0a\x3c\x70\x61\x74\x68\x20\x69\x64\
-\x3d\x22\x72\x65\x63\x74\x33\x33\x33\x38\x22\x20\x69\x6e\x6b\x73\
-\x63\x61\x70\x65\x3a\x63\x6f\x6e\x6e\x65\x63\x74\x6f\x72\x2d\x63\
-\x75\x72\x76\x61\x74\x75\x72\x65\x3d\x22\x30\x22\x20\x73\x6f\x64\
-\x69\x70\x6f\x64\x69\x3a\x6e\x6f\x64\x65\x74\x79\x70\x65\x73\x3d\
-\x22\x63\x63\x63\x63\x63\x63\x63\x63\x63\x63\x63\x63\x22\x20\x64\
-\x3d\x22\x4d\x37\x2e\x35\x32\x34\x33\x2c\x31\x2e\x35\x30\x30\x34\
-\x0a\x09\x43\x37\x2e\x32\x34\x32\x39\x2c\x31\x2e\x34\x39\x31\x33\
-\x2c\x36\x2e\x39\x37\x38\x37\x2c\x31\x2e\x36\x34\x32\x33\x2c\x36\
-\x2e\x38\x33\x33\x36\x2c\x31\x2e\x38\x39\x35\x32\x6c\x2d\x35\x2e\
-\x35\x2c\x39\x2e\x38\x36\x39\x32\x43\x31\x2e\x30\x32\x31\x38\x2c\
-\x31\x32\x2e\x33\x30\x37\x38\x2c\x31\x2e\x33\x39\x35\x2c\x31\x32\
-\x2e\x39\x39\x39\x39\x2c\x32\x2c\x31\x33\x68\x31\x31\x0a\x09\x63\
-\x30\x2e\x36\x30\x35\x2d\x30\x2e\x30\x30\x30\x31\x2c\x30\x2e\x39\
-\x37\x38\x32\x2d\x30\x2e\x36\x39\x32\x32\x2c\x30\x2e\x36\x36\x36\
-\x34\x2d\x31\x2e\x32\x33\x35\x35\x6c\x2d\x35\x2e\x35\x2d\x39\x2e\
-\x38\x36\x39\x32\x43\x38\x2e\x30\x33\x30\x32\x2c\x31\x2e\x36\x35\
-\x37\x39\x2c\x37\x2e\x37\x38\x38\x34\x2c\x31\x2e\x35\x30\x39\x32\
-\x2c\x37\x2e\x35\x32\x34\x33\x2c\x31\x2e\x35\x30\x30\x34\x7a\x20\
-\x4d\x37\x2e\x35\x2c\x33\x2e\x38\x39\x39\x33\x6c\x34\x2e\x31\x32\
-\x36\x37\x2c\x37\x2e\x34\x37\x30\x34\x0a\x09\x48\x33\x2e\x33\x37\
-\x33\x33\x4c\x37\x2e\x35\x2c\x33\x2e\x38\x39\x39\x33\x7a\x22\x2f\
-\x3e\x0a\x3c\x2f\x73\x76\x67\x3e\x0a\
-\x00\x00\x05\x9c\
-\x3c\
-\x3f\x78\x6d\x6c\x20\x76\x65\x72\x73\x69\x6f\x6e\x3d\x27\x31\x2e\
-\x30\x27\x20\x65\x6e\x63\x6f\x64\x69\x6e\x67\x3d\x27\x55\x54\x46\
-\x2d\x38\x27\x3f\x3e\x0a\x3c\x21\x2d\x2d\x20\x54\x68\x69\x73\x20\
-\x66\x69\x6c\x65\x20\x77\x61\x73\x20\x67\x65\x6e\x65\x72\x61\x74\
-\x65\x64\x20\x62\x79\x20\x64\x76\x69\x73\x76\x67\x6d\x20\x32\x2e\
-\x31\x31\x2e\x31\x20\x2d\x2d\x3e\x0a\x3c\x73\x76\x67\x20\x76\x65\
-\x72\x73\x69\x6f\x6e\x3d\x27\x31\x2e\x31\x27\x20\x78\x6d\x6c\x6e\
-\x73\x3d\x27\x68\x74\x74\x70\x3a\x2f\x2f\x77\x77\x77\x2e\x77\x33\
-\x2e\x6f\x72\x67\x2f\x32\x30\x30\x30\x2f\x73\x76\x67\x27\x20\x78\
-\x6d\x6c\x6e\x73\x3a\x78\x6c\x69\x6e\x6b\x3d\x27\x68\x74\x74\x70\
-\x3a\x2f\x2f\x77\x77\x77\x2e\x77\x33\x2e\x6f\x72\x67\x2f\x31\x39\
-\x39\x39\x2f\x78\x6c\x69\x6e\x6b\x27\x20\x77\x69\x64\x74\x68\x3d\
-\x27\x36\x33\x2e\x39\x39\x39\x36\x70\x74\x27\x20\x68\x65\x69\x67\
-\x68\x74\x3d\x27\x36\x34\x70\x74\x27\x20\x76\x69\x65\x77\x42\x6f\
-\x78\x3d\x27\x35\x36\x2e\x34\x30\x39\x34\x20\x31\x31\x37\x2e\x38\
-\x35\x38\x20\x36\x33\x2e\x39\x39\x39\x36\x20\x36\x34\x27\x3e\x0a\
-\x3c\x67\x20\x69\x64\x3d\x27\x70\x61\x67\x65\x31\x27\x3e\x0a\x3c\
-\x67\x20\x74\x72\x61\x6e\x73\x66\x6f\x72\x6d\x3d\x27\x74\x72\x61\
-\x6e\x73\x6c\x61\x74\x65\x28\x35\x36\x2e\x34\x30\x39\x34\x20\x31\
-\x31\x37\x2e\x38\x35\x38\x29\x73\x63\x61\x6c\x65\x28\x2e\x39\x39\
-\x36\x32\x36\x34\x29\x27\x3e\x0a\x3c\x70\x61\x74\x68\x20\x64\x3d\
-\x27\x4d\x20\x35\x34\x2e\x38\x39\x32\x36\x20\x32\x34\x2e\x35\x32\
-\x39\x31\x43\x20\x35\x34\x2e\x38\x39\x32\x36\x20\x32\x30\x2e\x33\
-\x33\x36\x38\x20\x34\x34\x2e\x36\x39\x36\x39\x20\x31\x36\x2e\x39\
-\x33\x38\x33\x20\x33\x32\x2e\x31\x32\x20\x31\x36\x2e\x39\x33\x38\
-\x33\x43\x20\x31\x39\x2e\x35\x34\x33\x31\x20\x31\x36\x2e\x39\x33\
-\x38\x33\x20\x39\x2e\x33\x34\x37\x34\x32\x20\x32\x30\x2e\x33\x33\
-\x36\x38\x20\x39\x2e\x33\x34\x37\x34\x32\x20\x32\x34\x2e\x35\x32\
-\x39\x31\x43\x20\x39\x2e\x33\x34\x37\x34\x32\x20\x32\x38\x2e\x37\
-\x32\x31\x35\x20\x31\x39\x2e\x35\x34\x33\x31\x20\x33\x32\x2e\x31\
-\x32\x20\x33\x32\x2e\x31\x32\x20\x33\x32\x2e\x31\x32\x43\x20\x34\
-\x34\x2e\x36\x39\x36\x39\x20\x33\x32\x2e\x31\x32\x20\x35\x34\x2e\
-\x38\x39\x32\x36\x20\x32\x38\x2e\x37\x32\x31\x35\x20\x35\x34\x2e\
-\x38\x39\x32\x36\x20\x32\x34\x2e\x35\x32\x39\x31\x5a\x27\x20\x66\
-\x69\x6c\x6c\x3d\x27\x6e\x6f\x6e\x65\x27\x20\x73\x74\x72\x6f\x6b\
-\x65\x3d\x27\x23\x30\x30\x30\x30\x30\x30\x27\x20\x73\x74\x72\x6f\
-\x6b\x65\x2d\x6c\x69\x6e\x65\x63\x61\x70\x3d\x27\x72\x6f\x75\x6e\
-\x64\x27\x20\x73\x74\x72\x6f\x6b\x65\x2d\x6c\x69\x6e\x65\x6a\x6f\
-\x69\x6e\x3d\x27\x72\x6f\x75\x6e\x64\x27\x20\x73\x74\x72\x6f\x6b\
-\x65\x2d\x6d\x69\x74\x65\x72\x6c\x69\x6d\x69\x74\x3d\x27\x31\x30\
-\x2e\x30\x33\x37\x35\x27\x20\x73\x74\x72\x6f\x6b\x65\x2d\x77\x69\
-\x64\x74\x68\x3d\x27\x33\x2e\x35\x31\x33\x31\x32\x27\x2f\x3e\x0a\
-\x3c\x2f\x67\x3e\x0a\x3c\x67\x20\x74\x72\x61\x6e\x73\x66\x6f\x72\
-\x6d\x3d\x27\x74\x72\x61\x6e\x73\x6c\x61\x74\x65\x28\x35\x36\x2e\
-\x34\x30\x39\x34\x20\x31\x31\x37\x2e\x38\x35\x38\x29\x73\x63\x61\
-\x6c\x65\x28\x2e\x39\x39\x36\x32\x36\x34\x29\x27\x3e\x0a\x3c\x70\
-\x61\x74\x68\x20\x64\x3d\x27\x4d\x20\x39\x2e\x33\x34\x37\x34\x32\
-\x20\x32\x34\x2e\x35\x32\x39\x31\x4c\x20\x39\x2e\x33\x34\x37\x34\
-\x32\x20\x35\x34\x2e\x38\x39\x32\x36\x4c\x20\x39\x2e\x33\x34\x37\
-\x34\x32\x20\x35\x34\x2e\x38\x39\x32\x36\x43\x20\x39\x2e\x33\x34\
-\x37\x34\x32\x20\x35\x34\x2e\x38\x39\x32\x36\x20\x39\x2e\x33\x34\
-\x37\x34\x32\x20\x35\x34\x2e\x38\x39\x32\x36\x20\x39\x2e\x33\x34\
-\x37\x34\x32\x20\x35\x34\x2e\x38\x39\x32\x36\x43\x20\x39\x2e\x33\
-\x34\x37\x34\x32\x20\x35\x39\x2e\x30\x38\x34\x39\x20\x31\x39\x2e\
-\x35\x34\x33\x31\x20\x36\x32\x2e\x34\x38\x33\x34\x20\x33\x32\x2e\
-\x31\x32\x20\x36\x32\x2e\x34\x38\x33\x34\x43\x20\x34\x34\x2e\x36\
-\x39\x36\x39\x20\x36\x32\x2e\x34\x38\x33\x34\x20\x35\x34\x2e\x38\
-\x39\x32\x36\x20\x35\x39\x2e\x30\x38\x34\x39\x20\x35\x34\x2e\x38\
-\x39\x32\x36\x20\x35\x34\x2e\x38\x39\x32\x36\x4c\x20\x35\x34\x2e\
-\x38\x39\x32\x36\x20\x35\x34\x2e\x38\x39\x32\x36\x4c\x20\x35\x34\
-\x2e\x38\x39\x32\x36\x20\x32\x34\x2e\x35\x32\x39\x31\x27\x20\x66\
-\x69\x6c\x6c\x3d\x27\x6e\x6f\x6e\x65\x27\x20\x73\x74\x72\x6f\x6b\
-\x65\x3d\x27\x23\x30\x30\x30\x30\x30\x30\x27\x20\x73\x74\x72\x6f\
-\x6b\x65\x2d\x6c\x69\x6e\x65\x63\x61\x70\x3d\x27\x72\x6f\x75\x6e\
-\x64\x27\x20\x73\x74\x72\x6f\x6b\x65\x2d\x6c\x69\x6e\x65\x6a\x6f\
-\x69\x6e\x3d\x27\x72\x6f\x75\x6e\x64\x27\x20\x73\x74\x72\x6f\x6b\
-\x65\x2d\x6d\x69\x74\x65\x72\x6c\x69\x6d\x69\x74\x3d\x27\x31\x30\
-\x2e\x30\x33\x37\x35\x27\x20\x73\x74\x72\x6f\x6b\x65\x2d\x77\x69\
-\x64\x74\x68\x3d\x27\x33\x2e\x35\x31\x33\x31\x32\x27\x2f\x3e\x0a\
-\x3c\x2f\x67\x3e\x0a\x3c\x67\x20\x74\x72\x61\x6e\x73\x66\x6f\x72\
-\x6d\x3d\x27\x74\x72\x61\x6e\x73\x6c\x61\x74\x65\x28\x35\x36\x2e\
-\x34\x30\x39\x34\x20\x31\x31\x37\x2e\x38\x35\x38\x29\x73\x63\x61\
-\x6c\x65\x28\x2e\x39\x39\x36\x32\x36\x34\x29\x27\x3e\x0a\x3c\x70\
-\x61\x74\x68\x20\x64\x3d\x27\x4d\x20\x35\x34\x2e\x38\x39\x32\x36\
-\x20\x32\x34\x2e\x35\x32\x39\x31\x43\x20\x35\x34\x2e\x38\x39\x32\
-\x36\x20\x31\x31\x2e\x39\x35\x32\x32\x20\x34\x34\x2e\x36\x39\x36\
-\x39\x20\x31\x2e\x37\x35\x36\x35\x36\x20\x33\x32\x2e\x31\x32\x20\
-\x31\x2e\x37\x35\x36\x35\x36\x43\x20\x31\x39\x2e\x35\x34\x33\x31\
-\x20\x31\x2e\x37\x35\x36\x35\x36\x20\x39\x2e\x33\x34\x37\x34\x32\
-\x20\x31\x31\x2e\x39\x35\x32\x32\x20\x39\x2e\x33\x34\x37\x34\x32\
-\x20\x32\x34\x2e\x35\x32\x39\x31\x27\x20\x66\x69\x6c\x6c\x3d\x27\
-\x6e\x6f\x6e\x65\x27\x20\x73\x74\x72\x6f\x6b\x65\x3d\x27\x23\x30\
-\x30\x30\x30\x30\x30\x27\x20\x73\x74\x72\x6f\x6b\x65\x2d\x6c\x69\
-\x6e\x65\x63\x61\x70\x3d\x27\x72\x6f\x75\x6e\x64\x27\x20\x73\x74\
-\x72\x6f\x6b\x65\x2d\x6c\x69\x6e\x65\x6a\x6f\x69\x6e\x3d\x27\x72\
-\x6f\x75\x6e\x64\x27\x20\x73\x74\x72\x6f\x6b\x65\x2d\x6d\x69\x74\
-\x65\x72\x6c\x69\x6d\x69\x74\x3d\x27\x31\x30\x2e\x30\x33\x37\x35\
-\x27\x20\x73\x74\x72\x6f\x6b\x65\x2d\x77\x69\x64\x74\x68\x3d\x27\
-\x33\x2e\x35\x31\x33\x31\x32\x27\x2f\x3e\x0a\x3c\x2f\x67\x3e\x0a\
-\x3c\x2f\x67\x3e\x0a\x3c\x2f\x73\x76\x67\x3e\
-\x00\x00\x03\x2a\
-\x3c\
-\x3f\x78\x6d\x6c\x20\x76\x65\x72\x73\x69\x6f\x6e\x3d\x22\x31\x2e\
-\x30\x22\x20\x65\x6e\x63\x6f\x64\x69\x6e\x67\x3d\x22\x75\x74\x66\
-\x2d\x38\x22\x3f\x3e\x0a\x3c\x21\x2d\x2d\x20\x47\x65\x6e\x65\x72\
-\x61\x74\x6f\x72\x3a\x20\x41\x64\x6f\x62\x65\x20\x49\x6c\x6c\x75\
-\x73\x74\x72\x61\x74\x6f\x72\x20\x31\x36\x2e\x32\x2e\x31\x2c\x20\
-\x53\x56\x47\x20\x45\x78\x70\x6f\x72\x74\x20\x50\x6c\x75\x67\x2d\
-\x49\x6e\x20\x2e\x20\x53\x56\x47\x20\x56\x65\x72\x73\x69\x6f\x6e\
-\x3a\x20\x36\x2e\x30\x30\x20\x42\x75\x69\x6c\x64\x20\x30\x29\x20\
-\x20\x2d\x2d\x3e\x0a\x3c\x21\x44\x4f\x43\x54\x59\x50\x45\x20\x73\
-\x76\x67\x20\x50\x55\x42\x4c\x49\x43\x20\x22\x2d\x2f\x2f\x57\x33\
-\x43\x2f\x2f\x44\x54\x44\x20\x53\x56\x47\x20\x31\x2e\x31\x2f\x2f\
-\x45\x4e\x22\x20\x22\x68\x74\x74\x70\x3a\x2f\x2f\x77\x77\x77\x2e\
-\x77\x33\x2e\x6f\x72\x67\x2f\x47\x72\x61\x70\x68\x69\x63\x73\x2f\
-\x53\x56\x47\x2f\x31\x2e\x31\x2f\x44\x54\x44\x2f\x73\x76\x67\x31\
-\x31\x2e\x64\x74\x64\x22\x3e\x0a\x3c\x73\x76\x67\x20\x76\x65\x72\
-\x73\x69\x6f\x6e\x3d\x22\x31\x2e\x31\x22\x20\x69\x64\x3d\x22\x4c\
-\x61\x79\x65\x72\x5f\x31\x22\x20\x78\x6d\x6c\x6e\x73\x3d\x22\x68\
-\x74\x74\x70\x3a\x2f\x2f\x77\x77\x77\x2e\x77\x33\x2e\x6f\x72\x67\
-\x2f\x32\x30\x30\x30\x2f\x73\x76\x67\x22\x20\x78\x6d\x6c\x6e\x73\
-\x3a\x78\x6c\x69\x6e\x6b\x3d\x22\x68\x74\x74\x70\x3a\x2f\x2f\x77\
-\x77\x77\x2e\x77\x33\x2e\x6f\x72\x67\x2f\x31\x39\x39\x39\x2f\x78\
-\x6c\x69\x6e\x6b\x22\x20\x78\x3d\x22\x30\x70\x78\x22\x20\x79\x3d\
-\x22\x30\x70\x78\x22\x0a\x09\x20\x77\x69\x64\x74\x68\x3d\x22\x35\
-\x31\x32\x70\x78\x22\x20\x68\x65\x69\x67\x68\x74\x3d\x22\x35\x31\
-\x32\x70\x78\x22\x20\x76\x69\x65\x77\x42\x6f\x78\x3d\x22\x30\x20\
-\x30\x20\x35\x31\x32\x20\x35\x31\x32\x22\x20\x65\x6e\x61\x62\x6c\
-\x65\x2d\x62\x61\x63\x6b\x67\x72\x6f\x75\x6e\x64\x3d\x22\x6e\x65\
-\x77\x20\x30\x20\x30\x20\x35\x31\x32\x20\x35\x31\x32\x22\x20\x78\
-\x6d\x6c\x3a\x73\x70\x61\x63\x65\x3d\x22\x70\x72\x65\x73\x65\x72\
-\x76\x65\x22\x3e\x0a\x3c\x67\x3e\x0a\x09\x3c\x70\x6f\x6c\x79\x67\
-\x6f\x6e\x20\x70\x6f\x69\x6e\x74\x73\x3d\x22\x33\x39\x36\x2e\x37\
-\x39\x35\x2c\x33\x39\x36\x2e\x38\x20\x33\x32\x30\x2c\x33\x39\x36\
-\x2e\x38\x20\x33\x32\x30\x2c\x34\x34\x38\x20\x34\x34\x38\x2c\x34\
-\x34\x38\x20\x34\x34\x38\x2c\x33\x32\x30\x20\x33\x39\x36\x2e\x37\
-\x39\x35\x2c\x33\x32\x30\x20\x09\x22\x2f\x3e\x0a\x09\x3c\x70\x6f\
-\x6c\x79\x67\x6f\x6e\x20\x70\x6f\x69\x6e\x74\x73\x3d\x22\x33\x39\
-\x36\x2e\x38\x2c\x31\x31\x35\x2e\x32\x30\x35\x20\x33\x39\x36\x2e\
-\x38\x2c\x31\x39\x32\x20\x34\x34\x38\x2c\x31\x39\x32\x20\x34\x34\
-\x38\x2c\x36\x34\x20\x33\x32\x30\x2c\x36\x34\x20\x33\x32\x30\x2c\
-\x31\x31\x35\x2e\x32\x30\x35\x20\x09\x22\x2f\x3e\x0a\x09\x3c\x70\
-\x6f\x6c\x79\x67\x6f\x6e\x20\x70\x6f\x69\x6e\x74\x73\x3d\x22\x31\
-\x31\x35\x2e\x32\x30\x35\x2c\x31\x31\x35\x2e\x32\x20\x31\x39\x32\
-\x2c\x31\x31\x35\x2e\x32\x20\x31\x39\x32\x2c\x36\x34\x20\x36\x34\
-\x2c\x36\x34\x20\x36\x34\x2c\x31\x39\x32\x20\x31\x31\x35\x2e\x32\
-\x30\x35\x2c\x31\x39\x32\x20\x09\x22\x2f\x3e\x0a\x09\x3c\x70\x6f\
-\x6c\x79\x67\x6f\x6e\x20\x70\x6f\x69\x6e\x74\x73\x3d\x22\x31\x31\
-\x35\x2e\x32\x2c\x33\x39\x36\x2e\x37\x39\x35\x20\x31\x31\x35\x2e\
-\x32\x2c\x33\x32\x30\x20\x36\x34\x2c\x33\x32\x30\x20\x36\x34\x2c\
-\x34\x34\x38\x20\x31\x39\x32\x2c\x34\x34\x38\x20\x31\x39\x32\x2c\
-\x33\x39\x36\x2e\x37\x39\x35\x20\x09\x22\x2f\x3e\x0a\x3c\x2f\x67\
-\x3e\x0a\x3c\x2f\x73\x76\x67\x3e\x0a\
-\x00\x00\x01\x69\
-\x3c\
-\x73\x76\x67\x20\x78\x6d\x6c\x6e\x73\x3d\x22\x68\x74\x74\x70\x3a\
-\x2f\x2f\x77\x77\x77\x2e\x77\x33\x2e\x6f\x72\x67\x2f\x32\x30\x30\
-\x30\x2f\x73\x76\x67\x22\x20\x77\x69\x64\x74\x68\x3d\x22\x35\x31\
-\x32\x70\x78\x22\x20\x68\x65\x69\x67\x68\x74\x3d\x22\x35\x31\x32\
-\x70\x78\x22\x20\x76\x69\x65\x77\x42\x6f\x78\x3d\x22\x30\x20\x30\
-\x20\x35\x31\x32\x20\x35\x31\x32\x22\x3e\x3c\x67\x20\x74\x72\x61\
-\x6e\x73\x66\x6f\x72\x6d\x3d\x27\x6d\x61\x74\x72\x69\x78\x28\x32\
-\x34\x20\x30\x20\x30\x20\x32\x34\x20\x30\x20\x30\x29\x27\x3e\x3c\
-\x70\x61\x74\x68\x20\x64\x3d\x22\x4d\x34\x2e\x33\x34\x20\x31\x35\
-\x2e\x36\x36\x41\x37\x2e\x39\x37\x20\x37\x2e\x39\x37\x20\x30\x20\
-\x30\x20\x30\x20\x39\x20\x31\x37\x2e\x39\x34\x56\x31\x30\x48\x35\
-\x56\x38\x68\x34\x56\x35\x2e\x38\x33\x61\x33\x20\x33\x20\x30\x20\
-\x31\x20\x31\x20\x32\x20\x30\x56\x38\x68\x34\x76\x32\x68\x2d\x34\
-\x76\x37\x2e\x39\x34\x61\x37\x2e\x39\x37\x20\x37\x2e\x39\x37\x20\
-\x30\x20\x30\x20\x30\x20\x34\x2e\x36\x36\x2d\x32\x2e\x32\x38\x6c\
-\x2d\x31\x2e\x34\x32\x2d\x31\x2e\x34\x32\x68\x35\x2e\x36\x36\x6c\
-\x2d\x32\x2e\x38\x33\x20\x32\x2e\x38\x33\x61\x31\x30\x20\x31\x30\
-\x20\x30\x20\x30\x20\x31\x2d\x31\x34\x2e\x31\x34\x20\x30\x4c\x2e\
-\x31\x20\x31\x34\x2e\x32\x34\x68\x35\x2e\x36\x36\x6c\x2d\x31\x2e\
-\x34\x32\x20\x31\x2e\x34\x32\x7a\x4d\x31\x30\x20\x34\x61\x31\x20\
-\x31\x20\x30\x20\x31\x20\x30\x20\x30\x2d\x32\x20\x31\x20\x31\x20\
-\x30\x20\x30\x20\x30\x20\x30\x20\x32\x7a\x22\x2f\x3e\x3c\x2f\x67\
-\x3e\x3c\x2f\x73\x76\x67\x3e\x0a\
-\x00\x00\x02\x1c\
-\x00\
-\x00\x07\x5c\x78\x9c\xdd\x55\x4d\x73\x9b\x30\x10\xbd\xf7\x57\x6c\
-\xa7\x07\x25\x07\x84\xbe\x10\x28\x13\x92\x99\x7a\xa6\xa7\xf4\x96\
-\x5c\x7a\xc3\x41\x80\x1a\x0c\x1e\xa0\xc6\xfd\xf7\x95\x6d\x49\x76\
-\x69\x33\xbd\xe4\xd0\x89\x0f\x98\xf7\x56\x6f\xd9\xb7\xcb\x0e\xb7\
-\xf7\xfb\x4d\x0b\x3b\x3d\x8c\xa6\xef\x72\x44\x31\x41\xa0\xbb\xe7\
-\xbe\x34\x5d\x9d\xa3\xa7\xc7\x2f\x51\x86\xee\xef\x3e\xdc\x7e\x8c\
-\x22\x78\x6c\xcc\x08\x95\x69\x35\xcc\xc5\x08\xb5\xee\xf4\x50\x4c\
-\xba\x84\xf5\x4f\x28\x77\x66\xdc\xd5\x1b\x60\x98\x52\x4c\x21\x8a\
-\xac\xc4\x12\x97\x89\x29\x02\xfb\xa8\x6e\xcc\x51\x33\x4d\xdb\x9b\
-\x38\x9e\xe7\x19\xcf\x1c\xf7\x43\x1d\x33\x42\x48\x6c\xcf\xbb\x23\
-\x37\xfb\xd6\x74\x2f\x7f\x3b\x48\x95\x52\xf1\x31\x8a\x60\x36\xe5\
-\xd4\xe4\x48\x72\x6c\x49\xb9\x9d\x10\x34\xda\xd4\xcd\x64\x29\x71\
-\x40\x3b\xa3\xe7\xcf\xfd\x3e\x47\x89\xc4\x82\x28\x01\x94\xa6\x38\
-\x4b\x32\x70\x0a\x90\x02\xd9\x32\x6b\x30\x65\x8e\xb6\x45\xad\xe9\
-\x09\x4e\x43\xd1\x8d\x55\x3f\x6c\x72\x74\xbc\x6d\xad\xc9\xab\x45\
-\x8e\xeb\xf1\xb9\x68\xf5\x95\xcd\x23\x99\x14\xd7\x07\xe1\xb6\x98\
-\x1a\xb0\x99\xbe\x82\xc2\x5c\xa4\x82\x81\x60\x38\x15\x29\x7b\x08\
-\x44\x22\x70\xa6\x98\xfc\x83\x58\x2d\x89\x7f\xe1\x0b\x81\xc2\x24\
-\x13\x0a\xa8\xc2\x89\xe0\x14\x24\xc3\x22\xe3\x02\xb8\x9d\x04\xf3\
-\x68\x05\x42\x60\xa9\xa4\x0a\x61\x9f\xd7\xcb\x03\xf6\x15\xbe\x4a\
-\x04\x53\x9e\xe0\x04\x4b\x42\xb3\x55\x20\xd8\xb1\x55\x49\x78\x26\
-\xe3\x98\x50\xea\x2a\x3a\x81\x55\xa8\xd7\x05\xbd\x1d\xaf\xf5\xd8\
-\x25\x7f\x58\xf6\xf4\x1b\x3a\xbc\x88\x6d\x8e\x3e\xad\xab\x75\x55\
-\x55\x28\xb6\x13\x88\xeb\xb7\x99\x5f\x30\x22\x70\xc2\x14\xbd\x70\
-\x46\x30\xe7\x32\x0b\xce\xa8\xc4\x8a\x67\xdc\x59\x73\xe8\xec\xcd\
-\x87\x83\x39\x27\x0f\xd8\xe7\x0f\x44\x86\x53\x46\x93\x90\xe0\x94\
-\xf7\xe2\x7a\x1e\xe4\x89\x0c\x85\x39\xe1\xa2\xf2\xd0\xa5\xae\xef\
-\x34\x82\x71\x1a\xfa\x17\x6d\x7b\x46\x8e\x3f\x4f\x44\x76\x9d\xf4\
-\x73\xb1\xcd\xd1\xd0\xff\xe8\xca\xdf\xe8\xef\xbd\xe9\x96\xfc\xc6\
-\x4c\x7a\x68\x8d\xfd\xb3\x6b\x4d\x30\xe1\x69\x12\x62\x6e\x27\x39\
-\x4e\x28\xa7\xec\x4d\xa7\xb2\xe8\xda\xfb\xda\x2a\x67\xea\x3d\xcd\
-\xeb\xd5\x2d\xb2\x5f\x08\x95\x30\x76\xde\x22\x9c\x26\x32\x91\x7e\
-\x8b\x4e\xe8\x62\x8b\x5c\xd8\xcf\xc6\xcb\x17\xef\xc3\x7f\xd3\xba\
-\xd3\xc5\x7e\xcc\xee\x7e\x01\xb3\x30\xdb\xa9\
-\x00\x00\x01\x1c\
-\x3c\
-\x73\x76\x67\x20\x78\x6d\x6c\x6e\x73\x3d\x22\x68\x74\x74\x70\x3a\
-\x2f\x2f\x77\x77\x77\x2e\x77\x33\x2e\x6f\x72\x67\x2f\x32\x30\x30\
-\x30\x2f\x73\x76\x67\x22\x20\x77\x69\x64\x74\x68\x3d\x22\x35\x31\
-\x32\x70\x78\x22\x20\x68\x65\x69\x67\x68\x74\x3d\x22\x35\x31\x32\
-\x70\x78\x22\x0a\x20\x20\x20\x20\x20\x76\x69\x65\x77\x42\x6f\x78\
-\x3d\x22\x30\x20\x30\x20\x35\x31\x32\x20\x35\x31\x32\x22\x3e\x0a\
-\x3c\x67\x20\x74\x72\x61\x6e\x73\x66\x6f\x72\x6d\x3d\x27\x6d\x61\
-\x74\x72\x69\x78\x28\x34\x38\x20\x30\x20\x30\x20\x34\x38\x20\x34\
-\x38\x20\x34\x38\x29\x27\x3e\x0a\x20\x20\x3c\x70\x61\x74\x68\x20\
-\x64\x3d\x22\x4d\x30\x20\x30\x76\x32\x68\x2e\x35\x63\x30\x2d\x2e\
-\x35\x35\x2e\x34\x35\x2d\x31\x20\x31\x2d\x31\x68\x31\x2e\x35\x76\
-\x35\x2e\x35\x63\x30\x20\x2e\x32\x38\x2d\x2e\x32\x32\x2e\x35\x2d\
-\x2e\x35\x2e\x35\x68\x2d\x2e\x35\x76\x31\x68\x34\x76\x2d\x31\x68\
-\x2d\x2e\x35\x63\x2d\x2e\x32\x38\x20\x30\x2d\x2e\x35\x2d\x2e\x32\
-\x32\x2d\x2e\x35\x2d\x2e\x35\x76\x2d\x35\x2e\x35\x68\x31\x2e\x35\
-\x63\x2e\x35\x35\x20\x30\x20\x31\x20\x2e\x34\x35\x20\x31\x20\x31\
-\x68\x2e\x35\x76\x2d\x32\x68\x2d\x38\x7a\x22\x20\x2f\x3e\x0a\x3c\
-\x2f\x67\x3e\x0a\x3c\x2f\x73\x76\x67\x3e\x0a\
-\x00\x00\x03\xda\
-\x3c\
-\x3f\x78\x6d\x6c\x20\x76\x65\x72\x73\x69\x6f\x6e\x3d\x22\x31\x2e\
-\x30\x22\x20\x65\x6e\x63\x6f\x64\x69\x6e\x67\x3d\x22\x75\x74\x66\
-\x2d\x38\x22\x3f\x3e\x0a\x3c\x21\x2d\x2d\x20\x47\x65\x6e\x65\x72\
-\x61\x74\x6f\x72\x3a\x20\x41\x64\x6f\x62\x65\x20\x49\x6c\x6c\x75\
-\x73\x74\x72\x61\x74\x6f\x72\x20\x31\x36\x2e\x30\x2e\x30\x2c\x20\
-\x53\x56\x47\x20\x45\x78\x70\x6f\x72\x74\x20\x50\x6c\x75\x67\x2d\
-\x49\x6e\x20\x2e\x20\x53\x56\x47\x20\x56\x65\x72\x73\x69\x6f\x6e\
-\x3a\x20\x36\x2e\x30\x30\x20\x42\x75\x69\x6c\x64\x20\x30\x29\x20\
-\x20\x2d\x2d\x3e\x0a\x3c\x21\x44\x4f\x43\x54\x59\x50\x45\x20\x73\
-\x76\x67\x20\x50\x55\x42\x4c\x49\x43\x20\x22\x2d\x2f\x2f\x57\x33\
-\x43\x2f\x2f\x44\x54\x44\x20\x53\x56\x47\x20\x31\x2e\x31\x2f\x2f\
-\x45\x4e\x22\x20\x22\x68\x74\x74\x70\x3a\x2f\x2f\x77\x77\x77\x2e\
-\x77\x33\x2e\x6f\x72\x67\x2f\x47\x72\x61\x70\x68\x69\x63\x73\x2f\
-\x53\x56\x47\x2f\x31\x2e\x31\x2f\x44\x54\x44\x2f\x73\x76\x67\x31\
-\x31\x2e\x64\x74\x64\x22\x3e\x0a\x3c\x73\x76\x67\x20\x76\x65\x72\
-\x73\x69\x6f\x6e\x3d\x22\x31\x2e\x31\x22\x20\x69\x64\x3d\x22\x4c\
-\x61\x79\x65\x72\x5f\x31\x22\x20\x78\x6d\x6c\x6e\x73\x3d\x22\x68\
-\x74\x74\x70\x3a\x2f\x2f\x77\x77\x77\x2e\x77\x33\x2e\x6f\x72\x67\
-\x2f\x32\x30\x30\x30\x2f\x73\x76\x67\x22\x20\x78\x6d\x6c\x6e\x73\
-\x3a\x78\x6c\x69\x6e\x6b\x3d\x22\x68\x74\x74\x70\x3a\x2f\x2f\x77\
-\x77\x77\x2e\x77\x33\x2e\x6f\x72\x67\x2f\x31\x39\x39\x39\x2f\x78\
-\x6c\x69\x6e\x6b\x22\x20\x78\x3d\x22\x30\x70\x78\x22\x20\x79\x3d\
-\x22\x30\x70\x78\x22\x0a\x09\x20\x77\x69\x64\x74\x68\x3d\x22\x35\
-\x31\x32\x70\x78\x22\x20\x68\x65\x69\x67\x68\x74\x3d\x22\x35\x31\
-\x32\x70\x78\x22\x20\x76\x69\x65\x77\x42\x6f\x78\x3d\x22\x30\x20\
-\x30\x20\x35\x31\x32\x20\x35\x31\x32\x22\x20\x65\x6e\x61\x62\x6c\
-\x65\x2d\x62\x61\x63\x6b\x67\x72\x6f\x75\x6e\x64\x3d\x22\x6e\x65\
-\x77\x20\x30\x20\x30\x20\x35\x31\x32\x20\x35\x31\x32\x22\x20\x78\
-\x6d\x6c\x3a\x73\x70\x61\x63\x65\x3d\x22\x70\x72\x65\x73\x65\x72\
-\x76\x65\x22\x3e\x0a\x3c\x67\x3e\x0a\x09\x3c\x70\x61\x74\x68\x20\
-\x64\x3d\x22\x4d\x34\x38\x2e\x34\x35\x31\x2c\x34\x36\x34\x2e\x38\
-\x32\x38\x63\x34\x30\x2e\x30\x32\x33\x2d\x30\x2e\x33\x31\x35\x2c\
-\x34\x35\x2e\x30\x31\x2d\x39\x2e\x39\x35\x35\x2c\x35\x38\x2e\x30\
-\x35\x32\x2d\x35\x30\x2e\x31\x33\x32\x63\x32\x34\x2e\x30\x35\x37\
-\x2d\x36\x33\x2e\x34\x30\x38\x2c\x31\x33\x32\x2e\x34\x31\x39\x2c\
-\x31\x36\x2e\x35\x39\x31\x2c\x36\x35\x2e\x32\x36\x39\x2c\x34\x34\
-\x2e\x33\x37\x34\x0a\x09\x09\x43\x31\x30\x34\x2e\x36\x32\x32\x2c\
-\x34\x38\x36\x2e\x38\x35\x32\x2c\x38\x2e\x34\x32\x38\x2c\x34\x36\
-\x35\x2e\x31\x34\x33\x2c\x34\x38\x2e\x34\x35\x31\x2c\x34\x36\x34\
-\x2e\x38\x32\x38\x7a\x22\x2f\x3e\x0a\x09\x3c\x70\x61\x74\x68\x20\
-\x64\x3d\x22\x4d\x34\x35\x38\x2e\x38\x35\x37\x2c\x34\x36\x2e\x39\
-\x30\x32\x63\x2d\x31\x39\x2e\x34\x31\x37\x2d\x31\x35\x2e\x36\x34\
-\x37\x2d\x35\x31\x2e\x35\x39\x32\x2d\x37\x2e\x39\x33\x38\x2d\x37\
-\x31\x2e\x38\x36\x34\x2c\x31\x37\x2e\x32\x31\x39\x4c\x31\x38\x31\
-\x2e\x36\x34\x35\x2c\x33\x35\x35\x2e\x38\x34\x39\x63\x2d\x32\x30\
-\x2e\x32\x37\x32\x2c\x32\x35\x2e\x31\x35\x34\x2d\x32\x30\x2e\x31\
-\x37\x31\x2c\x32\x30\x2e\x33\x34\x37\x2d\x30\x2e\x37\x35\x34\x2c\
-\x33\x35\x2e\x39\x39\x32\x0a\x09\x09\x63\x31\x39\x2e\x34\x31\x37\
-\x2c\x31\x35\x2e\x36\x34\x38\x2c\x31\x34\x2e\x37\x33\x38\x2c\x31\
-\x36\x2e\x37\x37\x2c\x33\x35\x2e\x30\x31\x31\x2d\x38\x2e\x33\x38\
-\x38\x6c\x32\x34\x31\x2e\x34\x30\x36\x2d\x32\x36\x32\x2e\x36\x36\
-\x39\x43\x34\x37\x37\x2e\x35\x38\x31\x2c\x39\x35\x2e\x36\x32\x38\
-\x2c\x34\x37\x38\x2e\x32\x37\x35\x2c\x36\x32\x2e\x35\x35\x2c\x34\
-\x35\x38\x2e\x38\x35\x37\x2c\x34\x36\x2e\x39\x30\x32\x7a\x20\x4d\
-\x34\x30\x36\x2e\x30\x36\x35\x2c\x38\x31\x2e\x38\x32\x35\x0a\x09\
-\x09\x63\x30\x2c\x30\x2d\x33\x2d\x33\x2e\x35\x2d\x31\x33\x2d\x31\
-\x31\x2e\x35\x63\x31\x35\x2d\x32\x34\x2e\x35\x2c\x34\x34\x2e\x35\
-\x2d\x32\x30\x2c\x34\x34\x2e\x35\x2d\x32\x30\x43\x34\x30\x39\x2e\
-\x35\x36\x35\x2c\x36\x36\x2e\x38\x32\x35\x2c\x34\x30\x36\x2e\x30\
-\x36\x35\x2c\x38\x31\x2e\x38\x32\x35\x2c\x34\x30\x36\x2e\x30\x36\
-\x35\x2c\x38\x31\x2e\x38\x32\x35\x7a\x22\x2f\x3e\x0a\x3c\x2f\x67\
-\x3e\x0a\x3c\x2f\x73\x76\x67\x3e\x0a\
-\x00\x00\x02\xe7\
-\x3c\
-\x3f\x78\x6d\x6c\x20\x76\x65\x72\x73\x69\x6f\x6e\x3d\x22\x31\x2e\
-\x30\x22\x20\x65\x6e\x63\x6f\x64\x69\x6e\x67\x3d\x22\x75\x74\x66\
-\x2d\x38\x22\x3f\x3e\x0a\x3c\x21\x2d\x2d\x20\x47\x65\x6e\x65\x72\
-\x61\x74\x6f\x72\x3a\x20\x41\x64\x6f\x62\x65\x20\x49\x6c\x6c\x75\
-\x73\x74\x72\x61\x74\x6f\x72\x20\x31\x38\x2e\x31\x2e\x30\x2c\x20\
-\x53\x56\x47\x20\x45\x78\x70\x6f\x72\x74\x20\x50\x6c\x75\x67\x2d\
-\x49\x6e\x20\x2e\x20\x53\x56\x47\x20\x56\x65\x72\x73\x69\x6f\x6e\
-\x3a\x20\x36\x2e\x30\x30\x20\x42\x75\x69\x6c\x64\x20\x30\x29\x20\
-\x20\x2d\x2d\x3e\x0a\x3c\x21\x44\x4f\x43\x54\x59\x50\x45\x20\x73\
-\x76\x67\x20\x50\x55\x42\x4c\x49\x43\x20\x22\x2d\x2f\x2f\x57\x33\
-\x43\x2f\x2f\x44\x54\x44\x20\x53\x56\x47\x20\x31\x2e\x31\x2f\x2f\
-\x45\x4e\x22\x20\x22\x68\x74\x74\x70\x3a\x2f\x2f\x77\x77\x77\x2e\
-\x77\x33\x2e\x6f\x72\x67\x2f\x47\x72\x61\x70\x68\x69\x63\x73\x2f\
-\x53\x56\x47\x2f\x31\x2e\x31\x2f\x44\x54\x44\x2f\x73\x76\x67\x31\
-\x31\x2e\x64\x74\x64\x22\x3e\x0a\x3c\x73\x76\x67\x20\x76\x65\x72\
-\x73\x69\x6f\x6e\x3d\x22\x31\x2e\x31\x22\x20\x69\x64\x3d\x22\x43\
-\x69\x72\x63\x6c\x65\x22\x20\x78\x6d\x6c\x6e\x73\x3d\x22\x68\x74\
-\x74\x70\x3a\x2f\x2f\x77\x77\x77\x2e\x77\x33\x2e\x6f\x72\x67\x2f\
-\x32\x30\x30\x30\x2f\x73\x76\x67\x22\x20\x78\x6d\x6c\x6e\x73\x3a\
-\x78\x6c\x69\x6e\x6b\x3d\x22\x68\x74\x74\x70\x3a\x2f\x2f\x77\x77\
-\x77\x2e\x77\x33\x2e\x6f\x72\x67\x2f\x31\x39\x39\x39\x2f\x78\x6c\
-\x69\x6e\x6b\x22\x20\x78\x3d\x22\x35\x31\x32\x70\x78\x22\x20\x79\
-\x3d\x22\x35\x31\x32\x70\x78\x22\x0a\x09\x20\x76\x69\x65\x77\x42\
-\x6f\x78\x3d\x22\x30\x20\x30\x20\x35\x31\x32\x20\x35\x31\x32\x22\
-\x20\x65\x6e\x61\x62\x6c\x65\x2d\x62\x61\x63\x6b\x67\x72\x6f\x75\
-\x6e\x64\x3d\x22\x6e\x65\x77\x20\x30\x20\x30\x20\x35\x31\x32\x20\
-\x35\x31\x32\x22\x20\x78\x6d\x6c\x3a\x73\x70\x61\x63\x65\x3d\x22\
-\x70\x72\x65\x73\x65\x72\x76\x65\x22\x3e\x0a\x3c\x67\x20\x74\x72\
-\x61\x6e\x73\x66\x6f\x72\x6d\x3d\x27\x6d\x61\x74\x72\x69\x78\x28\
-\x32\x34\x20\x30\x20\x30\x20\x32\x34\x20\x30\x20\x30\x29\x27\x3e\
-\x0a\x3c\x70\x61\x74\x68\x20\x64\x3d\x22\x4d\x31\x30\x2c\x30\x2e\
-\x34\x43\x34\x2e\x36\x39\x38\x2c\x30\x2e\x34\x2c\x30\x2e\x34\x2c\
-\x34\x2e\x36\x39\x38\x2c\x30\x2e\x34\x2c\x31\x30\x43\x30\x2e\x34\
-\x2c\x31\x35\x2e\x33\x30\x32\x2c\x34\x2e\x36\x39\x38\x2c\x31\x39\
-\x2e\x36\x2c\x31\x30\x2c\x31\x39\x2e\x36\x63\x35\x2e\x33\x30\x31\
-\x2c\x30\x2c\x39\x2e\x36\x2d\x34\x2e\x32\x39\x38\x2c\x39\x2e\x36\
-\x2d\x39\x2e\x36\x30\x31\x0a\x09\x43\x31\x39\x2e\x36\x2c\x34\x2e\
-\x36\x39\x38\x2c\x31\x35\x2e\x33\x30\x31\x2c\x30\x2e\x34\x2c\x31\
-\x30\x2c\x30\x2e\x34\x7a\x20\x4d\x31\x30\x2c\x31\x37\x2e\x35\x39\
-\x39\x63\x2d\x34\x2e\x31\x39\x37\x2c\x30\x2d\x37\x2e\x36\x2d\x33\
-\x2e\x34\x30\x32\x2d\x37\x2e\x36\x2d\x37\x2e\x36\x53\x35\x2e\x38\
-\x30\x32\x2c\x32\x2e\x34\x2c\x31\x30\x2c\x32\x2e\x34\x63\x34\x2e\
-\x31\x39\x37\x2c\x30\x2c\x37\x2e\x36\x30\x31\x2c\x33\x2e\x34\x30\
-\x32\x2c\x37\x2e\x36\x30\x31\x2c\x37\x2e\x36\x0a\x09\x53\x31\x34\
-\x2e\x31\x39\x37\x2c\x31\x37\x2e\x35\x39\x39\x2c\x31\x30\x2c\x31\
-\x37\x2e\x35\x39\x39\x7a\x22\x2f\x3e\x0a\x3c\x2f\x67\x3e\x0a\x3c\
-\x2f\x73\x76\x67\x3e\x0a\
-\x00\x00\x03\x03\
-\x3c\
-\x3f\x78\x6d\x6c\x20\x76\x65\x72\x73\x69\x6f\x6e\x3d\x22\x31\x2e\
-\x30\x22\x20\x65\x6e\x63\x6f\x64\x69\x6e\x67\x3d\x22\x75\x74\x66\
-\x2d\x38\x22\x3f\x3e\x0a\x3c\x21\x2d\x2d\x20\x47\x65\x6e\x65\x72\
-\x61\x74\x6f\x72\x3a\x20\x41\x64\x6f\x62\x65\x20\x49\x6c\x6c\x75\
-\x73\x74\x72\x61\x74\x6f\x72\x20\x31\x38\x2e\x31\x2e\x30\x2c\x20\
-\x53\x56\x47\x20\x45\x78\x70\x6f\x72\x74\x20\x50\x6c\x75\x67\x2d\
-\x49\x6e\x20\x2e\x20\x53\x56\x47\x20\x56\x65\x72\x73\x69\x6f\x6e\
-\x3a\x20\x36\x2e\x30\x30\x20\x42\x75\x69\x6c\x64\x20\x30\x29\x20\
-\x20\x2d\x2d\x3e\x0a\x3c\x21\x44\x4f\x43\x54\x59\x50\x45\x20\x73\
-\x76\x67\x20\x50\x55\x42\x4c\x49\x43\x20\x22\x2d\x2f\x2f\x57\x33\
-\x43\x2f\x2f\x44\x54\x44\x20\x53\x56\x47\x20\x31\x2e\x31\x2f\x2f\
-\x45\x4e\x22\x20\x22\x68\x74\x74\x70\x3a\x2f\x2f\x77\x77\x77\x2e\
-\x77\x33\x2e\x6f\x72\x67\x2f\x47\x72\x61\x70\x68\x69\x63\x73\x2f\
-\x53\x56\x47\x2f\x31\x2e\x31\x2f\x44\x54\x44\x2f\x73\x76\x67\x31\
-\x31\x2e\x64\x74\x64\x22\x3e\x0a\x3c\x73\x76\x67\x20\x76\x65\x72\
-\x73\x69\x6f\x6e\x3d\x22\x31\x2e\x31\x22\x20\x69\x64\x3d\x22\x43\
-\x68\x65\x63\x6b\x22\x20\x78\x6d\x6c\x6e\x73\x3d\x22\x68\x74\x74\
-\x70\x3a\x2f\x2f\x77\x77\x77\x2e\x77\x33\x2e\x6f\x72\x67\x2f\x32\
-\x30\x30\x30\x2f\x73\x76\x67\x22\x20\x78\x6d\x6c\x6e\x73\x3a\x78\
-\x6c\x69\x6e\x6b\x3d\x22\x68\x74\x74\x70\x3a\x2f\x2f\x77\x77\x77\
-\x2e\x77\x33\x2e\x6f\x72\x67\x2f\x31\x39\x39\x39\x2f\x78\x6c\x69\
-\x6e\x6b\x22\x20\x78\x3d\x22\x30\x70\x78\x22\x20\x79\x3d\x22\x30\
-\x70\x78\x22\x0a\x09\x20\x76\x69\x65\x77\x42\x6f\x78\x3d\x22\x30\
-\x20\x30\x20\x32\x30\x20\x32\x30\x22\x20\x65\x6e\x61\x62\x6c\x65\
-\x2d\x62\x61\x63\x6b\x67\x72\x6f\x75\x6e\x64\x3d\x22\x6e\x65\x77\
-\x20\x30\x20\x30\x20\x32\x30\x20\x32\x30\x22\x20\x78\x6d\x6c\x3a\
-\x73\x70\x61\x63\x65\x3d\x22\x70\x72\x65\x73\x65\x72\x76\x65\x22\
-\x3e\x0a\x3c\x70\x61\x74\x68\x20\x64\x3d\x22\x4d\x38\x2e\x32\x39\
-\x34\x2c\x31\x36\x2e\x39\x39\x38\x63\x2d\x30\x2e\x34\x33\x35\x2c\
-\x30\x2d\x30\x2e\x38\x34\x37\x2d\x30\x2e\x32\x30\x33\x2d\x31\x2e\
-\x31\x31\x31\x2d\x30\x2e\x35\x35\x33\x4c\x33\x2e\x36\x31\x2c\x31\
-\x31\x2e\x37\x32\x34\x63\x2d\x30\x2e\x34\x36\x35\x2d\x30\x2e\x36\
-\x31\x33\x2d\x30\x2e\x33\x34\x34\x2d\x31\x2e\x34\x38\x36\x2c\x30\
-\x2e\x32\x37\x2d\x31\x2e\x39\x35\x31\x0a\x09\x63\x30\x2e\x36\x31\
-\x35\x2d\x30\x2e\x34\x36\x37\x2c\x31\x2e\x34\x38\x38\x2d\x30\x2e\
-\x33\x34\x34\x2c\x31\x2e\x39\x35\x33\x2c\x30\x2e\x32\x37\x6c\x32\
-\x2e\x33\x35\x31\x2c\x33\x2e\x31\x30\x34\x6c\x35\x2e\x39\x31\x31\
-\x2d\x39\x2e\x34\x39\x32\x63\x30\x2e\x34\x30\x37\x2d\x30\x2e\x36\
-\x35\x32\x2c\x31\x2e\x32\x36\x37\x2d\x30\x2e\x38\x35\x32\x2c\x31\
-\x2e\x39\x32\x31\x2d\x30\x2e\x34\x34\x35\x0a\x09\x63\x30\x2e\x36\
-\x35\x33\x2c\x30\x2e\x34\x30\x36\x2c\x30\x2e\x38\x35\x34\x2c\x31\
-\x2e\x32\x36\x36\x2c\x30\x2e\x34\x34\x36\x2c\x31\x2e\x39\x32\x4c\
-\x39\x2e\x34\x37\x38\x2c\x31\x36\x2e\x33\x34\x63\x2d\x30\x2e\x32\
-\x34\x32\x2c\x30\x2e\x33\x39\x31\x2d\x30\x2e\x36\x36\x31\x2c\x30\
-\x2e\x36\x33\x35\x2d\x31\x2e\x31\x32\x2c\x30\x2e\x36\x35\x36\x43\
-\x38\x2e\x33\x33\x36\x2c\x31\x36\x2e\x39\x39\x38\x2c\x38\x2e\x33\
-\x31\x36\x2c\x31\x36\x2e\x39\x39\x38\x2c\x38\x2e\x32\x39\x34\x2c\
-\x31\x36\x2e\x39\x39\x38\x7a\x22\x2f\x3e\x0a\x3c\x2f\x73\x76\x67\
-\x3e\x0a\
-\x00\x00\x03\x3f\
-\x3c\
-\x3f\x78\x6d\x6c\x20\x76\x65\x72\x73\x69\x6f\x6e\x3d\x22\x31\x2e\
-\x30\x22\x20\x65\x6e\x63\x6f\x64\x69\x6e\x67\x3d\x22\x75\x74\x66\
-\x2d\x38\x22\x3f\x3e\x0a\x3c\x21\x2d\x2d\x20\x47\x65\x6e\x65\x72\
-\x61\x74\x6f\x72\x3a\x20\x41\x64\x6f\x62\x65\x20\x49\x6c\x6c\x75\
-\x73\x74\x72\x61\x74\x6f\x72\x20\x31\x36\x2e\x32\x2e\x31\x2c\x20\
-\x53\x56\x47\x20\x45\x78\x70\x6f\x72\x74\x20\x50\x6c\x75\x67\x2d\
-\x49\x6e\x20\x2e\x20\x53\x56\x47\x20\x56\x65\x72\x73\x69\x6f\x6e\
-\x3a\x20\x36\x2e\x30\x30\x20\x42\x75\x69\x6c\x64\x20\x30\x29\x20\
-\x20\x2d\x2d\x3e\x0a\x3c\x21\x44\x4f\x43\x54\x59\x50\x45\x20\x73\
-\x76\x67\x20\x50\x55\x42\x4c\x49\x43\x20\x22\x2d\x2f\x2f\x57\x33\
-\x43\x2f\x2f\x44\x54\x44\x20\x53\x56\x47\x20\x31\x2e\x31\x2f\x2f\
-\x45\x4e\x22\x20\x22\x68\x74\x74\x70\x3a\x2f\x2f\x77\x77\x77\x2e\
-\x77\x33\x2e\x6f\x72\x67\x2f\x47\x72\x61\x70\x68\x69\x63\x73\x2f\
-\x53\x56\x47\x2f\x31\x2e\x31\x2f\x44\x54\x44\x2f\x73\x76\x67\x31\
-\x31\x2e\x64\x74\x64\x22\x3e\x0a\x3c\x73\x76\x67\x20\x76\x65\x72\
-\x73\x69\x6f\x6e\x3d\x22\x31\x2e\x31\x22\x20\x69\x64\x3d\x22\x4c\
-\x61\x79\x65\x72\x5f\x31\x22\x20\x78\x6d\x6c\x6e\x73\x3d\x22\x68\
-\x74\x74\x70\x3a\x2f\x2f\x77\x77\x77\x2e\x77\x33\x2e\x6f\x72\x67\
-\x2f\x32\x30\x30\x30\x2f\x73\x76\x67\x22\x20\x78\x6d\x6c\x6e\x73\
-\x3a\x78\x6c\x69\x6e\x6b\x3d\x22\x68\x74\x74\x70\x3a\x2f\x2f\x77\
-\x77\x77\x2e\x77\x33\x2e\x6f\x72\x67\x2f\x31\x39\x39\x39\x2f\x78\
-\x6c\x69\x6e\x6b\x22\x20\x78\x3d\x22\x30\x70\x78\x22\x20\x79\x3d\
-\x22\x30\x70\x78\x22\x0a\x09\x20\x77\x69\x64\x74\x68\x3d\x22\x35\
-\x31\x32\x70\x78\x22\x20\x68\x65\x69\x67\x68\x74\x3d\x22\x35\x31\
-\x32\x70\x78\x22\x20\x76\x69\x65\x77\x42\x6f\x78\x3d\x22\x30\x20\
-\x30\x20\x35\x31\x32\x20\x35\x31\x32\x22\x20\x65\x6e\x61\x62\x6c\
-\x65\x2d\x62\x61\x63\x6b\x67\x72\x6f\x75\x6e\x64\x3d\x22\x6e\x65\
-\x77\x20\x30\x20\x30\x20\x35\x31\x32\x20\x35\x31\x32\x22\x20\x78\
-\x6d\x6c\x3a\x73\x70\x61\x63\x65\x3d\x22\x70\x72\x65\x73\x65\x72\
-\x76\x65\x22\x3e\x0a\x3c\x67\x20\x69\x64\x3d\x22\x49\x63\x6f\x6e\
-\x5f\x32\x31\x5f\x22\x3e\x0a\x09\x3c\x67\x3e\x0a\x09\x09\x3c\x70\
-\x61\x74\x68\x20\x64\x3d\x22\x4d\x32\x35\x36\x2c\x31\x35\x32\x63\
-\x2d\x35\x37\x2e\x32\x2c\x30\x2d\x31\x30\x34\x2c\x34\x36\x2e\x38\
-\x2d\x31\x30\x34\x2c\x31\x30\x34\x73\x34\x36\x2e\x38\x2c\x31\x30\
-\x34\x2c\x31\x30\x34\x2c\x31\x30\x34\x73\x31\x30\x34\x2d\x34\x36\
-\x2e\x38\x2c\x31\x30\x34\x2d\x31\x30\x34\x53\x33\x31\x33\x2e\x32\
-\x2c\x31\x35\x32\x2c\x32\x35\x36\x2c\x31\x35\x32\x7a\x20\x4d\x32\
-\x35\x36\x2c\x34\x38\x0a\x09\x09\x09\x43\x31\x34\x31\x2e\x36\x30\
-\x31\x2c\x34\x38\x2c\x34\x38\x2c\x31\x34\x31\x2e\x36\x30\x31\x2c\
-\x34\x38\x2c\x32\x35\x36\x73\x39\x33\x2e\x36\x30\x31\x2c\x32\x30\
-\x38\x2c\x32\x30\x38\x2c\x32\x30\x38\x73\x32\x30\x38\x2d\x39\x33\
-\x2e\x36\x30\x31\x2c\x32\x30\x38\x2d\x32\x30\x38\x53\x33\x37\x30\
-\x2e\x33\x39\x39\x2c\x34\x38\x2c\x32\x35\x36\x2c\x34\x38\x7a\x20\
-\x4d\x32\x35\x36\x2c\x34\x32\x32\x2e\x34\x0a\x09\x09\x09\x63\x2d\
-\x39\x31\x2e\x35\x31\x38\x2c\x30\x2d\x31\x36\x36\x2e\x34\x2d\x37\
-\x34\x2e\x38\x38\x33\x2d\x31\x36\x36\x2e\x34\x2d\x31\x36\x36\x2e\
-\x34\x53\x31\x36\x34\x2e\x34\x38\x32\x2c\x38\x39\x2e\x36\x2c\x32\
-\x35\x36\x2c\x38\x39\x2e\x36\x53\x34\x32\x32\x2e\x34\x2c\x31\x36\
-\x34\x2e\x34\x38\x32\x2c\x34\x32\x32\x2e\x34\x2c\x32\x35\x36\x53\
-\x33\x34\x37\x2e\x35\x31\x38\x2c\x34\x32\x32\x2e\x34\x2c\x32\x35\
-\x36\x2c\x34\x32\x32\x2e\x34\x7a\x22\x2f\x3e\x0a\x09\x3c\x2f\x67\
-\x3e\x0a\x3c\x2f\x67\x3e\x0a\x3c\x2f\x73\x76\x67\x3e\x0a\
-\x00\x00\x03\x16\
-\x3c\
-\x3f\x78\x6d\x6c\x20\x76\x65\x72\x73\x69\x6f\x6e\x3d\x22\x31\x2e\
-\x30\x22\x20\x65\x6e\x63\x6f\x64\x69\x6e\x67\x3d\x22\x75\x74\x66\
-\x2d\x38\x22\x3f\x3e\x0a\x3c\x21\x2d\x2d\x20\x47\x65\x6e\x65\x72\
-\x61\x74\x6f\x72\x3a\x20\x41\x64\x6f\x62\x65\x20\x49\x6c\x6c\x75\
-\x73\x74\x72\x61\x74\x6f\x72\x20\x31\x36\x2e\x32\x2e\x31\x2c\x20\
-\x53\x56\x47\x20\x45\x78\x70\x6f\x72\x74\x20\x50\x6c\x75\x67\x2d\
-\x49\x6e\x20\x2e\x20\x53\x56\x47\x20\x56\x65\x72\x73\x69\x6f\x6e\
-\x3a\x20\x36\x2e\x30\x30\x20\x42\x75\x69\x6c\x64\x20\x30\x29\x20\
-\x20\x2d\x2d\x3e\x0a\x3c\x21\x44\x4f\x43\x54\x59\x50\x45\x20\x73\
-\x76\x67\x20\x50\x55\x42\x4c\x49\x43\x20\x22\x2d\x2f\x2f\x57\x33\
-\x43\x2f\x2f\x44\x54\x44\x20\x53\x56\x47\x20\x31\x2e\x31\x2f\x2f\
-\x45\x4e\x22\x20\x22\x68\x74\x74\x70\x3a\x2f\x2f\x77\x77\x77\x2e\
-\x77\x33\x2e\x6f\x72\x67\x2f\x47\x72\x61\x70\x68\x69\x63\x73\x2f\
-\x53\x56\x47\x2f\x31\x2e\x31\x2f\x44\x54\x44\x2f\x73\x76\x67\x31\
-\x31\x2e\x64\x74\x64\x22\x3e\x0a\x3c\x73\x76\x67\x20\x76\x65\x72\
-\x73\x69\x6f\x6e\x3d\x22\x31\x2e\x31\x22\x20\x69\x64\x3d\x22\x4c\
-\x61\x79\x65\x72\x5f\x31\x22\x20\x78\x6d\x6c\x6e\x73\x3d\x22\x68\
-\x74\x74\x70\x3a\x2f\x2f\x77\x77\x77\x2e\x77\x33\x2e\x6f\x72\x67\
-\x2f\x32\x30\x30\x30\x2f\x73\x76\x67\x22\x20\x78\x6d\x6c\x6e\x73\
-\x3a\x78\x6c\x69\x6e\x6b\x3d\x22\x68\x74\x74\x70\x3a\x2f\x2f\x77\
-\x77\x77\x2e\x77\x33\x2e\x6f\x72\x67\x2f\x31\x39\x39\x39\x2f\x78\
-\x6c\x69\x6e\x6b\x22\x20\x78\x3d\x22\x30\x70\x78\x22\x20\x79\x3d\
-\x22\x30\x70\x78\x22\x0a\x09\x20\x77\x69\x64\x74\x68\x3d\x22\x35\
-\x31\x32\x70\x78\x22\x20\x68\x65\x69\x67\x68\x74\x3d\x22\x35\x31\
-\x32\x70\x78\x22\x20\x76\x69\x65\x77\x42\x6f\x78\x3d\x22\x30\x20\
-\x30\x20\x35\x31\x32\x20\x35\x31\x32\x22\x20\x65\x6e\x61\x62\x6c\
-\x65\x2d\x62\x61\x63\x6b\x67\x72\x6f\x75\x6e\x64\x3d\x22\x6e\x65\
-\x77\x20\x30\x20\x30\x20\x35\x31\x32\x20\x35\x31\x32\x22\x20\x78\
-\x6d\x6c\x3a\x73\x70\x61\x63\x65\x3d\x22\x70\x72\x65\x73\x65\x72\
-\x76\x65\x22\x3e\x0a\x3c\x67\x3e\x0a\x09\x3c\x63\x69\x72\x63\x6c\
-\x65\x20\x63\x78\x3d\x22\x32\x35\x36\x22\x20\x63\x79\x3d\x22\x32\
-\x38\x30\x22\x20\x72\x3d\x22\x36\x33\x22\x2f\x3e\x0a\x09\x3c\x70\
-\x61\x74\x68\x20\x64\x3d\x22\x4d\x34\x34\x30\x2c\x39\x36\x68\x2d\
-\x38\x38\x6c\x2d\x33\x32\x2d\x33\x32\x48\x31\x39\x32\x6c\x2d\x33\
-\x32\x2c\x33\x32\x48\x37\x32\x63\x2d\x32\x32\x2e\x30\x39\x32\x2c\
-\x30\x2d\x34\x30\x2c\x31\x37\x2e\x39\x30\x38\x2d\x34\x30\x2c\x34\
-\x30\x76\x32\x37\x32\x63\x30\x2c\x32\x32\x2e\x30\x39\x32\x2c\x31\
-\x37\x2e\x39\x30\x38\x2c\x34\x30\x2c\x34\x30\x2c\x34\x30\x68\x33\
-\x36\x38\x63\x32\x32\x2e\x30\x39\x32\x2c\x30\x2c\x34\x30\x2d\x31\
-\x37\x2e\x39\x30\x38\x2c\x34\x30\x2d\x34\x30\x0a\x09\x09\x56\x31\
-\x33\x36\x43\x34\x38\x30\x2c\x31\x31\x33\x2e\x39\x30\x38\x2c\x34\
-\x36\x32\x2e\x30\x39\x32\x2c\x39\x36\x2c\x34\x34\x30\x2c\x39\x36\
-\x7a\x20\x4d\x32\x35\x36\x2c\x33\x39\x32\x63\x2d\x36\x31\x2e\x38\
-\x35\x35\x2c\x30\x2d\x31\x31\x32\x2d\x35\x30\x2e\x31\x34\x35\x2d\
-\x31\x31\x32\x2d\x31\x31\x32\x73\x35\x30\x2e\x31\x34\x35\x2d\x31\
-\x31\x32\x2c\x31\x31\x32\x2d\x31\x31\x32\x73\x31\x31\x32\x2c\x35\
-\x30\x2e\x31\x34\x35\x2c\x31\x31\x32\x2c\x31\x31\x32\x0a\x09\x09\
-\x53\x33\x31\x37\x2e\x38\x35\x35\x2c\x33\x39\x32\x2c\x32\x35\x36\
-\x2c\x33\x39\x32\x7a\x22\x2f\x3e\x0a\x3c\x2f\x67\x3e\x0a\x3c\x2f\
-\x73\x76\x67\x3e\x0a\
-\x00\x00\x02\x6c\
-\x3c\
-\x3f\x78\x6d\x6c\x20\x76\x65\x72\x73\x69\x6f\x6e\x3d\x22\x31\x2e\
-\x30\x22\x20\x65\x6e\x63\x6f\x64\x69\x6e\x67\x3d\x22\x75\x74\x66\
-\x2d\x38\x22\x3f\x3e\x0a\x3c\x21\x2d\x2d\x20\x47\x65\x6e\x65\x72\
-\x61\x74\x6f\x72\x3a\x20\x41\x64\x6f\x62\x65\x20\x49\x6c\x6c\x75\
-\x73\x74\x72\x61\x74\x6f\x72\x20\x31\x36\x2e\x32\x2e\x31\x2c\x20\
-\x53\x56\x47\x20\x45\x78\x70\x6f\x72\x74\x20\x50\x6c\x75\x67\x2d\
-\x49\x6e\x20\x2e\x20\x53\x56\x47\x20\x56\x65\x72\x73\x69\x6f\x6e\
-\x3a\x20\x36\x2e\x30\x30\x20\x42\x75\x69\x6c\x64\x20\x30\x29\x20\
-\x20\x2d\x2d\x3e\x0a\x3c\x21\x44\x4f\x43\x54\x59\x50\x45\x20\x73\
-\x76\x67\x20\x50\x55\x42\x4c\x49\x43\x20\x22\x2d\x2f\x2f\x57\x33\
-\x43\x2f\x2f\x44\x54\x44\x20\x53\x56\x47\x20\x31\x2e\x31\x2f\x2f\
-\x45\x4e\x22\x20\x22\x68\x74\x74\x70\x3a\x2f\x2f\x77\x77\x77\x2e\
-\x77\x33\x2e\x6f\x72\x67\x2f\x47\x72\x61\x70\x68\x69\x63\x73\x2f\
-\x53\x56\x47\x2f\x31\x2e\x31\x2f\x44\x54\x44\x2f\x73\x76\x67\x31\
-\x31\x2e\x64\x74\x64\x22\x3e\x0a\x3c\x73\x76\x67\x20\x76\x65\x72\
-\x73\x69\x6f\x6e\x3d\x22\x31\x2e\x31\x22\x20\x69\x64\x3d\x22\x4c\
-\x61\x79\x65\x72\x5f\x31\x22\x20\x78\x6d\x6c\x6e\x73\x3d\x22\x68\
-\x74\x74\x70\x3a\x2f\x2f\x77\x77\x77\x2e\x77\x33\x2e\x6f\x72\x67\
-\x2f\x32\x30\x30\x30\x2f\x73\x76\x67\x22\x20\x78\x6d\x6c\x6e\x73\
-\x3a\x78\x6c\x69\x6e\x6b\x3d\x22\x68\x74\x74\x70\x3a\x2f\x2f\x77\
-\x77\x77\x2e\x77\x33\x2e\x6f\x72\x67\x2f\x31\x39\x39\x39\x2f\x78\
-\x6c\x69\x6e\x6b\x22\x20\x78\x3d\x22\x30\x70\x78\x22\x20\x79\x3d\
-\x22\x30\x70\x78\x22\x0a\x09\x20\x77\x69\x64\x74\x68\x3d\x22\x35\
-\x31\x32\x70\x78\x22\x20\x68\x65\x69\x67\x68\x74\x3d\x22\x35\x31\
-\x32\x70\x78\x22\x20\x76\x69\x65\x77\x42\x6f\x78\x3d\x22\x30\x20\
-\x30\x20\x35\x31\x32\x20\x35\x31\x32\x22\x20\x65\x6e\x61\x62\x6c\
-\x65\x2d\x62\x61\x63\x6b\x67\x72\x6f\x75\x6e\x64\x3d\x22\x6e\x65\
-\x77\x20\x30\x20\x30\x20\x35\x31\x32\x20\x35\x31\x32\x22\x20\x78\
-\x6d\x6c\x3a\x73\x70\x61\x63\x65\x3d\x22\x70\x72\x65\x73\x65\x72\
-\x76\x65\x22\x3e\x0a\x3c\x67\x20\x69\x64\x3d\x22\x49\x63\x6f\x6e\
-\x5f\x31\x5f\x22\x3e\x0a\x09\x3c\x67\x3e\x0a\x09\x09\x3c\x67\x3e\
-\x0a\x09\x09\x09\x3c\x70\x6f\x6c\x79\x67\x6f\x6e\x20\x70\x6f\x69\
-\x6e\x74\x73\x3d\x22\x31\x38\x36\x2e\x33\x30\x31\x2c\x33\x33\x39\
-\x2e\x38\x39\x33\x20\x39\x36\x2c\x32\x34\x39\x2e\x34\x36\x31\x20\
-\x36\x34\x2c\x32\x37\x39\x2e\x39\x36\x38\x20\x31\x38\x36\x2e\x33\
-\x30\x31\x2c\x34\x30\x32\x20\x34\x34\x38\x2c\x31\x34\x30\x2e\x35\
-\x30\x36\x20\x34\x31\x36\x2c\x31\x31\x30\x20\x09\x09\x09\x22\x2f\
-\x3e\x0a\x09\x09\x3c\x2f\x67\x3e\x0a\x09\x3c\x2f\x67\x3e\x0a\x3c\
-\x2f\x67\x3e\x0a\x3c\x2f\x73\x76\x67\x3e\x0a\
-\x00\x00\x04\x13\
-\x3c\
-\x3f\x78\x6d\x6c\x20\x76\x65\x72\x73\x69\x6f\x6e\x3d\x27\x31\x2e\
-\x30\x27\x20\x65\x6e\x63\x6f\x64\x69\x6e\x67\x3d\x27\x55\x54\x46\
-\x2d\x38\x27\x3f\x3e\x0a\x3c\x21\x2d\x2d\x20\x54\x68\x69\x73\x20\
-\x66\x69\x6c\x65\x20\x77\x61\x73\x20\x67\x65\x6e\x65\x72\x61\x74\
-\x65\x64\x20\x62\x79\x20\x64\x76\x69\x73\x76\x67\x6d\x20\x32\x2e\
-\x31\x31\x2e\x31\x20\x2d\x2d\x3e\x0a\x3c\x73\x76\x67\x20\x76\x65\
-\x72\x73\x69\x6f\x6e\x3d\x27\x31\x2e\x31\x27\x20\x78\x6d\x6c\x6e\
-\x73\x3d\x27\x68\x74\x74\x70\x3a\x2f\x2f\x77\x77\x77\x2e\x77\x33\
-\x2e\x6f\x72\x67\x2f\x32\x30\x30\x30\x2f\x73\x76\x67\x27\x20\x78\
-\x6d\x6c\x6e\x73\x3a\x78\x6c\x69\x6e\x6b\x3d\x27\x68\x74\x74\x70\
-\x3a\x2f\x2f\x77\x77\x77\x2e\x77\x33\x2e\x6f\x72\x67\x2f\x31\x39\
-\x39\x39\x2f\x78\x6c\x69\x6e\x6b\x27\x20\x77\x69\x64\x74\x68\x3d\
-\x27\x36\x34\x2e\x30\x30\x30\x31\x70\x74\x27\x20\x68\x65\x69\x67\
-\x68\x74\x3d\x27\x36\x34\x70\x74\x27\x20\x76\x69\x65\x77\x42\x6f\
-\x78\x3d\x27\x35\x38\x2e\x34\x36\x36\x39\x20\x31\x31\x37\x2e\x38\
-\x35\x38\x20\x36\x34\x2e\x30\x30\x30\x31\x20\x36\x34\x27\x3e\x0a\
-\x3c\x67\x20\x69\x64\x3d\x27\x70\x61\x67\x65\x31\x27\x3e\x0a\x3c\
-\x67\x20\x74\x72\x61\x6e\x73\x66\x6f\x72\x6d\x3d\x27\x74\x72\x61\
-\x6e\x73\x6c\x61\x74\x65\x28\x35\x38\x2e\x34\x36\x36\x39\x20\x31\
-\x31\x37\x2e\x38\x35\x38\x29\x73\x63\x61\x6c\x65\x28\x2e\x39\x39\
-\x36\x32\x36\x34\x29\x27\x3e\x0a\x3c\x70\x61\x74\x68\x20\x64\x3d\
-\x27\x4d\x20\x36\x2e\x30\x32\x32\x35\x20\x33\x32\x2e\x31\x32\x4c\
-\x20\x31\x33\x2e\x39\x36\x38\x37\x20\x31\x32\x2e\x39\x33\x36\x31\
-\x4c\x20\x35\x38\x2e\x32\x31\x37\x35\x20\x32\x31\x2e\x37\x33\x37\
-\x38\x4c\x20\x34\x32\x2e\x37\x34\x34\x35\x20\x34\x31\x2e\x37\x31\
-\x31\x39\x27\x20\x66\x69\x6c\x6c\x3d\x27\x6e\x6f\x6e\x65\x27\x20\
-\x73\x74\x72\x6f\x6b\x65\x3d\x27\x23\x30\x30\x30\x30\x30\x30\x27\
-\x20\x73\x74\x72\x6f\x6b\x65\x2d\x6c\x69\x6e\x65\x63\x61\x70\x3d\
-\x27\x72\x6f\x75\x6e\x64\x27\x20\x73\x74\x72\x6f\x6b\x65\x2d\x6c\
-\x69\x6e\x65\x6a\x6f\x69\x6e\x3d\x27\x72\x6f\x75\x6e\x64\x27\x20\
-\x73\x74\x72\x6f\x6b\x65\x2d\x6d\x69\x74\x65\x72\x6c\x69\x6d\x69\
-\x74\x3d\x27\x31\x30\x2e\x30\x33\x37\x35\x27\x20\x73\x74\x72\x6f\
-\x6b\x65\x2d\x77\x69\x64\x74\x68\x3d\x27\x32\x2e\x35\x30\x39\x33\
-\x37\x27\x2f\x3e\x0a\x3c\x2f\x67\x3e\x0a\x3c\x67\x20\x74\x72\x61\
-\x6e\x73\x66\x6f\x72\x6d\x3d\x27\x74\x72\x61\x6e\x73\x6c\x61\x74\
-\x65\x28\x35\x38\x2e\x34\x36\x36\x39\x20\x31\x31\x37\x2e\x38\x35\
-\x38\x29\x73\x63\x61\x6c\x65\x28\x2e\x39\x39\x36\x32\x36\x34\x29\
-\x27\x3e\x0a\x3c\x63\x69\x72\x63\x6c\x65\x20\x63\x78\x3d\x27\x36\
-\x2e\x30\x32\x32\x35\x27\x20\x63\x79\x3d\x27\x33\x32\x2e\x31\x32\
-\x27\x20\x66\x69\x6c\x6c\x3d\x27\x23\x66\x66\x30\x30\x30\x30\x27\
-\x20\x72\x3d\x27\x36\x2e\x30\x32\x32\x35\x27\x2f\x3e\x0a\x3c\x2f\
-\x67\x3e\x0a\x3c\x67\x20\x74\x72\x61\x6e\x73\x66\x6f\x72\x6d\x3d\
-\x27\x74\x72\x61\x6e\x73\x6c\x61\x74\x65\x28\x35\x38\x2e\x34\x36\
-\x36\x39\x20\x31\x31\x37\x2e\x38\x35\x38\x29\x73\x63\x61\x6c\x65\
-\x28\x2e\x39\x39\x36\x32\x36\x34\x29\x27\x3e\x0a\x3c\x63\x69\x72\
-\x63\x6c\x65\x20\x63\x78\x3d\x27\x31\x33\x2e\x39\x36\x38\x37\x27\
-\x20\x63\x79\x3d\x27\x31\x32\x2e\x39\x33\x36\x31\x27\x20\x66\x69\
-\x6c\x6c\x3d\x27\x23\x66\x66\x30\x30\x30\x30\x27\x20\x72\x3d\x27\
-\x36\x2e\x30\x32\x32\x35\x27\x2f\x3e\x0a\x3c\x2f\x67\x3e\x0a\x3c\
-\x67\x20\x74\x72\x61\x6e\x73\x66\x6f\x72\x6d\x3d\x27\x74\x72\x61\
-\x6e\x73\x6c\x61\x74\x65\x28\x35\x38\x2e\x34\x36\x36\x39\x20\x31\
-\x31\x37\x2e\x38\x35\x38\x29\x73\x63\x61\x6c\x65\x28\x2e\x39\x39\
-\x36\x32\x36\x34\x29\x27\x3e\x0a\x3c\x63\x69\x72\x63\x6c\x65\x20\
-\x63\x78\x3d\x27\x35\x38\x2e\x32\x31\x37\x35\x27\x20\x63\x79\x3d\
-\x27\x32\x31\x2e\x37\x33\x37\x38\x27\x20\x66\x69\x6c\x6c\x3d\x27\
-\x23\x66\x66\x30\x30\x30\x30\x27\x20\x72\x3d\x27\x36\x2e\x30\x32\
-\x32\x35\x27\x2f\x3e\x0a\x3c\x2f\x67\x3e\x0a\x3c\x67\x20\x74\x72\
-\x61\x6e\x73\x66\x6f\x72\x6d\x3d\x27\x74\x72\x61\x6e\x73\x6c\x61\
-\x74\x65\x28\x35\x38\x2e\x34\x36\x36\x39\x20\x31\x31\x37\x2e\x38\
-\x35\x38\x29\x73\x63\x61\x6c\x65\x28\x2e\x39\x39\x36\x32\x36\x34\
-\x29\x27\x3e\x0a\x3c\x63\x69\x72\x63\x6c\x65\x20\x63\x78\x3d\x27\
-\x34\x32\x2e\x37\x34\x34\x35\x27\x20\x63\x79\x3d\x27\x34\x31\x2e\
-\x37\x31\x31\x39\x27\x20\x66\x69\x6c\x6c\x3d\x27\x23\x66\x66\x30\
-\x30\x30\x30\x27\x20\x72\x3d\x27\x36\x2e\x30\x32\x32\x35\x27\x2f\
-\x3e\x0a\x3c\x2f\x67\x3e\x0a\x3c\x2f\x67\x3e\x0a\x3c\x2f\x73\x76\
-\x67\x3e\
-\x00\x00\x02\x97\
-\x3c\
-\x3f\x78\x6d\x6c\x20\x76\x65\x72\x73\x69\x6f\x6e\x3d\x22\x31\x2e\
-\x30\x22\x20\x65\x6e\x63\x6f\x64\x69\x6e\x67\x3d\x22\x75\x74\x66\
-\x2d\x38\x22\x3f\x3e\x0a\x3c\x21\x2d\x2d\x20\x47\x65\x6e\x65\x72\
-\x61\x74\x6f\x72\x3a\x20\x41\x64\x6f\x62\x65\x20\x49\x6c\x6c\x75\
-\x73\x74\x72\x61\x74\x6f\x72\x20\x31\x38\x2e\x31\x2e\x31\x2c\x20\
-\x53\x56\x47\x20\x45\x78\x70\x6f\x72\x74\x20\x50\x6c\x75\x67\x2d\
-\x49\x6e\x20\x2e\x20\x53\x56\x47\x20\x56\x65\x72\x73\x69\x6f\x6e\
-\x3a\x20\x36\x2e\x30\x30\x20\x42\x75\x69\x6c\x64\x20\x30\x29\x20\
-\x20\x2d\x2d\x3e\x0a\x3c\x21\x44\x4f\x43\x54\x59\x50\x45\x20\x73\
-\x76\x67\x20\x50\x55\x42\x4c\x49\x43\x20\x22\x2d\x2f\x2f\x57\x33\
-\x43\x2f\x2f\x44\x54\x44\x20\x53\x56\x47\x20\x31\x2e\x31\x2f\x2f\
-\x45\x4e\x22\x20\x22\x68\x74\x74\x70\x3a\x2f\x2f\x77\x77\x77\x2e\
-\x77\x33\x2e\x6f\x72\x67\x2f\x47\x72\x61\x70\x68\x69\x63\x73\x2f\
-\x53\x56\x47\x2f\x31\x2e\x31\x2f\x44\x54\x44\x2f\x73\x76\x67\x31\
-\x31\x2e\x64\x74\x64\x22\x3e\x0a\x3c\x73\x76\x67\x20\x76\x65\x72\
-\x73\x69\x6f\x6e\x3d\x22\x31\x2e\x31\x22\x20\x69\x64\x3d\x22\x53\
-\x61\x76\x65\x22\x20\x78\x6d\x6c\x6e\x73\x3d\x22\x68\x74\x74\x70\
-\x3a\x2f\x2f\x77\x77\x77\x2e\x77\x33\x2e\x6f\x72\x67\x2f\x32\x30\
-\x30\x30\x2f\x73\x76\x67\x22\x20\x78\x6d\x6c\x6e\x73\x3a\x78\x6c\
-\x69\x6e\x6b\x3d\x22\x68\x74\x74\x70\x3a\x2f\x2f\x77\x77\x77\x2e\
-\x77\x33\x2e\x6f\x72\x67\x2f\x31\x39\x39\x39\x2f\x78\x6c\x69\x6e\
-\x6b\x22\x20\x78\x3d\x22\x35\x31\x32\x70\x78\x22\x20\x79\x3d\x22\
-\x35\x31\x32\x70\x78\x22\x0a\x09\x20\x76\x69\x65\x77\x42\x6f\x78\
-\x3d\x22\x30\x20\x30\x20\x35\x31\x32\x20\x35\x31\x32\x22\x20\x65\
-\x6e\x61\x62\x6c\x65\x2d\x62\x61\x63\x6b\x67\x72\x6f\x75\x6e\x64\
-\x3d\x22\x6e\x65\x77\x20\x30\x20\x30\x20\x35\x31\x32\x20\x35\x31\
-\x32\x22\x20\x78\x6d\x6c\x3a\x73\x70\x61\x63\x65\x3d\x22\x70\x72\
-\x65\x73\x65\x72\x76\x65\x22\x3e\x0a\x3c\x67\x20\x74\x72\x61\x6e\
-\x73\x66\x6f\x72\x6d\x3d\x27\x6d\x61\x74\x72\x69\x78\x28\x32\x34\
-\x20\x30\x20\x30\x20\x32\x34\x20\x30\x20\x30\x29\x27\x3e\x0a\x3c\
-\x70\x61\x74\x68\x20\x64\x3d\x22\x4d\x31\x35\x2e\x31\x37\x33\x2c\
-\x32\x48\x34\x43\x32\x2e\x38\x39\x39\x2c\x32\x2c\x32\x2c\x32\x2e\
-\x39\x2c\x32\x2c\x34\x76\x31\x32\x63\x30\x2c\x31\x2e\x31\x2c\x30\
-\x2e\x38\x39\x39\x2c\x32\x2c\x32\x2c\x32\x68\x31\x32\x63\x31\x2e\
-\x31\x30\x31\x2c\x30\x2c\x32\x2d\x30\x2e\x39\x2c\x32\x2d\x32\x56\
-\x35\x2e\x31\x32\x37\x4c\x31\x35\x2e\x31\x37\x33\x2c\x32\x7a\x20\
-\x4d\x31\x34\x2c\x38\x63\x30\x2c\x30\x2e\x35\x34\x39\x2d\x30\x2e\
-\x34\x35\x2c\x31\x2d\x31\x2c\x31\x48\x37\x0a\x09\x43\x36\x2e\x34\
-\x35\x2c\x39\x2c\x36\x2c\x38\x2e\x35\x34\x39\x2c\x36\x2c\x38\x56\
-\x33\x68\x38\x56\x38\x7a\x20\x4d\x31\x33\x2c\x34\x68\x2d\x32\x76\
-\x34\x68\x32\x56\x34\x7a\x22\x2f\x3e\x0a\x3c\x2f\x67\x3e\x0a\x3c\
-\x2f\x73\x76\x67\x3e\x0a\
-\x00\x00\x04\x54\
-\x3c\
-\x3f\x78\x6d\x6c\x20\x76\x65\x72\x73\x69\x6f\x6e\x3d\x22\x31\x2e\
-\x30\x22\x20\x65\x6e\x63\x6f\x64\x69\x6e\x67\x3d\x22\x75\x74\x66\
-\x2d\x38\x22\x3f\x3e\x0a\x3c\x21\x2d\x2d\x20\x47\x65\x6e\x65\x72\
-\x61\x74\x6f\x72\x3a\x20\x41\x64\x6f\x62\x65\x20\x49\x6c\x6c\x75\
-\x73\x74\x72\x61\x74\x6f\x72\x20\x31\x36\x2e\x32\x2e\x31\x2c\x20\
-\x53\x56\x47\x20\x45\x78\x70\x6f\x72\x74\x20\x50\x6c\x75\x67\x2d\
-\x49\x6e\x20\x2e\x20\x53\x56\x47\x20\x56\x65\x72\x73\x69\x6f\x6e\
-\x3a\x20\x36\x2e\x30\x30\x20\x42\x75\x69\x6c\x64\x20\x30\x29\x20\
-\x20\x2d\x2d\x3e\x0a\x3c\x21\x44\x4f\x43\x54\x59\x50\x45\x20\x73\
-\x76\x67\x20\x50\x55\x42\x4c\x49\x43\x20\x22\x2d\x2f\x2f\x57\x33\
-\x43\x2f\x2f\x44\x54\x44\x20\x53\x56\x47\x20\x31\x2e\x31\x2f\x2f\
-\x45\x4e\x22\x20\x22\x68\x74\x74\x70\x3a\x2f\x2f\x77\x77\x77\x2e\
-\x77\x33\x2e\x6f\x72\x67\x2f\x47\x72\x61\x70\x68\x69\x63\x73\x2f\
-\x53\x56\x47\x2f\x31\x2e\x31\x2f\x44\x54\x44\x2f\x73\x76\x67\x31\
-\x31\x2e\x64\x74\x64\x22\x3e\x0a\x3c\x73\x76\x67\x20\x76\x65\x72\
-\x73\x69\x6f\x6e\x3d\x22\x31\x2e\x31\x22\x20\x69\x64\x3d\x22\x4c\
-\x61\x79\x65\x72\x5f\x31\x22\x20\x78\x6d\x6c\x6e\x73\x3d\x22\x68\
-\x74\x74\x70\x3a\x2f\x2f\x77\x77\x77\x2e\x77\x33\x2e\x6f\x72\x67\
-\x2f\x32\x30\x30\x30\x2f\x73\x76\x67\x22\x20\x78\x6d\x6c\x6e\x73\
-\x3a\x78\x6c\x69\x6e\x6b\x3d\x22\x68\x74\x74\x70\x3a\x2f\x2f\x77\
-\x77\x77\x2e\x77\x33\x2e\x6f\x72\x67\x2f\x31\x39\x39\x39\x2f\x78\
-\x6c\x69\x6e\x6b\x22\x20\x78\x3d\x22\x30\x70\x78\x22\x20\x79\x3d\
-\x22\x30\x70\x78\x22\x0a\x09\x20\x77\x69\x64\x74\x68\x3d\x22\x35\
-\x31\x32\x70\x78\x22\x20\x68\x65\x69\x67\x68\x74\x3d\x22\x35\x31\
-\x32\x70\x78\x22\x20\x76\x69\x65\x77\x42\x6f\x78\x3d\x22\x30\x20\
-\x30\x20\x35\x31\x32\x20\x35\x31\x32\x22\x20\x65\x6e\x61\x62\x6c\
-\x65\x2d\x62\x61\x63\x6b\x67\x72\x6f\x75\x6e\x64\x3d\x22\x6e\x65\
-\x77\x20\x30\x20\x30\x20\x35\x31\x32\x20\x35\x31\x32\x22\x20\x78\
-\x6d\x6c\x3a\x73\x70\x61\x63\x65\x3d\x22\x70\x72\x65\x73\x65\x72\
-\x76\x65\x22\x3e\x0a\x3c\x67\x20\x69\x64\x3d\x22\x49\x63\x6f\x6e\
-\x22\x3e\x0a\x09\x3c\x67\x3e\x0a\x09\x09\x3c\x70\x61\x74\x68\x20\
-\x64\x3d\x22\x4d\x32\x35\x36\x2c\x31\x37\x36\x63\x2d\x34\x34\x2e\
-\x30\x30\x34\x2c\x30\x2d\x38\x30\x2e\x30\x30\x31\x2c\x33\x36\x2d\
-\x38\x30\x2e\x30\x30\x31\x2c\x38\x30\x63\x30\x2c\x34\x34\x2e\x30\
-\x30\x34\x2c\x33\x35\x2e\x39\x39\x37\x2c\x38\x30\x2c\x38\x30\x2e\
-\x30\x30\x31\x2c\x38\x30\x63\x34\x34\x2e\x30\x30\x35\x2c\x30\x2c\
-\x37\x39\x2e\x39\x39\x39\x2d\x33\x35\x2e\x39\x39\x36\x2c\x37\x39\
-\x2e\x39\x39\x39\x2d\x38\x30\x0a\x09\x09\x09\x43\x33\x33\x35\x2e\
-\x39\x39\x39\x2c\x32\x31\x32\x2c\x33\x30\x30\x2e\x30\x30\x35\x2c\
-\x31\x37\x36\x2c\x32\x35\x36\x2c\x31\x37\x36\x7a\x20\x4d\x34\x34\
-\x36\x2e\x39\x33\x38\x2c\x32\x33\x34\x2e\x36\x36\x37\x63\x2d\x39\
-\x2e\x36\x30\x35\x2d\x38\x38\x2e\x35\x33\x31\x2d\x38\x31\x2e\x30\
-\x37\x34\x2d\x31\x36\x30\x2d\x31\x36\x39\x2e\x36\x30\x35\x2d\x31\
-\x36\x39\x2e\x35\x39\x39\x56\x33\x32\x68\x2d\x34\x32\x2e\x36\x36\
-\x36\x76\x33\x33\x2e\x30\x36\x37\x0a\x09\x09\x09\x63\x2d\x38\x38\
-\x2e\x35\x33\x31\x2c\x39\x2e\x35\x39\x39\x2d\x31\x36\x30\x2c\x38\
-\x31\x2e\x30\x36\x38\x2d\x31\x36\x39\x2e\x36\x30\x34\x2c\x31\x36\
-\x39\x2e\x35\x39\x39\x48\x33\x32\x76\x34\x32\x2e\x36\x36\x37\x68\
-\x33\x33\x2e\x30\x36\x32\x63\x39\x2e\x36\x30\x34\x2c\x38\x38\x2e\
-\x35\x33\x31\x2c\x38\x31\x2e\x30\x37\x32\x2c\x31\x36\x30\x2c\x31\
-\x36\x39\x2e\x36\x30\x34\x2c\x31\x36\x39\x2e\x36\x30\x34\x56\x34\
-\x38\x30\x68\x34\x32\x2e\x36\x36\x36\x76\x2d\x33\x33\x2e\x30\x36\
-\x32\x0a\x09\x09\x09\x63\x38\x38\x2e\x35\x33\x31\x2d\x39\x2e\x36\
-\x30\x34\x2c\x31\x36\x30\x2d\x38\x31\x2e\x30\x37\x33\x2c\x31\x36\
-\x39\x2e\x36\x30\x35\x2d\x31\x36\x39\x2e\x36\x30\x34\x48\x34\x38\
-\x30\x76\x2d\x34\x32\x2e\x36\x36\x37\x48\x34\x34\x36\x2e\x39\x33\
-\x38\x7a\x20\x4d\x32\x35\x36\x2c\x34\x30\x35\x2e\x33\x33\x33\x63\
-\x2d\x38\x32\x2e\x31\x33\x37\x2c\x30\x2d\x31\x34\x39\x2e\x33\x33\
-\x34\x2d\x36\x37\x2e\x31\x39\x38\x2d\x31\x34\x39\x2e\x33\x33\x34\
-\x2d\x31\x34\x39\x2e\x33\x33\x33\x0a\x09\x09\x09\x63\x30\x2d\x38\
-\x32\x2e\x31\x33\x36\x2c\x36\x37\x2e\x31\x39\x37\x2d\x31\x34\x39\
-\x2e\x33\x33\x33\x2c\x31\x34\x39\x2e\x33\x33\x34\x2d\x31\x34\x39\
-\x2e\x33\x33\x33\x63\x38\x32\x2e\x31\x33\x35\x2c\x30\x2c\x31\x34\
-\x39\x2e\x33\x33\x32\x2c\x36\x37\x2e\x31\x39\x38\x2c\x31\x34\x39\
-\x2e\x33\x33\x32\x2c\x31\x34\x39\x2e\x33\x33\x33\x43\x34\x30\x35\
-\x2e\x33\x33\x32\x2c\x33\x33\x38\x2e\x31\x33\x35\x2c\x33\x33\x38\
-\x2e\x31\x33\x35\x2c\x34\x30\x35\x2e\x33\x33\x33\x2c\x32\x35\x36\
-\x2c\x34\x30\x35\x2e\x33\x33\x33\x7a\x0a\x09\x09\x09\x22\x2f\x3e\
-\x0a\x09\x3c\x2f\x67\x3e\x0a\x3c\x2f\x67\x3e\x0a\x3c\x2f\x73\x76\
-\x67\x3e\x0a\
-\x00\x00\x04\x17\
-\x3c\
-\x3f\x78\x6d\x6c\x20\x76\x65\x72\x73\x69\x6f\x6e\x3d\x22\x31\x2e\
-\x30\x22\x20\x65\x6e\x63\x6f\x64\x69\x6e\x67\x3d\x22\x69\x73\x6f\
-\x2d\x38\x38\x35\x39\x2d\x31\x22\x3f\x3e\x0a\x3c\x21\x2d\x2d\x20\
-\x47\x65\x6e\x65\x72\x61\x74\x6f\x72\x3a\x20\x41\x64\x6f\x62\x65\
-\x20\x49\x6c\x6c\x75\x73\x74\x72\x61\x74\x6f\x72\x20\x31\x39\x2e\
-\x30\x2e\x30\x2c\x20\x53\x56\x47\x20\x45\x78\x70\x6f\x72\x74\x20\
-\x50\x6c\x75\x67\x2d\x49\x6e\x20\x2e\x20\x53\x56\x47\x20\x56\x65\
-\x72\x73\x69\x6f\x6e\x3a\x20\x36\x2e\x30\x30\x20\x42\x75\x69\x6c\
-\x64\x20\x30\x29\x20\x20\x2d\x2d\x3e\x0a\x3c\x73\x76\x67\x20\x76\
-\x65\x72\x73\x69\x6f\x6e\x3d\x22\x31\x2e\x31\x22\x20\x69\x64\x3d\
-\x22\x4c\x61\x79\x65\x72\x5f\x31\x22\x20\x78\x6d\x6c\x6e\x73\x3d\
-\x22\x68\x74\x74\x70\x3a\x2f\x2f\x77\x77\x77\x2e\x77\x33\x2e\x6f\
-\x72\x67\x2f\x32\x30\x30\x30\x2f\x73\x76\x67\x22\x20\x78\x6d\x6c\
-\x6e\x73\x3a\x78\x6c\x69\x6e\x6b\x3d\x22\x68\x74\x74\x70\x3a\x2f\
-\x2f\x77\x77\x77\x2e\x77\x33\x2e\x6f\x72\x67\x2f\x31\x39\x39\x39\
-\x2f\x78\x6c\x69\x6e\x6b\x22\x20\x78\x3d\x22\x30\x70\x78\x22\x20\
-\x79\x3d\x22\x30\x70\x78\x22\x0a\x09\x20\x76\x69\x65\x77\x42\x6f\
-\x78\x3d\x22\x30\x20\x30\x20\x34\x32\x33\x2e\x37\x35\x34\x20\x34\
-\x32\x33\x2e\x37\x35\x34\x22\x20\x73\x74\x79\x6c\x65\x3d\x22\x65\
-\x6e\x61\x62\x6c\x65\x2d\x62\x61\x63\x6b\x67\x72\x6f\x75\x6e\x64\
-\x3a\x6e\x65\x77\x20\x30\x20\x30\x20\x34\x32\x33\x2e\x37\x35\x34\
-\x20\x34\x32\x33\x2e\x37\x35\x34\x3b\x22\x20\x78\x6d\x6c\x3a\x73\
-\x70\x61\x63\x65\x3d\x22\x70\x72\x65\x73\x65\x72\x76\x65\x22\x3e\
-\x0a\x3c\x70\x61\x74\x68\x20\x64\x3d\x22\x4d\x33\x35\x34\x2e\x32\
-\x34\x2c\x34\x37\x2e\x34\x6c\x33\x39\x2e\x38\x37\x39\x2d\x33\x39\
-\x2e\x38\x37\x39\x48\x32\x37\x32\x2e\x31\x39\x36\x76\x31\x32\x31\
-\x2e\x39\x32\x34\x6c\x36\x30\x2e\x38\x30\x31\x2d\x36\x30\x2e\x38\
-\x30\x31\x63\x35\x36\x2c\x35\x30\x2e\x30\x36\x36\x2c\x37\x37\x2e\
-\x32\x35\x31\x2c\x31\x33\x32\x2e\x30\x30\x34\x2c\x34\x36\x2e\x39\
-\x31\x38\x2c\x32\x30\x35\x2e\x32\x33\x35\x0a\x09\x63\x2d\x31\x38\
-\x2e\x35\x38\x35\x2c\x34\x34\x2e\x38\x36\x39\x2d\x35\x33\x2e\x35\
-\x33\x31\x2c\x37\x39\x2e\x38\x31\x35\x2d\x39\x38\x2e\x34\x2c\x39\
-\x38\x2e\x34\x63\x2d\x34\x34\x2e\x38\x36\x36\x2c\x31\x38\x2e\x35\
-\x38\x35\x2d\x39\x34\x2e\x32\x38\x38\x2c\x31\x38\x2e\x35\x38\x35\
-\x2d\x31\x33\x39\x2e\x31\x35\x38\x2c\x30\x63\x2d\x34\x34\x2e\x38\
-\x36\x39\x2d\x31\x38\x2e\x35\x38\x35\x2d\x37\x39\x2e\x38\x31\x35\
-\x2d\x35\x33\x2e\x35\x33\x31\x2d\x39\x38\x2e\x34\x2d\x39\x38\x2e\
-\x34\x0a\x09\x63\x2d\x31\x38\x2e\x35\x38\x35\x2d\x34\x34\x2e\x38\
-\x36\x39\x2d\x31\x38\x2e\x35\x38\x35\x2d\x39\x34\x2e\x32\x39\x2c\
-\x30\x2d\x31\x33\x39\x2e\x31\x35\x39\x6c\x2d\x32\x37\x2e\x37\x31\
-\x37\x2d\x31\x31\x2e\x34\x38\x63\x2d\x32\x31\x2e\x36\x35\x31\x2c\
-\x35\x32\x2e\x32\x37\x32\x2d\x32\x31\x2e\x36\x35\x31\x2c\x31\x30\
-\x39\x2e\x38\x34\x38\x2c\x30\x2c\x31\x36\x32\x2e\x31\x32\x0a\x09\
-\x63\x32\x31\x2e\x36\x35\x32\x2c\x35\x32\x2e\x32\x37\x32\x2c\x36\
-\x32\x2e\x33\x36\x34\x2c\x39\x32\x2e\x39\x38\x34\x2c\x31\x31\x34\
-\x2e\x36\x33\x37\x2c\x31\x31\x34\x2e\x36\x33\x36\x63\x32\x36\x2e\
-\x31\x34\x2c\x31\x30\x2e\x38\x32\x37\x2c\x35\x33\x2e\x35\x39\x35\
-\x2c\x31\x36\x2e\x32\x34\x2c\x38\x31\x2e\x30\x36\x2c\x31\x36\x2e\
-\x32\x33\x39\x63\x32\x37\x2e\x34\x35\x39\x2d\x30\x2e\x30\x30\x31\
-\x2c\x35\x34\x2e\x39\x32\x37\x2d\x35\x2e\x34\x31\x34\x2c\x38\x31\
-\x2e\x30\x36\x31\x2d\x31\x36\x2e\x32\x33\x39\x0a\x09\x63\x35\x32\
-\x2e\x32\x37\x31\x2d\x32\x31\x2e\x36\x35\x32\x2c\x39\x32\x2e\x39\
-\x38\x33\x2d\x36\x32\x2e\x33\x36\x34\x2c\x31\x31\x34\x2e\x36\x33\
-\x36\x2d\x31\x31\x34\x2e\x36\x33\x36\x43\x34\x34\x32\x2e\x37\x33\
-\x39\x2c\x32\x30\x30\x2e\x36\x2c\x34\x31\x38\x2e\x35\x33\x32\x2c\
-\x31\x30\x35\x2e\x38\x32\x36\x2c\x33\x35\x34\x2e\x32\x34\x2c\x34\
-\x37\x2e\x34\x7a\x22\x2f\x3e\x0a\x3c\x67\x3e\x0a\x3c\x2f\x67\x3e\
-\x0a\x3c\x67\x3e\x0a\x3c\x2f\x67\x3e\x0a\x3c\x67\x3e\x0a\x3c\x2f\
-\x67\x3e\x0a\x3c\x67\x3e\x0a\x3c\x2f\x67\x3e\x0a\x3c\x67\x3e\x0a\
-\x3c\x2f\x67\x3e\x0a\x3c\x67\x3e\x0a\x3c\x2f\x67\x3e\x0a\x3c\x67\
-\x3e\x0a\x3c\x2f\x67\x3e\x0a\x3c\x67\x3e\x0a\x3c\x2f\x67\x3e\x0a\
-\x3c\x67\x3e\x0a\x3c\x2f\x67\x3e\x0a\x3c\x67\x3e\x0a\x3c\x2f\x67\
-\x3e\x0a\x3c\x67\x3e\x0a\x3c\x2f\x67\x3e\x0a\x3c\x67\x3e\x0a\x3c\
-\x2f\x67\x3e\x0a\x3c\x67\x3e\x0a\x3c\x2f\x67\x3e\x0a\x3c\x67\x3e\
-\x0a\x3c\x2f\x67\x3e\x0a\x3c\x67\x3e\x0a\x3c\x2f\x67\x3e\x0a\x3c\
-\x2f\x73\x76\x67\x3e\x0a\
-\x00\x00\x03\x5a\
-\x3c\
-\x3f\x78\x6d\x6c\x20\x76\x65\x72\x73\x69\x6f\x6e\x3d\x27\x31\x2e\
-\x30\x27\x20\x65\x6e\x63\x6f\x64\x69\x6e\x67\x3d\x27\x55\x54\x46\
-\x2d\x38\x27\x3f\x3e\x0a\x3c\x21\x2d\x2d\x20\x54\x68\x69\x73\x20\
-\x66\x69\x6c\x65\x20\x77\x61\x73\x20\x67\x65\x6e\x65\x72\x61\x74\
-\x65\x64\x20\x62\x79\x20\x64\x76\x69\x73\x76\x67\x6d\x20\x32\x2e\
-\x31\x31\x2e\x31\x20\x2d\x2d\x3e\x0a\x3c\x73\x76\x67\x20\x76\x65\
-\x72\x73\x69\x6f\x6e\x3d\x27\x31\x2e\x31\x27\x20\x78\x6d\x6c\x6e\
-\x73\x3d\x27\x68\x74\x74\x70\x3a\x2f\x2f\x77\x77\x77\x2e\x77\x33\
-\x2e\x6f\x72\x67\x2f\x32\x30\x30\x30\x2f\x73\x76\x67\x27\x20\x78\
-\x6d\x6c\x6e\x73\x3a\x78\x6c\x69\x6e\x6b\x3d\x27\x68\x74\x74\x70\
-\x3a\x2f\x2f\x77\x77\x77\x2e\x77\x33\x2e\x6f\x72\x67\x2f\x31\x39\
-\x39\x39\x2f\x78\x6c\x69\x6e\x6b\x27\x20\x77\x69\x64\x74\x68\x3d\
-\x27\x36\x33\x2e\x39\x39\x39\x36\x70\x74\x27\x20\x68\x65\x69\x67\
-\x68\x74\x3d\x27\x36\x34\x70\x74\x27\x20\x76\x69\x65\x77\x42\x6f\
-\x78\x3d\x27\x35\x36\x2e\x34\x30\x39\x34\x20\x31\x31\x37\x2e\x38\
-\x35\x38\x20\x36\x33\x2e\x39\x39\x39\x36\x20\x36\x34\x27\x3e\x0a\
-\x3c\x67\x20\x69\x64\x3d\x27\x70\x61\x67\x65\x31\x27\x3e\x0a\x3c\
-\x67\x20\x74\x72\x61\x6e\x73\x66\x6f\x72\x6d\x3d\x27\x74\x72\x61\
-\x6e\x73\x6c\x61\x74\x65\x28\x35\x36\x2e\x34\x30\x39\x34\x20\x31\
-\x31\x37\x2e\x38\x35\x38\x29\x73\x63\x61\x6c\x65\x28\x2e\x39\x39\
-\x36\x32\x36\x34\x29\x27\x3e\x0a\x3c\x70\x61\x74\x68\x20\x64\x3d\
-\x27\x4d\x20\x32\x2e\x30\x30\x37\x35\x20\x36\x32\x2e\x32\x33\x32\
-\x35\x4c\x20\x36\x32\x2e\x32\x33\x32\x35\x20\x36\x32\x2e\x32\x33\
-\x32\x35\x4c\x20\x36\x32\x2e\x32\x33\x32\x35\x20\x32\x2e\x30\x30\
-\x37\x35\x4c\x20\x32\x2e\x30\x30\x37\x35\x20\x32\x2e\x30\x30\x37\
-\x35\x4c\x20\x32\x2e\x30\x30\x37\x35\x20\x36\x32\x2e\x32\x33\x32\
-\x35\x5a\x27\x20\x66\x69\x6c\x6c\x3d\x27\x6e\x6f\x6e\x65\x27\x20\
-\x73\x74\x72\x6f\x6b\x65\x3d\x27\x23\x30\x30\x30\x30\x30\x30\x27\
-\x20\x73\x74\x72\x6f\x6b\x65\x2d\x6c\x69\x6e\x65\x63\x61\x70\x3d\
-\x27\x72\x6f\x75\x6e\x64\x27\x20\x73\x74\x72\x6f\x6b\x65\x2d\x6c\
-\x69\x6e\x65\x6a\x6f\x69\x6e\x3d\x27\x72\x6f\x75\x6e\x64\x27\x20\
-\x73\x74\x72\x6f\x6b\x65\x2d\x6d\x69\x74\x65\x72\x6c\x69\x6d\x69\
-\x74\x3d\x27\x31\x30\x2e\x30\x33\x37\x35\x27\x20\x73\x74\x72\x6f\
-\x6b\x65\x2d\x77\x69\x64\x74\x68\x3d\x27\x34\x2e\x30\x31\x35\x27\
-\x2f\x3e\x0a\x3c\x2f\x67\x3e\x0a\x3c\x67\x20\x74\x72\x61\x6e\x73\
-\x66\x6f\x72\x6d\x3d\x27\x74\x72\x61\x6e\x73\x6c\x61\x74\x65\x28\
-\x35\x36\x2e\x34\x30\x39\x34\x20\x31\x31\x37\x2e\x38\x35\x38\x29\
-\x73\x63\x61\x6c\x65\x28\x2e\x39\x39\x36\x32\x36\x34\x29\x27\x3e\
-\x0a\x3c\x70\x61\x74\x68\x20\x64\x3d\x27\x4d\x20\x34\x37\x2e\x31\
-\x37\x36\x32\x20\x33\x32\x2e\x31\x32\x43\x20\x34\x37\x2e\x31\x37\
-\x36\x32\x20\x32\x33\x2e\x38\x30\x34\x37\x20\x34\x30\x2e\x34\x33\
-\x35\x33\x20\x31\x37\x2e\x30\x36\x33\x37\x20\x33\x32\x2e\x31\x32\
-\x20\x31\x37\x2e\x30\x36\x33\x37\x43\x20\x32\x33\x2e\x38\x30\x34\
-\x37\x20\x31\x37\x2e\x30\x36\x33\x37\x20\x31\x37\x2e\x30\x36\x33\
-\x37\x20\x32\x33\x2e\x38\x30\x34\x37\x20\x31\x37\x2e\x30\x36\x33\
-\x37\x20\x33\x32\x2e\x31\x32\x43\x20\x31\x37\x2e\x30\x36\x33\x37\
-\x20\x34\x30\x2e\x34\x33\x35\x33\x20\x32\x33\x2e\x38\x30\x34\x37\
-\x20\x34\x37\x2e\x31\x37\x36\x32\x20\x33\x32\x2e\x31\x32\x20\x34\
-\x37\x2e\x31\x37\x36\x32\x43\x20\x34\x30\x2e\x34\x33\x35\x33\x20\
-\x34\x37\x2e\x31\x37\x36\x32\x20\x34\x37\x2e\x31\x37\x36\x32\x20\
-\x34\x30\x2e\x34\x33\x35\x33\x20\x34\x37\x2e\x31\x37\x36\x32\x20\
-\x33\x32\x2e\x31\x32\x5a\x27\x20\x66\x69\x6c\x6c\x3d\x27\x23\x30\
-\x30\x30\x30\x30\x30\x27\x2f\x3e\x0a\x3c\x2f\x67\x3e\x0a\x3c\x2f\
-\x67\x3e\x0a\x3c\x2f\x73\x76\x67\x3e\
-\x00\x00\x03\xb7\
-\x3c\
-\x3f\x78\x6d\x6c\x20\x76\x65\x72\x73\x69\x6f\x6e\x3d\x22\x31\x2e\
-\x30\x22\x20\x65\x6e\x63\x6f\x64\x69\x6e\x67\x3d\x22\x75\x74\x66\
-\x2d\x38\x22\x3f\x3e\x0a\x3c\x21\x2d\x2d\x20\x47\x65\x6e\x65\x72\
-\x61\x74\x6f\x72\x3a\x20\x41\x64\x6f\x62\x65\x20\x49\x6c\x6c\x75\
-\x73\x74\x72\x61\x74\x6f\x72\x20\x31\x38\x2e\x31\x2e\x30\x2c\x20\
-\x53\x56\x47\x20\x45\x78\x70\x6f\x72\x74\x20\x50\x6c\x75\x67\x2d\
-\x49\x6e\x20\x2e\x20\x53\x56\x47\x20\x56\x65\x72\x73\x69\x6f\x6e\
-\x3a\x20\x36\x2e\x30\x30\x20\x42\x75\x69\x6c\x64\x20\x30\x29\x20\
-\x20\x2d\x2d\x3e\x0a\x3c\x21\x44\x4f\x43\x54\x59\x50\x45\x20\x73\
-\x76\x67\x20\x50\x55\x42\x4c\x49\x43\x20\x22\x2d\x2f\x2f\x57\x33\
-\x43\x2f\x2f\x44\x54\x44\x20\x53\x56\x47\x20\x31\x2e\x31\x2f\x2f\
-\x45\x4e\x22\x20\x22\x68\x74\x74\x70\x3a\x2f\x2f\x77\x77\x77\x2e\
-\x77\x33\x2e\x6f\x72\x67\x2f\x47\x72\x61\x70\x68\x69\x63\x73\x2f\
-\x53\x56\x47\x2f\x31\x2e\x31\x2f\x44\x54\x44\x2f\x73\x76\x67\x31\
-\x31\x2e\x64\x74\x64\x22\x3e\x0a\x3c\x73\x76\x67\x20\x76\x65\x72\
-\x73\x69\x6f\x6e\x3d\x22\x31\x2e\x31\x22\x20\x69\x64\x3d\x22\x4d\
-\x61\x67\x6e\x69\x66\x79\x69\x6e\x67\x5f\x67\x6c\x61\x73\x73\x22\
-\x20\x78\x6d\x6c\x6e\x73\x3d\x22\x68\x74\x74\x70\x3a\x2f\x2f\x77\
-\x77\x77\x2e\x77\x33\x2e\x6f\x72\x67\x2f\x32\x30\x30\x30\x2f\x73\
-\x76\x67\x22\x20\x78\x6d\x6c\x6e\x73\x3a\x78\x6c\x69\x6e\x6b\x3d\
-\x22\x68\x74\x74\x70\x3a\x2f\x2f\x77\x77\x77\x2e\x77\x33\x2e\x6f\
-\x72\x67\x2f\x31\x39\x39\x39\x2f\x78\x6c\x69\x6e\x6b\x22\x20\x78\
-\x3d\x22\x30\x70\x78\x22\x0a\x09\x20\x79\x3d\x22\x30\x70\x78\x22\
-\x20\x76\x69\x65\x77\x42\x6f\x78\x3d\x22\x30\x20\x30\x20\x35\x31\
-\x32\x20\x35\x31\x32\x22\x20\x65\x6e\x61\x62\x6c\x65\x2d\x62\x61\
-\x63\x6b\x67\x72\x6f\x75\x6e\x64\x3d\x22\x6e\x65\x77\x20\x30\x20\
-\x30\x20\x35\x31\x32\x20\x35\x31\x32\x22\x20\x78\x6d\x6c\x3a\x73\
-\x70\x61\x63\x65\x3d\x22\x70\x72\x65\x73\x65\x72\x76\x65\x22\x3e\
-\x0a\x3c\x67\x20\x74\x72\x61\x6e\x73\x66\x6f\x72\x6d\x3d\x27\x6d\
-\x61\x74\x72\x69\x78\x28\x32\x34\x20\x30\x20\x30\x20\x32\x34\x20\
-\x30\x20\x30\x29\x27\x3e\x0a\x3c\x70\x61\x74\x68\x20\x64\x3d\x22\
-\x4d\x31\x37\x2e\x35\x34\x35\x2c\x31\x35\x2e\x34\x36\x37\x6c\x2d\
-\x33\x2e\x37\x37\x39\x2d\x33\x2e\x37\x37\x39\x63\x30\x2e\x35\x37\
-\x2d\x30\x2e\x39\x33\x35\x2c\x30\x2e\x38\x39\x38\x2d\x32\x2e\x30\
-\x33\x35\x2c\x30\x2e\x38\x39\x38\x2d\x33\x2e\x32\x31\x63\x30\x2d\
-\x33\x2e\x34\x31\x37\x2d\x32\x2e\x39\x36\x31\x2d\x36\x2e\x33\x37\
-\x37\x2d\x36\x2e\x33\x37\x38\x2d\x36\x2e\x33\x37\x37\x0a\x09\x43\
-\x34\x2e\x38\x36\x39\x2c\x32\x2e\x31\x2c\x32\x2e\x31\x2c\x34\x2e\
-\x38\x37\x2c\x32\x2e\x31\x2c\x38\x2e\x32\x38\x37\x63\x30\x2c\x33\
-\x2e\x34\x31\x36\x2c\x32\x2e\x39\x36\x31\x2c\x36\x2e\x33\x37\x37\
-\x2c\x36\x2e\x33\x37\x37\x2c\x36\x2e\x33\x37\x37\x63\x31\x2e\x31\
-\x33\x37\x2c\x30\x2c\x32\x2e\x32\x2d\x30\x2e\x33\x30\x39\x2c\x33\
-\x2e\x31\x31\x35\x2d\x30\x2e\x38\x34\x34\x6c\x33\x2e\x37\x39\x39\
-\x2c\x33\x2e\x38\x30\x31\x0a\x09\x63\x30\x2e\x33\x37\x32\x2c\x30\
-\x2e\x33\x37\x31\x2c\x30\x2e\x39\x37\x35\x2c\x30\x2e\x33\x37\x31\
-\x2c\x31\x2e\x33\x34\x36\x2c\x30\x6c\x30\x2e\x39\x34\x33\x2d\x30\
-\x2e\x39\x34\x33\x43\x31\x38\x2e\x30\x35\x31\x2c\x31\x36\x2e\x33\
-\x30\x37\x2c\x31\x37\x2e\x39\x31\x36\x2c\x31\x35\x2e\x38\x33\x38\
-\x2c\x31\x37\x2e\x35\x34\x35\x2c\x31\x35\x2e\x34\x36\x37\x7a\x20\
-\x4d\x34\x2e\x30\x30\x34\x2c\x38\x2e\x32\x38\x37\x0a\x09\x63\x30\
-\x2d\x32\x2e\x33\x36\x36\x2c\x31\x2e\x39\x31\x37\x2d\x34\x2e\x32\
-\x38\x33\x2c\x34\x2e\x32\x38\x32\x2d\x34\x2e\x32\x38\x33\x63\x32\
-\x2e\x33\x36\x36\x2c\x30\x2c\x34\x2e\x34\x37\x34\x2c\x32\x2e\x31\
-\x30\x37\x2c\x34\x2e\x34\x37\x34\x2c\x34\x2e\x34\x37\x34\x63\x30\
-\x2c\x32\x2e\x33\x36\x35\x2d\x31\x2e\x39\x31\x38\x2c\x34\x2e\x32\
-\x38\x33\x2d\x34\x2e\x32\x38\x33\x2c\x34\x2e\x32\x38\x33\x0a\x09\
-\x43\x36\x2e\x31\x31\x31\x2c\x31\x32\x2e\x37\x36\x2c\x34\x2e\x30\
-\x30\x34\x2c\x31\x30\x2e\x36\x35\x32\x2c\x34\x2e\x30\x30\x34\x2c\
-\x38\x2e\x32\x38\x37\x7a\x22\x2f\x3e\x0a\x3c\x2f\x67\x3e\x0a\x3c\
-\x2f\x73\x76\x67\x3e\x0a\
-\x00\x00\x03\xd9\
-\x3c\
-\x3f\x78\x6d\x6c\x20\x76\x65\x72\x73\x69\x6f\x6e\x3d\x22\x31\x2e\
-\x30\x22\x20\x65\x6e\x63\x6f\x64\x69\x6e\x67\x3d\x22\x75\x74\x66\
-\x2d\x38\x22\x3f\x3e\x0a\x3c\x21\x2d\x2d\x20\x47\x65\x6e\x65\x72\
-\x61\x74\x6f\x72\x3a\x20\x41\x64\x6f\x62\x65\x20\x49\x6c\x6c\x75\
-\x73\x74\x72\x61\x74\x6f\x72\x20\x31\x38\x2e\x31\x2e\x31\x2c\x20\
-\x53\x56\x47\x20\x45\x78\x70\x6f\x72\x74\x20\x50\x6c\x75\x67\x2d\
-\x49\x6e\x20\x2e\x20\x53\x56\x47\x20\x56\x65\x72\x73\x69\x6f\x6e\
-\x3a\x20\x36\x2e\x30\x30\x20\x42\x75\x69\x6c\x64\x20\x30\x29\x20\
-\x20\x2d\x2d\x3e\x0a\x3c\x21\x44\x4f\x43\x54\x59\x50\x45\x20\x73\
-\x76\x67\x20\x50\x55\x42\x4c\x49\x43\x20\x22\x2d\x2f\x2f\x57\x33\
-\x43\x2f\x2f\x44\x54\x44\x20\x53\x56\x47\x20\x31\x2e\x31\x2f\x2f\
-\x45\x4e\x22\x20\x22\x68\x74\x74\x70\x3a\x2f\x2f\x77\x77\x77\x2e\
-\x77\x33\x2e\x6f\x72\x67\x2f\x47\x72\x61\x70\x68\x69\x63\x73\x2f\
-\x53\x56\x47\x2f\x31\x2e\x31\x2f\x44\x54\x44\x2f\x73\x76\x67\x31\
-\x31\x2e\x64\x74\x64\x22\x3e\x0a\x3c\x73\x76\x67\x20\x76\x65\x72\
-\x73\x69\x6f\x6e\x3d\x22\x31\x2e\x31\x22\x20\x69\x64\x3d\x22\x43\
-\x68\x65\x76\x72\x6f\x6e\x5f\x63\x69\x72\x63\x6c\x65\x64\x5f\x72\
-\x69\x67\x68\x74\x22\x20\x78\x6d\x6c\x6e\x73\x3d\x22\x68\x74\x74\
-\x70\x3a\x2f\x2f\x77\x77\x77\x2e\x77\x33\x2e\x6f\x72\x67\x2f\x32\
-\x30\x30\x30\x2f\x73\x76\x67\x22\x20\x78\x6d\x6c\x6e\x73\x3a\x78\
-\x6c\x69\x6e\x6b\x3d\x22\x68\x74\x74\x70\x3a\x2f\x2f\x77\x77\x77\
-\x2e\x77\x33\x2e\x6f\x72\x67\x2f\x31\x39\x39\x39\x2f\x78\x6c\x69\
-\x6e\x6b\x22\x0a\x09\x20\x78\x3d\x22\x30\x70\x78\x22\x20\x79\x3d\
-\x22\x30\x70\x78\x22\x20\x76\x69\x65\x77\x42\x6f\x78\x3d\x22\x30\
-\x20\x30\x20\x35\x31\x32\x20\x35\x31\x32\x22\x20\x65\x6e\x61\x62\
-\x6c\x65\x2d\x62\x61\x63\x6b\x67\x72\x6f\x75\x6e\x64\x3d\x22\x6e\
-\x65\x77\x20\x30\x20\x30\x20\x35\x31\x32\x20\x35\x31\x32\x22\x20\
-\x78\x6d\x6c\x3a\x73\x70\x61\x63\x65\x3d\x22\x70\x72\x65\x73\x65\
-\x72\x76\x65\x22\x3e\x0a\x3c\x67\x20\x74\x72\x61\x6e\x73\x66\x6f\
-\x72\x6d\x3d\x27\x6d\x61\x74\x72\x69\x78\x28\x32\x34\x20\x30\x20\
-\x30\x20\x32\x34\x20\x30\x20\x30\x29\x27\x3e\x0a\x3c\x70\x61\x74\
-\x68\x20\x64\x3d\x22\x4d\x31\x31\x2c\x31\x30\x4c\x38\x2e\x36\x39\
-\x38\x2c\x37\x2e\x34\x39\x34\x63\x2d\x30\x2e\x31\x39\x36\x2d\x30\
-\x2e\x31\x39\x38\x2d\x30\x2e\x31\x39\x36\x2d\x30\x2e\x35\x31\x39\
-\x2c\x30\x2d\x30\x2e\x37\x31\x38\x63\x30\x2e\x31\x39\x36\x2d\x30\
-\x2e\x31\x39\x37\x2c\x30\x2e\x35\x31\x35\x2d\x30\x2e\x31\x39\x37\
-\x2c\x30\x2e\x37\x31\x2c\x30\x6c\x32\x2e\x38\x30\x37\x2c\x32\x2e\
-\x38\x36\x34\x0a\x09\x63\x30\x2e\x31\x39\x36\x2c\x30\x2e\x31\x39\
-\x39\x2c\x30\x2e\x31\x39\x36\x2c\x30\x2e\x35\x32\x2c\x30\x2c\x30\
-\x2e\x37\x31\x37\x6c\x2d\x32\x2e\x38\x30\x37\x2c\x32\x2e\x38\x36\
-\x34\x63\x2d\x30\x2e\x31\x39\x35\x2c\x30\x2e\x31\x39\x39\x2d\x30\
-\x2e\x35\x31\x34\x2c\x30\x2e\x31\x39\x38\x2d\x30\x2e\x37\x31\x2c\
-\x30\x63\x2d\x30\x2e\x31\x39\x36\x2d\x30\x2e\x31\x39\x37\x2d\x30\
-\x2e\x31\x39\x36\x2d\x30\x2e\x35\x31\x38\x2c\x30\x2d\x30\x2e\x37\
-\x31\x37\x4c\x31\x31\x2c\x31\x30\x7a\x20\x4d\x31\x30\x2c\x30\x2e\
-\x34\x0a\x09\x63\x35\x2e\x33\x30\x32\x2c\x30\x2c\x39\x2e\x36\x2c\
-\x34\x2e\x32\x39\x38\x2c\x39\x2e\x36\x2c\x39\x2e\x36\x63\x30\x2c\
-\x35\x2e\x33\x30\x33\x2d\x34\x2e\x32\x39\x38\x2c\x39\x2e\x36\x2d\
-\x39\x2e\x36\x2c\x39\x2e\x36\x53\x30\x2e\x34\x2c\x31\x35\x2e\x33\
-\x30\x33\x2c\x30\x2e\x34\x2c\x31\x30\x43\x30\x2e\x34\x2c\x34\x2e\
-\x36\x39\x38\x2c\x34\x2e\x36\x39\x38\x2c\x30\x2e\x34\x2c\x31\x30\
-\x2c\x30\x2e\x34\x7a\x20\x4d\x31\x30\x2c\x31\x38\x2e\x33\x35\x34\
-\x0a\x09\x63\x34\x2e\x36\x31\x33\x2c\x30\x2c\x38\x2e\x33\x35\x34\
-\x2d\x33\x2e\x37\x34\x2c\x38\x2e\x33\x35\x34\x2d\x38\x2e\x33\x35\
-\x34\x63\x30\x2d\x34\x2e\x36\x31\x34\x2d\x33\x2e\x37\x34\x31\x2d\
-\x38\x2e\x33\x35\x34\x2d\x38\x2e\x33\x35\x34\x2d\x38\x2e\x33\x35\
-\x34\x63\x2d\x34\x2e\x36\x31\x35\x2c\x30\x2d\x38\x2e\x33\x35\x34\
-\x2c\x33\x2e\x37\x34\x2d\x38\x2e\x33\x35\x34\x2c\x38\x2e\x33\x35\
-\x34\x0a\x09\x43\x31\x2e\x36\x34\x35\x2c\x31\x34\x2e\x36\x31\x34\
-\x2c\x35\x2e\x33\x38\x35\x2c\x31\x38\x2e\x33\x35\x34\x2c\x31\x30\
-\x2c\x31\x38\x2e\x33\x35\x34\x7a\x22\x2f\x3e\x0a\x3c\x2f\x67\x3e\
-\x0a\x3c\x2f\x73\x76\x67\x3e\x0a\
-\x00\x00\x04\x22\
-\x3c\
-\x3f\x78\x6d\x6c\x20\x76\x65\x72\x73\x69\x6f\x6e\x3d\x27\x31\x2e\
-\x30\x27\x20\x65\x6e\x63\x6f\x64\x69\x6e\x67\x3d\x27\x55\x54\x46\
-\x2d\x38\x27\x3f\x3e\x0a\x3c\x21\x2d\x2d\x20\x54\x68\x69\x73\x20\
-\x66\x69\x6c\x65\x20\x77\x61\x73\x20\x67\x65\x6e\x65\x72\x61\x74\
-\x65\x64\x20\x62\x79\x20\x64\x76\x69\x73\x76\x67\x6d\x20\x32\x2e\
-\x31\x31\x2e\x31\x20\x2d\x2d\x3e\x0a\x3c\x73\x76\x67\x20\x76\x65\
-\x72\x73\x69\x6f\x6e\x3d\x27\x31\x2e\x31\x27\x20\x78\x6d\x6c\x6e\
-\x73\x3d\x27\x68\x74\x74\x70\x3a\x2f\x2f\x77\x77\x77\x2e\x77\x33\
-\x2e\x6f\x72\x67\x2f\x32\x30\x30\x30\x2f\x73\x76\x67\x27\x20\x78\
-\x6d\x6c\x6e\x73\x3a\x78\x6c\x69\x6e\x6b\x3d\x27\x68\x74\x74\x70\
-\x3a\x2f\x2f\x77\x77\x77\x2e\x77\x33\x2e\x6f\x72\x67\x2f\x31\x39\
-\x39\x39\x2f\x78\x6c\x69\x6e\x6b\x27\x20\x77\x69\x64\x74\x68\x3d\
-\x27\x36\x34\x2e\x30\x30\x30\x31\x70\x74\x27\x20\x68\x65\x69\x67\
-\x68\x74\x3d\x27\x36\x34\x70\x74\x27\x20\x76\x69\x65\x77\x42\x6f\
-\x78\x3d\x27\x35\x38\x2e\x34\x36\x36\x39\x20\x31\x31\x37\x2e\x38\
-\x35\x38\x20\x36\x34\x2e\x30\x30\x30\x31\x20\x36\x34\x27\x3e\x0a\
-\x3c\x67\x20\x69\x64\x3d\x27\x70\x61\x67\x65\x31\x27\x3e\x0a\x3c\
-\x67\x20\x74\x72\x61\x6e\x73\x66\x6f\x72\x6d\x3d\x27\x74\x72\x61\
-\x6e\x73\x6c\x61\x74\x65\x28\x35\x38\x2e\x34\x36\x36\x39\x20\x31\
-\x31\x37\x2e\x38\x35\x38\x29\x73\x63\x61\x6c\x65\x28\x2e\x39\x39\
-\x36\x32\x36\x34\x29\x27\x3e\x0a\x3c\x70\x61\x74\x68\x20\x64\x3d\
-\x27\x4d\x20\x36\x2e\x30\x32\x32\x35\x20\x33\x32\x2e\x31\x32\x4c\
-\x20\x31\x33\x2e\x39\x36\x38\x37\x20\x31\x32\x2e\x39\x33\x36\x31\
-\x4c\x20\x35\x38\x2e\x32\x31\x37\x35\x20\x32\x31\x2e\x37\x33\x37\
-\x38\x4c\x20\x34\x32\x2e\x37\x34\x34\x35\x20\x34\x31\x2e\x37\x31\
-\x31\x39\x4c\x20\x36\x2e\x30\x32\x32\x35\x20\x33\x32\x2e\x31\x32\
-\x5a\x27\x20\x66\x69\x6c\x6c\x3d\x27\x6e\x6f\x6e\x65\x27\x20\x73\
-\x74\x72\x6f\x6b\x65\x3d\x27\x23\x30\x30\x30\x30\x30\x30\x27\x20\
-\x73\x74\x72\x6f\x6b\x65\x2d\x6c\x69\x6e\x65\x63\x61\x70\x3d\x27\
-\x72\x6f\x75\x6e\x64\x27\x20\x73\x74\x72\x6f\x6b\x65\x2d\x6c\x69\
-\x6e\x65\x6a\x6f\x69\x6e\x3d\x27\x72\x6f\x75\x6e\x64\x27\x20\x73\
-\x74\x72\x6f\x6b\x65\x2d\x6d\x69\x74\x65\x72\x6c\x69\x6d\x69\x74\
-\x3d\x27\x31\x30\x2e\x30\x33\x37\x35\x27\x20\x73\x74\x72\x6f\x6b\
-\x65\x2d\x77\x69\x64\x74\x68\x3d\x27\x32\x2e\x35\x30\x39\x33\x37\
-\x27\x2f\x3e\x0a\x3c\x2f\x67\x3e\x0a\x3c\x67\x20\x74\x72\x61\x6e\
-\x73\x66\x6f\x72\x6d\x3d\x27\x74\x72\x61\x6e\x73\x6c\x61\x74\x65\
-\x28\x35\x38\x2e\x34\x36\x36\x39\x20\x31\x31\x37\x2e\x38\x35\x38\
-\x29\x73\x63\x61\x6c\x65\x28\x2e\x39\x39\x36\x32\x36\x34\x29\x27\
-\x3e\x0a\x3c\x63\x69\x72\x63\x6c\x65\x20\x63\x78\x3d\x27\x36\x2e\
-\x30\x32\x32\x35\x27\x20\x63\x79\x3d\x27\x33\x32\x2e\x31\x32\x27\
-\x20\x66\x69\x6c\x6c\x3d\x27\x23\x66\x66\x30\x30\x30\x30\x27\x20\
-\x72\x3d\x27\x36\x2e\x30\x32\x32\x35\x27\x2f\x3e\x0a\x3c\x2f\x67\
-\x3e\x0a\x3c\x67\x20\x74\x72\x61\x6e\x73\x66\x6f\x72\x6d\x3d\x27\
-\x74\x72\x61\x6e\x73\x6c\x61\x74\x65\x28\x35\x38\x2e\x34\x36\x36\
-\x39\x20\x31\x31\x37\x2e\x38\x35\x38\x29\x73\x63\x61\x6c\x65\x28\
-\x2e\x39\x39\x36\x32\x36\x34\x29\x27\x3e\x0a\x3c\x63\x69\x72\x63\
-\x6c\x65\x20\x63\x78\x3d\x27\x31\x33\x2e\x39\x36\x38\x37\x27\x20\
-\x63\x79\x3d\x27\x31\x32\x2e\x39\x33\x36\x31\x27\x20\x66\x69\x6c\
-\x6c\x3d\x27\x23\x66\x66\x30\x30\x30\x30\x27\x20\x72\x3d\x27\x36\
-\x2e\x30\x32\x32\x35\x27\x2f\x3e\x0a\x3c\x2f\x67\x3e\x0a\x3c\x67\
-\x20\x74\x72\x61\x6e\x73\x66\x6f\x72\x6d\x3d\x27\x74\x72\x61\x6e\
-\x73\x6c\x61\x74\x65\x28\x35\x38\x2e\x34\x36\x36\x39\x20\x31\x31\
-\x37\x2e\x38\x35\x38\x29\x73\x63\x61\x6c\x65\x28\x2e\x39\x39\x36\
-\x32\x36\x34\x29\x27\x3e\x0a\x3c\x63\x69\x72\x63\x6c\x65\x20\x63\
-\x78\x3d\x27\x35\x38\x2e\x32\x31\x37\x35\x27\x20\x63\x79\x3d\x27\
-\x32\x31\x2e\x37\x33\x37\x38\x27\x20\x66\x69\x6c\x6c\x3d\x27\x23\
-\x66\x66\x30\x30\x30\x30\x27\x20\x72\x3d\x27\x36\x2e\x30\x32\x32\
-\x35\x27\x2f\x3e\x0a\x3c\x2f\x67\x3e\x0a\x3c\x67\x20\x74\x72\x61\
-\x6e\x73\x66\x6f\x72\x6d\x3d\x27\x74\x72\x61\x6e\x73\x6c\x61\x74\
-\x65\x28\x35\x38\x2e\x34\x36\x36\x39\x20\x31\x31\x37\x2e\x38\x35\
-\x38\x29\x73\x63\x61\x6c\x65\x28\x2e\x39\x39\x36\x32\x36\x34\x29\
-\x27\x3e\x0a\x3c\x63\x69\x72\x63\x6c\x65\x20\x63\x78\x3d\x27\x34\
-\x32\x2e\x37\x34\x34\x35\x27\x20\x63\x79\x3d\x27\x34\x31\x2e\x37\
-\x31\x31\x39\x27\x20\x66\x69\x6c\x6c\x3d\x27\x23\x66\x66\x30\x30\
-\x30\x30\x27\x20\x72\x3d\x27\x36\x2e\x30\x32\x32\x35\x27\x2f\x3e\
-\x0a\x3c\x2f\x67\x3e\x0a\x3c\x2f\x67\x3e\x0a\x3c\x2f\x73\x76\x67\
-\x3e\
-\x00\x00\x02\x72\
-\x3c\
-\x3f\x78\x6d\x6c\x20\x76\x65\x72\x73\x69\x6f\x6e\x3d\x22\x31\x2e\
-\x30\x22\x20\x65\x6e\x63\x6f\x64\x69\x6e\x67\x3d\x22\x75\x74\x66\
-\x2d\x38\x22\x3f\x3e\x0a\x3c\x21\x2d\x2d\x20\x47\x65\x6e\x65\x72\
-\x61\x74\x6f\x72\x3a\x20\x41\x64\x6f\x62\x65\x20\x49\x6c\x6c\x75\
-\x73\x74\x72\x61\x74\x6f\x72\x20\x31\x36\x2e\x32\x2e\x31\x2c\x20\
-\x53\x56\x47\x20\x45\x78\x70\x6f\x72\x74\x20\x50\x6c\x75\x67\x2d\
-\x49\x6e\x20\x2e\x20\x53\x56\x47\x20\x56\x65\x72\x73\x69\x6f\x6e\
-\x3a\x20\x36\x2e\x30\x30\x20\x42\x75\x69\x6c\x64\x20\x30\x29\x20\
-\x20\x2d\x2d\x3e\x0a\x3c\x21\x44\x4f\x43\x54\x59\x50\x45\x20\x73\
-\x76\x67\x20\x50\x55\x42\x4c\x49\x43\x20\x22\x2d\x2f\x2f\x57\x33\
-\x43\x2f\x2f\x44\x54\x44\x20\x53\x56\x47\x20\x31\x2e\x31\x2f\x2f\
-\x45\x4e\x22\x20\x22\x68\x74\x74\x70\x3a\x2f\x2f\x77\x77\x77\x2e\
-\x77\x33\x2e\x6f\x72\x67\x2f\x47\x72\x61\x70\x68\x69\x63\x73\x2f\
-\x53\x56\x47\x2f\x31\x2e\x31\x2f\x44\x54\x44\x2f\x73\x76\x67\x31\
-\x31\x2e\x64\x74\x64\x22\x3e\x0a\x3c\x73\x76\x67\x20\x76\x65\x72\
-\x73\x69\x6f\x6e\x3d\x22\x31\x2e\x31\x22\x20\x69\x64\x3d\x22\x4c\
-\x61\x79\x65\x72\x5f\x31\x22\x20\x78\x6d\x6c\x6e\x73\x3d\x22\x68\
-\x74\x74\x70\x3a\x2f\x2f\x77\x77\x77\x2e\x77\x33\x2e\x6f\x72\x67\
-\x2f\x32\x30\x30\x30\x2f\x73\x76\x67\x22\x20\x78\x6d\x6c\x6e\x73\
-\x3a\x78\x6c\x69\x6e\x6b\x3d\x22\x68\x74\x74\x70\x3a\x2f\x2f\x77\
-\x77\x77\x2e\x77\x33\x2e\x6f\x72\x67\x2f\x31\x39\x39\x39\x2f\x78\
-\x6c\x69\x6e\x6b\x22\x20\x78\x3d\x22\x30\x70\x78\x22\x20\x79\x3d\
-\x22\x30\x70\x78\x22\x0a\x09\x20\x77\x69\x64\x74\x68\x3d\x22\x35\
-\x31\x32\x70\x78\x22\x20\x68\x65\x69\x67\x68\x74\x3d\x22\x35\x31\
-\x32\x70\x78\x22\x20\x76\x69\x65\x77\x42\x6f\x78\x3d\x22\x30\x20\
-\x30\x20\x35\x31\x32\x20\x35\x31\x32\x22\x20\x65\x6e\x61\x62\x6c\
-\x65\x2d\x62\x61\x63\x6b\x67\x72\x6f\x75\x6e\x64\x3d\x22\x6e\x65\
-\x77\x20\x30\x20\x30\x20\x35\x31\x32\x20\x35\x31\x32\x22\x20\x78\
-\x6d\x6c\x3a\x73\x70\x61\x63\x65\x3d\x22\x70\x72\x65\x73\x65\x72\
-\x76\x65\x22\x3e\x0a\x3c\x67\x20\x69\x64\x3d\x22\x49\x63\x6f\x6e\
-\x5f\x38\x5f\x22\x3e\x0a\x09\x3c\x67\x3e\x0a\x09\x09\x3c\x70\x61\
-\x74\x68\x20\x64\x3d\x22\x4d\x38\x35\x2c\x32\x37\x37\x2e\x33\x37\
-\x35\x68\x32\x35\x39\x2e\x37\x30\x34\x4c\x32\x32\x35\x2e\x30\x30\
-\x32\x2c\x33\x39\x37\x2e\x30\x37\x37\x4c\x32\x35\x36\x2c\x34\x32\
-\x37\x6c\x31\x37\x31\x2d\x31\x37\x31\x4c\x32\x35\x36\x2c\x38\x35\
-\x6c\x2d\x32\x39\x2e\x39\x32\x32\x2c\x32\x39\x2e\x39\x32\x34\x6c\
-\x31\x31\x38\x2e\x36\x32\x36\x2c\x31\x31\x39\x2e\x37\x30\x31\x48\
-\x38\x35\x56\x32\x37\x37\x2e\x33\x37\x35\x7a\x22\x2f\x3e\x0a\x09\
-\x3c\x2f\x67\x3e\x0a\x3c\x2f\x67\x3e\x0a\x3c\x2f\x73\x76\x67\x3e\
-\x0a\
-\x00\x00\x04\xa3\
-\x3c\
-\x3f\x78\x6d\x6c\x20\x76\x65\x72\x73\x69\x6f\x6e\x3d\x27\x31\x2e\
-\x30\x27\x20\x65\x6e\x63\x6f\x64\x69\x6e\x67\x3d\x27\x55\x54\x46\
-\x2d\x38\x27\x3f\x3e\x0a\x3c\x21\x2d\x2d\x20\x54\x68\x69\x73\x20\
-\x66\x69\x6c\x65\x20\x77\x61\x73\x20\x67\x65\x6e\x65\x72\x61\x74\
-\x65\x64\x20\x62\x79\x20\x64\x76\x69\x73\x76\x67\x6d\x20\x32\x2e\
-\x31\x31\x2e\x31\x20\x2d\x2d\x3e\x0a\x3c\x73\x76\x67\x20\x76\x65\
-\x72\x73\x69\x6f\x6e\x3d\x27\x31\x2e\x31\x27\x20\x78\x6d\x6c\x6e\
-\x73\x3d\x27\x68\x74\x74\x70\x3a\x2f\x2f\x77\x77\x77\x2e\x77\x33\
-\x2e\x6f\x72\x67\x2f\x32\x30\x30\x30\x2f\x73\x76\x67\x27\x20\x78\
-\x6d\x6c\x6e\x73\x3a\x78\x6c\x69\x6e\x6b\x3d\x27\x68\x74\x74\x70\
-\x3a\x2f\x2f\x77\x77\x77\x2e\x77\x33\x2e\x6f\x72\x67\x2f\x31\x39\
-\x39\x39\x2f\x78\x6c\x69\x6e\x6b\x27\x20\x77\x69\x64\x74\x68\x3d\
-\x27\x36\x34\x2e\x30\x30\x30\x31\x70\x74\x27\x20\x68\x65\x69\x67\
-\x68\x74\x3d\x27\x36\x34\x70\x74\x27\x20\x76\x69\x65\x77\x42\x6f\
-\x78\x3d\x27\x35\x38\x2e\x34\x36\x36\x39\x20\x31\x31\x37\x2e\x38\
-\x35\x38\x20\x36\x34\x2e\x30\x30\x30\x31\x20\x36\x34\x27\x3e\x0a\
-\x3c\x67\x20\x69\x64\x3d\x27\x70\x61\x67\x65\x31\x27\x3e\x0a\x3c\
-\x67\x20\x74\x72\x61\x6e\x73\x66\x6f\x72\x6d\x3d\x27\x74\x72\x61\
-\x6e\x73\x6c\x61\x74\x65\x28\x35\x38\x2e\x34\x36\x36\x39\x20\x31\
-\x31\x37\x2e\x38\x35\x38\x29\x73\x63\x61\x6c\x65\x28\x2e\x39\x39\
-\x36\x32\x36\x34\x29\x27\x3e\x0a\x3c\x70\x61\x74\x68\x20\x64\x3d\
-\x27\x4d\x20\x36\x2e\x30\x32\x32\x35\x20\x33\x32\x2e\x31\x32\x43\
-\x20\x34\x2e\x33\x35\x34\x33\x38\x20\x32\x34\x2e\x39\x32\x38\x37\
-\x20\x38\x2e\x34\x33\x32\x31\x37\x20\x31\x38\x2e\x30\x30\x31\x34\
-\x20\x31\x33\x2e\x39\x36\x38\x37\x20\x31\x32\x2e\x39\x33\x36\x31\
-\x43\x20\x33\x31\x2e\x37\x33\x33\x39\x20\x2d\x33\x2e\x33\x31\x36\
-\x37\x35\x20\x35\x37\x2e\x32\x39\x34\x33\x20\x33\x2e\x35\x39\x37\
-\x39\x37\x20\x35\x38\x2e\x32\x31\x37\x35\x20\x32\x31\x2e\x37\x33\
-\x37\x38\x43\x20\x35\x38\x2e\x36\x37\x38\x38\x20\x33\x30\x2e\x38\
-\x30\x31\x39\x20\x35\x31\x2e\x31\x37\x38\x33\x20\x33\x37\x2e\x36\
-\x34\x34\x31\x20\x34\x32\x2e\x37\x34\x34\x35\x20\x34\x31\x2e\x37\
-\x31\x31\x39\x43\x20\x32\x37\x2e\x34\x36\x34\x36\x20\x34\x39\x2e\
-\x30\x38\x31\x38\x20\x39\x2e\x32\x36\x34\x35\x31\x20\x34\x36\x2e\
-\x30\x39\x36\x34\x20\x36\x2e\x30\x32\x32\x35\x20\x33\x32\x2e\x31\
-\x32\x5a\x27\x20\x66\x69\x6c\x6c\x3d\x27\x6e\x6f\x6e\x65\x27\x20\
-\x73\x74\x72\x6f\x6b\x65\x3d\x27\x23\x30\x30\x30\x30\x30\x30\x27\
-\x20\x73\x74\x72\x6f\x6b\x65\x2d\x6c\x69\x6e\x65\x63\x61\x70\x3d\
-\x27\x72\x6f\x75\x6e\x64\x27\x20\x73\x74\x72\x6f\x6b\x65\x2d\x6c\
-\x69\x6e\x65\x6a\x6f\x69\x6e\x3d\x27\x72\x6f\x75\x6e\x64\x27\x20\
-\x73\x74\x72\x6f\x6b\x65\x2d\x6d\x69\x74\x65\x72\x6c\x69\x6d\x69\
-\x74\x3d\x27\x31\x30\x2e\x30\x33\x37\x35\x27\x20\x73\x74\x72\x6f\
-\x6b\x65\x2d\x77\x69\x64\x74\x68\x3d\x27\x32\x2e\x35\x30\x39\x33\
-\x37\x27\x2f\x3e\x0a\x3c\x2f\x67\x3e\x0a\x3c\x67\x20\x74\x72\x61\
-\x6e\x73\x66\x6f\x72\x6d\x3d\x27\x74\x72\x61\x6e\x73\x6c\x61\x74\
-\x65\x28\x35\x38\x2e\x34\x36\x36\x39\x20\x31\x31\x37\x2e\x38\x35\
-\x38\x29\x73\x63\x61\x6c\x65\x28\x2e\x39\x39\x36\x32\x36\x34\x29\
-\x27\x3e\x0a\x3c\x63\x69\x72\x63\x6c\x65\x20\x63\x78\x3d\x27\x36\
-\x2e\x30\x32\x32\x35\x27\x20\x63\x79\x3d\x27\x33\x32\x2e\x31\x32\
-\x27\x20\x66\x69\x6c\x6c\x3d\x27\x23\x66\x66\x30\x30\x30\x30\x27\
-\x20\x72\x3d\x27\x36\x2e\x30\x32\x32\x35\x27\x2f\x3e\x0a\x3c\x2f\
-\x67\x3e\x0a\x3c\x67\x20\x74\x72\x61\x6e\x73\x66\x6f\x72\x6d\x3d\
-\x27\x74\x72\x61\x6e\x73\x6c\x61\x74\x65\x28\x35\x38\x2e\x34\x36\
-\x36\x39\x20\x31\x31\x37\x2e\x38\x35\x38\x29\x73\x63\x61\x6c\x65\
-\x28\x2e\x39\x39\x36\x32\x36\x34\x29\x27\x3e\x0a\x3c\x63\x69\x72\
-\x63\x6c\x65\x20\x63\x78\x3d\x27\x31\x33\x2e\x39\x36\x38\x37\x27\
-\x20\x63\x79\x3d\x27\x31\x32\x2e\x39\x33\x36\x31\x27\x20\x66\x69\
-\x6c\x6c\x3d\x27\x23\x66\x66\x30\x30\x30\x30\x27\x20\x72\x3d\x27\
-\x36\x2e\x30\x32\x32\x35\x27\x2f\x3e\x0a\x3c\x2f\x67\x3e\x0a\x3c\
-\x67\x20\x74\x72\x61\x6e\x73\x66\x6f\x72\x6d\x3d\x27\x74\x72\x61\
-\x6e\x73\x6c\x61\x74\x65\x28\x35\x38\x2e\x34\x36\x36\x39\x20\x31\
-\x31\x37\x2e\x38\x35\x38\x29\x73\x63\x61\x6c\x65\x28\x2e\x39\x39\
-\x36\x32\x36\x34\x29\x27\x3e\x0a\x3c\x63\x69\x72\x63\x6c\x65\x20\
-\x63\x78\x3d\x27\x35\x38\x2e\x32\x31\x37\x35\x27\x20\x63\x79\x3d\
-\x27\x32\x31\x2e\x37\x33\x37\x38\x27\x20\x66\x69\x6c\x6c\x3d\x27\
-\x23\x66\x66\x30\x30\x30\x30\x27\x20\x72\x3d\x27\x36\x2e\x30\x32\
-\x32\x35\x27\x2f\x3e\x0a\x3c\x2f\x67\x3e\x0a\x3c\x67\x20\x74\x72\
-\x61\x6e\x73\x66\x6f\x72\x6d\x3d\x27\x74\x72\x61\x6e\x73\x6c\x61\
-\x74\x65\x28\x35\x38\x2e\x34\x36\x36\x39\x20\x31\x31\x37\x2e\x38\
-\x35\x38\x29\x73\x63\x61\x6c\x65\x28\x2e\x39\x39\x36\x32\x36\x34\
-\x29\x27\x3e\x0a\x3c\x63\x69\x72\x63\x6c\x65\x20\x63\x78\x3d\x27\
-\x34\x32\x2e\x37\x34\x34\x35\x27\x20\x63\x79\x3d\x27\x34\x31\x2e\
-\x37\x31\x31\x39\x27\x20\x66\x69\x6c\x6c\x3d\x27\x23\x66\x66\x30\
-\x30\x30\x30\x27\x20\x72\x3d\x27\x36\x2e\x30\x32\x32\x35\x27\x2f\
-\x3e\x0a\x3c\x2f\x67\x3e\x0a\x3c\x2f\x67\x3e\x0a\x3c\x2f\x73\x76\
-\x67\x3e\
-\x00\x00\x04\x9c\
-\x3c\
-\x3f\x78\x6d\x6c\x20\x76\x65\x72\x73\x69\x6f\x6e\x3d\x22\x31\x2e\
-\x30\x22\x20\x65\x6e\x63\x6f\x64\x69\x6e\x67\x3d\x22\x75\x74\x66\
-\x2d\x38\x22\x3f\x3e\x0a\x3c\x21\x2d\x2d\x20\x47\x65\x6e\x65\x72\
-\x61\x74\x6f\x72\x3a\x20\x41\x64\x6f\x62\x65\x20\x49\x6c\x6c\x75\
-\x73\x74\x72\x61\x74\x6f\x72\x20\x31\x38\x2e\x31\x2e\x30\x2c\x20\
-\x53\x56\x47\x20\x45\x78\x70\x6f\x72\x74\x20\x50\x6c\x75\x67\x2d\
-\x49\x6e\x20\x2e\x20\x53\x56\x47\x20\x56\x65\x72\x73\x69\x6f\x6e\
-\x3a\x20\x36\x2e\x30\x30\x20\x42\x75\x69\x6c\x64\x20\x30\x29\x20\
-\x20\x2d\x2d\x3e\x0a\x3c\x21\x44\x4f\x43\x54\x59\x50\x45\x20\x73\
-\x76\x67\x20\x50\x55\x42\x4c\x49\x43\x20\x22\x2d\x2f\x2f\x57\x33\
-\x43\x2f\x2f\x44\x54\x44\x20\x53\x56\x47\x20\x31\x2e\x31\x2f\x2f\
-\x45\x4e\x22\x20\x22\x68\x74\x74\x70\x3a\x2f\x2f\x77\x77\x77\x2e\
-\x77\x33\x2e\x6f\x72\x67\x2f\x47\x72\x61\x70\x68\x69\x63\x73\x2f\
-\x53\x56\x47\x2f\x31\x2e\x31\x2f\x44\x54\x44\x2f\x73\x76\x67\x31\
-\x31\x2e\x64\x74\x64\x22\x3e\x0a\x3c\x73\x76\x67\x20\x76\x65\x72\
-\x73\x69\x6f\x6e\x3d\x22\x31\x2e\x31\x22\x20\x69\x64\x3d\x22\x43\
-\x6f\x64\x65\x22\x20\x78\x6d\x6c\x6e\x73\x3d\x22\x68\x74\x74\x70\
-\x3a\x2f\x2f\x77\x77\x77\x2e\x77\x33\x2e\x6f\x72\x67\x2f\x32\x30\
-\x30\x30\x2f\x73\x76\x67\x22\x20\x78\x6d\x6c\x6e\x73\x3a\x78\x6c\
-\x69\x6e\x6b\x3d\x22\x68\x74\x74\x70\x3a\x2f\x2f\x77\x77\x77\x2e\
-\x77\x33\x2e\x6f\x72\x67\x2f\x31\x39\x39\x39\x2f\x78\x6c\x69\x6e\
-\x6b\x22\x20\x78\x3d\x22\x32\x34\x70\x78\x22\x20\x79\x3d\x22\x32\
-\x34\x70\x78\x22\x0a\x09\x20\x76\x69\x65\x77\x42\x6f\x78\x3d\x22\
-\x30\x20\x30\x20\x35\x31\x32\x20\x35\x31\x32\x22\x20\x65\x6e\x61\
-\x62\x6c\x65\x2d\x62\x61\x63\x6b\x67\x72\x6f\x75\x6e\x64\x3d\x22\
-\x6e\x65\x77\x20\x30\x20\x30\x20\x35\x31\x32\x20\x35\x31\x32\x22\
-\x20\x78\x6d\x6c\x3a\x73\x70\x61\x63\x65\x3d\x22\x70\x72\x65\x73\
-\x65\x72\x76\x65\x22\x3e\x0a\x3c\x67\x20\x74\x72\x61\x6e\x73\x66\
-\x6f\x72\x6d\x3d\x27\x6d\x61\x74\x72\x69\x78\x28\x32\x34\x20\x30\
-\x20\x30\x20\x32\x34\x20\x30\x20\x30\x29\x27\x3e\x3c\x70\x61\x74\
-\x68\x20\x64\x3d\x22\x4d\x35\x2e\x37\x31\x39\x2c\x31\x34\x2e\x37\
-\x35\x63\x2d\x30\x2e\x32\x33\x36\x2c\x30\x2d\x30\x2e\x34\x37\x34\
-\x2d\x30\x2e\x30\x38\x33\x2d\x30\x2e\x36\x36\x34\x2d\x30\x2e\x32\
-\x35\x32\x4c\x2d\x30\x2e\x30\x30\x35\x2c\x31\x30\x6c\x35\x2e\x33\
-\x34\x31\x2d\x34\x2e\x37\x34\x38\x43\x35\x2e\x37\x34\x38\x2c\x34\
-\x2e\x38\x38\x37\x2c\x36\x2e\x33\x38\x2c\x34\x2e\x39\x32\x32\x2c\
-\x36\x2e\x37\x34\x37\x2c\x35\x2e\x33\x33\x35\x0a\x09\x63\x30\x2e\
-\x33\x36\x37\x2c\x30\x2e\x34\x31\x33\x2c\x30\x2e\x33\x33\x2c\x31\
-\x2e\x30\x34\x35\x2d\x30\x2e\x30\x38\x33\x2c\x31\x2e\x34\x31\x32\
-\x4c\x33\x2e\x30\x30\x35\x2c\x31\x30\x6c\x33\x2e\x33\x37\x38\x2c\
-\x33\x2e\x30\x30\x32\x63\x30\x2e\x34\x31\x33\x2c\x30\x2e\x33\x36\
-\x37\x2c\x30\x2e\x34\x35\x2c\x30\x2e\x39\x39\x39\x2c\x30\x2e\x30\
-\x38\x33\x2c\x31\x2e\x34\x31\x32\x0a\x09\x43\x36\x2e\x32\x36\x39\
-\x2c\x31\x34\x2e\x36\x33\x37\x2c\x35\x2e\x39\x39\x34\x2c\x31\x34\
-\x2e\x37\x35\x2c\x35\x2e\x37\x31\x39\x2c\x31\x34\x2e\x37\x35\x7a\
-\x20\x4d\x31\x34\x2e\x36\x36\x34\x2c\x31\x34\x2e\x37\x34\x38\x4c\
-\x32\x30\x2e\x30\x30\x35\x2c\x31\x30\x6c\x2d\x35\x2e\x30\x36\x2d\
-\x34\x2e\x34\x39\x38\x63\x2d\x30\x2e\x34\x31\x33\x2d\x30\x2e\x33\
-\x36\x37\x2d\x31\x2e\x30\x34\x35\x2d\x30\x2e\x33\x33\x2d\x31\x2e\
-\x34\x31\x31\x2c\x30\x2e\x30\x38\x33\x0a\x09\x63\x2d\x30\x2e\x33\
-\x36\x37\x2c\x30\x2e\x34\x31\x33\x2d\x30\x2e\x33\x33\x2c\x31\x2e\
-\x30\x34\x35\x2c\x30\x2e\x30\x38\x33\x2c\x31\x2e\x34\x31\x32\x4c\
-\x31\x36\x2e\x39\x39\x35\x2c\x31\x30\x6c\x2d\x33\x2e\x36\x35\x39\
-\x2c\x33\x2e\x32\x35\x32\x63\x2d\x30\x2e\x34\x31\x33\x2c\x30\x2e\
-\x33\x36\x37\x2d\x30\x2e\x34\x35\x2c\x30\x2e\x39\x39\x39\x2d\x30\
-\x2e\x30\x38\x33\x2c\x31\x2e\x34\x31\x32\x43\x31\x33\x2e\x34\x35\
-\x2c\x31\x34\x2e\x38\x38\x37\x2c\x31\x33\x2e\x37\x32\x35\x2c\x31\
-\x35\x2c\x31\x34\x2c\x31\x35\x0a\x09\x43\x31\x34\x2e\x32\x33\x36\
-\x2c\x31\x35\x2c\x31\x34\x2e\x34\x37\x34\x2c\x31\x34\x2e\x39\x31\
-\x37\x2c\x31\x34\x2e\x36\x36\x34\x2c\x31\x34\x2e\x37\x34\x38\x7a\
-\x20\x4d\x39\x2e\x39\x38\x36\x2c\x31\x36\x2e\x31\x36\x35\x6c\x32\
-\x2d\x31\x32\x63\x30\x2e\x30\x39\x31\x2d\x30\x2e\x35\x34\x35\x2d\
-\x30\x2e\x32\x37\x37\x2d\x31\x2e\x30\x36\x2d\x30\x2e\x38\x32\x32\
-\x2d\x31\x2e\x31\x35\x31\x0a\x09\x63\x2d\x30\x2e\x35\x34\x37\x2d\
-\x30\x2e\x30\x39\x32\x2d\x31\x2e\x30\x36\x31\x2c\x30\x2e\x32\x37\
-\x37\x2d\x31\x2e\x31\x35\x2c\x30\x2e\x38\x32\x32\x6c\x2d\x32\x2c\
-\x31\x32\x63\x2d\x30\x2e\x30\x39\x31\x2c\x30\x2e\x35\x34\x35\x2c\
-\x30\x2e\x32\x37\x37\x2c\x31\x2e\x30\x36\x2c\x30\x2e\x38\x32\x32\
-\x2c\x31\x2e\x31\x35\x31\x43\x38\x2e\x38\x39\x32\x2c\x31\x36\x2e\
-\x39\x39\x36\x2c\x38\x2e\x39\x34\x36\x2c\x31\x37\x2c\x39\x2e\x30\
-\x30\x31\x2c\x31\x37\x0a\x09\x43\x39\x2e\x34\x38\x31\x2c\x31\x37\
-\x2c\x39\x2e\x39\x30\x35\x2c\x31\x36\x2e\x36\x35\x33\x2c\x39\x2e\
-\x39\x38\x36\x2c\x31\x36\x2e\x31\x36\x35\x7a\x22\x2f\x3e\x0a\x3c\
-\x2f\x67\x3e\x0a\x3c\x2f\x73\x76\x67\x3e\x0a\
-\x00\x00\x01\xd8\
-\x00\
-\x00\x06\xc4\x78\x9c\xcd\x54\x4d\x6f\x9b\x40\x10\x3d\xe3\x5f\x31\
-\xdd\x5b\x25\xf6\x0b\x62\x62\x53\xe3\xa8\xfe\x90\x65\x29\x6d\x2d\
-\x35\x75\xd5\x53\x85\x61\x0b\x28\x14\x10\x2c\x60\xe7\xd7\x77\x77\
-\xed\x54\xa9\x14\x5f\x43\x0f\x3b\xab\x9d\x79\xf3\xe6\x0d\x4f\x62\
-\x76\x77\xfc\x9d\x43\x27\xea\x26\x2b\x8b\x00\x71\xc2\x10\x88\x22\
-\x2a\xe3\xac\x48\x02\xd4\xca\x5f\x78\x82\xee\xe6\xa3\xd9\x3b\x8c\
-\x61\x23\x0a\x51\x87\xb2\xac\x7d\xf8\x18\x97\x07\x01\xdb\x3c\x6f\
-\x1b\x69\x52\xc0\x3d\xe2\x10\x6e\xc3\xd7\xfd\x06\xd6\xc7\xaa\xac\
-\x25\xec\xf2\x36\xc1\xdb\x02\x88\x49\xee\xcf\x33\x7c\xf0\x08\x63\
-\xb0\x68\xb3\x3c\x06\xf6\x1e\x00\x63\x4d\xbf\xfa\xb2\x7c\xf8\xb1\
-\x5b\x43\xd3\x25\xb0\xfb\xb6\xb8\xdf\x2e\x01\x61\x4a\xbf\xbb\x4b\
-\x4a\x57\x0f\x2b\xc3\xc0\x09\xa7\x74\xfd\x19\x01\x4a\xa5\xac\x7c\
-\x4a\xfb\xbe\x27\xbd\x4b\xca\x3a\xa1\x9b\x3a\xac\xd2\x2c\x6a\xa8\
-\x02\x52\x0d\x54\x4d\x54\x91\x71\x4e\x62\x19\x23\x35\x42\x33\xbf\
-\xd8\x93\x23\xc8\xe2\x00\xdd\x87\x27\x51\xff\x54\x0f\xf5\x19\x8a\
-\x26\x78\x85\xd9\x61\x8c\x69\xa6\x0b\xc4\x3f\xe6\x59\xf1\xf8\x1a\
-\x90\x4f\xa7\x53\x6a\xaa\x0a\x1a\x20\x56\x1d\x11\x9c\xce\xf7\xc8\
-\x82\x3e\x8b\x65\x1a\xa0\x31\x77\x74\x3e\x15\x59\x92\xca\xbf\xcf\
-\x2e\x13\xfd\xa2\xd4\x4d\xc0\x40\xe5\xf4\x41\xd0\xc8\x53\x2e\x02\
-\x24\x8a\xf0\x90\x0b\x7c\x08\xa3\xc7\xa4\x2e\xdb\x22\xf6\x0b\xd1\
-\xc3\x0b\xe4\x07\x23\xcd\x6f\xaa\x30\x52\xf0\xaa\x16\x8d\xa8\x3b\
-\xa1\x77\x4e\xe6\x23\xcb\x04\x6b\x56\x85\x32\x05\xb5\xf0\x27\xee\
-\x31\x9b\x8f\x5d\xe2\x46\xcc\x76\xc9\x2d\x76\x6d\x4f\x45\x75\xf4\
-\x9d\xe2\x31\x23\xe3\x08\xab\x82\xcd\x74\x12\xbb\xf8\x52\xee\xce\
-\x25\x66\x6a\xee\x73\x83\xbe\x53\x53\x30\x2d\x3a\x65\x1b\x46\x7d\
-\xf6\x66\xce\x93\x5a\xdf\xb2\xe8\xbf\x2a\x9c\xc9\xe4\x3f\x50\x71\
-\xc3\xbd\xa1\x54\xcc\xe8\x35\x73\x9c\x09\x7f\x13\x41\x66\xce\x55\
-\x73\x86\x57\xa1\xcd\x19\x48\xc5\x75\x73\x6e\xd8\xf4\x4d\x04\x99\
-\x39\x57\xcd\x19\x5e\x85\x36\x67\x20\x15\xc6\x9c\x4b\x50\xff\xe5\
-\xf9\xe8\x0f\x44\x1a\x94\x79\
-\x00\x00\x00\x6c\
-\x3c\
-\x73\x76\x67\x20\x78\x6d\x6c\x6e\x73\x3d\x22\x68\x74\x74\x70\x3a\
-\x2f\x2f\x77\x77\x77\x2e\x77\x33\x2e\x6f\x72\x67\x2f\x32\x30\x30\
-\x30\x2f\x73\x76\x67\x22\x20\x76\x69\x65\x77\x42\x6f\x78\x3d\x22\
-\x30\x20\x30\x20\x32\x30\x20\x32\x30\x22\x3e\x3c\x70\x61\x74\x68\
-\x20\x64\x3d\x22\x4d\x31\x38\x20\x31\x32\x76\x31\x48\x38\x76\x35\
-\x6c\x2d\x36\x2d\x36\x20\x36\x2d\x36\x76\x35\x68\x38\x56\x32\x68\
-\x32\x7a\x22\x2f\x3e\x3c\x2f\x73\x76\x67\x3e\
-\x00\x00\x02\x77\
-\x3c\
-\x3f\x78\x6d\x6c\x20\x76\x65\x72\x73\x69\x6f\x6e\x3d\x22\x31\x2e\
-\x30\x22\x20\x65\x6e\x63\x6f\x64\x69\x6e\x67\x3d\x22\x75\x74\x66\
-\x2d\x38\x22\x3f\x3e\x0a\x3c\x21\x2d\x2d\x20\x47\x65\x6e\x65\x72\
-\x61\x74\x6f\x72\x3a\x20\x41\x64\x6f\x62\x65\x20\x49\x6c\x6c\x75\
-\x73\x74\x72\x61\x74\x6f\x72\x20\x31\x36\x2e\x32\x2e\x31\x2c\x20\
-\x53\x56\x47\x20\x45\x78\x70\x6f\x72\x74\x20\x50\x6c\x75\x67\x2d\
-\x49\x6e\x20\x2e\x20\x53\x56\x47\x20\x56\x65\x72\x73\x69\x6f\x6e\
-\x3a\x20\x36\x2e\x30\x30\x20\x42\x75\x69\x6c\x64\x20\x30\x29\x20\
-\x20\x2d\x2d\x3e\x0a\x3c\x21\x44\x4f\x43\x54\x59\x50\x45\x20\x73\
-\x76\x67\x20\x50\x55\x42\x4c\x49\x43\x20\x22\x2d\x2f\x2f\x57\x33\
-\x43\x2f\x2f\x44\x54\x44\x20\x53\x56\x47\x20\x31\x2e\x31\x2f\x2f\
-\x45\x4e\x22\x20\x22\x68\x74\x74\x70\x3a\x2f\x2f\x77\x77\x77\x2e\
-\x77\x33\x2e\x6f\x72\x67\x2f\x47\x72\x61\x70\x68\x69\x63\x73\x2f\
-\x53\x56\x47\x2f\x31\x2e\x31\x2f\x44\x54\x44\x2f\x73\x76\x67\x31\
-\x31\x2e\x64\x74\x64\x22\x3e\x0a\x3c\x73\x76\x67\x20\x76\x65\x72\
-\x73\x69\x6f\x6e\x3d\x22\x31\x2e\x31\x22\x20\x69\x64\x3d\x22\x4c\
-\x61\x79\x65\x72\x5f\x31\x22\x20\x78\x6d\x6c\x6e\x73\x3d\x22\x68\
-\x74\x74\x70\x3a\x2f\x2f\x77\x77\x77\x2e\x77\x33\x2e\x6f\x72\x67\
-\x2f\x32\x30\x30\x30\x2f\x73\x76\x67\x22\x20\x78\x6d\x6c\x6e\x73\
-\x3a\x78\x6c\x69\x6e\x6b\x3d\x22\x68\x74\x74\x70\x3a\x2f\x2f\x77\
-\x77\x77\x2e\x77\x33\x2e\x6f\x72\x67\x2f\x31\x39\x39\x39\x2f\x78\
-\x6c\x69\x6e\x6b\x22\x20\x78\x3d\x22\x30\x70\x78\x22\x20\x79\x3d\
-\x22\x30\x70\x78\x22\x0a\x09\x20\x77\x69\x64\x74\x68\x3d\x22\x35\
-\x31\x32\x70\x78\x22\x20\x68\x65\x69\x67\x68\x74\x3d\x22\x35\x31\
-\x32\x70\x78\x22\x20\x76\x69\x65\x77\x42\x6f\x78\x3d\x22\x30\x20\
-\x30\x20\x35\x31\x32\x20\x35\x31\x32\x22\x20\x73\x74\x79\x6c\x65\
-\x3d\x22\x65\x6e\x61\x62\x6c\x65\x2d\x62\x61\x63\x6b\x67\x72\x6f\
-\x75\x6e\x64\x3a\x6e\x65\x77\x20\x30\x20\x30\x20\x35\x31\x32\x20\
-\x35\x31\x32\x3b\x22\x20\x78\x6d\x6c\x3a\x73\x70\x61\x63\x65\x3d\
-\x22\x70\x72\x65\x73\x65\x72\x76\x65\x22\x3e\x0a\x3c\x70\x6f\x6c\
-\x79\x67\x6f\x6e\x20\x70\x6f\x69\x6e\x74\x73\x3d\x22\x32\x38\x38\
-\x2c\x39\x36\x20\x33\x33\x37\x2e\x39\x2c\x31\x34\x35\x2e\x39\x20\
-\x32\x37\x34\x2c\x32\x30\x39\x2e\x37\x20\x32\x37\x34\x2c\x32\x30\
-\x39\x2e\x37\x20\x31\x34\x35\x2e\x39\x2c\x33\x33\x37\x2e\x39\x20\
-\x39\x36\x2c\x32\x38\x38\x20\x39\x36\x2c\x34\x31\x36\x20\x32\x32\
-\x34\x2c\x34\x31\x36\x20\x31\x37\x34\x2e\x31\x2c\x33\x36\x36\x2e\
-\x31\x20\x33\x35\x37\x2e\x34\x2c\x31\x38\x32\x2e\x39\x20\x33\x36\
-\x36\x2e\x31\x2c\x31\x37\x34\x2e\x31\x20\x0a\x09\x34\x31\x36\x2c\
-\x32\x32\x34\x20\x34\x31\x36\x2c\x39\x36\x20\x22\x2f\x3e\x0a\x3c\
-\x2f\x73\x76\x67\x3e\x0a\
-\x00\x00\x04\x73\
-\x3c\
-\x3f\x78\x6d\x6c\x20\x76\x65\x72\x73\x69\x6f\x6e\x3d\x27\x31\x2e\
-\x30\x27\x20\x65\x6e\x63\x6f\x64\x69\x6e\x67\x3d\x27\x55\x54\x46\
-\x2d\x38\x27\x3f\x3e\x0a\x3c\x21\x2d\x2d\x20\x54\x68\x69\x73\x20\
-\x66\x69\x6c\x65\x20\x77\x61\x73\x20\x67\x65\x6e\x65\x72\x61\x74\
-\x65\x64\x20\x62\x79\x20\x64\x76\x69\x73\x76\x67\x6d\x20\x32\x2e\
-\x31\x31\x2e\x31\x20\x2d\x2d\x3e\x0a\x3c\x73\x76\x67\x20\x76\x65\
-\x72\x73\x69\x6f\x6e\x3d\x27\x31\x2e\x31\x27\x20\x78\x6d\x6c\x6e\
-\x73\x3d\x27\x68\x74\x74\x70\x3a\x2f\x2f\x77\x77\x77\x2e\x77\x33\
-\x2e\x6f\x72\x67\x2f\x32\x30\x30\x30\x2f\x73\x76\x67\x27\x20\x78\
-\x6d\x6c\x6e\x73\x3a\x78\x6c\x69\x6e\x6b\x3d\x27\x68\x74\x74\x70\
-\x3a\x2f\x2f\x77\x77\x77\x2e\x77\x33\x2e\x6f\x72\x67\x2f\x31\x39\
-\x39\x39\x2f\x78\x6c\x69\x6e\x6b\x27\x20\x77\x69\x64\x74\x68\x3d\
-\x27\x36\x34\x2e\x30\x30\x30\x31\x70\x74\x27\x20\x68\x65\x69\x67\
-\x68\x74\x3d\x27\x36\x34\x70\x74\x27\x20\x76\x69\x65\x77\x42\x6f\
-\x78\x3d\x27\x35\x38\x2e\x34\x36\x36\x39\x20\x31\x31\x37\x2e\x38\
-\x35\x38\x20\x36\x34\x2e\x30\x30\x30\x31\x20\x36\x34\x27\x3e\x0a\
-\x3c\x67\x20\x69\x64\x3d\x27\x70\x61\x67\x65\x31\x27\x3e\x0a\x3c\
-\x67\x20\x74\x72\x61\x6e\x73\x66\x6f\x72\x6d\x3d\x27\x74\x72\x61\
-\x6e\x73\x6c\x61\x74\x65\x28\x35\x38\x2e\x34\x36\x36\x39\x20\x31\
-\x31\x37\x2e\x38\x35\x38\x29\x73\x63\x61\x6c\x65\x28\x2e\x39\x39\
-\x36\x32\x36\x34\x29\x27\x3e\x0a\x3c\x70\x61\x74\x68\x20\x64\x3d\
-\x27\x4d\x20\x36\x2e\x30\x32\x32\x35\x20\x33\x32\x2e\x31\x32\x43\
-\x20\x36\x2e\x32\x32\x30\x37\x32\x20\x32\x34\x2e\x39\x36\x35\x35\
-\x20\x39\x2e\x30\x34\x39\x38\x39\x20\x31\x38\x2e\x31\x33\x35\x33\
-\x20\x31\x33\x2e\x39\x36\x38\x37\x20\x31\x32\x2e\x39\x33\x36\x31\
-\x43\x20\x32\x39\x2e\x35\x30\x36\x32\x20\x2d\x33\x2e\x34\x38\x36\
-\x38\x36\x20\x35\x35\x2e\x33\x36\x37\x33\x20\x32\x2e\x36\x39\x39\
-\x35\x20\x35\x38\x2e\x32\x31\x37\x35\x20\x32\x31\x2e\x37\x33\x37\
-\x38\x43\x20\x35\x39\x2e\x36\x39\x32\x32\x20\x33\x31\x2e\x35\x38\
-\x38\x31\x20\x35\x32\x2e\x36\x35\x30\x38\x20\x34\x30\x2e\x36\x37\
-\x37\x39\x20\x34\x32\x2e\x37\x34\x34\x35\x20\x34\x31\x2e\x37\x31\
-\x31\x39\x27\x20\x66\x69\x6c\x6c\x3d\x27\x6e\x6f\x6e\x65\x27\x20\
-\x73\x74\x72\x6f\x6b\x65\x3d\x27\x23\x30\x30\x30\x30\x30\x30\x27\
-\x20\x73\x74\x72\x6f\x6b\x65\x2d\x6c\x69\x6e\x65\x63\x61\x70\x3d\
-\x27\x72\x6f\x75\x6e\x64\x27\x20\x73\x74\x72\x6f\x6b\x65\x2d\x6c\
-\x69\x6e\x65\x6a\x6f\x69\x6e\x3d\x27\x72\x6f\x75\x6e\x64\x27\x20\
-\x73\x74\x72\x6f\x6b\x65\x2d\x6d\x69\x74\x65\x72\x6c\x69\x6d\x69\
-\x74\x3d\x27\x31\x30\x2e\x30\x33\x37\x35\x27\x20\x73\x74\x72\x6f\
-\x6b\x65\x2d\x77\x69\x64\x74\x68\x3d\x27\x32\x2e\x35\x30\x39\x33\
-\x37\x27\x2f\x3e\x0a\x3c\x2f\x67\x3e\x0a\x3c\x67\x20\x74\x72\x61\
-\x6e\x73\x66\x6f\x72\x6d\x3d\x27\x74\x72\x61\x6e\x73\x6c\x61\x74\
-\x65\x28\x35\x38\x2e\x34\x36\x36\x39\x20\x31\x31\x37\x2e\x38\x35\
-\x38\x29\x73\x63\x61\x6c\x65\x28\x2e\x39\x39\x36\x32\x36\x34\x29\
-\x27\x3e\x0a\x3c\x63\x69\x72\x63\x6c\x65\x20\x63\x78\x3d\x27\x36\
-\x2e\x30\x32\x32\x35\x27\x20\x63\x79\x3d\x27\x33\x32\x2e\x31\x32\
-\x27\x20\x66\x69\x6c\x6c\x3d\x27\x23\x66\x66\x30\x30\x30\x30\x27\
-\x20\x72\x3d\x27\x36\x2e\x30\x32\x32\x35\x27\x2f\x3e\x0a\x3c\x2f\
-\x67\x3e\x0a\x3c\x67\x20\x74\x72\x61\x6e\x73\x66\x6f\x72\x6d\x3d\
-\x27\x74\x72\x61\x6e\x73\x6c\x61\x74\x65\x28\x35\x38\x2e\x34\x36\
-\x36\x39\x20\x31\x31\x37\x2e\x38\x35\x38\x29\x73\x63\x61\x6c\x65\
-\x28\x2e\x39\x39\x36\x32\x36\x34\x29\x27\x3e\x0a\x3c\x63\x69\x72\
-\x63\x6c\x65\x20\x63\x78\x3d\x27\x31\x33\x2e\x39\x36\x38\x37\x27\
-\x20\x63\x79\x3d\x27\x31\x32\x2e\x39\x33\x36\x31\x27\x20\x66\x69\
-\x6c\x6c\x3d\x27\x23\x66\x66\x30\x30\x30\x30\x27\x20\x72\x3d\x27\
-\x36\x2e\x30\x32\x32\x35\x27\x2f\x3e\x0a\x3c\x2f\x67\x3e\x0a\x3c\
-\x67\x20\x74\x72\x61\x6e\x73\x66\x6f\x72\x6d\x3d\x27\x74\x72\x61\
-\x6e\x73\x6c\x61\x74\x65\x28\x35\x38\x2e\x34\x36\x36\x39\x20\x31\
-\x31\x37\x2e\x38\x35\x38\x29\x73\x63\x61\x6c\x65\x28\x2e\x39\x39\
-\x36\x32\x36\x34\x29\x27\x3e\x0a\x3c\x63\x69\x72\x63\x6c\x65\x20\
-\x63\x78\x3d\x27\x35\x38\x2e\x32\x31\x37\x35\x27\x20\x63\x79\x3d\
-\x27\x32\x31\x2e\x37\x33\x37\x38\x27\x20\x66\x69\x6c\x6c\x3d\x27\
-\x23\x66\x66\x30\x30\x30\x30\x27\x20\x72\x3d\x27\x36\x2e\x30\x32\
-\x32\x35\x27\x2f\x3e\x0a\x3c\x2f\x67\x3e\x0a\x3c\x67\x20\x74\x72\
-\x61\x6e\x73\x66\x6f\x72\x6d\x3d\x27\x74\x72\x61\x6e\x73\x6c\x61\
-\x74\x65\x28\x35\x38\x2e\x34\x36\x36\x39\x20\x31\x31\x37\x2e\x38\
-\x35\x38\x29\x73\x63\x61\x6c\x65\x28\x2e\x39\x39\x36\x32\x36\x34\
-\x29\x27\x3e\x0a\x3c\x63\x69\x72\x63\x6c\x65\x20\x63\x78\x3d\x27\
-\x34\x32\x2e\x37\x34\x34\x35\x27\x20\x63\x79\x3d\x27\x34\x31\x2e\
-\x37\x31\x31\x39\x27\x20\x66\x69\x6c\x6c\x3d\x27\x23\x66\x66\x30\
-\x30\x30\x30\x27\x20\x72\x3d\x27\x36\x2e\x30\x32\x32\x35\x27\x2f\
-\x3e\x0a\x3c\x2f\x67\x3e\x0a\x3c\x2f\x67\x3e\x0a\x3c\x2f\x73\x76\
-\x67\x3e\
-\x00\x00\x03\x48\
-\x3c\
-\x3f\x78\x6d\x6c\x20\x76\x65\x72\x73\x69\x6f\x6e\x3d\x22\x31\x2e\
-\x30\x22\x20\x65\x6e\x63\x6f\x64\x69\x6e\x67\x3d\x22\x75\x74\x66\
-\x2d\x38\x22\x3f\x3e\x0a\x3c\x21\x2d\x2d\x20\x47\x65\x6e\x65\x72\
-\x61\x74\x6f\x72\x3a\x20\x41\x64\x6f\x62\x65\x20\x49\x6c\x6c\x75\
-\x73\x74\x72\x61\x74\x6f\x72\x20\x31\x36\x2e\x32\x2e\x31\x2c\x20\
-\x53\x56\x47\x20\x45\x78\x70\x6f\x72\x74\x20\x50\x6c\x75\x67\x2d\
-\x49\x6e\x20\x2e\x20\x53\x56\x47\x20\x56\x65\x72\x73\x69\x6f\x6e\
-\x3a\x20\x36\x2e\x30\x30\x20\x42\x75\x69\x6c\x64\x20\x30\x29\x20\
-\x20\x2d\x2d\x3e\x0a\x3c\x21\x44\x4f\x43\x54\x59\x50\x45\x20\x73\
-\x76\x67\x20\x50\x55\x42\x4c\x49\x43\x20\x22\x2d\x2f\x2f\x57\x33\
-\x43\x2f\x2f\x44\x54\x44\x20\x53\x56\x47\x20\x31\x2e\x31\x2f\x2f\
-\x45\x4e\x22\x20\x22\x68\x74\x74\x70\x3a\x2f\x2f\x77\x77\x77\x2e\
-\x77\x33\x2e\x6f\x72\x67\x2f\x47\x72\x61\x70\x68\x69\x63\x73\x2f\
-\x53\x56\x47\x2f\x31\x2e\x31\x2f\x44\x54\x44\x2f\x73\x76\x67\x31\
-\x31\x2e\x64\x74\x64\x22\x3e\x0a\x3c\x73\x76\x67\x20\x76\x65\x72\
-\x73\x69\x6f\x6e\x3d\x22\x31\x2e\x31\x22\x20\x69\x64\x3d\x22\x4c\
-\x61\x79\x65\x72\x5f\x31\x22\x20\x78\x6d\x6c\x6e\x73\x3d\x22\x68\
-\x74\x74\x70\x3a\x2f\x2f\x77\x77\x77\x2e\x77\x33\x2e\x6f\x72\x67\
-\x2f\x32\x30\x30\x30\x2f\x73\x76\x67\x22\x20\x78\x6d\x6c\x6e\x73\
-\x3a\x78\x6c\x69\x6e\x6b\x3d\x22\x68\x74\x74\x70\x3a\x2f\x2f\x77\
-\x77\x77\x2e\x77\x33\x2e\x6f\x72\x67\x2f\x31\x39\x39\x39\x2f\x78\
-\x6c\x69\x6e\x6b\x22\x20\x78\x3d\x22\x30\x70\x78\x22\x20\x79\x3d\
-\x22\x30\x70\x78\x22\x0a\x09\x20\x77\x69\x64\x74\x68\x3d\x22\x35\
-\x31\x32\x70\x78\x22\x20\x68\x65\x69\x67\x68\x74\x3d\x22\x35\x31\
-\x32\x70\x78\x22\x20\x76\x69\x65\x77\x42\x6f\x78\x3d\x22\x30\x20\
-\x30\x20\x35\x31\x32\x20\x35\x31\x32\x22\x20\x65\x6e\x61\x62\x6c\
-\x65\x2d\x62\x61\x63\x6b\x67\x72\x6f\x75\x6e\x64\x3d\x22\x6e\x65\
-\x77\x20\x30\x20\x30\x20\x35\x31\x32\x20\x35\x31\x32\x22\x20\x78\
-\x6d\x6c\x3a\x73\x70\x61\x63\x65\x3d\x22\x70\x72\x65\x73\x65\x72\
-\x76\x65\x22\x3e\x0a\x3c\x70\x61\x74\x68\x20\x64\x3d\x22\x4d\x34\
-\x33\x37\x2e\x33\x33\x34\x2c\x31\x34\x34\x48\x32\x35\x36\x2e\x30\
-\x30\x36\x6c\x2d\x34\x32\x2e\x36\x36\x38\x2d\x34\x38\x48\x37\x34\
-\x2e\x36\x36\x36\x43\x35\x31\x2e\x31\x39\x37\x2c\x39\x36\x2c\x33\
-\x32\x2c\x31\x31\x35\x2e\x31\x39\x38\x2c\x33\x32\x2c\x31\x33\x38\
-\x2e\x36\x36\x37\x76\x32\x33\x34\x2e\x36\x36\x36\x43\x33\x32\x2c\
-\x33\x39\x36\x2e\x38\x30\x32\x2c\x35\x31\x2e\x31\x39\x37\x2c\x34\
-\x31\x36\x2c\x37\x34\x2e\x36\x36\x36\x2c\x34\x31\x36\x68\x33\x36\
-\x32\x2e\x36\x36\x38\x0a\x09\x43\x34\x36\x30\x2e\x38\x30\x33\x2c\
-\x34\x31\x36\x2c\x34\x38\x30\x2c\x33\x39\x36\x2e\x38\x30\x32\x2c\
-\x34\x38\x30\x2c\x33\x37\x33\x2e\x33\x33\x33\x56\x31\x38\x36\x2e\
-\x36\x36\x37\x43\x34\x38\x30\x2c\x31\x36\x33\x2e\x31\x39\x38\x2c\
-\x34\x36\x30\x2e\x38\x30\x33\x2c\x31\x34\x34\x2c\x34\x33\x37\x2e\
-\x33\x33\x34\x2c\x31\x34\x34\x7a\x20\x4d\x34\x34\x38\x2c\x33\x37\
-\x33\x2e\x33\x33\x33\x0a\x09\x63\x30\x2c\x35\x2e\x37\x38\x32\x2d\
-\x34\x2e\x38\x38\x35\x2c\x31\x30\x2e\x36\x36\x37\x2d\x31\x30\x2e\
-\x36\x36\x36\x2c\x31\x30\x2e\x36\x36\x37\x48\x37\x34\x2e\x36\x36\
-\x36\x43\x36\x38\x2e\x38\x38\x34\x2c\x33\x38\x34\x2c\x36\x34\x2c\
-\x33\x37\x39\x2e\x31\x31\x35\x2c\x36\x34\x2c\x33\x37\x33\x2e\x33\
-\x33\x33\x56\x31\x37\x36\x68\x33\x37\x33\x2e\x33\x33\x34\x63\x35\
-\x2e\x37\x38\x31\x2c\x30\x2c\x31\x30\x2e\x36\x36\x36\x2c\x34\x2e\
-\x38\x38\x35\x2c\x31\x30\x2e\x36\x36\x36\x2c\x31\x30\x2e\x36\x36\
-\x37\x0a\x09\x56\x33\x37\x33\x2e\x33\x33\x33\x7a\x22\x2f\x3e\x0a\
-\x3c\x2f\x73\x76\x67\x3e\x0a\
-\x00\x00\x05\x16\
-\x3c\
-\x3f\x78\x6d\x6c\x20\x76\x65\x72\x73\x69\x6f\x6e\x3d\x22\x31\x2e\
-\x30\x22\x20\x65\x6e\x63\x6f\x64\x69\x6e\x67\x3d\x22\x75\x74\x66\
-\x2d\x38\x22\x3f\x3e\x0a\x3c\x21\x2d\x2d\x20\x47\x65\x6e\x65\x72\
-\x61\x74\x6f\x72\x3a\x20\x41\x64\x6f\x62\x65\x20\x49\x6c\x6c\x75\
-\x73\x74\x72\x61\x74\x6f\x72\x20\x31\x36\x2e\x32\x2e\x31\x2c\x20\
-\x53\x56\x47\x20\x45\x78\x70\x6f\x72\x74\x20\x50\x6c\x75\x67\x2d\
-\x49\x6e\x20\x2e\x20\x53\x56\x47\x20\x56\x65\x72\x73\x69\x6f\x6e\
-\x3a\x20\x36\x2e\x30\x30\x20\x42\x75\x69\x6c\x64\x20\x30\x29\x20\
-\x20\x2d\x2d\x3e\x0a\x3c\x21\x44\x4f\x43\x54\x59\x50\x45\x20\x73\
-\x76\x67\x20\x50\x55\x42\x4c\x49\x43\x20\x22\x2d\x2f\x2f\x57\x33\
-\x43\x2f\x2f\x44\x54\x44\x20\x53\x56\x47\x20\x31\x2e\x31\x2f\x2f\
-\x45\x4e\x22\x20\x22\x68\x74\x74\x70\x3a\x2f\x2f\x77\x77\x77\x2e\
-\x77\x33\x2e\x6f\x72\x67\x2f\x47\x72\x61\x70\x68\x69\x63\x73\x2f\
-\x53\x56\x47\x2f\x31\x2e\x31\x2f\x44\x54\x44\x2f\x73\x76\x67\x31\
-\x31\x2e\x64\x74\x64\x22\x3e\x0a\x3c\x73\x76\x67\x20\x76\x65\x72\
-\x73\x69\x6f\x6e\x3d\x22\x31\x2e\x31\x22\x20\x69\x64\x3d\x22\x4c\
-\x61\x79\x65\x72\x5f\x31\x22\x20\x78\x6d\x6c\x6e\x73\x3d\x22\x68\
-\x74\x74\x70\x3a\x2f\x2f\x77\x77\x77\x2e\x77\x33\x2e\x6f\x72\x67\
-\x2f\x32\x30\x30\x30\x2f\x73\x76\x67\x22\x20\x78\x6d\x6c\x6e\x73\
-\x3a\x78\x6c\x69\x6e\x6b\x3d\x22\x68\x74\x74\x70\x3a\x2f\x2f\x77\
-\x77\x77\x2e\x77\x33\x2e\x6f\x72\x67\x2f\x31\x39\x39\x39\x2f\x78\
-\x6c\x69\x6e\x6b\x22\x20\x78\x3d\x22\x30\x70\x78\x22\x20\x79\x3d\
-\x22\x30\x70\x78\x22\x0a\x09\x20\x77\x69\x64\x74\x68\x3d\x22\x35\
-\x31\x32\x70\x78\x22\x20\x68\x65\x69\x67\x68\x74\x3d\x22\x35\x31\
-\x32\x70\x78\x22\x20\x76\x69\x65\x77\x42\x6f\x78\x3d\x22\x30\x20\
-\x30\x20\x35\x31\x32\x20\x35\x31\x32\x22\x20\x65\x6e\x61\x62\x6c\
-\x65\x2d\x62\x61\x63\x6b\x67\x72\x6f\x75\x6e\x64\x3d\x22\x6e\x65\
-\x77\x20\x30\x20\x30\x20\x35\x31\x32\x20\x35\x31\x32\x22\x20\x78\
-\x6d\x6c\x3a\x73\x70\x61\x63\x65\x3d\x22\x70\x72\x65\x73\x65\x72\
-\x76\x65\x22\x3e\x0a\x3c\x67\x20\x69\x64\x3d\x22\x49\x63\x6f\x6e\
-\x5f\x31\x32\x5f\x22\x3e\x0a\x09\x3c\x67\x3e\x0a\x09\x09\x3c\x70\
-\x61\x74\x68\x20\x64\x3d\x22\x4d\x32\x35\x36\x2c\x36\x34\x43\x31\
-\x35\x30\x2e\x34\x30\x31\x2c\x36\x34\x2c\x36\x34\x2c\x31\x35\x30\
-\x2e\x34\x30\x31\x2c\x36\x34\x2c\x32\x35\x36\x63\x30\x2c\x31\x30\
-\x35\x2e\x36\x30\x34\x2c\x38\x36\x2e\x34\x30\x31\x2c\x31\x39\x32\
-\x2c\x31\x39\x32\x2c\x31\x39\x32\x63\x31\x38\x2e\x31\x33\x36\x2c\
-\x30\x2c\x33\x32\x2d\x31\x33\x2e\x38\x36\x34\x2c\x33\x32\x2d\x33\
-\x32\x0a\x09\x09\x09\x63\x30\x2d\x38\x2e\x35\x33\x31\x2d\x33\x2e\
-\x31\x39\x38\x2d\x31\x36\x2d\x38\x2e\x35\x33\x31\x2d\x32\x31\x2e\
-\x33\x33\x33\x63\x2d\x35\x2e\x33\x33\x33\x2d\x35\x2e\x33\x33\x34\
-\x2d\x38\x2e\x35\x33\x31\x2d\x31\x32\x2e\x38\x30\x33\x2d\x38\x2e\
-\x35\x33\x31\x2d\x32\x31\x2e\x33\x33\x34\x63\x30\x2d\x31\x38\x2e\
-\x31\x33\x35\x2c\x31\x33\x2e\x38\x36\x34\x2d\x33\x32\x2c\x33\x32\
-\x2d\x33\x32\x68\x33\x38\x2e\x33\x39\x36\x0a\x09\x09\x09\x63\x35\
-\x38\x2e\x36\x36\x37\x2c\x30\x2c\x31\x30\x36\x2e\x36\x36\x37\x2d\
-\x34\x38\x2c\x31\x30\x36\x2e\x36\x36\x37\x2d\x31\x30\x36\x2e\x36\
-\x36\x36\x43\x34\x34\x38\x2c\x31\x34\x30\x2e\x38\x30\x32\x2c\x33\
-\x36\x31\x2e\x36\x30\x34\x2c\x36\x34\x2c\x32\x35\x36\x2c\x36\x34\
-\x7a\x20\x4d\x31\x33\x38\x2e\x36\x36\x37\x2c\x32\x35\x36\x63\x2d\
-\x31\x38\x2e\x31\x33\x36\x2c\x30\x2d\x33\x32\x2d\x31\x33\x2e\x38\
-\x36\x34\x2d\x33\x32\x2d\x33\x32\x73\x31\x33\x2e\x38\x36\x34\x2d\
-\x33\x32\x2c\x33\x32\x2d\x33\x32\x0a\x09\x09\x09\x63\x31\x38\x2e\
-\x31\x33\x35\x2c\x30\x2c\x33\x32\x2c\x31\x33\x2e\x38\x36\x34\x2c\
-\x33\x32\x2c\x33\x32\x53\x31\x35\x36\x2e\x38\x30\x32\x2c\x32\x35\
-\x36\x2c\x31\x33\x38\x2e\x36\x36\x37\x2c\x32\x35\x36\x7a\x20\x4d\
-\x32\x30\x32\x2e\x36\x36\x37\x2c\x31\x37\x30\x2e\x36\x36\x37\x63\
-\x2d\x31\x38\x2e\x31\x33\x36\x2c\x30\x2d\x33\x32\x2d\x31\x33\x2e\
-\x38\x36\x35\x2d\x33\x32\x2d\x33\x32\x63\x30\x2d\x31\x38\x2e\x31\
-\x33\x36\x2c\x31\x33\x2e\x38\x36\x34\x2d\x33\x32\x2c\x33\x32\x2d\
-\x33\x32\x0a\x09\x09\x09\x63\x31\x38\x2e\x31\x33\x35\x2c\x30\x2c\
-\x33\x32\x2c\x31\x33\x2e\x38\x36\x34\x2c\x33\x32\x2c\x33\x32\x43\
-\x32\x33\x34\x2e\x36\x36\x37\x2c\x31\x35\x36\x2e\x38\x30\x32\x2c\
-\x32\x32\x30\x2e\x38\x30\x32\x2c\x31\x37\x30\x2e\x36\x36\x37\x2c\
-\x32\x30\x32\x2e\x36\x36\x37\x2c\x31\x37\x30\x2e\x36\x36\x37\x7a\
-\x20\x4d\x33\x30\x39\x2e\x33\x33\x33\x2c\x31\x37\x30\x2e\x36\x36\
-\x37\x63\x2d\x31\x38\x2e\x31\x33\x35\x2c\x30\x2d\x33\x32\x2d\x31\
-\x33\x2e\x38\x36\x35\x2d\x33\x32\x2d\x33\x32\x0a\x09\x09\x09\x63\
-\x30\x2d\x31\x38\x2e\x31\x33\x36\x2c\x31\x33\x2e\x38\x36\x35\x2d\
-\x33\x32\x2c\x33\x32\x2d\x33\x32\x63\x31\x38\x2e\x31\x33\x36\x2c\
-\x30\x2c\x33\x32\x2c\x31\x33\x2e\x38\x36\x34\x2c\x33\x32\x2c\x33\
-\x32\x43\x33\x34\x31\x2e\x33\x33\x33\x2c\x31\x35\x36\x2e\x38\x30\
-\x32\x2c\x33\x32\x37\x2e\x34\x36\x39\x2c\x31\x37\x30\x2e\x36\x36\
-\x37\x2c\x33\x30\x39\x2e\x33\x33\x33\x2c\x31\x37\x30\x2e\x36\x36\
-\x37\x7a\x20\x4d\x33\x37\x33\x2e\x33\x33\x33\x2c\x32\x35\x36\x0a\
-\x09\x09\x09\x63\x2d\x31\x38\x2e\x31\x33\x35\x2c\x30\x2d\x33\x32\
-\x2d\x31\x33\x2e\x38\x36\x34\x2d\x33\x32\x2d\x33\x32\x73\x31\x33\
-\x2e\x38\x36\x35\x2d\x33\x32\x2c\x33\x32\x2d\x33\x32\x63\x31\x38\
-\x2e\x31\x33\x36\x2c\x30\x2c\x33\x32\x2c\x31\x33\x2e\x38\x36\x34\
-\x2c\x33\x32\x2c\x33\x32\x53\x33\x39\x31\x2e\x34\x36\x39\x2c\x32\
-\x35\x36\x2c\x33\x37\x33\x2e\x33\x33\x33\x2c\x32\x35\x36\x7a\x22\
-\x2f\x3e\x0a\x09\x3c\x2f\x67\x3e\x0a\x3c\x2f\x67\x3e\x0a\x3c\x2f\
-\x73\x76\x67\x3e\x0a\
-\x00\x00\x02\x98\
-\x3c\
-\x3f\x78\x6d\x6c\x20\x76\x65\x72\x73\x69\x6f\x6e\x3d\x22\x31\x2e\
-\x30\x22\x20\x65\x6e\x63\x6f\x64\x69\x6e\x67\x3d\x22\x75\x74\x66\
-\x2d\x38\x22\x3f\x3e\x0a\x3c\x21\x2d\x2d\x20\x47\x65\x6e\x65\x72\
-\x61\x74\x6f\x72\x3a\x20\x41\x64\x6f\x62\x65\x20\x49\x6c\x6c\x75\
-\x73\x74\x72\x61\x74\x6f\x72\x20\x31\x36\x2e\x32\x2e\x31\x2c\x20\
-\x53\x56\x47\x20\x45\x78\x70\x6f\x72\x74\x20\x50\x6c\x75\x67\x2d\
-\x49\x6e\x20\x2e\x20\x53\x56\x47\x20\x56\x65\x72\x73\x69\x6f\x6e\
-\x3a\x20\x36\x2e\x30\x30\x20\x42\x75\x69\x6c\x64\x20\x30\x29\x20\
-\x20\x2d\x2d\x3e\x0a\x3c\x21\x44\x4f\x43\x54\x59\x50\x45\x20\x73\
-\x76\x67\x20\x50\x55\x42\x4c\x49\x43\x20\x22\x2d\x2f\x2f\x57\x33\
-\x43\x2f\x2f\x44\x54\x44\x20\x53\x56\x47\x20\x31\x2e\x31\x2f\x2f\
-\x45\x4e\x22\x20\x22\x68\x74\x74\x70\x3a\x2f\x2f\x77\x77\x77\x2e\
-\x77\x33\x2e\x6f\x72\x67\x2f\x47\x72\x61\x70\x68\x69\x63\x73\x2f\
-\x53\x56\x47\x2f\x31\x2e\x31\x2f\x44\x54\x44\x2f\x73\x76\x67\x31\
-\x31\x2e\x64\x74\x64\x22\x3e\x0a\x3c\x73\x76\x67\x20\x76\x65\x72\
-\x73\x69\x6f\x6e\x3d\x22\x31\x2e\x31\x22\x20\x69\x64\x3d\x22\x4c\
-\x61\x79\x65\x72\x5f\x31\x22\x20\x78\x6d\x6c\x6e\x73\x3d\x22\x68\
-\x74\x74\x70\x3a\x2f\x2f\x77\x77\x77\x2e\x77\x33\x2e\x6f\x72\x67\
-\x2f\x32\x30\x30\x30\x2f\x73\x76\x67\x22\x20\x78\x6d\x6c\x6e\x73\
-\x3a\x78\x6c\x69\x6e\x6b\x3d\x22\x68\x74\x74\x70\x3a\x2f\x2f\x77\
-\x77\x77\x2e\x77\x33\x2e\x6f\x72\x67\x2f\x31\x39\x39\x39\x2f\x78\
-\x6c\x69\x6e\x6b\x22\x20\x78\x3d\x22\x30\x70\x78\x22\x20\x79\x3d\
-\x22\x30\x70\x78\x22\x0a\x09\x20\x77\x69\x64\x74\x68\x3d\x22\x35\
-\x31\x32\x70\x78\x22\x20\x68\x65\x69\x67\x68\x74\x3d\x22\x35\x31\
-\x32\x70\x78\x22\x20\x76\x69\x65\x77\x42\x6f\x78\x3d\x22\x30\x20\
-\x30\x20\x35\x31\x32\x20\x35\x31\x32\x22\x20\x65\x6e\x61\x62\x6c\
-\x65\x2d\x62\x61\x63\x6b\x67\x72\x6f\x75\x6e\x64\x3d\x22\x6e\x65\
-\x77\x20\x30\x20\x30\x20\x35\x31\x32\x20\x35\x31\x32\x22\x20\x78\
-\x6d\x6c\x3a\x73\x70\x61\x63\x65\x3d\x22\x70\x72\x65\x73\x65\x72\
-\x76\x65\x22\x3e\x0a\x3c\x67\x3e\x0a\x09\x3c\x70\x61\x74\x68\x20\
-\x64\x3d\x22\x4d\x31\x32\x38\x2c\x34\x30\x35\x2e\x34\x32\x39\x43\
-\x31\x32\x38\x2c\x34\x32\x38\x2e\x38\x34\x36\x2c\x31\x34\x37\x2e\
-\x31\x39\x38\x2c\x34\x34\x38\x2c\x31\x37\x30\x2e\x36\x36\x37\x2c\
-\x34\x34\x38\x68\x31\x37\x30\x2e\x36\x36\x37\x43\x33\x36\x34\x2e\
-\x38\x30\x32\x2c\x34\x34\x38\x2c\x33\x38\x34\x2c\x34\x32\x38\x2e\
-\x38\x34\x36\x2c\x33\x38\x34\x2c\x34\x30\x35\x2e\x34\x32\x39\x56\
-\x31\x36\x30\x48\x31\x32\x38\x56\x34\x30\x35\x2e\x34\x32\x39\x7a\
-\x20\x4d\x34\x31\x36\x2c\x39\x36\x0a\x09\x09\x68\x2d\x38\x30\x6c\
-\x2d\x32\x36\x2e\x37\x38\x35\x2d\x33\x32\x48\x32\x30\x32\x2e\x37\
-\x38\x36\x4c\x31\x37\x36\x2c\x39\x36\x48\x39\x36\x76\x33\x32\x68\
-\x33\x32\x30\x56\x39\x36\x7a\x22\x2f\x3e\x0a\x3c\x2f\x67\x3e\x0a\
-\x3c\x2f\x73\x76\x67\x3e\x0a\
-\x00\x00\x03\x5f\
-\x3c\
-\x3f\x78\x6d\x6c\x20\x76\x65\x72\x73\x69\x6f\x6e\x3d\x22\x31\x2e\
-\x30\x22\x20\x65\x6e\x63\x6f\x64\x69\x6e\x67\x3d\x22\x75\x74\x66\
-\x2d\x38\x22\x3f\x3e\x0a\x3c\x21\x2d\x2d\x20\x47\x65\x6e\x65\x72\
-\x61\x74\x6f\x72\x3a\x20\x41\x64\x6f\x62\x65\x20\x49\x6c\x6c\x75\
-\x73\x74\x72\x61\x74\x6f\x72\x20\x31\x36\x2e\x32\x2e\x31\x2c\x20\
-\x53\x56\x47\x20\x45\x78\x70\x6f\x72\x74\x20\x50\x6c\x75\x67\x2d\
-\x49\x6e\x20\x2e\x20\x53\x56\x47\x20\x56\x65\x72\x73\x69\x6f\x6e\
-\x3a\x20\x36\x2e\x30\x30\x20\x42\x75\x69\x6c\x64\x20\x30\x29\x20\
-\x20\x2d\x2d\x3e\x0a\x3c\x21\x44\x4f\x43\x54\x59\x50\x45\x20\x73\
-\x76\x67\x20\x50\x55\x42\x4c\x49\x43\x20\x22\x2d\x2f\x2f\x57\x33\
-\x43\x2f\x2f\x44\x54\x44\x20\x53\x56\x47\x20\x31\x2e\x31\x2f\x2f\
-\x45\x4e\x22\x20\x22\x68\x74\x74\x70\x3a\x2f\x2f\x77\x77\x77\x2e\
-\x77\x33\x2e\x6f\x72\x67\x2f\x47\x72\x61\x70\x68\x69\x63\x73\x2f\
-\x53\x56\x47\x2f\x31\x2e\x31\x2f\x44\x54\x44\x2f\x73\x76\x67\x31\
-\x31\x2e\x64\x74\x64\x22\x3e\x0a\x3c\x73\x76\x67\x20\x76\x65\x72\
-\x73\x69\x6f\x6e\x3d\x22\x31\x2e\x31\x22\x20\x69\x64\x3d\x22\x4c\
-\x61\x79\x65\x72\x5f\x31\x22\x20\x78\x6d\x6c\x6e\x73\x3d\x22\x68\
-\x74\x74\x70\x3a\x2f\x2f\x77\x77\x77\x2e\x77\x33\x2e\x6f\x72\x67\
-\x2f\x32\x30\x30\x30\x2f\x73\x76\x67\x22\x20\x78\x6d\x6c\x6e\x73\
-\x3a\x78\x6c\x69\x6e\x6b\x3d\x22\x68\x74\x74\x70\x3a\x2f\x2f\x77\
-\x77\x77\x2e\x77\x33\x2e\x6f\x72\x67\x2f\x31\x39\x39\x39\x2f\x78\
-\x6c\x69\x6e\x6b\x22\x20\x78\x3d\x22\x30\x70\x78\x22\x20\x79\x3d\
-\x22\x30\x70\x78\x22\x0a\x09\x20\x77\x69\x64\x74\x68\x3d\x22\x35\
-\x31\x32\x70\x78\x22\x20\x68\x65\x69\x67\x68\x74\x3d\x22\x35\x31\
-\x32\x70\x78\x22\x20\x76\x69\x65\x77\x42\x6f\x78\x3d\x22\x30\x20\
-\x30\x20\x35\x31\x32\x20\x35\x31\x32\x22\x20\x65\x6e\x61\x62\x6c\
-\x65\x2d\x62\x61\x63\x6b\x67\x72\x6f\x75\x6e\x64\x3d\x22\x6e\x65\
-\x77\x20\x30\x20\x30\x20\x35\x31\x32\x20\x35\x31\x32\x22\x20\x78\
-\x6d\x6c\x3a\x73\x70\x61\x63\x65\x3d\x22\x70\x72\x65\x73\x65\x72\
-\x76\x65\x22\x3e\x0a\x3c\x67\x3e\x0a\x09\x0a\x09\x09\x3c\x72\x65\
-\x63\x74\x20\x78\x3d\x22\x31\x37\x38\x2e\x38\x34\x36\x22\x20\x79\
-\x3d\x22\x39\x32\x2e\x30\x38\x37\x22\x20\x74\x72\x61\x6e\x73\x66\
-\x6f\x72\x6d\x3d\x22\x6d\x61\x74\x72\x69\x78\x28\x2d\x30\x2e\x37\
-\x30\x37\x31\x20\x2d\x30\x2e\x37\x30\x37\x31\x20\x30\x2e\x37\x30\
-\x37\x31\x20\x2d\x30\x2e\x37\x30\x37\x31\x20\x32\x32\x34\x2e\x33\
-\x34\x37\x36\x20\x36\x33\x31\x2e\x31\x34\x39\x38\x29\x22\x20\x77\
-\x69\x64\x74\x68\x3d\x22\x31\x32\x38\x2e\x30\x38\x35\x22\x20\x68\
-\x65\x69\x67\x68\x74\x3d\x22\x33\x35\x34\x2e\x30\x34\x39\x22\x2f\
-\x3e\x0a\x09\x3c\x70\x61\x74\x68\x20\x64\x3d\x22\x4d\x34\x37\x31\
-\x2e\x37\x32\x33\x2c\x38\x38\x2e\x33\x39\x33\x6c\x2d\x34\x38\x2e\
-\x31\x31\x35\x2d\x34\x38\x2e\x31\x31\x34\x63\x2d\x31\x31\x2e\x37\
-\x32\x33\x2d\x31\x31\x2e\x37\x32\x34\x2d\x33\x31\x2e\x35\x35\x38\
-\x2d\x31\x30\x2e\x38\x39\x36\x2d\x34\x34\x2e\x33\x30\x34\x2c\x31\
-\x2e\x38\x35\x6c\x2d\x34\x35\x2e\x32\x30\x32\x2c\x34\x35\x2e\x32\
-\x30\x33\x6c\x39\x30\x2e\x35\x36\x39\x2c\x39\x30\x2e\x35\x36\x38\
-\x6c\x34\x35\x2e\x32\x30\x32\x2d\x34\x35\x2e\x32\x30\x32\x0a\x09\
-\x09\x43\x34\x38\x32\x2e\x36\x31\x36\x2c\x31\x31\x39\x2e\x39\x35\
-\x32\x2c\x34\x38\x33\x2e\x34\x34\x35\x2c\x31\x30\x30\x2e\x31\x31\
-\x36\x2c\x34\x37\x31\x2e\x37\x32\x33\x2c\x38\x38\x2e\x33\x39\x33\
-\x7a\x22\x2f\x3e\x0a\x09\x3c\x70\x6f\x6c\x79\x67\x6f\x6e\x20\x70\
-\x6f\x69\x6e\x74\x73\x3d\x22\x36\x34\x2e\x30\x32\x31\x2c\x33\x36\
-\x33\x2e\x32\x35\x32\x20\x33\x32\x2c\x34\x38\x30\x20\x31\x34\x38\
-\x2e\x37\x33\x37\x2c\x34\x34\x37\x2e\x39\x37\x39\x20\x09\x22\x2f\
-\x3e\x0a\x3c\x2f\x67\x3e\x0a\x3c\x2f\x73\x76\x67\x3e\x0a\
-\x00\x00\x03\x3d\
-\x3c\
-\x3f\x78\x6d\x6c\x20\x76\x65\x72\x73\x69\x6f\x6e\x3d\x22\x31\x2e\
-\x30\x22\x20\x65\x6e\x63\x6f\x64\x69\x6e\x67\x3d\x22\x75\x74\x66\
-\x2d\x38\x22\x3f\x3e\x0a\x3c\x21\x2d\x2d\x20\x47\x65\x6e\x65\x72\
-\x61\x74\x6f\x72\x3a\x20\x41\x64\x6f\x62\x65\x20\x49\x6c\x6c\x75\
-\x73\x74\x72\x61\x74\x6f\x72\x20\x31\x36\x2e\x32\x2e\x31\x2c\x20\
-\x53\x56\x47\x20\x45\x78\x70\x6f\x72\x74\x20\x50\x6c\x75\x67\x2d\
-\x49\x6e\x20\x2e\x20\x53\x56\x47\x20\x56\x65\x72\x73\x69\x6f\x6e\
-\x3a\x20\x36\x2e\x30\x30\x20\x42\x75\x69\x6c\x64\x20\x30\x29\x20\
-\x20\x2d\x2d\x3e\x0a\x3c\x21\x44\x4f\x43\x54\x59\x50\x45\x20\x73\
-\x76\x67\x20\x50\x55\x42\x4c\x49\x43\x20\x22\x2d\x2f\x2f\x57\x33\
-\x43\x2f\x2f\x44\x54\x44\x20\x53\x56\x47\x20\x31\x2e\x31\x2f\x2f\
-\x45\x4e\x22\x20\x22\x68\x74\x74\x70\x3a\x2f\x2f\x77\x77\x77\x2e\
-\x77\x33\x2e\x6f\x72\x67\x2f\x47\x72\x61\x70\x68\x69\x63\x73\x2f\
-\x53\x56\x47\x2f\x31\x2e\x31\x2f\x44\x54\x44\x2f\x73\x76\x67\x31\
-\x31\x2e\x64\x74\x64\x22\x3e\x0a\x3c\x73\x76\x67\x20\x76\x65\x72\
-\x73\x69\x6f\x6e\x3d\x22\x31\x2e\x31\x22\x20\x69\x64\x3d\x22\x4c\
-\x61\x79\x65\x72\x5f\x31\x22\x20\x78\x6d\x6c\x6e\x73\x3d\x22\x68\
-\x74\x74\x70\x3a\x2f\x2f\x77\x77\x77\x2e\x77\x33\x2e\x6f\x72\x67\
-\x2f\x32\x30\x30\x30\x2f\x73\x76\x67\x22\x20\x78\x6d\x6c\x6e\x73\
-\x3a\x78\x6c\x69\x6e\x6b\x3d\x22\x68\x74\x74\x70\x3a\x2f\x2f\x77\
-\x77\x77\x2e\x77\x33\x2e\x6f\x72\x67\x2f\x31\x39\x39\x39\x2f\x78\
-\x6c\x69\x6e\x6b\x22\x20\x78\x3d\x22\x30\x70\x78\x22\x20\x79\x3d\
-\x22\x30\x70\x78\x22\x0a\x09\x20\x77\x69\x64\x74\x68\x3d\x22\x35\
-\x31\x32\x70\x78\x22\x20\x68\x65\x69\x67\x68\x74\x3d\x22\x35\x31\
-\x32\x70\x78\x22\x20\x76\x69\x65\x77\x42\x6f\x78\x3d\x22\x30\x20\
-\x30\x20\x35\x31\x32\x20\x35\x31\x32\x22\x20\x73\x74\x79\x6c\x65\
-\x3d\x22\x65\x6e\x61\x62\x6c\x65\x2d\x62\x61\x63\x6b\x67\x72\x6f\
-\x75\x6e\x64\x3a\x6e\x65\x77\x20\x30\x20\x30\x20\x35\x31\x32\x20\
-\x35\x31\x32\x3b\x22\x20\x78\x6d\x6c\x3a\x73\x70\x61\x63\x65\x3d\
-\x22\x70\x72\x65\x73\x65\x72\x76\x65\x22\x3e\x0a\x3c\x70\x61\x74\
-\x68\x20\x64\x3d\x22\x4d\x34\x33\x37\x2e\x35\x2c\x33\x38\x36\x2e\
-\x36\x4c\x33\x30\x36\x2e\x39\x2c\x32\x35\x36\x6c\x31\x33\x30\x2e\
-\x36\x2d\x31\x33\x30\x2e\x36\x63\x31\x34\x2e\x31\x2d\x31\x34\x2e\
-\x31\x2c\x31\x34\x2e\x31\x2d\x33\x36\x2e\x38\x2c\x30\x2d\x35\x30\
-\x2e\x39\x63\x2d\x31\x34\x2e\x31\x2d\x31\x34\x2e\x31\x2d\x33\x36\
-\x2e\x38\x2d\x31\x34\x2e\x31\x2d\x35\x30\x2e\x39\x2c\x30\x4c\x32\
-\x35\x36\x2c\x32\x30\x35\x2e\x31\x4c\x31\x32\x35\x2e\x34\x2c\x37\
-\x34\x2e\x35\x0a\x09\x63\x2d\x31\x34\x2e\x31\x2d\x31\x34\x2e\x31\
-\x2d\x33\x36\x2e\x38\x2d\x31\x34\x2e\x31\x2d\x35\x30\x2e\x39\x2c\
-\x30\x63\x2d\x31\x34\x2e\x31\x2c\x31\x34\x2e\x31\x2d\x31\x34\x2e\
-\x31\x2c\x33\x36\x2e\x38\x2c\x30\x2c\x35\x30\x2e\x39\x4c\x32\x30\
-\x35\x2e\x31\x2c\x32\x35\x36\x4c\x37\x34\x2e\x35\x2c\x33\x38\x36\
-\x2e\x36\x63\x2d\x31\x34\x2e\x31\x2c\x31\x34\x2e\x31\x2d\x31\x34\
-\x2e\x31\x2c\x33\x36\x2e\x38\x2c\x30\x2c\x35\x30\x2e\x39\x0a\x09\
-\x63\x31\x34\x2e\x31\x2c\x31\x34\x2e\x31\x2c\x33\x36\x2e\x38\x2c\
-\x31\x34\x2e\x31\x2c\x35\x30\x2e\x39\x2c\x30\x4c\x32\x35\x36\x2c\
-\x33\x30\x36\x2e\x39\x6c\x31\x33\x30\x2e\x36\x2c\x31\x33\x30\x2e\
-\x36\x63\x31\x34\x2e\x31\x2c\x31\x34\x2e\x31\x2c\x33\x36\x2e\x38\
-\x2c\x31\x34\x2e\x31\x2c\x35\x30\x2e\x39\x2c\x30\x43\x34\x35\x31\
-\x2e\x35\x2c\x34\x32\x33\x2e\x34\x2c\x34\x35\x31\x2e\x35\x2c\x34\
-\x30\x30\x2e\x36\x2c\x34\x33\x37\x2e\x35\x2c\x33\x38\x36\x2e\x36\
-\x7a\x22\x2f\x3e\x0a\x3c\x2f\x73\x76\x67\x3e\x0a\
-\x00\x00\x02\xee\
-\x3c\
-\x3f\x78\x6d\x6c\x20\x76\x65\x72\x73\x69\x6f\x6e\x3d\x22\x31\x2e\
-\x30\x22\x20\x65\x6e\x63\x6f\x64\x69\x6e\x67\x3d\x22\x75\x74\x66\
-\x2d\x38\x22\x3f\x3e\x0a\x3c\x21\x2d\x2d\x20\x47\x65\x6e\x65\x72\
-\x61\x74\x6f\x72\x3a\x20\x41\x64\x6f\x62\x65\x20\x49\x6c\x6c\x75\
-\x73\x74\x72\x61\x74\x6f\x72\x20\x31\x36\x2e\x32\x2e\x31\x2c\x20\
-\x53\x56\x47\x20\x45\x78\x70\x6f\x72\x74\x20\x50\x6c\x75\x67\x2d\
-\x49\x6e\x20\x2e\x20\x53\x56\x47\x20\x56\x65\x72\x73\x69\x6f\x6e\
-\x3a\x20\x36\x2e\x30\x30\x20\x42\x75\x69\x6c\x64\x20\x30\x29\x20\
-\x20\x2d\x2d\x3e\x0a\x3c\x21\x44\x4f\x43\x54\x59\x50\x45\x20\x73\
-\x76\x67\x20\x50\x55\x42\x4c\x49\x43\x20\x22\x2d\x2f\x2f\x57\x33\
-\x43\x2f\x2f\x44\x54\x44\x20\x53\x56\x47\x20\x31\x2e\x31\x2f\x2f\
-\x45\x4e\x22\x20\x22\x68\x74\x74\x70\x3a\x2f\x2f\x77\x77\x77\x2e\
-\x77\x33\x2e\x6f\x72\x67\x2f\x47\x72\x61\x70\x68\x69\x63\x73\x2f\
-\x53\x56\x47\x2f\x31\x2e\x31\x2f\x44\x54\x44\x2f\x73\x76\x67\x31\
-\x31\x2e\x64\x74\x64\x22\x3e\x0a\x3c\x73\x76\x67\x20\x76\x65\x72\
-\x73\x69\x6f\x6e\x3d\x22\x31\x2e\x31\x22\x20\x69\x64\x3d\x22\x4c\
-\x61\x79\x65\x72\x5f\x31\x22\x20\x78\x6d\x6c\x6e\x73\x3d\x22\x68\
-\x74\x74\x70\x3a\x2f\x2f\x77\x77\x77\x2e\x77\x33\x2e\x6f\x72\x67\
-\x2f\x32\x30\x30\x30\x2f\x73\x76\x67\x22\x20\x78\x6d\x6c\x6e\x73\
-\x3a\x78\x6c\x69\x6e\x6b\x3d\x22\x68\x74\x74\x70\x3a\x2f\x2f\x77\
-\x77\x77\x2e\x77\x33\x2e\x6f\x72\x67\x2f\x31\x39\x39\x39\x2f\x78\
-\x6c\x69\x6e\x6b\x22\x20\x78\x3d\x22\x30\x70\x78\x22\x20\x79\x3d\
-\x22\x30\x70\x78\x22\x0a\x09\x20\x77\x69\x64\x74\x68\x3d\x22\x35\
-\x31\x32\x70\x78\x22\x20\x68\x65\x69\x67\x68\x74\x3d\x22\x35\x31\
-\x32\x70\x78\x22\x20\x76\x69\x65\x77\x42\x6f\x78\x3d\x22\x30\x20\
-\x30\x20\x35\x31\x32\x20\x35\x31\x32\x22\x20\x73\x74\x79\x6c\x65\
-\x3d\x22\x65\x6e\x61\x62\x6c\x65\x2d\x62\x61\x63\x6b\x67\x72\x6f\
-\x75\x6e\x64\x3a\x6e\x65\x77\x20\x30\x20\x30\x20\x35\x31\x32\x20\
-\x35\x31\x32\x3b\x22\x20\x78\x6d\x6c\x3a\x73\x70\x61\x63\x65\x3d\
-\x22\x70\x72\x65\x73\x65\x72\x76\x65\x22\x3e\x0a\x3c\x70\x61\x74\
-\x68\x20\x64\x3d\x22\x4d\x34\x31\x37\x2e\x34\x2c\x32\x32\x34\x48\
-\x32\x38\x38\x56\x39\x34\x2e\x36\x63\x30\x2d\x31\x36\x2e\x39\x2d\
-\x31\x34\x2e\x33\x2d\x33\x30\x2e\x36\x2d\x33\x32\x2d\x33\x30\x2e\
-\x36\x63\x2d\x31\x37\x2e\x37\x2c\x30\x2d\x33\x32\x2c\x31\x33\x2e\
-\x37\x2d\x33\x32\x2c\x33\x30\x2e\x36\x56\x32\x32\x34\x48\x39\x34\
-\x2e\x36\x43\x37\x37\x2e\x37\x2c\x32\x32\x34\x2c\x36\x34\x2c\x32\
-\x33\x38\x2e\x33\x2c\x36\x34\x2c\x32\x35\x36\x0a\x09\x63\x30\x2c\
-\x31\x37\x2e\x37\x2c\x31\x33\x2e\x37\x2c\x33\x32\x2c\x33\x30\x2e\
-\x36\x2c\x33\x32\x48\x32\x32\x34\x76\x31\x32\x39\x2e\x34\x63\x30\
-\x2c\x31\x36\x2e\x39\x2c\x31\x34\x2e\x33\x2c\x33\x30\x2e\x36\x2c\
-\x33\x32\x2c\x33\x30\x2e\x36\x63\x31\x37\x2e\x37\x2c\x30\x2c\x33\
-\x32\x2d\x31\x33\x2e\x37\x2c\x33\x32\x2d\x33\x30\x2e\x36\x56\x32\
-\x38\x38\x68\x31\x32\x39\x2e\x34\x63\x31\x36\x2e\x39\x2c\x30\x2c\
-\x33\x30\x2e\x36\x2d\x31\x34\x2e\x33\x2c\x33\x30\x2e\x36\x2d\x33\
-\x32\x0a\x09\x43\x34\x34\x38\x2c\x32\x33\x38\x2e\x33\x2c\x34\x33\
-\x34\x2e\x33\x2c\x32\x32\x34\x2c\x34\x31\x37\x2e\x34\x2c\x32\x32\
-\x34\x7a\x22\x2f\x3e\x0a\x3c\x2f\x73\x76\x67\x3e\x0a\
-\x00\x00\x03\x1b\
-\x3c\
-\x3f\x78\x6d\x6c\x20\x76\x65\x72\x73\x69\x6f\x6e\x3d\x22\x31\x2e\
-\x30\x22\x20\x65\x6e\x63\x6f\x64\x69\x6e\x67\x3d\x22\x75\x74\x66\
-\x2d\x38\x22\x3f\x3e\x0a\x3c\x21\x2d\x2d\x20\x47\x65\x6e\x65\x72\
-\x61\x74\x6f\x72\x3a\x20\x41\x64\x6f\x62\x65\x20\x49\x6c\x6c\x75\
-\x73\x74\x72\x61\x74\x6f\x72\x20\x31\x36\x2e\x32\x2e\x31\x2c\x20\
-\x53\x56\x47\x20\x45\x78\x70\x6f\x72\x74\x20\x50\x6c\x75\x67\x2d\
-\x49\x6e\x20\x2e\x20\x53\x56\x47\x20\x56\x65\x72\x73\x69\x6f\x6e\
-\x3a\x20\x36\x2e\x30\x30\x20\x42\x75\x69\x6c\x64\x20\x30\x29\x20\
-\x20\x2d\x2d\x3e\x0a\x3c\x21\x44\x4f\x43\x54\x59\x50\x45\x20\x73\
-\x76\x67\x20\x50\x55\x42\x4c\x49\x43\x20\x22\x2d\x2f\x2f\x57\x33\
-\x43\x2f\x2f\x44\x54\x44\x20\x53\x56\x47\x20\x31\x2e\x31\x2f\x2f\
-\x45\x4e\x22\x20\x22\x68\x74\x74\x70\x3a\x2f\x2f\x77\x77\x77\x2e\
-\x77\x33\x2e\x6f\x72\x67\x2f\x47\x72\x61\x70\x68\x69\x63\x73\x2f\
-\x53\x56\x47\x2f\x31\x2e\x31\x2f\x44\x54\x44\x2f\x73\x76\x67\x31\
-\x31\x2e\x64\x74\x64\x22\x3e\x0a\x3c\x73\x76\x67\x20\x76\x65\x72\
-\x73\x69\x6f\x6e\x3d\x22\x31\x2e\x31\x22\x20\x69\x64\x3d\x22\x4c\
-\x61\x79\x65\x72\x5f\x31\x22\x20\x78\x6d\x6c\x6e\x73\x3d\x22\x68\
-\x74\x74\x70\x3a\x2f\x2f\x77\x77\x77\x2e\x77\x33\x2e\x6f\x72\x67\
-\x2f\x32\x30\x30\x30\x2f\x73\x76\x67\x22\x20\x78\x6d\x6c\x6e\x73\
-\x3a\x78\x6c\x69\x6e\x6b\x3d\x22\x68\x74\x74\x70\x3a\x2f\x2f\x77\
-\x77\x77\x2e\x77\x33\x2e\x6f\x72\x67\x2f\x31\x39\x39\x39\x2f\x78\
-\x6c\x69\x6e\x6b\x22\x20\x78\x3d\x22\x30\x70\x78\x22\x20\x79\x3d\
-\x22\x30\x70\x78\x22\x0a\x09\x20\x77\x69\x64\x74\x68\x3d\x22\x35\
-\x31\x32\x70\x78\x22\x20\x68\x65\x69\x67\x68\x74\x3d\x22\x35\x31\
-\x32\x70\x78\x22\x20\x76\x69\x65\x77\x42\x6f\x78\x3d\x22\x30\x20\
-\x30\x20\x35\x31\x32\x20\x35\x31\x32\x22\x20\x65\x6e\x61\x62\x6c\
-\x65\x2d\x62\x61\x63\x6b\x67\x72\x6f\x75\x6e\x64\x3d\x22\x6e\x65\
-\x77\x20\x30\x20\x30\x20\x35\x31\x32\x20\x35\x31\x32\x22\x20\x78\
-\x6d\x6c\x3a\x73\x70\x61\x63\x65\x3d\x22\x70\x72\x65\x73\x65\x72\
-\x76\x65\x22\x3e\x0a\x3c\x67\x3e\x0a\x09\x3c\x70\x61\x74\x68\x20\
-\x64\x3d\x22\x4d\x32\x35\x36\x2c\x33\x38\x38\x63\x2d\x37\x32\x2e\
-\x35\x39\x37\x2c\x30\x2d\x31\x33\x32\x2d\x35\x39\x2e\x34\x30\x35\
-\x2d\x31\x33\x32\x2d\x31\x33\x32\x63\x30\x2d\x37\x32\x2e\x36\x30\
-\x31\x2c\x35\x39\x2e\x34\x30\x33\x2d\x31\x33\x32\x2c\x31\x33\x32\
-\x2d\x31\x33\x32\x63\x33\x36\x2e\x33\x2c\x30\x2c\x36\x39\x2e\x32\
-\x39\x39\x2c\x31\x35\x2e\x34\x2c\x39\x32\x2e\x34\x30\x36\x2c\x33\
-\x39\x2e\x36\x30\x31\x4c\x32\x37\x38\x2c\x32\x33\x34\x68\x31\x35\
-\x34\x56\x38\x30\x0a\x09\x09\x6c\x2d\x35\x31\x2e\x36\x39\x38\x2c\
-\x35\x31\x2e\x37\x30\x32\x43\x33\x34\x38\x2e\x34\x30\x36\x2c\x39\
-\x39\x2e\x37\x39\x38\x2c\x33\x30\x34\x2e\x34\x30\x36\x2c\x38\x30\
-\x2c\x32\x35\x36\x2c\x38\x30\x63\x2d\x39\x36\x2e\x37\x39\x37\x2c\
-\x30\x2d\x31\x37\x36\x2c\x37\x39\x2e\x32\x30\x33\x2d\x31\x37\x36\
-\x2c\x31\x37\x36\x73\x37\x38\x2e\x30\x39\x34\x2c\x31\x37\x36\x2c\
-\x31\x37\x36\x2c\x31\x37\x36\x0a\x09\x09\x63\x38\x31\x2e\x30\x34\
-\x35\x2c\x30\x2c\x31\x34\x38\x2e\x32\x38\x37\x2d\x35\x34\x2e\x31\
-\x33\x34\x2c\x31\x36\x39\x2e\x34\x30\x31\x2d\x31\x32\x38\x48\x33\
-\x37\x38\x2e\x38\x35\x43\x33\x36\x30\x2e\x31\x30\x35\x2c\x33\x35\
-\x33\x2e\x35\x36\x31\x2c\x33\x31\x31\x2e\x37\x31\x32\x2c\x33\x38\
-\x38\x2c\x32\x35\x36\x2c\x33\x38\x38\x7a\x22\x2f\x3e\x0a\x3c\x2f\
-\x67\x3e\x0a\x3c\x2f\x73\x76\x67\x3e\x0a\
-\x00\x00\x02\xc1\
-\x3c\
-\x3f\x78\x6d\x6c\x20\x76\x65\x72\x73\x69\x6f\x6e\x3d\x22\x31\x2e\
-\x30\x22\x20\x65\x6e\x63\x6f\x64\x69\x6e\x67\x3d\x22\x75\x74\x66\
-\x2d\x38\x22\x3f\x3e\x0a\x3c\x21\x2d\x2d\x20\x47\x65\x6e\x65\x72\
-\x61\x74\x6f\x72\x3a\x20\x41\x64\x6f\x62\x65\x20\x49\x6c\x6c\x75\
-\x73\x74\x72\x61\x74\x6f\x72\x20\x31\x36\x2e\x32\x2e\x31\x2c\x20\
-\x53\x56\x47\x20\x45\x78\x70\x6f\x72\x74\x20\x50\x6c\x75\x67\x2d\
-\x49\x6e\x20\x2e\x20\x53\x56\x47\x20\x56\x65\x72\x73\x69\x6f\x6e\
-\x3a\x20\x36\x2e\x30\x30\x20\x42\x75\x69\x6c\x64\x20\x30\x29\x20\
-\x20\x2d\x2d\x3e\x0a\x3c\x21\x44\x4f\x43\x54\x59\x50\x45\x20\x73\
-\x76\x67\x20\x50\x55\x42\x4c\x49\x43\x20\x22\x2d\x2f\x2f\x57\x33\
-\x43\x2f\x2f\x44\x54\x44\x20\x53\x56\x47\x20\x31\x2e\x31\x2f\x2f\
-\x45\x4e\x22\x20\x22\x68\x74\x74\x70\x3a\x2f\x2f\x77\x77\x77\x2e\
-\x77\x33\x2e\x6f\x72\x67\x2f\x47\x72\x61\x70\x68\x69\x63\x73\x2f\
-\x53\x56\x47\x2f\x31\x2e\x31\x2f\x44\x54\x44\x2f\x73\x76\x67\x31\
-\x31\x2e\x64\x74\x64\x22\x3e\x0a\x3c\x73\x76\x67\x20\x76\x65\x72\
-\x73\x69\x6f\x6e\x3d\x22\x31\x2e\x31\x22\x20\x69\x64\x3d\x22\x4c\
-\x61\x79\x65\x72\x5f\x31\x22\x20\x78\x6d\x6c\x6e\x73\x3d\x22\x68\
-\x74\x74\x70\x3a\x2f\x2f\x77\x77\x77\x2e\x77\x33\x2e\x6f\x72\x67\
-\x2f\x32\x30\x30\x30\x2f\x73\x76\x67\x22\x20\x78\x6d\x6c\x6e\x73\
-\x3a\x78\x6c\x69\x6e\x6b\x3d\x22\x68\x74\x74\x70\x3a\x2f\x2f\x77\
-\x77\x77\x2e\x77\x33\x2e\x6f\x72\x67\x2f\x31\x39\x39\x39\x2f\x78\
-\x6c\x69\x6e\x6b\x22\x20\x78\x3d\x22\x30\x70\x78\x22\x20\x79\x3d\
-\x22\x30\x70\x78\x22\x0a\x09\x20\x77\x69\x64\x74\x68\x3d\x22\x35\
-\x31\x32\x70\x78\x22\x20\x68\x65\x69\x67\x68\x74\x3d\x22\x35\x31\
-\x32\x70\x78\x22\x20\x76\x69\x65\x77\x42\x6f\x78\x3d\x22\x30\x20\
-\x30\x20\x35\x31\x32\x20\x35\x31\x32\x22\x20\x73\x74\x79\x6c\x65\
-\x3d\x22\x65\x6e\x61\x62\x6c\x65\x2d\x62\x61\x63\x6b\x67\x72\x6f\
-\x75\x6e\x64\x3a\x6e\x65\x77\x20\x30\x20\x30\x20\x35\x31\x32\x20\
-\x35\x31\x32\x3b\x22\x20\x78\x6d\x6c\x3a\x73\x70\x61\x63\x65\x3d\
-\x22\x70\x72\x65\x73\x65\x72\x76\x65\x22\x3e\x0a\x3c\x70\x6f\x6c\
-\x79\x67\x6f\x6e\x20\x70\x6f\x69\x6e\x74\x73\x3d\x22\x34\x38\x30\
-\x2c\x32\x35\x36\x20\x33\x38\x34\x2c\x31\x36\x30\x20\x33\x38\x34\
-\x2c\x32\x33\x36\x20\x32\x37\x36\x2c\x32\x33\x36\x20\x32\x37\x36\
-\x2c\x31\x32\x38\x20\x33\x35\x32\x2c\x31\x32\x38\x20\x32\x35\x36\
-\x2c\x33\x32\x20\x31\x36\x30\x2c\x31\x32\x38\x20\x32\x33\x36\x2c\
-\x31\x32\x38\x20\x32\x33\x36\x2c\x32\x33\x36\x20\x31\x32\x38\x2c\
-\x32\x33\x36\x20\x31\x32\x38\x2c\x31\x36\x30\x20\x33\x32\x2c\x32\
-\x35\x36\x20\x31\x32\x38\x2c\x33\x35\x32\x20\x0a\x09\x31\x32\x38\
-\x2c\x32\x37\x36\x20\x32\x33\x36\x2c\x32\x37\x36\x20\x32\x33\x36\
-\x2c\x33\x38\x34\x20\x31\x36\x30\x2c\x33\x38\x34\x20\x32\x35\x36\
-\x2c\x34\x38\x30\x20\x33\x35\x32\x2c\x33\x38\x34\x20\x32\x37\x35\
-\x2e\x38\x2c\x33\x38\x34\x20\x32\x37\x35\x2e\x34\x2c\x32\x37\x35\
-\x2e\x35\x20\x33\x38\x34\x2c\x32\x37\x35\x2e\x38\x20\x33\x38\x34\
-\x2c\x33\x35\x32\x20\x22\x2f\x3e\x0a\x3c\x2f\x73\x76\x67\x3e\x0a\
-\
-\x00\x00\x07\x6b\
-\x3c\
-\x3f\x78\x6d\x6c\x20\x76\x65\x72\x73\x69\x6f\x6e\x3d\x22\x31\x2e\
-\x30\x22\x20\x65\x6e\x63\x6f\x64\x69\x6e\x67\x3d\x22\x75\x74\x66\
-\x2d\x38\x22\x3f\x3e\x0a\x3c\x21\x2d\x2d\x20\x47\x65\x6e\x65\x72\
-\x61\x74\x6f\x72\x3a\x20\x41\x64\x6f\x62\x65\x20\x49\x6c\x6c\x75\
-\x73\x74\x72\x61\x74\x6f\x72\x20\x31\x36\x2e\x32\x2e\x31\x2c\x20\
-\x53\x56\x47\x20\x45\x78\x70\x6f\x72\x74\x20\x50\x6c\x75\x67\x2d\
-\x49\x6e\x20\x2e\x20\x53\x56\x47\x20\x56\x65\x72\x73\x69\x6f\x6e\
-\x3a\x20\x36\x2e\x30\x30\x20\x42\x75\x69\x6c\x64\x20\x30\x29\x20\
-\x20\x2d\x2d\x3e\x0a\x3c\x21\x44\x4f\x43\x54\x59\x50\x45\x20\x73\
-\x76\x67\x20\x50\x55\x42\x4c\x49\x43\x20\x22\x2d\x2f\x2f\x57\x33\
-\x43\x2f\x2f\x44\x54\x44\x20\x53\x56\x47\x20\x31\x2e\x31\x2f\x2f\
-\x45\x4e\x22\x20\x22\x68\x74\x74\x70\x3a\x2f\x2f\x77\x77\x77\x2e\
-\x77\x33\x2e\x6f\x72\x67\x2f\x47\x72\x61\x70\x68\x69\x63\x73\x2f\
-\x53\x56\x47\x2f\x31\x2e\x31\x2f\x44\x54\x44\x2f\x73\x76\x67\x31\
-\x31\x2e\x64\x74\x64\x22\x3e\x0a\x3c\x73\x76\x67\x20\x76\x65\x72\
-\x73\x69\x6f\x6e\x3d\x22\x31\x2e\x31\x22\x20\x69\x64\x3d\x22\x4c\
-\x61\x79\x65\x72\x5f\x31\x22\x20\x78\x6d\x6c\x6e\x73\x3d\x22\x68\
-\x74\x74\x70\x3a\x2f\x2f\x77\x77\x77\x2e\x77\x33\x2e\x6f\x72\x67\
-\x2f\x32\x30\x30\x30\x2f\x73\x76\x67\x22\x20\x78\x6d\x6c\x6e\x73\
-\x3a\x78\x6c\x69\x6e\x6b\x3d\x22\x68\x74\x74\x70\x3a\x2f\x2f\x77\
-\x77\x77\x2e\x77\x33\x2e\x6f\x72\x67\x2f\x31\x39\x39\x39\x2f\x78\
-\x6c\x69\x6e\x6b\x22\x20\x78\x3d\x22\x30\x70\x78\x22\x20\x79\x3d\
-\x22\x30\x70\x78\x22\x0a\x09\x20\x77\x69\x64\x74\x68\x3d\x22\x35\
-\x31\x32\x70\x78\x22\x20\x68\x65\x69\x67\x68\x74\x3d\x22\x35\x31\
-\x32\x70\x78\x22\x20\x76\x69\x65\x77\x42\x6f\x78\x3d\x22\x30\x20\
-\x30\x20\x35\x31\x32\x20\x35\x31\x32\x22\x20\x65\x6e\x61\x62\x6c\
-\x65\x2d\x62\x61\x63\x6b\x67\x72\x6f\x75\x6e\x64\x3d\x22\x6e\x65\
-\x77\x20\x30\x20\x30\x20\x35\x31\x32\x20\x35\x31\x32\x22\x20\x78\
-\x6d\x6c\x3a\x73\x70\x61\x63\x65\x3d\x22\x70\x72\x65\x73\x65\x72\
-\x76\x65\x22\x3e\x0a\x3c\x67\x3e\x0a\x09\x3c\x70\x61\x74\x68\x20\
-\x64\x3d\x22\x4d\x31\x39\x33\x2e\x34\x36\x2c\x32\x34\x39\x2e\x30\
-\x35\x36\x63\x33\x2e\x37\x32\x33\x2d\x30\x2e\x36\x37\x2c\x37\x2e\
-\x35\x38\x39\x2d\x31\x2e\x30\x34\x31\x2c\x31\x31\x2e\x35\x38\x36\
-\x2d\x31\x2e\x30\x34\x31\x4c\x32\x30\x31\x2e\x39\x32\x34\x2c\x32\
-\x34\x38\x68\x31\x30\x33\x2e\x38\x32\x33\x63\x34\x2e\x35\x30\x33\
-\x2c\x30\x2c\x38\x2e\x38\x30\x36\x2d\x30\x2e\x36\x31\x37\x2c\x31\
-\x32\x2e\x39\x30\x38\x2d\x31\x2e\x37\x35\x34\x0a\x09\x09\x63\x31\
-\x39\x2e\x33\x37\x2d\x35\x2e\x33\x36\x33\x2c\x33\x33\x2e\x33\x34\
-\x35\x2d\x32\x32\x2e\x35\x33\x37\x2c\x33\x33\x2e\x33\x34\x35\x2d\
-\x34\x33\x2e\x36\x36\x33\x76\x2d\x33\x30\x2e\x38\x32\x32\x76\x2d\
-\x35\x36\x2e\x34\x30\x32\x63\x30\x2d\x32\x34\x2e\x38\x33\x32\x2d\
-\x32\x31\x2e\x31\x35\x2d\x34\x33\x2e\x34\x38\x34\x2d\x34\x36\x2e\
-\x32\x38\x39\x2d\x34\x37\x2e\x36\x30\x36\x0a\x09\x09\x63\x2d\x31\
-\x35\x2e\x39\x33\x31\x2d\x32\x2e\x36\x32\x34\x2d\x33\x39\x2e\x32\
-\x35\x38\x2d\x33\x2e\x38\x32\x37\x2d\x35\x35\x2e\x30\x38\x39\x2d\
-\x33\x2e\x37\x34\x39\x63\x2d\x31\x35\x2e\x38\x32\x39\x2c\x30\x2e\
-\x30\x38\x36\x2d\x33\x30\x2e\x39\x38\x31\x2c\x31\x2e\x34\x30\x34\
-\x2d\x34\x34\x2e\x32\x37\x37\x2c\x33\x2e\x37\x34\x39\x43\x31\x36\
-\x37\x2e\x31\x34\x33\x2c\x37\x34\x2e\x35\x37\x36\x2c\x31\x36\x30\
-\x2c\x38\x38\x2e\x39\x32\x38\x2c\x31\x36\x30\x2c\x31\x31\x35\x2e\
-\x33\x35\x39\x56\x31\x34\x34\x68\x39\x36\x0a\x09\x09\x76\x31\x36\
-\x48\x31\x32\x38\x2e\x38\x32\x63\x2d\x33\x35\x2e\x36\x32\x38\x2c\
-\x30\x2d\x36\x34\x2e\x35\x33\x38\x2c\x34\x32\x2e\x35\x37\x31\x2d\
-\x36\x34\x2e\x38\x31\x33\x2c\x39\x35\x2e\x32\x34\x32\x43\x36\x34\
-\x2e\x30\x30\x35\x2c\x32\x35\x35\x2e\x34\x39\x35\x2c\x36\x34\x2c\
-\x32\x35\x35\x2e\x37\x34\x37\x2c\x36\x34\x2c\x32\x35\x36\x63\x30\
-\x2c\x39\x2e\x35\x32\x33\x2c\x30\x2e\x39\x34\x2c\x31\x38\x2e\x37\
-\x32\x2c\x32\x2e\x36\x38\x35\x2c\x32\x37\x2e\x34\x30\x34\x0a\x09\
-\x09\x43\x37\x34\x2e\x36\x34\x38\x2c\x33\x32\x33\x2e\x30\x37\x2c\
-\x39\x39\x2e\x34\x35\x31\x2c\x33\x35\x32\x2c\x31\x32\x38\x2e\x38\
-\x32\x2c\x33\x35\x32\x48\x31\x34\x34\x76\x2d\x32\x2e\x36\x36\x32\
-\x76\x2d\x34\x33\x2e\x32\x37\x33\x43\x31\x34\x34\x2c\x32\x37\x39\
-\x2e\x32\x33\x38\x2c\x31\x36\x34\x2e\x31\x34\x36\x2c\x32\x35\x34\
-\x2e\x33\x33\x32\x2c\x31\x39\x33\x2e\x34\x36\x2c\x32\x34\x39\x2e\
-\x30\x35\x36\x7a\x20\x4d\x32\x30\x33\x2e\x36\x35\x36\x2c\x31\x32\
-\x37\x2e\x30\x30\x32\x0a\x09\x09\x63\x2d\x39\x2e\x35\x39\x32\x2c\
-\x30\x2d\x31\x37\x2e\x33\x38\x34\x2d\x37\x2e\x37\x38\x35\x2d\x31\
-\x37\x2e\x33\x38\x34\x2d\x31\x37\x2e\x34\x30\x33\x63\x30\x2d\x39\
-\x2e\x36\x36\x34\x2c\x37\x2e\x37\x37\x34\x2d\x31\x37\x2e\x35\x32\
-\x2c\x31\x37\x2e\x33\x38\x34\x2d\x31\x37\x2e\x35\x32\x63\x39\x2e\
-\x35\x37\x34\x2c\x30\x2c\x31\x37\x2e\x33\x39\x39\x2c\x37\x2e\x38\
-\x35\x35\x2c\x31\x37\x2e\x33\x39\x39\x2c\x31\x37\x2e\x35\x32\x0a\
-\x09\x09\x43\x32\x32\x31\x2e\x30\x35\x36\x2c\x31\x31\x39\x2e\x32\
-\x31\x37\x2c\x32\x31\x33\x2e\x32\x34\x36\x2c\x31\x32\x37\x2e\x30\
-\x30\x32\x2c\x32\x30\x33\x2e\x36\x35\x36\x2c\x31\x32\x37\x2e\x30\
-\x30\x32\x7a\x22\x2f\x3e\x0a\x09\x3c\x70\x61\x74\x68\x20\x64\x3d\
-\x22\x4d\x34\x34\x33\x2e\x39\x35\x31\x2c\x32\x32\x32\x2e\x35\x34\
-\x33\x43\x34\x33\x34\x2e\x37\x38\x2c\x31\x38\x36\x2e\x30\x32\x31\
-\x2c\x34\x31\x31\x2e\x30\x33\x33\x2c\x31\x36\x30\x2c\x33\x38\x33\
-\x2e\x31\x38\x2c\x31\x36\x30\x48\x33\x36\x38\x76\x32\x2e\x36\x32\
-\x36\x76\x33\x38\x2e\x30\x34\x36\x63\x30\x2c\x33\x33\x2e\x39\x31\
-\x35\x2d\x32\x32\x2e\x32\x38\x36\x2c\x35\x38\x2e\x34\x37\x34\x2d\
-\x34\x39\x2e\x34\x38\x39\x2c\x36\x32\x2e\x36\x38\x31\x0a\x09\x09\
-\x63\x2d\x32\x2e\x37\x33\x37\x2c\x30\x2e\x34\x32\x34\x2d\x35\x2e\
-\x34\x38\x33\x2c\x30\x2e\x36\x34\x36\x2d\x38\x2e\x33\x30\x31\x2c\
-\x30\x2e\x36\x34\x36\x48\x32\x30\x36\x2e\x33\x35\x31\x63\x2d\x34\
-\x2e\x35\x31\x38\x2c\x30\x2d\x38\x2e\x39\x30\x34\x2c\x30\x2e\x35\
-\x38\x34\x2d\x31\x33\x2e\x30\x34\x39\x2c\x31\x2e\x36\x37\x32\x43\
-\x31\x37\x34\x2e\x31\x38\x2c\x32\x37\x30\x2e\x36\x38\x39\x2c\x31\
-\x36\x30\x2c\x32\x38\x36\x2e\x36\x2c\x31\x36\x30\x2c\x33\x30\x37\
-\x2e\x32\x33\x36\x76\x33\x32\x2e\x39\x32\x32\x0a\x09\x09\x76\x35\
-\x34\x2e\x33\x30\x35\x63\x30\x2c\x32\x34\x2e\x38\x33\x32\x2c\x32\
-\x34\x2e\x39\x37\x37\x2c\x33\x39\x2e\x34\x32\x36\x2c\x34\x39\x2e\
-\x34\x38\x31\x2c\x34\x36\x2e\x35\x35\x31\x63\x32\x39\x2e\x33\x32\
-\x37\x2c\x38\x2e\x35\x33\x31\x2c\x36\x31\x2e\x32\x36\x37\x2c\x31\
-\x30\x2e\x30\x36\x38\x2c\x39\x36\x2e\x33\x36\x36\x2c\x30\x43\x33\
-\x32\x39\x2e\x31\x35\x2c\x34\x33\x34\x2e\x33\x35\x34\x2c\x33\x35\
-\x32\x2c\x34\x32\x30\x2e\x38\x39\x33\x2c\x33\x35\x32\x2c\x33\x39\
-\x34\x2e\x34\x36\x33\x56\x33\x36\x38\x0a\x09\x09\x68\x2d\x39\x36\
-\x76\x2d\x31\x36\x68\x31\x32\x37\x2e\x31\x38\x63\x32\x35\x2e\x32\
-\x34\x2c\x30\x2c\x34\x37\x2e\x31\x30\x37\x2d\x32\x31\x2e\x33\x36\
-\x35\x2c\x35\x37\x2e\x38\x31\x34\x2d\x35\x32\x2e\x35\x34\x39\x43\
-\x34\x34\x35\x2e\x34\x37\x34\x2c\x32\x38\x36\x2e\x34\x30\x34\x2c\
-\x34\x34\x38\x2c\x32\x37\x31\x2e\x36\x34\x31\x2c\x34\x34\x38\x2c\
-\x32\x35\x36\x0a\x09\x09\x43\x34\x34\x38\x2c\x32\x34\x34\x2e\x32\
-\x33\x32\x2c\x34\x34\x36\x2e\x35\x36\x37\x2c\x32\x33\x32\x2e\x39\
-\x36\x32\x2c\x34\x34\x33\x2e\x39\x35\x31\x2c\x32\x32\x32\x2e\x35\
-\x34\x33\x7a\x20\x4d\x33\x30\x37\x2e\x38\x36\x37\x2c\x33\x38\x32\
-\x2e\x38\x32\x63\x39\x2e\x35\x39\x2c\x30\x2c\x31\x37\x2e\x33\x38\
-\x31\x2c\x37\x2e\x37\x38\x35\x2c\x31\x37\x2e\x33\x38\x31\x2c\x31\
-\x37\x2e\x34\x0a\x09\x09\x63\x30\x2c\x39\x2e\x36\x35\x2d\x37\x2e\
-\x37\x39\x31\x2c\x31\x37\x2e\x35\x32\x31\x2d\x31\x37\x2e\x33\x38\
-\x31\x2c\x31\x37\x2e\x35\x32\x31\x63\x2d\x39\x2e\x35\x37\x37\x2c\
-\x30\x2d\x31\x37\x2e\x33\x39\x39\x2d\x37\x2e\x38\x37\x31\x2d\x31\
-\x37\x2e\x33\x39\x39\x2d\x31\x37\x2e\x35\x32\x31\x43\x32\x39\x30\
-\x2e\x34\x36\x38\x2c\x33\x39\x30\x2e\x35\x39\x2c\x32\x39\x38\x2e\
-\x32\x37\x34\x2c\x33\x38\x32\x2e\x38\x32\x2c\x33\x30\x37\x2e\x38\
-\x36\x37\x2c\x33\x38\x32\x2e\x38\x32\x7a\x22\x2f\x3e\x0a\x3c\x2f\
-\x67\x3e\x0a\x3c\x2f\x73\x76\x67\x3e\x0a\
-\x00\x00\x02\x72\
-\x3c\
-\x3f\x78\x6d\x6c\x20\x76\x65\x72\x73\x69\x6f\x6e\x3d\x22\x31\x2e\
-\x30\x22\x20\x65\x6e\x63\x6f\x64\x69\x6e\x67\x3d\x22\x75\x74\x66\
-\x2d\x38\x22\x3f\x3e\x0a\x3c\x21\x2d\x2d\x20\x47\x65\x6e\x65\x72\
-\x61\x74\x6f\x72\x3a\x20\x41\x64\x6f\x62\x65\x20\x49\x6c\x6c\x75\
-\x73\x74\x72\x61\x74\x6f\x72\x20\x31\x36\x2e\x32\x2e\x31\x2c\x20\
-\x53\x56\x47\x20\x45\x78\x70\x6f\x72\x74\x20\x50\x6c\x75\x67\x2d\
-\x49\x6e\x20\x2e\x20\x53\x56\x47\x20\x56\x65\x72\x73\x69\x6f\x6e\
-\x3a\x20\x36\x2e\x30\x30\x20\x42\x75\x69\x6c\x64\x20\x30\x29\x20\
-\x20\x2d\x2d\x3e\x0a\x3c\x21\x44\x4f\x43\x54\x59\x50\x45\x20\x73\
-\x76\x67\x20\x50\x55\x42\x4c\x49\x43\x20\x22\x2d\x2f\x2f\x57\x33\
-\x43\x2f\x2f\x44\x54\x44\x20\x53\x56\x47\x20\x31\x2e\x31\x2f\x2f\
-\x45\x4e\x22\x20\x22\x68\x74\x74\x70\x3a\x2f\x2f\x77\x77\x77\x2e\
-\x77\x33\x2e\x6f\x72\x67\x2f\x47\x72\x61\x70\x68\x69\x63\x73\x2f\
-\x53\x56\x47\x2f\x31\x2e\x31\x2f\x44\x54\x44\x2f\x73\x76\x67\x31\
-\x31\x2e\x64\x74\x64\x22\x3e\x0a\x3c\x73\x76\x67\x20\x76\x65\x72\
-\x73\x69\x6f\x6e\x3d\x22\x31\x2e\x31\x22\x20\x69\x64\x3d\x22\x4c\
-\x61\x79\x65\x72\x5f\x31\x22\x20\x78\x6d\x6c\x6e\x73\x3d\x22\x68\
-\x74\x74\x70\x3a\x2f\x2f\x77\x77\x77\x2e\x77\x33\x2e\x6f\x72\x67\
-\x2f\x32\x30\x30\x30\x2f\x73\x76\x67\x22\x20\x78\x6d\x6c\x6e\x73\
-\x3a\x78\x6c\x69\x6e\x6b\x3d\x22\x68\x74\x74\x70\x3a\x2f\x2f\x77\
-\x77\x77\x2e\x77\x33\x2e\x6f\x72\x67\x2f\x31\x39\x39\x39\x2f\x78\
-\x6c\x69\x6e\x6b\x22\x20\x78\x3d\x22\x30\x70\x78\x22\x20\x79\x3d\
-\x22\x30\x70\x78\x22\x0a\x09\x20\x77\x69\x64\x74\x68\x3d\x22\x35\
-\x31\x32\x70\x78\x22\x20\x68\x65\x69\x67\x68\x74\x3d\x22\x35\x31\
-\x32\x70\x78\x22\x20\x76\x69\x65\x77\x42\x6f\x78\x3d\x22\x30\x20\
-\x30\x20\x35\x31\x32\x20\x35\x31\x32\x22\x20\x65\x6e\x61\x62\x6c\
-\x65\x2d\x62\x61\x63\x6b\x67\x72\x6f\x75\x6e\x64\x3d\x22\x6e\x65\
-\x77\x20\x30\x20\x30\x20\x35\x31\x32\x20\x35\x31\x32\x22\x20\x78\
-\x6d\x6c\x3a\x73\x70\x61\x63\x65\x3d\x22\x70\x72\x65\x73\x65\x72\
-\x76\x65\x22\x3e\x0a\x3c\x67\x20\x69\x64\x3d\x22\x49\x63\x6f\x6e\
-\x5f\x38\x5f\x22\x3e\x0a\x09\x3c\x67\x3e\x0a\x09\x09\x3c\x70\x61\
-\x74\x68\x20\x64\x3d\x22\x4d\x34\x32\x37\x2c\x32\x33\x34\x2e\x36\
-\x32\x35\x48\x31\x36\x37\x2e\x32\x39\x36\x6c\x31\x31\x39\x2e\x37\
-\x30\x32\x2d\x31\x31\x39\x2e\x37\x30\x32\x4c\x32\x35\x36\x2c\x38\
-\x35\x4c\x38\x35\x2c\x32\x35\x36\x6c\x31\x37\x31\x2c\x31\x37\x31\
-\x6c\x32\x39\x2e\x39\x32\x32\x2d\x32\x39\x2e\x39\x32\x34\x4c\x31\
-\x36\x37\x2e\x32\x39\x36\x2c\x32\x37\x37\x2e\x33\x37\x35\x48\x34\
-\x32\x37\x56\x32\x33\x34\x2e\x36\x32\x35\x7a\x22\x2f\x3e\x0a\x09\
-\x3c\x2f\x67\x3e\x0a\x3c\x2f\x67\x3e\x0a\x3c\x2f\x73\x76\x67\x3e\
-\x0a\
-\x00\x00\x04\x42\
-\x3c\
-\x3f\x78\x6d\x6c\x20\x76\x65\x72\x73\x69\x6f\x6e\x3d\x22\x31\x2e\
-\x30\x22\x20\x65\x6e\x63\x6f\x64\x69\x6e\x67\x3d\x22\x69\x73\x6f\
-\x2d\x38\x38\x35\x39\x2d\x31\x22\x3f\x3e\x0a\x3c\x21\x2d\x2d\x20\
-\x47\x65\x6e\x65\x72\x61\x74\x6f\x72\x3a\x20\x41\x64\x6f\x62\x65\
-\x20\x49\x6c\x6c\x75\x73\x74\x72\x61\x74\x6f\x72\x20\x31\x39\x2e\
-\x30\x2e\x30\x2c\x20\x53\x56\x47\x20\x45\x78\x70\x6f\x72\x74\x20\
-\x50\x6c\x75\x67\x2d\x49\x6e\x20\x2e\x20\x53\x56\x47\x20\x56\x65\
-\x72\x73\x69\x6f\x6e\x3a\x20\x36\x2e\x30\x30\x20\x42\x75\x69\x6c\
-\x64\x20\x30\x29\x20\x20\x2d\x2d\x3e\x0a\x3c\x73\x76\x67\x20\x76\
-\x65\x72\x73\x69\x6f\x6e\x3d\x22\x31\x2e\x31\x22\x20\x69\x64\x3d\
-\x22\x4c\x61\x79\x65\x72\x5f\x31\x22\x20\x78\x6d\x6c\x6e\x73\x3d\
-\x22\x68\x74\x74\x70\x3a\x2f\x2f\x77\x77\x77\x2e\x77\x33\x2e\x6f\
-\x72\x67\x2f\x32\x30\x30\x30\x2f\x73\x76\x67\x22\x20\x78\x6d\x6c\
-\x6e\x73\x3a\x78\x6c\x69\x6e\x6b\x3d\x22\x68\x74\x74\x70\x3a\x2f\
-\x2f\x77\x77\x77\x2e\x77\x33\x2e\x6f\x72\x67\x2f\x31\x39\x39\x39\
-\x2f\x78\x6c\x69\x6e\x6b\x22\x20\x78\x3d\x22\x30\x70\x78\x22\x20\
-\x79\x3d\x22\x30\x70\x78\x22\x0a\x09\x20\x76\x69\x65\x77\x42\x6f\
-\x78\x3d\x22\x30\x20\x30\x20\x34\x32\x33\x2e\x37\x35\x34\x20\x34\
-\x32\x33\x2e\x37\x35\x34\x22\x20\x73\x74\x79\x6c\x65\x3d\x22\x65\
-\x6e\x61\x62\x6c\x65\x2d\x62\x61\x63\x6b\x67\x72\x6f\x75\x6e\x64\
-\x3a\x6e\x65\x77\x20\x30\x20\x30\x20\x34\x32\x33\x2e\x37\x35\x34\
-\x20\x34\x32\x33\x2e\x37\x35\x34\x3b\x22\x20\x78\x6d\x6c\x3a\x73\
-\x70\x61\x63\x65\x3d\x22\x70\x72\x65\x73\x65\x72\x76\x65\x22\x3e\
-\x0a\x3c\x70\x61\x74\x68\x20\x64\x3d\x22\x4d\x34\x30\x37\x2e\x35\
-\x31\x36\x2c\x31\x32\x33\x2e\x32\x33\x39\x6c\x2d\x32\x37\x2e\x37\
-\x31\x37\x2c\x31\x31\x2e\x34\x38\x63\x31\x38\x2e\x35\x38\x35\x2c\
-\x34\x34\x2e\x38\x36\x39\x2c\x31\x38\x2e\x35\x38\x35\x2c\x39\x34\
-\x2e\x32\x39\x31\x2c\x30\x2c\x31\x33\x39\x2e\x31\x35\x39\x63\x2d\
-\x31\x38\x2e\x35\x38\x35\x2c\x34\x34\x2e\x38\x36\x39\x2d\x35\x33\
-\x2e\x35\x33\x31\x2c\x37\x39\x2e\x38\x31\x35\x2d\x39\x38\x2e\x34\
-\x2c\x39\x38\x2e\x34\x0a\x09\x63\x2d\x32\x32\x2e\x34\x33\x38\x2c\
-\x39\x2e\x32\x39\x33\x2d\x34\x36\x2e\x30\x30\x34\x2c\x31\x33\x2e\
-\x39\x34\x2d\x36\x39\x2e\x35\x37\x39\x2c\x31\x33\x2e\x39\x33\x39\
-\x63\x2d\x32\x33\x2e\x35\x36\x39\x2d\x30\x2e\x30\x30\x31\x2d\x34\
-\x37\x2e\x31\x34\x37\x2d\x34\x2e\x36\x34\x37\x2d\x36\x39\x2e\x35\
-\x37\x39\x2d\x31\x33\x2e\x39\x33\x39\x63\x2d\x34\x34\x2e\x38\x36\
-\x39\x2d\x31\x38\x2e\x35\x38\x35\x2d\x37\x39\x2e\x38\x31\x35\x2d\
-\x35\x33\x2e\x35\x33\x31\x2d\x39\x38\x2e\x34\x2d\x39\x38\x2e\x34\
-\x0a\x09\x43\x31\x33\x2e\x35\x30\x37\x2c\x32\x30\x30\x2e\x36\x34\
-\x37\x2c\x33\x34\x2e\x37\x35\x38\x2c\x31\x31\x38\x2e\x37\x31\x2c\
-\x39\x30\x2e\x37\x35\x38\x2c\x36\x38\x2e\x36\x34\x34\x6c\x36\x30\
-\x2e\x38\x30\x31\x2c\x36\x30\x2e\x38\x30\x31\x56\x37\x2e\x35\x32\
-\x31\x48\x32\x39\x2e\x36\x33\x35\x4c\x36\x39\x2e\x35\x31\x34\x2c\
-\x34\x37\x2e\x34\x43\x35\x2e\x32\x32\x32\x2c\x31\x30\x35\x2e\x38\
-\x32\x36\x2d\x31\x38\x2e\x39\x38\x35\x2c\x32\x30\x30\x2e\x36\x2c\
-\x31\x36\x2e\x31\x32\x33\x2c\x32\x38\x35\x2e\x33\x35\x39\x0a\x09\
-\x63\x32\x31\x2e\x36\x35\x32\x2c\x35\x32\x2e\x32\x37\x32\x2c\x36\
-\x32\x2e\x33\x36\x34\x2c\x39\x32\x2e\x39\x38\x34\x2c\x31\x31\x34\
-\x2e\x36\x33\x36\x2c\x31\x31\x34\x2e\x36\x33\x36\x63\x32\x36\x2e\
-\x31\x33\x37\x2c\x31\x30\x2e\x38\x32\x36\x2c\x35\x33\x2e\x35\x39\
-\x39\x2c\x31\x36\x2e\x32\x33\x39\x2c\x38\x31\x2e\x30\x36\x31\x2c\
-\x31\x36\x2e\x32\x33\x39\x73\x35\x34\x2e\x39\x32\x34\x2d\x35\x2e\
-\x34\x31\x33\x2c\x38\x31\x2e\x30\x36\x2d\x31\x36\x2e\x32\x33\x39\
-\x0a\x09\x63\x35\x32\x2e\x32\x37\x32\x2d\x32\x31\x2e\x36\x35\x32\
-\x2c\x39\x32\x2e\x39\x38\x34\x2d\x36\x32\x2e\x33\x36\x34\x2c\x31\
-\x31\x34\x2e\x36\x33\x37\x2d\x31\x31\x34\x2e\x36\x33\x36\x43\x34\
-\x32\x39\x2e\x31\x36\x37\x2c\x32\x33\x33\x2e\x30\x38\x37\x2c\x34\
-\x32\x39\x2e\x31\x36\x37\x2c\x31\x37\x35\x2e\x35\x31\x31\x2c\x34\
-\x30\x37\x2e\x35\x31\x36\x2c\x31\x32\x33\x2e\x32\x33\x39\x7a\x22\
-\x2f\x3e\x0a\x3c\x67\x3e\x0a\x3c\x2f\x67\x3e\x0a\x3c\x67\x3e\x0a\
-\x3c\x2f\x67\x3e\x0a\x3c\x67\x3e\x0a\x3c\x2f\x67\x3e\x0a\x3c\x67\
-\x3e\x0a\x3c\x2f\x67\x3e\x0a\x3c\x67\x3e\x0a\x3c\x2f\x67\x3e\x0a\
-\x3c\x67\x3e\x0a\x3c\x2f\x67\x3e\x0a\x3c\x67\x3e\x0a\x3c\x2f\x67\
-\x3e\x0a\x3c\x67\x3e\x0a\x3c\x2f\x67\x3e\x0a\x3c\x67\x3e\x0a\x3c\
-\x2f\x67\x3e\x0a\x3c\x67\x3e\x0a\x3c\x2f\x67\x3e\x0a\x3c\x67\x3e\
-\x0a\x3c\x2f\x67\x3e\x0a\x3c\x67\x3e\x0a\x3c\x2f\x67\x3e\x0a\x3c\
-\x67\x3e\x0a\x3c\x2f\x67\x3e\x0a\x3c\x67\x3e\x0a\x3c\x2f\x67\x3e\
-\x0a\x3c\x67\x3e\x0a\x3c\x2f\x67\x3e\x0a\x3c\x2f\x73\x76\x67\x3e\
-\x0a\
-\x00\x00\x05\xbb\
-\x3c\
-\x3f\x78\x6d\x6c\x20\x76\x65\x72\x73\x69\x6f\x6e\x3d\x22\x31\x2e\
-\x30\x22\x20\x65\x6e\x63\x6f\x64\x69\x6e\x67\x3d\x22\x75\x74\x66\
-\x2d\x38\x22\x3f\x3e\x0a\x3c\x21\x2d\x2d\x20\x47\x65\x6e\x65\x72\
-\x61\x74\x6f\x72\x3a\x20\x41\x64\x6f\x62\x65\x20\x49\x6c\x6c\x75\
-\x73\x74\x72\x61\x74\x6f\x72\x20\x31\x36\x2e\x32\x2e\x31\x2c\x20\
-\x53\x56\x47\x20\x45\x78\x70\x6f\x72\x74\x20\x50\x6c\x75\x67\x2d\
-\x49\x6e\x20\x2e\x20\x53\x56\x47\x20\x56\x65\x72\x73\x69\x6f\x6e\
-\x3a\x20\x36\x2e\x30\x30\x20\x42\x75\x69\x6c\x64\x20\x30\x29\x20\
-\x20\x2d\x2d\x3e\x0a\x3c\x21\x44\x4f\x43\x54\x59\x50\x45\x20\x73\
-\x76\x67\x20\x50\x55\x42\x4c\x49\x43\x20\x22\x2d\x2f\x2f\x57\x33\
-\x43\x2f\x2f\x44\x54\x44\x20\x53\x56\x47\x20\x31\x2e\x31\x2f\x2f\
-\x45\x4e\x22\x20\x22\x68\x74\x74\x70\x3a\x2f\x2f\x77\x77\x77\x2e\
-\x77\x33\x2e\x6f\x72\x67\x2f\x47\x72\x61\x70\x68\x69\x63\x73\x2f\
-\x53\x56\x47\x2f\x31\x2e\x31\x2f\x44\x54\x44\x2f\x73\x76\x67\x31\
-\x31\x2e\x64\x74\x64\x22\x3e\x0a\x3c\x73\x76\x67\x20\x76\x65\x72\
-\x73\x69\x6f\x6e\x3d\x22\x31\x2e\x31\x22\x20\x69\x64\x3d\x22\x4c\
-\x61\x79\x65\x72\x5f\x31\x22\x20\x78\x6d\x6c\x6e\x73\x3d\x22\x68\
-\x74\x74\x70\x3a\x2f\x2f\x77\x77\x77\x2e\x77\x33\x2e\x6f\x72\x67\
-\x2f\x32\x30\x30\x30\x2f\x73\x76\x67\x22\x20\x78\x6d\x6c\x6e\x73\
-\x3a\x78\x6c\x69\x6e\x6b\x3d\x22\x68\x74\x74\x70\x3a\x2f\x2f\x77\
-\x77\x77\x2e\x77\x33\x2e\x6f\x72\x67\x2f\x31\x39\x39\x39\x2f\x78\
-\x6c\x69\x6e\x6b\x22\x20\x78\x3d\x22\x30\x70\x78\x22\x20\x79\x3d\
-\x22\x30\x70\x78\x22\x0a\x09\x20\x77\x69\x64\x74\x68\x3d\x22\x35\
-\x31\x32\x70\x78\x22\x20\x68\x65\x69\x67\x68\x74\x3d\x22\x35\x31\
-\x32\x70\x78\x22\x20\x76\x69\x65\x77\x42\x6f\x78\x3d\x22\x30\x20\
-\x30\x20\x35\x31\x32\x20\x35\x31\x32\x22\x20\x65\x6e\x61\x62\x6c\
-\x65\x2d\x62\x61\x63\x6b\x67\x72\x6f\x75\x6e\x64\x3d\x22\x6e\x65\
-\x77\x20\x30\x20\x30\x20\x35\x31\x32\x20\x35\x31\x32\x22\x20\x78\
-\x6d\x6c\x3a\x73\x70\x61\x63\x65\x3d\x22\x70\x72\x65\x73\x65\x72\
-\x76\x65\x22\x3e\x0a\x3c\x70\x61\x74\x68\x20\x64\x3d\x22\x4d\x34\
-\x35\x30\x2e\x36\x37\x39\x2c\x32\x37\x33\x2e\x35\x63\x2d\x31\x34\
-\x2e\x35\x38\x35\x2d\x31\x34\x2e\x35\x37\x37\x2d\x33\x36\x2e\x30\
-\x35\x34\x2d\x31\x35\x2e\x38\x39\x2d\x35\x30\x2e\x36\x33\x39\x2d\
-\x31\x2e\x33\x31\x32\x6c\x2d\x34\x31\x2e\x36\x38\x37\x2c\x34\x31\
-\x2e\x36\x36\x34\x63\x2d\x31\x30\x2e\x38\x35\x32\x2c\x31\x30\x2e\
-\x38\x33\x36\x2d\x32\x33\x2e\x39\x33\x2c\x31\x30\x2e\x38\x35\x39\
-\x2d\x33\x31\x2e\x35\x36\x34\x2c\x31\x2e\x38\x35\x32\x0a\x09\x63\
-\x2d\x35\x2e\x30\x35\x37\x2d\x35\x2e\x39\x36\x38\x2d\x33\x2e\x30\
-\x36\x31\x2d\x32\x34\x2e\x33\x37\x34\x2d\x31\x2e\x36\x34\x34\x2d\
-\x33\x36\x2e\x30\x34\x39\x6c\x32\x30\x2e\x39\x30\x37\x2d\x31\x37\
-\x31\x2e\x38\x34\x39\x63\x31\x2e\x38\x36\x37\x2d\x31\x35\x2e\x33\
-\x35\x33\x2d\x39\x2e\x30\x37\x2d\x33\x30\x2e\x31\x38\x35\x2d\x32\
-\x34\x2e\x34\x33\x2d\x33\x32\x2e\x30\x35\x31\x0a\x09\x63\x2d\x31\
-\x35\x2e\x33\x35\x38\x2d\x31\x2e\x38\x36\x37\x2d\x32\x39\x2e\x33\
-\x32\x32\x2c\x39\x2e\x39\x33\x39\x2d\x33\x31\x2e\x31\x39\x31\x2c\
-\x32\x35\x2e\x32\x38\x39\x4c\x32\x36\x37\x2e\x33\x37\x2c\x32\x33\
-\x36\x2e\x30\x32\x31\x63\x2d\x31\x2e\x32\x30\x35\x2c\x33\x2e\x33\
-\x35\x38\x2d\x33\x2e\x37\x39\x2c\x33\x2e\x39\x33\x38\x2d\x34\x2e\
-\x30\x38\x31\x2d\x30\x2e\x35\x38\x32\x4c\x32\x35\x35\x2e\x34\x34\
-\x2c\x36\x30\x0a\x09\x63\x30\x2d\x31\x35\x2e\x34\x36\x35\x2d\x31\
-\x32\x2e\x35\x34\x32\x2d\x32\x38\x2d\x32\x38\x2e\x30\x31\x34\x2d\
-\x32\x38\x63\x2d\x31\x35\x2e\x34\x37\x33\x2c\x30\x2d\x32\x38\x2e\
-\x30\x31\x35\x2c\x31\x32\x2e\x35\x33\x35\x2d\x32\x38\x2e\x30\x31\
-\x35\x2c\x32\x38\x6c\x2d\x30\x2e\x35\x35\x32\x2c\x31\x37\x36\x2e\
-\x37\x35\x32\x63\x30\x2e\x31\x34\x36\x2c\x32\x2e\x30\x34\x2d\x31\
-\x2e\x36\x30\x34\x2c\x32\x2e\x36\x32\x34\x2d\x31\x2e\x39\x32\x2c\
-\x30\x2e\x32\x39\x34\x4c\x31\x37\x32\x2e\x30\x31\x36\x2c\x39\x39\
-\x2e\x30\x37\x37\x0a\x09\x63\x2d\x32\x2e\x37\x35\x2d\x31\x35\x2e\
-\x32\x31\x39\x2d\x31\x37\x2e\x33\x32\x33\x2d\x32\x36\x2e\x32\x30\
-\x33\x2d\x33\x32\x2e\x35\x34\x38\x2d\x32\x33\x2e\x34\x35\x33\x63\
-\x2d\x31\x35\x2e\x32\x32\x37\x2c\x32\x2e\x37\x34\x38\x2d\x32\x35\
-\x2e\x33\x33\x39\x2c\x31\x38\x2e\x31\x38\x37\x2d\x32\x32\x2e\x35\
-\x39\x31\x2c\x33\x33\x2e\x34\x30\x33\x6c\x32\x32\x2e\x31\x39\x33\
-\x2c\x31\x36\x31\x2e\x34\x35\x35\x0a\x09\x63\x30\x2e\x30\x32\x33\
-\x2c\x32\x2e\x38\x37\x32\x2d\x30\x2e\x39\x34\x31\x2c\x34\x2e\x35\
-\x31\x33\x2d\x32\x2e\x33\x30\x38\x2c\x30\x2e\x38\x33\x31\x6c\x2d\
-\x33\x33\x2e\x31\x30\x39\x2d\x38\x38\x2e\x35\x31\x37\x63\x2d\x35\
-\x2e\x31\x38\x2d\x31\x34\x2e\x35\x37\x32\x2d\x32\x31\x2e\x31\x39\
-\x36\x2d\x32\x33\x2e\x30\x36\x35\x2d\x33\x35\x2e\x37\x37\x36\x2d\
-\x31\x37\x2e\x38\x38\x39\x0a\x09\x63\x2d\x31\x34\x2e\x35\x37\x39\
-\x2c\x35\x2e\x31\x37\x37\x2d\x32\x32\x2e\x32\x30\x31\x2c\x32\x32\
-\x2e\x30\x36\x31\x2d\x31\x37\x2e\x30\x32\x33\x2c\x33\x36\x2e\x36\
-\x33\x31\x6c\x35\x38\x2e\x30\x34\x32\x2c\x31\x38\x39\x2e\x36\x32\
-\x35\x63\x30\x2e\x33\x30\x33\x2c\x31\x2e\x30\x34\x36\x2c\x30\x2e\
-\x36\x32\x34\x2c\x32\x2e\x30\x38\x35\x2c\x30\x2e\x39\x35\x33\x2c\
-\x33\x2e\x31\x31\x38\x6c\x30\x2e\x31\x32\x31\x2c\x30\x2e\x33\x39\
-\x0a\x09\x63\x30\x2e\x30\x31\x31\x2c\x30\x2e\x30\x33\x31\x2c\x30\
-\x2e\x30\x32\x35\x2c\x30\x2e\x30\x35\x38\x2c\x30\x2e\x30\x33\x35\
-\x2c\x30\x2e\x30\x38\x38\x43\x31\x32\x36\x2e\x30\x37\x39\x2c\x34\
-\x34\x34\x2e\x32\x33\x33\x2c\x31\x37\x32\x2e\x35\x37\x2c\x34\x38\
-\x30\x2c\x32\x32\x37\x2e\x34\x32\x37\x2c\x34\x38\x30\x63\x33\x35\
-\x2e\x31\x31\x36\x2c\x30\x2c\x37\x31\x2e\x35\x39\x31\x2d\x31\x32\
-\x2e\x33\x37\x38\x2c\x39\x39\x2e\x33\x35\x37\x2d\x33\x33\x2e\x36\
-\x37\x32\x0a\x09\x63\x30\x2e\x30\x30\x31\x2c\x30\x2c\x30\x2e\x30\
-\x30\x33\x2d\x30\x2e\x30\x30\x32\x2c\x30\x2e\x30\x30\x33\x2d\x30\
-\x2e\x30\x30\x32\x63\x32\x39\x2e\x39\x39\x2d\x31\x38\x2e\x30\x35\
-\x31\x2c\x31\x32\x36\x2e\x30\x37\x31\x2d\x31\x32\x31\x2e\x33\x34\
-\x37\x2c\x31\x32\x36\x2e\x30\x37\x31\x2d\x31\x32\x31\x2e\x33\x34\
-\x37\x43\x34\x36\x37\x2e\x34\x34\x35\x2c\x33\x31\x30\x2e\x34\x30\
-\x32\x2c\x34\x36\x35\x2e\x32\x36\x36\x2c\x32\x38\x38\x2e\x30\x38\
-\x2c\x34\x35\x30\x2e\x36\x37\x39\x2c\x32\x37\x33\x2e\x35\x7a\x22\
-\x2f\x3e\x0a\x3c\x2f\x73\x76\x67\x3e\x0a\
-\x00\x00\x02\xf0\
-\x3c\
-\x3f\x78\x6d\x6c\x20\x76\x65\x72\x73\x69\x6f\x6e\x3d\x22\x31\x2e\
-\x30\x22\x20\x65\x6e\x63\x6f\x64\x69\x6e\x67\x3d\x22\x75\x74\x66\
-\x2d\x38\x22\x3f\x3e\x0a\x3c\x21\x2d\x2d\x20\x47\x65\x6e\x65\x72\
-\x61\x74\x6f\x72\x3a\x20\x41\x64\x6f\x62\x65\x20\x49\x6c\x6c\x75\
-\x73\x74\x72\x61\x74\x6f\x72\x20\x31\x36\x2e\x32\x2e\x31\x2c\x20\
-\x53\x56\x47\x20\x45\x78\x70\x6f\x72\x74\x20\x50\x6c\x75\x67\x2d\
-\x49\x6e\x20\x2e\x20\x53\x56\x47\x20\x56\x65\x72\x73\x69\x6f\x6e\
-\x3a\x20\x36\x2e\x30\x30\x20\x42\x75\x69\x6c\x64\x20\x30\x29\x20\
-\x20\x2d\x2d\x3e\x0a\x3c\x21\x44\x4f\x43\x54\x59\x50\x45\x20\x73\
-\x76\x67\x20\x50\x55\x42\x4c\x49\x43\x20\x22\x2d\x2f\x2f\x57\x33\
-\x43\x2f\x2f\x44\x54\x44\x20\x53\x56\x47\x20\x31\x2e\x31\x2f\x2f\
-\x45\x4e\x22\x20\x22\x68\x74\x74\x70\x3a\x2f\x2f\x77\x77\x77\x2e\
-\x77\x33\x2e\x6f\x72\x67\x2f\x47\x72\x61\x70\x68\x69\x63\x73\x2f\
-\x53\x56\x47\x2f\x31\x2e\x31\x2f\x44\x54\x44\x2f\x73\x76\x67\x31\
-\x31\x2e\x64\x74\x64\x22\x3e\x0a\x3c\x73\x76\x67\x20\x76\x65\x72\
-\x73\x69\x6f\x6e\x3d\x22\x31\x2e\x31\x22\x20\x69\x64\x3d\x22\x4c\
-\x61\x79\x65\x72\x5f\x31\x22\x20\x78\x6d\x6c\x6e\x73\x3d\x22\x68\
-\x74\x74\x70\x3a\x2f\x2f\x77\x77\x77\x2e\x77\x33\x2e\x6f\x72\x67\
-\x2f\x32\x30\x30\x30\x2f\x73\x76\x67\x22\x20\x78\x6d\x6c\x6e\x73\
-\x3a\x78\x6c\x69\x6e\x6b\x3d\x22\x68\x74\x74\x70\x3a\x2f\x2f\x77\
-\x77\x77\x2e\x77\x33\x2e\x6f\x72\x67\x2f\x31\x39\x39\x39\x2f\x78\
-\x6c\x69\x6e\x6b\x22\x20\x78\x3d\x22\x30\x70\x78\x22\x20\x79\x3d\
-\x22\x30\x70\x78\x22\x0a\x09\x20\x77\x69\x64\x74\x68\x3d\x22\x35\
-\x31\x32\x70\x78\x22\x20\x68\x65\x69\x67\x68\x74\x3d\x22\x35\x31\
-\x32\x70\x78\x22\x20\x76\x69\x65\x77\x42\x6f\x78\x3d\x22\x30\x20\
-\x30\x20\x35\x31\x32\x20\x35\x31\x32\x22\x20\x65\x6e\x61\x62\x6c\
-\x65\x2d\x62\x61\x63\x6b\x67\x72\x6f\x75\x6e\x64\x3d\x22\x6e\x65\
-\x77\x20\x30\x20\x30\x20\x35\x31\x32\x20\x35\x31\x32\x22\x20\x78\
-\x6d\x6c\x3a\x73\x70\x61\x63\x65\x3d\x22\x70\x72\x65\x73\x65\x72\
-\x76\x65\x22\x3e\x0a\x3c\x67\x20\x69\x64\x3d\x22\x49\x63\x6f\x6e\
-\x5f\x32\x30\x5f\x22\x3e\x0a\x09\x3c\x67\x3e\x0a\x09\x09\x3c\x70\
-\x61\x74\x68\x20\x64\x3d\x22\x4d\x32\x35\x36\x2c\x34\x38\x43\x31\
-\x34\x31\x2e\x36\x30\x31\x2c\x34\x38\x2c\x34\x38\x2c\x31\x34\x31\
-\x2e\x36\x30\x31\x2c\x34\x38\x2c\x32\x35\x36\x73\x39\x33\x2e\x36\
-\x30\x31\x2c\x32\x30\x38\x2c\x32\x30\x38\x2c\x32\x30\x38\x73\x32\
-\x30\x38\x2d\x39\x33\x2e\x36\x30\x31\x2c\x32\x30\x38\x2d\x32\x30\
-\x38\x53\x33\x37\x30\x2e\x33\x39\x39\x2c\x34\x38\x2c\x32\x35\x36\
-\x2c\x34\x38\x7a\x20\x4d\x32\x35\x36\x2c\x34\x32\x32\x2e\x33\x39\
-\x39\x0a\x09\x09\x09\x63\x2d\x39\x31\x2e\x35\x31\x38\x2c\x30\x2d\
-\x31\x36\x36\x2e\x33\x39\x39\x2d\x37\x34\x2e\x38\x38\x32\x2d\x31\
-\x36\x36\x2e\x33\x39\x39\x2d\x31\x36\x36\x2e\x33\x39\x39\x53\x31\
-\x36\x34\x2e\x34\x38\x32\x2c\x38\x39\x2e\x36\x2c\x32\x35\x36\x2c\
-\x38\x39\x2e\x36\x53\x34\x32\x32\x2e\x34\x2c\x31\x36\x34\x2e\x34\
-\x38\x32\x2c\x34\x32\x32\x2e\x34\x2c\x32\x35\x36\x53\x33\x34\x37\
-\x2e\x35\x31\x38\x2c\x34\x32\x32\x2e\x33\x39\x39\x2c\x32\x35\x36\
-\x2c\x34\x32\x32\x2e\x33\x39\x39\x7a\x22\x2f\x3e\x0a\x09\x3c\x2f\
-\x67\x3e\x0a\x3c\x2f\x67\x3e\x0a\x3c\x2f\x73\x76\x67\x3e\x0a\
-\x00\x00\x03\xfe\
-\x3c\
-\x3f\x78\x6d\x6c\x20\x76\x65\x72\x73\x69\x6f\x6e\x3d\x27\x31\x2e\
-\x30\x27\x20\x65\x6e\x63\x6f\x64\x69\x6e\x67\x3d\x27\x55\x54\x46\
-\x2d\x38\x27\x3f\x3e\x0a\x3c\x21\x2d\x2d\x20\x54\x68\x69\x73\x20\
-\x66\x69\x6c\x65\x20\x77\x61\x73\x20\x67\x65\x6e\x65\x72\x61\x74\
-\x65\x64\x20\x62\x79\x20\x64\x76\x69\x73\x76\x67\x6d\x20\x32\x2e\
-\x31\x31\x2e\x31\x20\x2d\x2d\x3e\x0a\x3c\x73\x76\x67\x20\x76\x65\
-\x72\x73\x69\x6f\x6e\x3d\x27\x31\x2e\x31\x27\x20\x78\x6d\x6c\x6e\
-\x73\x3d\x27\x68\x74\x74\x70\x3a\x2f\x2f\x77\x77\x77\x2e\x77\x33\
-\x2e\x6f\x72\x67\x2f\x32\x30\x30\x30\x2f\x73\x76\x67\x27\x20\x78\
-\x6d\x6c\x6e\x73\x3a\x78\x6c\x69\x6e\x6b\x3d\x27\x68\x74\x74\x70\
-\x3a\x2f\x2f\x77\x77\x77\x2e\x77\x33\x2e\x6f\x72\x67\x2f\x31\x39\
-\x39\x39\x2f\x78\x6c\x69\x6e\x6b\x27\x20\x77\x69\x64\x74\x68\x3d\
-\x27\x36\x33\x2e\x39\x39\x39\x36\x70\x74\x27\x20\x68\x65\x69\x67\
-\x68\x74\x3d\x27\x36\x34\x70\x74\x27\x20\x76\x69\x65\x77\x42\x6f\
-\x78\x3d\x27\x35\x36\x2e\x34\x30\x39\x34\x20\x31\x31\x37\x2e\x38\
-\x35\x38\x20\x36\x33\x2e\x39\x39\x39\x36\x20\x36\x34\x27\x3e\x0a\
-\x3c\x67\x20\x69\x64\x3d\x27\x70\x61\x67\x65\x31\x27\x3e\x0a\x3c\
-\x67\x20\x74\x72\x61\x6e\x73\x66\x6f\x72\x6d\x3d\x27\x74\x72\x61\
-\x6e\x73\x6c\x61\x74\x65\x28\x35\x36\x2e\x34\x30\x39\x34\x20\x31\
-\x31\x37\x2e\x38\x35\x38\x29\x73\x63\x61\x6c\x65\x28\x2e\x39\x39\
-\x36\x32\x36\x34\x29\x27\x3e\x0a\x3c\x70\x61\x74\x68\x20\x64\x3d\
-\x27\x4d\x20\x32\x2e\x30\x30\x37\x35\x20\x36\x32\x2e\x32\x33\x32\
-\x35\x4c\x20\x36\x32\x2e\x32\x33\x32\x35\x20\x36\x32\x2e\x32\x33\
-\x32\x35\x4c\x20\x36\x32\x2e\x32\x33\x32\x35\x20\x32\x2e\x30\x30\
-\x37\x35\x4c\x20\x32\x2e\x30\x30\x37\x35\x20\x32\x2e\x30\x30\x37\
-\x35\x4c\x20\x32\x2e\x30\x30\x37\x35\x20\x36\x32\x2e\x32\x33\x32\
-\x35\x5a\x27\x20\x66\x69\x6c\x6c\x3d\x27\x6e\x6f\x6e\x65\x27\x20\
-\x73\x74\x72\x6f\x6b\x65\x3d\x27\x23\x30\x30\x30\x30\x30\x30\x27\
-\x20\x73\x74\x72\x6f\x6b\x65\x2d\x6c\x69\x6e\x65\x63\x61\x70\x3d\
-\x27\x72\x6f\x75\x6e\x64\x27\x20\x73\x74\x72\x6f\x6b\x65\x2d\x6c\
-\x69\x6e\x65\x6a\x6f\x69\x6e\x3d\x27\x72\x6f\x75\x6e\x64\x27\x20\
-\x73\x74\x72\x6f\x6b\x65\x2d\x6d\x69\x74\x65\x72\x6c\x69\x6d\x69\
-\x74\x3d\x27\x31\x30\x2e\x30\x33\x37\x35\x27\x20\x73\x74\x72\x6f\
-\x6b\x65\x2d\x77\x69\x64\x74\x68\x3d\x27\x34\x2e\x30\x31\x35\x27\
-\x2f\x3e\x0a\x3c\x2f\x67\x3e\x0a\x3c\x67\x20\x74\x72\x61\x6e\x73\
-\x66\x6f\x72\x6d\x3d\x27\x74\x72\x61\x6e\x73\x6c\x61\x74\x65\x28\
-\x35\x36\x2e\x34\x30\x39\x34\x20\x31\x31\x37\x2e\x38\x35\x38\x29\
-\x73\x63\x61\x6c\x65\x28\x2e\x39\x39\x36\x32\x36\x34\x29\x27\x3e\
-\x0a\x3c\x70\x61\x74\x68\x20\x64\x3d\x27\x4d\x20\x32\x2e\x30\x30\
-\x37\x35\x20\x33\x32\x2e\x31\x32\x4c\x20\x36\x32\x2e\x32\x33\x32\
-\x35\x20\x33\x32\x2e\x31\x32\x27\x20\x66\x69\x6c\x6c\x3d\x27\x6e\
-\x6f\x6e\x65\x27\x20\x73\x74\x72\x6f\x6b\x65\x3d\x27\x23\x30\x30\
-\x30\x30\x30\x30\x27\x20\x73\x74\x72\x6f\x6b\x65\x2d\x6c\x69\x6e\
-\x65\x63\x61\x70\x3d\x27\x72\x6f\x75\x6e\x64\x27\x20\x73\x74\x72\
-\x6f\x6b\x65\x2d\x6c\x69\x6e\x65\x6a\x6f\x69\x6e\x3d\x27\x72\x6f\
-\x75\x6e\x64\x27\x20\x73\x74\x72\x6f\x6b\x65\x2d\x6d\x69\x74\x65\
-\x72\x6c\x69\x6d\x69\x74\x3d\x27\x31\x30\x2e\x30\x33\x37\x35\x27\
-\x20\x73\x74\x72\x6f\x6b\x65\x2d\x77\x69\x64\x74\x68\x3d\x27\x34\
-\x2e\x30\x31\x35\x27\x2f\x3e\x0a\x3c\x2f\x67\x3e\x0a\x3c\x67\x20\
-\x74\x72\x61\x6e\x73\x66\x6f\x72\x6d\x3d\x27\x74\x72\x61\x6e\x73\
-\x6c\x61\x74\x65\x28\x35\x36\x2e\x34\x30\x39\x34\x20\x31\x31\x37\
-\x2e\x38\x35\x38\x29\x73\x63\x61\x6c\x65\x28\x2e\x39\x39\x36\x32\
-\x36\x34\x29\x27\x3e\x0a\x3c\x70\x61\x74\x68\x20\x64\x3d\x27\x4d\
-\x20\x33\x32\x2e\x31\x32\x20\x36\x32\x2e\x32\x33\x32\x35\x4c\x20\
-\x33\x32\x2e\x31\x32\x20\x32\x2e\x30\x30\x37\x35\x27\x20\x66\x69\
-\x6c\x6c\x3d\x27\x6e\x6f\x6e\x65\x27\x20\x73\x74\x72\x6f\x6b\x65\
-\x3d\x27\x23\x30\x30\x30\x30\x30\x30\x27\x20\x73\x74\x72\x6f\x6b\
-\x65\x2d\x6c\x69\x6e\x65\x63\x61\x70\x3d\x27\x72\x6f\x75\x6e\x64\
-\x27\x20\x73\x74\x72\x6f\x6b\x65\x2d\x6c\x69\x6e\x65\x6a\x6f\x69\
-\x6e\x3d\x27\x72\x6f\x75\x6e\x64\x27\x20\x73\x74\x72\x6f\x6b\x65\
-\x2d\x6d\x69\x74\x65\x72\x6c\x69\x6d\x69\x74\x3d\x27\x31\x30\x2e\
-\x30\x33\x37\x35\x27\x20\x73\x74\x72\x6f\x6b\x65\x2d\x77\x69\x64\
-\x74\x68\x3d\x27\x34\x2e\x30\x31\x35\x27\x2f\x3e\x0a\x3c\x2f\x67\
-\x3e\x0a\x3c\x2f\x67\x3e\x0a\x3c\x2f\x73\x76\x67\x3e\
-\x00\x00\x03\xe8\
-\x3c\
-\x3f\x78\x6d\x6c\x20\x76\x65\x72\x73\x69\x6f\x6e\x3d\x22\x31\x2e\
-\x30\x22\x20\x65\x6e\x63\x6f\x64\x69\x6e\x67\x3d\x22\x75\x74\x66\
-\x2d\x38\x22\x3f\x3e\x0a\x3c\x21\x2d\x2d\x20\x47\x65\x6e\x65\x72\
-\x61\x74\x6f\x72\x3a\x20\x41\x64\x6f\x62\x65\x20\x49\x6c\x6c\x75\
-\x73\x74\x72\x61\x74\x6f\x72\x20\x31\x38\x2e\x31\x2e\x31\x2c\x20\
-\x53\x56\x47\x20\x45\x78\x70\x6f\x72\x74\x20\x50\x6c\x75\x67\x2d\
-\x49\x6e\x20\x2e\x20\x53\x56\x47\x20\x56\x65\x72\x73\x69\x6f\x6e\
-\x3a\x20\x36\x2e\x30\x30\x20\x42\x75\x69\x6c\x64\x20\x30\x29\x20\
-\x20\x2d\x2d\x3e\x0a\x3c\x21\x44\x4f\x43\x54\x59\x50\x45\x20\x73\
-\x76\x67\x20\x50\x55\x42\x4c\x49\x43\x20\x22\x2d\x2f\x2f\x57\x33\
-\x43\x2f\x2f\x44\x54\x44\x20\x53\x56\x47\x20\x31\x2e\x31\x2f\x2f\
-\x45\x4e\x22\x20\x22\x68\x74\x74\x70\x3a\x2f\x2f\x77\x77\x77\x2e\
-\x77\x33\x2e\x6f\x72\x67\x2f\x47\x72\x61\x70\x68\x69\x63\x73\x2f\
-\x53\x56\x47\x2f\x31\x2e\x31\x2f\x44\x54\x44\x2f\x73\x76\x67\x31\
-\x31\x2e\x64\x74\x64\x22\x3e\x0a\x3c\x73\x76\x67\x20\x76\x65\x72\
-\x73\x69\x6f\x6e\x3d\x22\x31\x2e\x31\x22\x20\x69\x64\x3d\x22\x43\
-\x68\x65\x76\x72\x6f\x6e\x5f\x63\x69\x72\x63\x6c\x65\x64\x5f\x6c\
-\x65\x66\x74\x22\x20\x78\x6d\x6c\x6e\x73\x3d\x22\x68\x74\x74\x70\
-\x3a\x2f\x2f\x77\x77\x77\x2e\x77\x33\x2e\x6f\x72\x67\x2f\x32\x30\
-\x30\x30\x2f\x73\x76\x67\x22\x20\x78\x6d\x6c\x6e\x73\x3a\x78\x6c\
-\x69\x6e\x6b\x3d\x22\x68\x74\x74\x70\x3a\x2f\x2f\x77\x77\x77\x2e\
-\x77\x33\x2e\x6f\x72\x67\x2f\x31\x39\x39\x39\x2f\x78\x6c\x69\x6e\
-\x6b\x22\x0a\x09\x20\x78\x3d\x22\x30\x70\x78\x22\x20\x79\x3d\x22\
-\x30\x70\x78\x22\x20\x76\x69\x65\x77\x42\x6f\x78\x3d\x22\x30\x20\
-\x30\x20\x35\x31\x32\x20\x35\x31\x32\x22\x20\x65\x6e\x61\x62\x6c\
-\x65\x2d\x62\x61\x63\x6b\x67\x72\x6f\x75\x6e\x64\x3d\x22\x6e\x65\
-\x77\x20\x30\x20\x30\x20\x35\x31\x32\x20\x35\x31\x32\x22\x20\x78\
-\x6d\x6c\x3a\x73\x70\x61\x63\x65\x3d\x22\x70\x72\x65\x73\x65\x72\
-\x76\x65\x22\x3e\x0a\x3c\x67\x20\x74\x72\x61\x6e\x73\x66\x6f\x72\
-\x6d\x3d\x27\x6d\x61\x74\x72\x69\x78\x28\x32\x34\x20\x30\x20\x30\
-\x20\x32\x34\x20\x30\x20\x30\x29\x27\x3e\x0a\x3c\x70\x61\x74\x68\
-\x20\x64\x3d\x22\x4d\x31\x31\x2e\x33\x30\x32\x2c\x36\x2e\x37\x37\
-\x36\x63\x2d\x30\x2e\x31\x39\x36\x2d\x30\x2e\x31\x39\x37\x2d\x30\
-\x2e\x35\x31\x35\x2d\x30\x2e\x31\x39\x37\x2d\x30\x2e\x37\x31\x2c\
-\x30\x4c\x37\x2e\x37\x38\x35\x2c\x39\x2e\x36\x34\x31\x63\x2d\x30\
-\x2e\x31\x39\x36\x2c\x30\x2e\x31\x39\x39\x2d\x30\x2e\x31\x39\x36\
-\x2c\x30\x2e\x35\x32\x2c\x30\x2c\x30\x2e\x37\x31\x37\x6c\x32\x2e\
-\x38\x30\x37\x2c\x32\x2e\x38\x36\x34\x0a\x09\x63\x30\x2e\x31\x39\
-\x35\x2c\x30\x2e\x31\x39\x39\x2c\x30\x2e\x35\x31\x34\x2c\x30\x2e\
-\x31\x39\x38\x2c\x30\x2e\x37\x31\x2c\x30\x63\x30\x2e\x31\x39\x36\
-\x2d\x30\x2e\x31\x39\x37\x2c\x30\x2e\x31\x39\x36\x2d\x30\x2e\x35\
-\x31\x38\x2c\x30\x2d\x30\x2e\x37\x31\x37\x4c\x39\x2c\x31\x30\x6c\
-\x32\x2e\x33\x30\x32\x2d\x32\x2e\x35\x30\x36\x43\x31\x31\x2e\x34\
-\x39\x38\x2c\x37\x2e\x32\x39\x36\x2c\x31\x31\x2e\x34\x39\x38\x2c\
-\x36\x2e\x39\x37\x36\x2c\x31\x31\x2e\x33\x30\x32\x2c\x36\x2e\x37\
-\x37\x36\x7a\x0a\x09\x20\x4d\x31\x30\x2c\x30\x2e\x34\x63\x2d\x35\
-\x2e\x33\x30\x32\x2c\x30\x2d\x39\x2e\x36\x2c\x34\x2e\x32\x39\x38\
-\x2d\x39\x2e\x36\x2c\x39\x2e\x36\x63\x30\x2c\x35\x2e\x33\x30\x33\
-\x2c\x34\x2e\x32\x39\x38\x2c\x39\x2e\x36\x2c\x39\x2e\x36\x2c\x39\
-\x2e\x36\x73\x39\x2e\x36\x2d\x34\x2e\x32\x39\x37\x2c\x39\x2e\x36\
-\x2d\x39\x2e\x36\x43\x31\x39\x2e\x36\x2c\x34\x2e\x36\x39\x38\x2c\
-\x31\x35\x2e\x33\x30\x32\x2c\x30\x2e\x34\x2c\x31\x30\x2c\x30\x2e\
-\x34\x7a\x20\x4d\x31\x30\x2c\x31\x38\x2e\x33\x35\x34\x0a\x09\x63\
-\x2d\x34\x2e\x36\x31\x35\x2c\x30\x2d\x38\x2e\x33\x35\x34\x2d\x33\
-\x2e\x37\x34\x2d\x38\x2e\x33\x35\x34\x2d\x38\x2e\x33\x35\x34\x63\
-\x30\x2d\x34\x2e\x36\x31\x34\x2c\x33\x2e\x37\x33\x39\x2d\x38\x2e\
-\x33\x35\x34\x2c\x38\x2e\x33\x35\x34\x2d\x38\x2e\x33\x35\x34\x63\
-\x34\x2e\x36\x31\x33\x2c\x30\x2c\x38\x2e\x33\x35\x34\x2c\x33\x2e\
-\x37\x34\x2c\x38\x2e\x33\x35\x34\x2c\x38\x2e\x33\x35\x34\x0a\x09\
-\x43\x31\x38\x2e\x33\x35\x34\x2c\x31\x34\x2e\x36\x31\x34\x2c\x31\
-\x34\x2e\x36\x31\x33\x2c\x31\x38\x2e\x33\x35\x34\x2c\x31\x30\x2c\
-\x31\x38\x2e\x33\x35\x34\x7a\x22\x2f\x3e\x0a\x3c\x2f\x67\x3e\x0a\
-\x3c\x2f\x73\x76\x67\x3e\x0a\
-"
-
-qt_resource_name = b"\
-\x00\x05\
-\x00\x6f\xa6\x53\
-\x00\x69\
-\x00\x63\x00\x6f\x00\x6e\x00\x73\
-\x00\x11\
-\x0c\xdb\x38\xe7\
-\x00\x61\
-\x00\x6e\x00\x64\x00\x72\x00\x6f\x00\x69\x00\x64\x00\x2d\x00\x63\x00\x6c\x00\x6f\x00\x73\x00\x65\x00\x2e\x00\x73\x00\x76\x00\x67\
-\
-\x00\x07\
-\x0c\xf8\x5a\x07\
-\x00\x65\
-\x00\x79\x00\x65\x00\x2e\x00\x73\x00\x76\x00\x67\
-\x00\x17\
-\x06\xc6\x02\xa7\
-\x00\x74\
-\x00\x72\x00\x69\x00\x61\x00\x6e\x00\x67\x00\x6c\x00\x65\x00\x2d\x00\x73\x00\x74\x00\x72\x00\x6f\x00\x6b\x00\x65\x00\x64\x00\x2d\
-\x00\x31\x00\x35\x00\x2e\x00\x73\x00\x76\x00\x67\
-\x00\x0a\
-\x01\xca\x6d\x87\
-\x00\x62\
-\x00\x75\x00\x63\x00\x6b\x00\x65\x00\x74\x00\x2e\x00\x73\x00\x76\x00\x67\
-\x00\x12\
-\x04\xb2\x21\x47\
-\x00\x61\
-\x00\x6e\x00\x64\x00\x72\x00\x6f\x00\x69\x00\x64\x00\x2d\x00\x65\x00\x78\x00\x70\x00\x61\x00\x6e\x00\x64\x00\x2e\x00\x73\x00\x76\
-\x00\x67\
-\x00\x0a\
-\x0f\x68\x53\xe7\
-\x00\x61\
-\x00\x6e\x00\x63\x00\x68\x00\x6f\x00\x72\x00\x2e\x00\x73\x00\x76\x00\x67\
-\x00\x10\
-\x04\xa9\x22\xc7\
-\x00\x66\
-\x00\x69\x00\x6c\x00\x6c\x00\x65\x00\x64\x00\x62\x00\x75\x00\x63\x00\x6b\x00\x65\x00\x74\x00\x2e\x00\x73\x00\x76\x00\x67\
-\x00\x08\
-\x0c\xf7\x55\x87\
-\x00\x74\
-\x00\x65\x00\x78\x00\x74\x00\x2e\x00\x73\x00\x76\x00\x67\
-\x00\x09\
-\x0c\x9b\x89\xe7\
-\x00\x62\
-\x00\x72\x00\x75\x00\x73\x00\x68\x00\x2e\x00\x73\x00\x76\x00\x67\
-\x00\x0a\
-\x0a\x2d\x1b\xc7\
-\x00\x63\
-\x00\x69\x00\x72\x00\x63\x00\x6c\x00\x65\x00\x2e\x00\x73\x00\x76\x00\x67\
-\x00\x09\
-\x0b\x9e\x89\x07\
-\x00\x63\
-\x00\x68\x00\x65\x00\x63\x00\x6b\x00\x2e\x00\x73\x00\x76\x00\x67\
-\x00\x1b\
-\x0e\xb5\x68\xe7\
-\x00\x61\
-\x00\x6e\x00\x64\x00\x72\x00\x6f\x00\x69\x00\x64\x00\x2d\x00\x72\x00\x61\x00\x64\x00\x69\x00\x6f\x00\x2d\x00\x62\x00\x75\x00\x74\
-\x00\x74\x00\x6f\x00\x6e\x00\x2d\x00\x6f\x00\x6e\x00\x2e\x00\x73\x00\x76\x00\x67\
-\x00\x12\
-\x08\x79\x97\xe7\
-\x00\x61\
-\x00\x6e\x00\x64\x00\x72\x00\x6f\x00\x69\x00\x64\x00\x2d\x00\x63\x00\x61\x00\x6d\x00\x65\x00\x72\x00\x61\x00\x2e\x00\x73\x00\x76\
-\x00\x67\
-\x00\x10\
-\x08\xe4\xaf\x47\
-\x00\x61\
-\x00\x6e\x00\x64\x00\x72\x00\x6f\x00\x69\x00\x64\x00\x2d\x00\x64\x00\x6f\x00\x6e\x00\x65\x00\x2e\x00\x73\x00\x76\x00\x67\
-\x00\x0f\
-\x07\x0e\xc4\x87\
-\x00\x6f\
-\x00\x70\x00\x65\x00\x6e\x00\x70\x00\x6f\x00\x6c\x00\x79\x00\x67\x00\x6f\x00\x6e\x00\x2e\x00\x73\x00\x76\x00\x67\
-\x00\x08\
-\x08\xc8\x55\xe7\
-\x00\x73\
-\x00\x61\x00\x76\x00\x65\x00\x2e\x00\x73\x00\x76\x00\x67\
-\x00\x12\
-\x0c\x5e\xd4\xa7\
-\x00\x61\
-\x00\x6e\x00\x64\x00\x72\x00\x6f\x00\x69\x00\x64\x00\x2d\x00\x6c\x00\x6f\x00\x63\x00\x61\x00\x74\x00\x65\x00\x2e\x00\x73\x00\x76\
-\x00\x67\
-\x00\x08\
-\x04\xb2\x55\x47\
-\x00\x75\
-\x00\x6e\x00\x64\x00\x6f\x00\x2e\x00\x73\x00\x76\x00\x67\
-\x00\x0a\
-\x0a\xc8\x62\x67\
-\x00\x63\
-\x00\x65\x00\x6e\x00\x74\x00\x65\x00\x72\x00\x2e\x00\x73\x00\x76\x00\x67\
-\x00\x14\
-\x0f\xa5\xe0\xc7\
-\x00\x6d\
-\x00\x61\x00\x67\x00\x6e\x00\x69\x00\x66\x00\x79\x00\x69\x00\x6e\x00\x67\x00\x2d\x00\x67\x00\x6c\x00\x61\x00\x73\x00\x73\x00\x2e\
-\x00\x73\x00\x76\x00\x67\
-\x00\x1d\
-\x06\xec\xf4\xc7\
-\x00\x63\
-\x00\x68\x00\x65\x00\x76\x00\x72\x00\x6f\x00\x6e\x00\x2d\x00\x77\x00\x69\x00\x74\x00\x68\x00\x2d\x00\x63\x00\x69\x00\x72\x00\x63\
-\x00\x6c\x00\x65\x00\x2d\x00\x72\x00\x69\x00\x67\x00\x68\x00\x74\x00\x2e\x00\x73\x00\x76\x00\x67\
-\x00\x11\
-\x0c\xa7\xc7\x47\
-\x00\x63\
-\x00\x6c\x00\x6f\x00\x73\x00\x65\x00\x64\x00\x70\x00\x6f\x00\x6c\x00\x79\x00\x67\x00\x6f\x00\x6e\x00\x2e\x00\x73\x00\x76\x00\x67\
-\
-\x00\x19\
-\x0a\x43\x45\xc7\
-\x00\x61\
-\x00\x6e\x00\x64\x00\x72\x00\x6f\x00\x69\x00\x64\x00\x2d\x00\x61\x00\x72\x00\x72\x00\x6f\x00\x77\x00\x2d\x00\x66\x00\x6f\x00\x72\
-\x00\x77\x00\x61\x00\x72\x00\x64\x00\x2e\x00\x73\x00\x76\x00\x67\
-\x00\x0f\
-\x04\xf2\xa7\x87\
-\x00\x63\
-\x00\x6c\x00\x6f\x00\x73\x00\x65\x00\x64\x00\x63\x00\x75\x00\x72\x00\x76\x00\x65\x00\x2e\x00\x73\x00\x76\x00\x67\
-\x00\x08\
-\x05\xa8\x57\x87\
-\x00\x63\
-\x00\x6f\x00\x64\x00\x65\x00\x2e\x00\x73\x00\x76\x00\x67\
-\x00\x08\
-\x08\xf7\x57\x07\
-\x00\x67\
-\x00\x72\x00\x69\x00\x64\x00\x2e\x00\x73\x00\x76\x00\x67\
-\x00\x15\
-\x0f\xc4\x59\xe7\
-\x00\x73\
-\x00\x75\x00\x62\x00\x64\x00\x69\x00\x72\x00\x65\x00\x63\x00\x74\x00\x6f\x00\x72\x00\x79\x00\x2d\x00\x6c\x00\x65\x00\x66\x00\x74\
-\x00\x2e\x00\x73\x00\x76\x00\x67\
-\x00\x10\
-\x0c\x57\x65\x47\
-\x00\x61\
-\x00\x72\x00\x72\x00\x6f\x00\x77\x00\x2d\x00\x72\x00\x65\x00\x73\x00\x69\x00\x7a\x00\x65\x00\x2e\x00\x73\x00\x76\x00\x67\
-\x00\x0d\
-\x05\x20\xce\x87\
-\x00\x6f\
-\x00\x70\x00\x65\x00\x6e\x00\x63\x00\x75\x00\x72\x00\x76\x00\x65\x00\x2e\x00\x73\x00\x76\x00\x67\
-\x00\x17\
-\x07\x87\x48\x27\
-\x00\x61\
-\x00\x6e\x00\x64\x00\x72\x00\x6f\x00\x69\x00\x64\x00\x2d\x00\x66\x00\x6f\x00\x6c\x00\x64\x00\x65\x00\x72\x00\x2d\x00\x6f\x00\x70\
-\x00\x65\x00\x6e\x00\x2e\x00\x73\x00\x76\x00\x67\
-\x00\x19\
-\x0f\xef\x7b\xe7\
-\x00\x61\
-\x00\x6e\x00\x64\x00\x72\x00\x6f\x00\x69\x00\x64\x00\x2d\x00\x63\x00\x6f\x00\x6c\x00\x6f\x00\x72\x00\x2d\x00\x70\x00\x61\x00\x6c\
-\x00\x65\x00\x74\x00\x74\x00\x65\x00\x2e\x00\x73\x00\x76\x00\x67\
-\x00\x12\
-\x08\x55\xef\xc7\
-\x00\x61\
-\x00\x6e\x00\x64\x00\x72\x00\x6f\x00\x69\x00\x64\x00\x2d\x00\x64\x00\x65\x00\x6c\x00\x65\x00\x74\x00\x65\x00\x2e\x00\x73\x00\x76\
-\x00\x67\
-\x00\x08\
-\x0b\x07\x57\xa7\
-\x00\x65\
-\x00\x64\x00\x69\x00\x74\x00\x2e\x00\x73\x00\x76\x00\x67\
-\x00\x0f\
-\x09\x76\x60\xc7\
-\x00\x63\
-\x00\x6c\x00\x6f\x00\x73\x00\x65\x00\x2d\x00\x72\x00\x6f\x00\x75\x00\x6e\x00\x64\x00\x2e\x00\x73\x00\x76\x00\x67\
-\x00\x0e\
-\x0f\xcb\xd5\xc7\
-\x00\x70\
-\x00\x6c\x00\x75\x00\x73\x00\x2d\x00\x72\x00\x6f\x00\x75\x00\x6e\x00\x64\x00\x2e\x00\x73\x00\x76\x00\x67\
-\x00\x13\
-\x03\x24\x75\x47\
-\x00\x61\
-\x00\x6e\x00\x64\x00\x72\x00\x6f\x00\x69\x00\x64\x00\x2d\x00\x72\x00\x65\x00\x66\x00\x72\x00\x65\x00\x73\x00\x68\x00\x2e\x00\x73\
-\x00\x76\x00\x67\
-\x00\x0e\
-\x05\xed\x38\x67\
-\x00\x61\
-\x00\x72\x00\x72\x00\x6f\x00\x77\x00\x2d\x00\x6d\x00\x6f\x00\x76\x00\x65\x00\x2e\x00\x73\x00\x76\x00\x67\
-\x00\x11\
-\x01\x60\xbc\x47\
-\x00\x73\
-\x00\x6f\x00\x63\x00\x69\x00\x61\x00\x6c\x00\x2d\x00\x70\x00\x79\x00\x74\x00\x68\x00\x6f\x00\x6e\x00\x2e\x00\x73\x00\x76\x00\x67\
-\
-\x00\x16\
-\x01\xfb\x76\x27\
-\x00\x61\
-\x00\x6e\x00\x64\x00\x72\x00\x6f\x00\x69\x00\x64\x00\x2d\x00\x61\x00\x72\x00\x72\x00\x6f\x00\x77\x00\x2d\x00\x62\x00\x61\x00\x63\
-\x00\x6b\x00\x2e\x00\x73\x00\x76\x00\x67\
-\x00\x08\
-\x0b\xb2\x55\xc7\
-\x00\x72\
-\x00\x65\x00\x64\x00\x6f\x00\x2e\x00\x73\x00\x76\x00\x67\
-\x00\x10\
-\x06\xe3\xaf\xe7\
-\x00\x61\
-\x00\x6e\x00\x64\x00\x72\x00\x6f\x00\x69\x00\x64\x00\x2d\x00\x68\x00\x61\x00\x6e\x00\x64\x00\x2e\x00\x73\x00\x76\x00\x67\
-\x00\x1c\
-\x08\x8a\x79\x07\
-\x00\x61\
-\x00\x6e\x00\x64\x00\x72\x00\x6f\x00\x69\x00\x64\x00\x2d\x00\x72\x00\x61\x00\x64\x00\x69\x00\x6f\x00\x2d\x00\x62\x00\x75\x00\x74\
-\x00\x74\x00\x6f\x00\x6e\x00\x2d\x00\x6f\x00\x66\x00\x66\x00\x2e\x00\x73\x00\x76\x00\x67\
-\x00\x10\
-\x08\x89\xfa\x47\
-\x00\x63\
-\x00\x65\x00\x6e\x00\x74\x00\x65\x00\x72\x00\x6f\x00\x72\x00\x69\x00\x67\x00\x69\x00\x6e\x00\x2e\x00\x73\x00\x76\x00\x67\
-\x00\x1c\
-\x04\x66\xe1\x67\
-\x00\x63\
-\x00\x68\x00\x65\x00\x76\x00\x72\x00\x6f\x00\x6e\x00\x2d\x00\x77\x00\x69\x00\x74\x00\x68\x00\x2d\x00\x63\x00\x69\x00\x72\x00\x63\
-\x00\x6c\x00\x65\x00\x2d\x00\x6c\x00\x65\x00\x66\x00\x74\x00\x2e\x00\x73\x00\x76\x00\x67\
-"
-
-qt_resource_struct_v1 = b"\
-\x00\x00\x00\x00\x00\x02\x00\x00\x00\x01\x00\x00\x00\x01\
-\x00\x00\x00\x00\x00\x02\x00\x00\x00\x2c\x00\x00\x00\x02\
-\x00\x00\x05\x58\x00\x00\x00\x00\x00\x01\x00\x00\x79\x2d\
-\x00\x00\x00\x80\x00\x00\x00\x00\x00\x01\x00\x00\x0b\x5d\
-\x00\x00\x05\x80\x00\x00\x00\x00\x00\x01\x00\x00\x80\x9c\
-\x00\x00\x05\x0a\x00\x00\x00\x00\x00\x01\x00\x00\x73\x49\
-\x00\x00\x06\x52\x00\x00\x00\x00\x00\x01\x00\x00\x94\x0d\
-\x00\x00\x00\xde\x00\x01\x00\x00\x00\x01\x00\x00\x15\x98\
-\x00\x00\x00\x9a\x00\x00\x00\x00\x00\x01\x00\x00\x10\xfd\
-\x00\x00\x02\x54\x00\x00\x00\x00\x00\x01\x00\x00\x36\x7f\
-\x00\x00\x03\x52\x00\x00\x00\x00\x00\x01\x00\x00\x4c\x2c\
-\x00\x00\x03\xf8\x00\x00\x00\x00\x00\x01\x00\x00\x5a\x3a\
-\x00\x00\x03\x76\x00\x00\x00\x00\x00\x01\x00\x00\x50\xd3\
-\x00\x00\x05\x36\x00\x00\x00\x00\x00\x01\x00\x00\x76\x68\
-\x00\x00\x00\x4c\x00\x00\x00\x00\x00\x01\x00\x00\x06\x8f\
-\x00\x00\x05\xc8\x00\x00\x00\x00\x00\x01\x00\x00\x87\x58\
-\x00\x00\x02\xb2\x00\x00\x00\x00\x00\x01\x00\x00\x41\xb3\
-\x00\x00\x01\xf0\x00\x00\x00\x00\x00\x01\x00\x00\x2b\x75\
-\x00\x00\x04\x18\x00\x00\x00\x00\x00\x01\x00\x00\x5e\xb1\
-\x00\x00\x04\x84\x00\x00\x00\x00\x00\x01\x00\x00\x67\x17\
-\x00\x00\x01\xa0\x00\x00\x00\x00\x00\x01\x00\x00\x25\xeb\
-\x00\x00\x06\x2c\x00\x00\x00\x00\x00\x01\x00\x00\x90\x0b\
-\x00\x00\x05\xee\x00\x00\x00\x00\x00\x01\x00\x00\x8d\x17\
-\x00\x00\x02\x14\x00\x00\x00\x00\x00\x01\x00\x00\x2f\x8c\
-\x00\x00\x01\xca\x00\x00\x00\x00\x00\x01\x00\x00\x29\x05\
-\x00\x00\x03\x8c\x00\x01\x00\x00\x00\x01\x00\x00\x55\x73\
-\x00\x00\x04\xc4\x00\x00\x00\x00\x00\x01\x00\x00\x6d\x16\
-\x00\x00\x01\x32\x00\x00\x00\x00\x00\x01\x00\x00\x1c\xb6\
-\x00\x00\x03\x1a\x00\x00\x00\x00\x00\x01\x00\x00\x49\xb6\
-\x00\x00\x02\x6a\x00\x00\x00\x00\x00\x01\x00\x00\x3a\x9a\
-\x00\x00\x04\xae\x00\x00\x00\x00\x00\x01\x00\x00\x69\xb3\
-\x00\x00\x01\x4c\x00\x00\x00\x00\x00\x01\x00\x00\x1f\xa1\
-\x00\x00\x05\xb2\x00\x00\x00\x00\x00\x01\x00\x00\x83\x12\
-\x00\x00\x03\xd2\x00\x00\x00\x00\x00\x01\x00\x00\x57\xbf\
-\x00\x00\x02\x2a\x00\x00\x00\x00\x00\x01\x00\x00\x32\x27\
-\x00\x00\x01\x1a\x00\x00\x00\x00\x00\x01\x00\x00\x18\xd8\
-\x00\x00\x02\xf2\x00\x00\x00\x00\x00\x01\x00\x00\x45\x90\
-\x00\x00\x00\x10\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\
-\x00\x00\x01\x04\x00\x00\x00\x00\x00\x01\x00\x00\x17\xb8\
-\x00\x00\x00\x38\x00\x00\x00\x00\x00\x01\x00\x00\x02\xaf\
-\x00\x00\x01\x64\x00\x00\x00\x00\x00\x01\x00\x00\x22\xa8\
-\x00\x00\x00\xc4\x00\x00\x00\x00\x00\x01\x00\x00\x14\x2b\
-\x00\x00\x02\x84\x00\x00\x00\x00\x00\x01\x00\x00\x3d\xf8\
-\x00\x00\x03\xa2\x00\x00\x00\x00\x00\x01\x00\x00\x57\x4f\
-\x00\x00\x04\xe8\x00\x00\x00\x00\x00\x01\x00\x00\x70\x57\
-\x00\x00\x04\x4c\x00\x00\x00\x00\x00\x01\x00\x00\x61\xfd\
-"
-
-qt_resource_struct_v2 = b"\
-\x00\x00\x00\x00\x00\x02\x00\x00\x00\x01\x00\x00\x00\x01\
-\x00\x00\x00\x00\x00\x00\x00\x00\
-\x00\x00\x00\x00\x00\x02\x00\x00\x00\x2c\x00\x00\x00\x02\
-\x00\x00\x00\x00\x00\x00\x00\x00\
-\x00\x00\x05\x58\x00\x00\x00\x00\x00\x01\x00\x00\x79\x2d\
-\x00\x00\x01\x8e\x1d\x20\x9b\xc4\
-\x00\x00\x00\x80\x00\x00\x00\x00\x00\x01\x00\x00\x0b\x5d\
-\x00\x00\x01\x8e\x1d\x20\x9b\xc3\
-\x00\x00\x05\x80\x00\x00\x00\x00\x00\x01\x00\x00\x80\x9c\
-\x00\x00\x01\x8e\x1d\x20\x9b\xc3\
-\x00\x00\x05\x0a\x00\x00\x00\x00\x00\x01\x00\x00\x73\x49\
-\x00\x00\x01\x8e\x1d\x20\x9b\xc3\
-\x00\x00\x06\x52\x00\x00\x00\x00\x00\x01\x00\x00\x94\x0d\
-\x00\x00\x01\x8e\x1d\x20\x9b\xc3\
-\x00\x00\x00\xde\x00\x01\x00\x00\x00\x01\x00\x00\x15\x98\
-\x00\x00\x01\x8e\x1d\x20\x9b\xc4\
-\x00\x00\x00\x9a\x00\x00\x00\x00\x00\x01\x00\x00\x10\xfd\
-\x00\x00\x01\x8e\x1d\x20\x9b\xc3\
-\x00\x00\x02\x54\x00\x00\x00\x00\x00\x01\x00\x00\x36\x7f\
-\x00\x00\x01\x8e\x1d\x20\x9b\xc4\
-\x00\x00\x03\x52\x00\x00\x00\x00\x00\x01\x00\x00\x4c\x2c\
-\x00\x00\x01\x8e\x1d\x20\x9b\xc4\
-\x00\x00\x03\xf8\x00\x00\x00\x00\x00\x01\x00\x00\x5a\x3a\
-\x00\x00\x01\x8e\x1d\x20\x9b\xc4\
-\x00\x00\x03\x76\x00\x00\x00\x00\x00\x01\x00\x00\x50\xd3\
-\x00\x00\x01\x8e\x1d\x20\x9b\xc4\
-\x00\x00\x05\x36\x00\x00\x00\x00\x00\x01\x00\x00\x76\x68\
-\x00\x00\x01\x8e\x1d\x20\x9b\xc3\
-\x00\x00\x00\x4c\x00\x00\x00\x00\x00\x01\x00\x00\x06\x8f\
-\x00\x00\x01\x8e\x1d\x20\x9b\xc4\
-\x00\x00\x05\xc8\x00\x00\x00\x00\x00\x01\x00\x00\x87\x58\
-\x00\x00\x01\x8e\x1d\x20\x9b\xc3\
-\x00\x00\x02\xb2\x00\x00\x00\x00\x00\x01\x00\x00\x41\xb3\
-\x00\x00\x01\x8e\x1d\x20\x9b\xc4\
-\x00\x00\x01\xf0\x00\x00\x00\x00\x00\x01\x00\x00\x2b\x75\
-\x00\x00\x01\x8e\x1d\x20\x9b\xc4\
-\x00\x00\x04\x18\x00\x00\x00\x00\x00\x01\x00\x00\x5e\xb1\
-\x00\x00\x01\x8e\x1d\x20\x9b\xc3\
-\x00\x00\x04\x84\x00\x00\x00\x00\x00\x01\x00\x00\x67\x17\
-\x00\x00\x01\x8e\x1d\x20\x9b\xc3\
-\x00\x00\x01\xa0\x00\x00\x00\x00\x00\x01\x00\x00\x25\xeb\
-\x00\x00\x01\x8e\x1d\x20\x9b\xc3\
-\x00\x00\x06\x2c\x00\x00\x00\x00\x00\x01\x00\x00\x90\x0b\
-\x00\x00\x01\x8e\x1d\x20\x9b\xc3\
-\x00\x00\x05\xee\x00\x00\x00\x00\x00\x01\x00\x00\x8d\x17\
-\x00\x00\x01\x8e\x1d\x20\x9b\xc3\
-\x00\x00\x02\x14\x00\x00\x00\x00\x00\x01\x00\x00\x2f\x8c\
-\x00\x00\x01\x8e\x1d\x20\x9b\xc4\
-\x00\x00\x01\xca\x00\x00\x00\x00\x00\x01\x00\x00\x29\x05\
-\x00\x00\x01\x8e\x1d\x20\x9b\xc3\
-\x00\x00\x03\x8c\x00\x01\x00\x00\x00\x01\x00\x00\x55\x73\
-\x00\x00\x01\x8e\x1d\x20\x9b\xc4\
-\x00\x00\x04\xc4\x00\x00\x00\x00\x00\x01\x00\x00\x6d\x16\
-\x00\x00\x01\x8e\x1d\x20\x9b\xc4\
-\x00\x00\x01\x32\x00\x00\x00\x00\x00\x01\x00\x00\x1c\xb6\
-\x00\x00\x01\x8e\x1d\x20\x9b\xc4\
-\x00\x00\x03\x1a\x00\x00\x00\x00\x00\x01\x00\x00\x49\xb6\
-\x00\x00\x01\x8e\x1d\x20\x9b\xc3\
-\x00\x00\x02\x6a\x00\x00\x00\x00\x00\x01\x00\x00\x3a\x9a\
-\x00\x00\x01\x8e\x1d\x20\x9b\xc3\
-\x00\x00\x04\xae\x00\x00\x00\x00\x00\x01\x00\x00\x69\xb3\
-\x00\x00\x01\x8e\x1d\x20\x9b\xc4\
-\x00\x00\x01\x4c\x00\x00\x00\x00\x00\x01\x00\x00\x1f\xa1\
-\x00\x00\x01\x8e\x1d\x20\x9b\xc3\
-\x00\x00\x05\xb2\x00\x00\x00\x00\x00\x01\x00\x00\x83\x12\
-\x00\x00\x01\x8e\x1d\x20\x9b\xc4\
-\x00\x00\x03\xd2\x00\x00\x00\x00\x00\x01\x00\x00\x57\xbf\
-\x00\x00\x01\x8e\x1d\x20\x9b\xc3\
-\x00\x00\x02\x2a\x00\x00\x00\x00\x00\x01\x00\x00\x32\x27\
-\x00\x00\x01\x8e\x1d\x20\x9b\xc3\
-\x00\x00\x01\x1a\x00\x00\x00\x00\x00\x01\x00\x00\x18\xd8\
-\x00\x00\x01\x8e\x1d\x20\x9b\xc3\
-\x00\x00\x02\xf2\x00\x00\x00\x00\x00\x01\x00\x00\x45\x90\
-\x00\x00\x01\x8e\x1d\x20\x9b\xc4\
-\x00\x00\x00\x10\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\
-\x00\x00\x01\x8e\x1d\x20\x9b\xc3\
-\x00\x00\x01\x04\x00\x00\x00\x00\x00\x01\x00\x00\x17\xb8\
-\x00\x00\x01\x8e\x1d\x20\x9b\xc4\
-\x00\x00\x00\x38\x00\x00\x00\x00\x00\x01\x00\x00\x02\xaf\
-\x00\x00\x01\x8e\x1d\x20\x9b\xc4\
-\x00\x00\x01\x64\x00\x00\x00\x00\x00\x01\x00\x00\x22\xa8\
-\x00\x00\x01\x8e\x1d\x20\x9b\xc3\
-\x00\x00\x00\xc4\x00\x00\x00\x00\x00\x01\x00\x00\x14\x2b\
-\x00\x00\x01\x8e\x1d\x20\x9b\xc3\
-\x00\x00\x02\x84\x00\x00\x00\x00\x00\x01\x00\x00\x3d\xf8\
-\x00\x00\x01\x8e\x1d\x20\x9b\xc4\
-\x00\x00\x03\xa2\x00\x00\x00\x00\x00\x01\x00\x00\x57\x4f\
-\x00\x00\x01\x8e\x1d\x20\x9b\xc4\
-\x00\x00\x04\xe8\x00\x00\x00\x00\x00\x01\x00\x00\x70\x57\
-\x00\x00\x01\x8e\x1d\x20\x9b\xc4\
-\x00\x00\x04\x4c\x00\x00\x00\x00\x00\x01\x00\x00\x61\xfd\
-\x00\x00\x01\x8e\x1d\x20\x9b\xc3\
-"
-
-qt_version = [int(v) for v in QtCore.qVersion().split('.')]
-if qt_version < [5, 8, 0]:
-    rcc_version = 1
-    qt_resource_struct = qt_resource_struct_v1
-else:
-    rcc_version = 2
-    qt_resource_struct = qt_resource_struct_v2
-
-def qInitResources():
-    QtCore.qRegisterResourceData(rcc_version, qt_resource_struct, qt_resource_name, qt_resource_data)
-
-def qCleanupResources():
-    QtCore.qUnregisterResourceData(rcc_version, qt_resource_struct, qt_resource_name, qt_resource_data)
-
-qInitResources()

Modified: trunk/Master/texmf-dist/asymptote/GUI/labelEditor.py
===================================================================
--- trunk/Master/texmf-dist/asymptote/GUI/labelEditor.py	2025-02-10 15:30:00 UTC (rev 73846)
+++ trunk/Master/texmf-dist/asymptote/GUI/labelEditor.py	2025-02-10 16:49:00 UTC (rev 73847)
@@ -1,6 +1,6 @@
 #!/usr/bin/env python3
 
-from pyUIClass.labelTextEditor import Ui_Dialog
+from xasyqtui.labelTextEditor import Ui_Dialog
 import PyQt5.QtWidgets as QtWidgets
 import PyQt5.QtSvg as QtSvg
 import PyQt5.QtGui as QtGui

Modified: trunk/Master/texmf-dist/asymptote/GUI/setup.py
===================================================================
--- trunk/Master/texmf-dist/asymptote/GUI/setup.py	2025-02-10 15:30:00 UTC (rev 73846)
+++ trunk/Master/texmf-dist/asymptote/GUI/setup.py	2025-02-10 16:49:00 UTC (rev 73847)
@@ -1,11 +1,11 @@
 #!/usr/bin/env python3
 
-import xasyVersion
+from xasyversion import version
 from setuptools import setup
 
 setup(
     name="xasy",
-    version=xasyVersion.xasyVersion,
+    version=version.VERSION,
     author="Supakorn Rassameemasmuang, Orest Shardt, and John C. Bowman",
     description="User interface for Asymptote, a vector graphics language",
     url="https://asymptote.sourceforge.io",

Modified: trunk/Master/texmf-dist/asymptote/GUI/xasy.py
===================================================================
--- trunk/Master/texmf-dist/asymptote/GUI/xasy.py	2025-02-10 15:30:00 UTC (rev 73846)
+++ trunk/Master/texmf-dist/asymptote/GUI/xasy.py	2025-02-10 16:49:00 UTC (rev 73847)
@@ -1,6 +1,11 @@
 #!/usr/bin/env python3
 
-import sys, signal, os
+import sys
+import pathlib
+
+sys.path.append(str(pathlib.Path(__file__).resolve().parent))
+
+import signal, os
 import PyQt5.QtWidgets as QtWidgets
 import PyQt5.QtCore as QtCore
 from Window1 import MainWindow1

Modified: trunk/Master/texmf-dist/asymptote/GUI/xasy2asy.py
===================================================================
--- trunk/Master/texmf-dist/asymptote/GUI/xasy2asy.py	2025-02-10 15:30:00 UTC (rev 73846)
+++ trunk/Master/texmf-dist/asymptote/GUI/xasy2asy.py	2025-02-10 16:49:00 UTC (rev 73847)
@@ -30,6 +30,8 @@
 import io
 import atexit
 import DebugFlags
+import threading
+from typing import Optional
 
 import xasyUtils as xu
 import xasyArgs as xa
@@ -70,7 +72,14 @@
     """
 
     xasy=chr(4)+'\n'
-    def __init__(self, path=None, keepFiles=DebugFlags.keepFiles, keepDefaultArgs=True):
+    def __init__(
+        self,
+        path=None,
+        addrArgsParam: Optional[list[str]] = None,
+        keepFiles=DebugFlags.keepFiles,
+        keepDefaultArgs=True
+    ):
+        addrArgs = addrArgsParam or []
         if path is None:
             path = xa.getArgs().asypath
             if path is None:
@@ -92,10 +101,7 @@
             self.istream = os.fdopen(ra, 'r')
 
         self.keepFiles = keepFiles
-        if sys.platform[:3] == 'win':
-            self.tmpdir = tempfile.mkdtemp(prefix='xasyData_',dir='./')+'/'
-        else:
-            self.tmpdir = tempfile.mkdtemp(prefix='xasyData_')+os.sep
+        self.tmpdir = tempfile.mkdtemp(prefix='xasyData_')+os.sep
 
         if xa.getArgs().render:
             renderDensity=xa.getArgs().render
@@ -106,7 +112,15 @@
                 renderDensity = 2
         renderDensity=max(renderDensity,1)
 
-        self.args=['-xasy', '-noV', '-q', '-outformat=', '-inpipe=' + str(rx), '-outpipe=' + str(wa), '-render='+str(renderDensity), '-o', self.tmpdir]
+        self.args=addrArgs + [
+            '-xasy',
+            '-noV',
+            '-q',
+            '-outformat=',
+            '-inpipe=' + str(rx),
+            '-outpipe=' + str(wa),
+            '-render='+str(renderDensity),
+            '-o', self.tmpdir]
 
         self.asyPath = path
         self.asyProcess = None
@@ -115,9 +129,11 @@
         """ starts a subprocess (opens a pipe) """
         try:
             if sys.platform[:3] == 'win':
-                self.asyProcess = subprocess.Popen([self.asyPath] + self.args,
-                                                stdin=subprocess.PIPE, stderr=subprocess.PIPE,
-                                                universal_newlines=True)
+                self.asyProcess = subprocess.Popen(
+                    [self.asyPath] + self.args,
+                    stdin=subprocess.PIPE, stderr=subprocess.PIPE,
+                    text=True
+                )
                 self.ostream = self.asyProcess.stdin
                 self.istream = self.asyProcess.stderr
             else:
@@ -584,23 +600,6 @@
 
         return newObj
 
-    @classmethod
-    def fromBezierPoints(cls, pointList: list, engine=None):
-        if not pointList:
-            return None
-        assert isinstance(pointList[0], BezierCurveEditor.BezierPoint)
-        nodeList = []
-        controlList = []
-        for point in pointList:
-            nodeList.append(BezierCurveEditor.QPoint2Tuple(point.point))
-            if point.rCtrlPoint is not None:  # first
-                controlList.append([BezierCurveEditor.QPoint2Tuple(point.rCtrlPoint)])
-            if point.lCtrlPoint is not None:  # last
-                controlList[-1].append(BezierCurveEditor.QPoint2Tuple(point.lCtrlPoint))
-        newPath = asyPath(asyengine=engine)
-        newPath.initFromControls(nodeList, controlList)
-        return newPath
-
     def setInfo(self, path):
         self.nodeSet = copy.copy(path.nodeSet)
         self.linkSet = copy.copy(path.linkSet)
@@ -1536,8 +1535,8 @@
 
     def getObjectCode(self, asy2psmap=identity()):
         numeric=r'([-+]?(?:(?:\d*\.\d+)|(?:\d+\.?)))'
-        rSize=re.compile("size\(\("+numeric+","+numeric+","+numeric+","
-                         +numeric+","+numeric+","+numeric+"\)\); "+
+        rSize=re.compile(r"size\(\("+numeric+","+numeric+","+numeric+","
+                         +numeric+","+numeric+","+numeric+r"\)\); "+
                          self.resizeComment)
 
         newScript = self.getReplacedKeysCode(self.findNonIdKeys())

Modified: trunk/Master/texmf-dist/asymptote/GUI/xasyArgs.py
===================================================================
--- trunk/Master/texmf-dist/asymptote/GUI/xasyArgs.py	2025-02-10 15:30:00 UTC (rev 73846)
+++ trunk/Master/texmf-dist/asymptote/GUI/xasyArgs.py	2025-02-10 16:49:00 UTC (rev 73847)
@@ -1,6 +1,6 @@
 #!/usr/bin/env python3
 import argparse
-import xasyVersion
+from xasyversion.version import VERSION as xasyVersion
 import PyQt5.QtCore as QtCore
 # Add arguments here.
 
@@ -11,7 +11,7 @@
                         help='Custom path to asy executable')
     parser.add_argument('-v', '-version', '--version',
                         help='Version number', action='version',
-                        version='xasy v{0}'.format(xasyVersion.xasyVersion))
+                        version='xasy v{0}'.format(xasyVersion))
     parser.add_argument('-l', '-language', '--language',
                         help='language')
     parser.add_argument('-x', '-mag', '--mag',
@@ -20,6 +20,11 @@
     parser.add_argument('-render', '--render',
                         help='Number of pixels per bp in 3D rendered bitmaps',
                         default=None, type=float)
+    parser.add_argument('-additional-asy-args', '--additional-asy-args',
+                        help='Comma-separated values of additional arguments to pass'
+                             'to Asymptote',
+                        dest='additionalAsyArgs',
+                        type=str, default=None)
     parser.add_argument(
         'filename',
         help='Filename to load (if omitted, initialize blank canvas)',

Modified: trunk/Master/texmf-dist/asymptote/GUI/xasyFile.py
===================================================================
--- trunk/Master/texmf-dist/asymptote/GUI/xasyFile.py	2025-02-10 15:30:00 UTC (rev 73846)
+++ trunk/Master/texmf-dist/asymptote/GUI/xasyFile.py	2025-02-10 16:49:00 UTC (rev 73847)
@@ -32,7 +32,7 @@
     testMatch = re.match(
         r'^{0:s}\s*\(\s*\"([^\"]+)\"\s*,\s*\(([-\d, .]+)\)\s*\)'.format(mapString), line.strip())
     if testMatch is None:
-        mapOnlyMatch = re.match(r'^{0:s}\s*\(\s *\"([^\"]+)\"\s*\)'.format(mapString), line.strip())
+        mapOnlyMatch = re.match(r'^{0:s}\s*\(\s*\"([^\"]+)\"\s*\)'.format(mapString), line.strip())
         if mapOnlyMatch is None:
             return None
         else:
@@ -66,14 +66,18 @@
     return final_str, transfDict
 
 def xasy2asyCode(xasyItems, asy2psmap):
-    asyCode = ''
-    for item in xasyItems:
-        asyCode += item.getTransformCode(asy2psmap)
-    for item in xasyItems:
-        asyCode += item.getObjectCode(asy2psmap)
+    with io.StringIO() as asyCode:
+        for item in xasyItems:
+            asyCode.write(item.getTransformCode(asy2psmap))
+        for item in xasyItems:
+            asyCode.write(item.getObjectCode(asy2psmap))
 
-    asyCode += 'size('+str(asy2psmap*xasy2asy.yflip())+'); '+ xasy2asy.xasyItem.resizeComment+'\n'
-    return asyCode
+        asyCode.write(
+            'size('+str(asy2psmap*xasy2asy.yflip())+'); ' +
+            xasy2asy.xasyItem.resizeComment +
+            '\n'
+        )
+        return asyCode.getvalue()
 
 def saveFile(file, xasyItems, asy2psmap):
     """Write a list of xasyItems to a file"""

Modified: trunk/Master/texmf-dist/asymptote/GUI/xasyOptions.py
===================================================================
--- trunk/Master/texmf-dist/asymptote/GUI/xasyOptions.py	2025-02-10 15:30:00 UTC (rev 73846)
+++ trunk/Master/texmf-dist/asymptote/GUI/xasyOptions.py	2025-02-10 16:49:00 UTC (rev 73847)
@@ -68,9 +68,17 @@
         self.options = self.defaultOptions()
         self.load()
 
-    def __getitem__(self, item):
-        return self.options[item]
+    def __getitem__(self, key):
+        return self.options[key]
 
+    def __contains__(self, key):
+        return key in self.options
+
+    def get(self, key, default=None):
+        if key not in self.options:
+            return default
+        return self.options[key]
+
     def __setitem__(self, key, value):
         self.options[key] = value
 
@@ -91,9 +99,10 @@
         except (IOError, ModuleNotFoundError):
             self.setDefaults()
         else:
-            for key in self.options.keys():
+            for key, val in self.options.items():
                 if key in newOptions:
-                    assert isinstance(newOptions[key], type(self.options[key]))
+                    if val is not None:
+                        assert isinstance(newOptions[key], type(val))
                 else:
                     newOptions[key] = self.options[key]
             self.options = newOptions

Modified: trunk/Master/texmf-dist/asymptote/GUI/xasySvg.py
===================================================================
--- trunk/Master/texmf-dist/asymptote/GUI/xasySvg.py	2025-02-10 15:30:00 UTC (rev 73846)
+++ trunk/Master/texmf-dist/asymptote/GUI/xasySvg.py	2025-02-10 16:49:00 UTC (rev 73847)
@@ -1,22 +1,38 @@
 #!/usr/bin/env python3
-
 import PyQt5.QtGui as QtGui
 import PyQt5.QtWidgets as QtWidgets
-import io
 import subprocess
 import sys
+import xasyOptions as xo
 
-class SvgObject():
+
+class SvgObject:
     def __init__(self, file: str):
-        self.file=file
+        self.file = file
 
-    def render(self, dpi:int) -> QtGui.QImage:
+    def _create_call_arguments(self, dpi: int):
+        settings = xo.BasicConfigs.defaultOpt
+        return [
+            settings.get("rsvgConverterPath") or "rsvg-convert",
+            f"--dpi-x={dpi}",
+            f"--dpi-y={dpi}",
+            "--format=png",
+            self.file,
+        ]
+
+    def render(self, dpi: int) -> QtGui.QImage:
+        callArgs = self._create_call_arguments(dpi)
         try:
-            rawDataProc = subprocess.Popen(['rsvg-convert', '--dpi-x', str(dpi),
-                                            '--dpi-y', str(dpi), self.file],
-                                           stdout=subprocess.PIPE)
-        except:
-            QtWidgets.QMessageBox.about(None,'rsvg-convert missing','Please install rsvg-convert version >= 2.40 in your path.')
+            rawDataProc = subprocess.run(
+                callArgs,
+                stdout=subprocess.PIPE,
+            )
+        except OSError:
+            QtWidgets.QMessageBox.about(
+                None,
+                "rsvg-convert missing",
+                "Please install rsvg-convert version >= 2.40.",
+            )
             sys.exit(-1)
 
-        return QtGui.QImage.fromData(rawDataProc.stdout.read(), 'PNG')
+        return QtGui.QImage.fromData(rawDataProc.stdout, "PNG")

Added: trunk/Master/texmf-dist/asymptote/GUI/xasyicons/icons_rc.py
===================================================================
--- trunk/Master/texmf-dist/asymptote/GUI/xasyicons/icons_rc.py	                        (rev 0)
+++ trunk/Master/texmf-dist/asymptote/GUI/xasyicons/icons_rc.py	2025-02-10 16:49:00 UTC (rev 73847)
@@ -0,0 +1,2903 @@
+# -*- coding: utf-8 -*-
+
+# Resource object code
+#
+# Created by: The Resource Compiler for PyQt5 (Qt v5.15.15)
+#
+# WARNING! All changes made in this file will be lost!
+
+from PyQt5 import QtCore
+
+qt_resource_data = b"\
+\x00\x00\x07\x6b\
+\x3c\
+\x3f\x78\x6d\x6c\x20\x76\x65\x72\x73\x69\x6f\x6e\x3d\x22\x31\x2e\
+\x30\x22\x20\x65\x6e\x63\x6f\x64\x69\x6e\x67\x3d\x22\x75\x74\x66\
+\x2d\x38\x22\x3f\x3e\x0a\x3c\x21\x2d\x2d\x20\x47\x65\x6e\x65\x72\
+\x61\x74\x6f\x72\x3a\x20\x41\x64\x6f\x62\x65\x20\x49\x6c\x6c\x75\
+\x73\x74\x72\x61\x74\x6f\x72\x20\x31\x36\x2e\x32\x2e\x31\x2c\x20\
+\x53\x56\x47\x20\x45\x78\x70\x6f\x72\x74\x20\x50\x6c\x75\x67\x2d\
+\x49\x6e\x20\x2e\x20\x53\x56\x47\x20\x56\x65\x72\x73\x69\x6f\x6e\
+\x3a\x20\x36\x2e\x30\x30\x20\x42\x75\x69\x6c\x64\x20\x30\x29\x20\
+\x20\x2d\x2d\x3e\x0a\x3c\x21\x44\x4f\x43\x54\x59\x50\x45\x20\x73\
+\x76\x67\x20\x50\x55\x42\x4c\x49\x43\x20\x22\x2d\x2f\x2f\x57\x33\
+\x43\x2f\x2f\x44\x54\x44\x20\x53\x56\x47\x20\x31\x2e\x31\x2f\x2f\
+\x45\x4e\x22\x20\x22\x68\x74\x74\x70\x3a\x2f\x2f\x77\x77\x77\x2e\
+\x77\x33\x2e\x6f\x72\x67\x2f\x47\x72\x61\x70\x68\x69\x63\x73\x2f\
+\x53\x56\x47\x2f\x31\x2e\x31\x2f\x44\x54\x44\x2f\x73\x76\x67\x31\
+\x31\x2e\x64\x74\x64\x22\x3e\x0a\x3c\x73\x76\x67\x20\x76\x65\x72\
+\x73\x69\x6f\x6e\x3d\x22\x31\x2e\x31\x22\x20\x69\x64\x3d\x22\x4c\
+\x61\x79\x65\x72\x5f\x31\x22\x20\x78\x6d\x6c\x6e\x73\x3d\x22\x68\
+\x74\x74\x70\x3a\x2f\x2f\x77\x77\x77\x2e\x77\x33\x2e\x6f\x72\x67\
+\x2f\x32\x30\x30\x30\x2f\x73\x76\x67\x22\x20\x78\x6d\x6c\x6e\x73\
+\x3a\x78\x6c\x69\x6e\x6b\x3d\x22\x68\x74\x74\x70\x3a\x2f\x2f\x77\
+\x77\x77\x2e\x77\x33\x2e\x6f\x72\x67\x2f\x31\x39\x39\x39\x2f\x78\
+\x6c\x69\x6e\x6b\x22\x20\x78\x3d\x22\x30\x70\x78\x22\x20\x79\x3d\
+\x22\x30\x70\x78\x22\x0a\x09\x20\x77\x69\x64\x74\x68\x3d\x22\x35\
+\x31\x32\x70\x78\x22\x20\x68\x65\x69\x67\x68\x74\x3d\x22\x35\x31\
+\x32\x70\x78\x22\x20\x76\x69\x65\x77\x42\x6f\x78\x3d\x22\x30\x20\
+\x30\x20\x35\x31\x32\x20\x35\x31\x32\x22\x20\x65\x6e\x61\x62\x6c\
+\x65\x2d\x62\x61\x63\x6b\x67\x72\x6f\x75\x6e\x64\x3d\x22\x6e\x65\
+\x77\x20\x30\x20\x30\x20\x35\x31\x32\x20\x35\x31\x32\x22\x20\x78\
+\x6d\x6c\x3a\x73\x70\x61\x63\x65\x3d\x22\x70\x72\x65\x73\x65\x72\
+\x76\x65\x22\x3e\x0a\x3c\x67\x3e\x0a\x09\x3c\x70\x61\x74\x68\x20\
+\x64\x3d\x22\x4d\x31\x39\x33\x2e\x34\x36\x2c\x32\x34\x39\x2e\x30\
+\x35\x36\x63\x33\x2e\x37\x32\x33\x2d\x30\x2e\x36\x37\x2c\x37\x2e\
+\x35\x38\x39\x2d\x31\x2e\x30\x34\x31\x2c\x31\x31\x2e\x35\x38\x36\
+\x2d\x31\x2e\x30\x34\x31\x4c\x32\x30\x31\x2e\x39\x32\x34\x2c\x32\
+\x34\x38\x68\x31\x30\x33\x2e\x38\x32\x33\x63\x34\x2e\x35\x30\x33\
+\x2c\x30\x2c\x38\x2e\x38\x30\x36\x2d\x30\x2e\x36\x31\x37\x2c\x31\
+\x32\x2e\x39\x30\x38\x2d\x31\x2e\x37\x35\x34\x0a\x09\x09\x63\x31\
+\x39\x2e\x33\x37\x2d\x35\x2e\x33\x36\x33\x2c\x33\x33\x2e\x33\x34\
+\x35\x2d\x32\x32\x2e\x35\x33\x37\x2c\x33\x33\x2e\x33\x34\x35\x2d\
+\x34\x33\x2e\x36\x36\x33\x76\x2d\x33\x30\x2e\x38\x32\x32\x76\x2d\
+\x35\x36\x2e\x34\x30\x32\x63\x30\x2d\x32\x34\x2e\x38\x33\x32\x2d\
+\x32\x31\x2e\x31\x35\x2d\x34\x33\x2e\x34\x38\x34\x2d\x34\x36\x2e\
+\x32\x38\x39\x2d\x34\x37\x2e\x36\x30\x36\x0a\x09\x09\x63\x2d\x31\
+\x35\x2e\x39\x33\x31\x2d\x32\x2e\x36\x32\x34\x2d\x33\x39\x2e\x32\
+\x35\x38\x2d\x33\x2e\x38\x32\x37\x2d\x35\x35\x2e\x30\x38\x39\x2d\
+\x33\x2e\x37\x34\x39\x63\x2d\x31\x35\x2e\x38\x32\x39\x2c\x30\x2e\
+\x30\x38\x36\x2d\x33\x30\x2e\x39\x38\x31\x2c\x31\x2e\x34\x30\x34\
+\x2d\x34\x34\x2e\x32\x37\x37\x2c\x33\x2e\x37\x34\x39\x43\x31\x36\
+\x37\x2e\x31\x34\x33\x2c\x37\x34\x2e\x35\x37\x36\x2c\x31\x36\x30\
+\x2c\x38\x38\x2e\x39\x32\x38\x2c\x31\x36\x30\x2c\x31\x31\x35\x2e\
+\x33\x35\x39\x56\x31\x34\x34\x68\x39\x36\x0a\x09\x09\x76\x31\x36\
+\x48\x31\x32\x38\x2e\x38\x32\x63\x2d\x33\x35\x2e\x36\x32\x38\x2c\
+\x30\x2d\x36\x34\x2e\x35\x33\x38\x2c\x34\x32\x2e\x35\x37\x31\x2d\
+\x36\x34\x2e\x38\x31\x33\x2c\x39\x35\x2e\x32\x34\x32\x43\x36\x34\
+\x2e\x30\x30\x35\x2c\x32\x35\x35\x2e\x34\x39\x35\x2c\x36\x34\x2c\
+\x32\x35\x35\x2e\x37\x34\x37\x2c\x36\x34\x2c\x32\x35\x36\x63\x30\
+\x2c\x39\x2e\x35\x32\x33\x2c\x30\x2e\x39\x34\x2c\x31\x38\x2e\x37\
+\x32\x2c\x32\x2e\x36\x38\x35\x2c\x32\x37\x2e\x34\x30\x34\x0a\x09\
+\x09\x43\x37\x34\x2e\x36\x34\x38\x2c\x33\x32\x33\x2e\x30\x37\x2c\
+\x39\x39\x2e\x34\x35\x31\x2c\x33\x35\x32\x2c\x31\x32\x38\x2e\x38\
+\x32\x2c\x33\x35\x32\x48\x31\x34\x34\x76\x2d\x32\x2e\x36\x36\x32\
+\x76\x2d\x34\x33\x2e\x32\x37\x33\x43\x31\x34\x34\x2c\x32\x37\x39\
+\x2e\x32\x33\x38\x2c\x31\x36\x34\x2e\x31\x34\x36\x2c\x32\x35\x34\
+\x2e\x33\x33\x32\x2c\x31\x39\x33\x2e\x34\x36\x2c\x32\x34\x39\x2e\
+\x30\x35\x36\x7a\x20\x4d\x32\x30\x33\x2e\x36\x35\x36\x2c\x31\x32\
+\x37\x2e\x30\x30\x32\x0a\x09\x09\x63\x2d\x39\x2e\x35\x39\x32\x2c\
+\x30\x2d\x31\x37\x2e\x33\x38\x34\x2d\x37\x2e\x37\x38\x35\x2d\x31\
+\x37\x2e\x33\x38\x34\x2d\x31\x37\x2e\x34\x30\x33\x63\x30\x2d\x39\
+\x2e\x36\x36\x34\x2c\x37\x2e\x37\x37\x34\x2d\x31\x37\x2e\x35\x32\
+\x2c\x31\x37\x2e\x33\x38\x34\x2d\x31\x37\x2e\x35\x32\x63\x39\x2e\
+\x35\x37\x34\x2c\x30\x2c\x31\x37\x2e\x33\x39\x39\x2c\x37\x2e\x38\
+\x35\x35\x2c\x31\x37\x2e\x33\x39\x39\x2c\x31\x37\x2e\x35\x32\x0a\
+\x09\x09\x43\x32\x32\x31\x2e\x30\x35\x36\x2c\x31\x31\x39\x2e\x32\
+\x31\x37\x2c\x32\x31\x33\x2e\x32\x34\x36\x2c\x31\x32\x37\x2e\x30\
+\x30\x32\x2c\x32\x30\x33\x2e\x36\x35\x36\x2c\x31\x32\x37\x2e\x30\
+\x30\x32\x7a\x22\x2f\x3e\x0a\x09\x3c\x70\x61\x74\x68\x20\x64\x3d\
+\x22\x4d\x34\x34\x33\x2e\x39\x35\x31\x2c\x32\x32\x32\x2e\x35\x34\
+\x33\x43\x34\x33\x34\x2e\x37\x38\x2c\x31\x38\x36\x2e\x30\x32\x31\
+\x2c\x34\x31\x31\x2e\x30\x33\x33\x2c\x31\x36\x30\x2c\x33\x38\x33\
+\x2e\x31\x38\x2c\x31\x36\x30\x48\x33\x36\x38\x76\x32\x2e\x36\x32\
+\x36\x76\x33\x38\x2e\x30\x34\x36\x63\x30\x2c\x33\x33\x2e\x39\x31\
+\x35\x2d\x32\x32\x2e\x32\x38\x36\x2c\x35\x38\x2e\x34\x37\x34\x2d\
+\x34\x39\x2e\x34\x38\x39\x2c\x36\x32\x2e\x36\x38\x31\x0a\x09\x09\
+\x63\x2d\x32\x2e\x37\x33\x37\x2c\x30\x2e\x34\x32\x34\x2d\x35\x2e\
+\x34\x38\x33\x2c\x30\x2e\x36\x34\x36\x2d\x38\x2e\x33\x30\x31\x2c\
+\x30\x2e\x36\x34\x36\x48\x32\x30\x36\x2e\x33\x35\x31\x63\x2d\x34\
+\x2e\x35\x31\x38\x2c\x30\x2d\x38\x2e\x39\x30\x34\x2c\x30\x2e\x35\
+\x38\x34\x2d\x31\x33\x2e\x30\x34\x39\x2c\x31\x2e\x36\x37\x32\x43\
+\x31\x37\x34\x2e\x31\x38\x2c\x32\x37\x30\x2e\x36\x38\x39\x2c\x31\
+\x36\x30\x2c\x32\x38\x36\x2e\x36\x2c\x31\x36\x30\x2c\x33\x30\x37\
+\x2e\x32\x33\x36\x76\x33\x32\x2e\x39\x32\x32\x0a\x09\x09\x76\x35\
+\x34\x2e\x33\x30\x35\x63\x30\x2c\x32\x34\x2e\x38\x33\x32\x2c\x32\
+\x34\x2e\x39\x37\x37\x2c\x33\x39\x2e\x34\x32\x36\x2c\x34\x39\x2e\
+\x34\x38\x31\x2c\x34\x36\x2e\x35\x35\x31\x63\x32\x39\x2e\x33\x32\
+\x37\x2c\x38\x2e\x35\x33\x31\x2c\x36\x31\x2e\x32\x36\x37\x2c\x31\
+\x30\x2e\x30\x36\x38\x2c\x39\x36\x2e\x33\x36\x36\x2c\x30\x43\x33\
+\x32\x39\x2e\x31\x35\x2c\x34\x33\x34\x2e\x33\x35\x34\x2c\x33\x35\
+\x32\x2c\x34\x32\x30\x2e\x38\x39\x33\x2c\x33\x35\x32\x2c\x33\x39\
+\x34\x2e\x34\x36\x33\x56\x33\x36\x38\x0a\x09\x09\x68\x2d\x39\x36\
+\x76\x2d\x31\x36\x68\x31\x32\x37\x2e\x31\x38\x63\x32\x35\x2e\x32\
+\x34\x2c\x30\x2c\x34\x37\x2e\x31\x30\x37\x2d\x32\x31\x2e\x33\x36\
+\x35\x2c\x35\x37\x2e\x38\x31\x34\x2d\x35\x32\x2e\x35\x34\x39\x43\
+\x34\x34\x35\x2e\x34\x37\x34\x2c\x32\x38\x36\x2e\x34\x30\x34\x2c\
+\x34\x34\x38\x2c\x32\x37\x31\x2e\x36\x34\x31\x2c\x34\x34\x38\x2c\
+\x32\x35\x36\x0a\x09\x09\x43\x34\x34\x38\x2c\x32\x34\x34\x2e\x32\
+\x33\x32\x2c\x34\x34\x36\x2e\x35\x36\x37\x2c\x32\x33\x32\x2e\x39\
+\x36\x32\x2c\x34\x34\x33\x2e\x39\x35\x31\x2c\x32\x32\x32\x2e\x35\
+\x34\x33\x7a\x20\x4d\x33\x30\x37\x2e\x38\x36\x37\x2c\x33\x38\x32\
+\x2e\x38\x32\x63\x39\x2e\x35\x39\x2c\x30\x2c\x31\x37\x2e\x33\x38\
+\x31\x2c\x37\x2e\x37\x38\x35\x2c\x31\x37\x2e\x33\x38\x31\x2c\x31\
+\x37\x2e\x34\x0a\x09\x09\x63\x30\x2c\x39\x2e\x36\x35\x2d\x37\x2e\
+\x37\x39\x31\x2c\x31\x37\x2e\x35\x32\x31\x2d\x31\x37\x2e\x33\x38\
+\x31\x2c\x31\x37\x2e\x35\x32\x31\x63\x2d\x39\x2e\x35\x37\x37\x2c\
+\x30\x2d\x31\x37\x2e\x33\x39\x39\x2d\x37\x2e\x38\x37\x31\x2d\x31\
+\x37\x2e\x33\x39\x39\x2d\x31\x37\x2e\x35\x32\x31\x43\x32\x39\x30\
+\x2e\x34\x36\x38\x2c\x33\x39\x30\x2e\x35\x39\x2c\x32\x39\x38\x2e\
+\x32\x37\x34\x2c\x33\x38\x32\x2e\x38\x32\x2c\x33\x30\x37\x2e\x38\
+\x36\x37\x2c\x33\x38\x32\x2e\x38\x32\x7a\x22\x2f\x3e\x0a\x3c\x2f\
+\x67\x3e\x0a\x3c\x2f\x73\x76\x67\x3e\x0a\
+\x00\x00\x05\x9c\
+\x3c\
+\x3f\x78\x6d\x6c\x20\x76\x65\x72\x73\x69\x6f\x6e\x3d\x27\x31\x2e\
+\x30\x27\x20\x65\x6e\x63\x6f\x64\x69\x6e\x67\x3d\x27\x55\x54\x46\
+\x2d\x38\x27\x3f\x3e\x0a\x3c\x21\x2d\x2d\x20\x54\x68\x69\x73\x20\
+\x66\x69\x6c\x65\x20\x77\x61\x73\x20\x67\x65\x6e\x65\x72\x61\x74\
+\x65\x64\x20\x62\x79\x20\x64\x76\x69\x73\x76\x67\x6d\x20\x32\x2e\
+\x31\x31\x2e\x31\x20\x2d\x2d\x3e\x0a\x3c\x73\x76\x67\x20\x76\x65\
+\x72\x73\x69\x6f\x6e\x3d\x27\x31\x2e\x31\x27\x20\x78\x6d\x6c\x6e\
+\x73\x3d\x27\x68\x74\x74\x70\x3a\x2f\x2f\x77\x77\x77\x2e\x77\x33\
+\x2e\x6f\x72\x67\x2f\x32\x30\x30\x30\x2f\x73\x76\x67\x27\x20\x78\
+\x6d\x6c\x6e\x73\x3a\x78\x6c\x69\x6e\x6b\x3d\x27\x68\x74\x74\x70\
+\x3a\x2f\x2f\x77\x77\x77\x2e\x77\x33\x2e\x6f\x72\x67\x2f\x31\x39\
+\x39\x39\x2f\x78\x6c\x69\x6e\x6b\x27\x20\x77\x69\x64\x74\x68\x3d\
+\x27\x36\x33\x2e\x39\x39\x39\x36\x70\x74\x27\x20\x68\x65\x69\x67\
+\x68\x74\x3d\x27\x36\x34\x70\x74\x27\x20\x76\x69\x65\x77\x42\x6f\
+\x78\x3d\x27\x35\x36\x2e\x34\x30\x39\x34\x20\x31\x31\x37\x2e\x38\
+\x35\x38\x20\x36\x33\x2e\x39\x39\x39\x36\x20\x36\x34\x27\x3e\x0a\
+\x3c\x67\x20\x69\x64\x3d\x27\x70\x61\x67\x65\x31\x27\x3e\x0a\x3c\
+\x67\x20\x74\x72\x61\x6e\x73\x66\x6f\x72\x6d\x3d\x27\x74\x72\x61\
+\x6e\x73\x6c\x61\x74\x65\x28\x35\x36\x2e\x34\x30\x39\x34\x20\x31\
+\x31\x37\x2e\x38\x35\x38\x29\x73\x63\x61\x6c\x65\x28\x2e\x39\x39\
+\x36\x32\x36\x34\x29\x27\x3e\x0a\x3c\x70\x61\x74\x68\x20\x64\x3d\
+\x27\x4d\x20\x35\x34\x2e\x38\x39\x32\x36\x20\x32\x34\x2e\x35\x32\
+\x39\x31\x43\x20\x35\x34\x2e\x38\x39\x32\x36\x20\x32\x30\x2e\x33\
+\x33\x36\x38\x20\x34\x34\x2e\x36\x39\x36\x39\x20\x31\x36\x2e\x39\
+\x33\x38\x33\x20\x33\x32\x2e\x31\x32\x20\x31\x36\x2e\x39\x33\x38\
+\x33\x43\x20\x31\x39\x2e\x35\x34\x33\x31\x20\x31\x36\x2e\x39\x33\
+\x38\x33\x20\x39\x2e\x33\x34\x37\x34\x32\x20\x32\x30\x2e\x33\x33\
+\x36\x38\x20\x39\x2e\x33\x34\x37\x34\x32\x20\x32\x34\x2e\x35\x32\
+\x39\x31\x43\x20\x39\x2e\x33\x34\x37\x34\x32\x20\x32\x38\x2e\x37\
+\x32\x31\x35\x20\x31\x39\x2e\x35\x34\x33\x31\x20\x33\x32\x2e\x31\
+\x32\x20\x33\x32\x2e\x31\x32\x20\x33\x32\x2e\x31\x32\x43\x20\x34\
+\x34\x2e\x36\x39\x36\x39\x20\x33\x32\x2e\x31\x32\x20\x35\x34\x2e\
+\x38\x39\x32\x36\x20\x32\x38\x2e\x37\x32\x31\x35\x20\x35\x34\x2e\
+\x38\x39\x32\x36\x20\x32\x34\x2e\x35\x32\x39\x31\x5a\x27\x20\x66\
+\x69\x6c\x6c\x3d\x27\x6e\x6f\x6e\x65\x27\x20\x73\x74\x72\x6f\x6b\
+\x65\x3d\x27\x23\x30\x30\x30\x30\x30\x30\x27\x20\x73\x74\x72\x6f\
+\x6b\x65\x2d\x6c\x69\x6e\x65\x63\x61\x70\x3d\x27\x72\x6f\x75\x6e\
+\x64\x27\x20\x73\x74\x72\x6f\x6b\x65\x2d\x6c\x69\x6e\x65\x6a\x6f\
+\x69\x6e\x3d\x27\x72\x6f\x75\x6e\x64\x27\x20\x73\x74\x72\x6f\x6b\
+\x65\x2d\x6d\x69\x74\x65\x72\x6c\x69\x6d\x69\x74\x3d\x27\x31\x30\
+\x2e\x30\x33\x37\x35\x27\x20\x73\x74\x72\x6f\x6b\x65\x2d\x77\x69\
+\x64\x74\x68\x3d\x27\x33\x2e\x35\x31\x33\x31\x32\x27\x2f\x3e\x0a\
+\x3c\x2f\x67\x3e\x0a\x3c\x67\x20\x74\x72\x61\x6e\x73\x66\x6f\x72\
+\x6d\x3d\x27\x74\x72\x61\x6e\x73\x6c\x61\x74\x65\x28\x35\x36\x2e\
+\x34\x30\x39\x34\x20\x31\x31\x37\x2e\x38\x35\x38\x29\x73\x63\x61\
+\x6c\x65\x28\x2e\x39\x39\x36\x32\x36\x34\x29\x27\x3e\x0a\x3c\x70\
+\x61\x74\x68\x20\x64\x3d\x27\x4d\x20\x39\x2e\x33\x34\x37\x34\x32\
+\x20\x32\x34\x2e\x35\x32\x39\x31\x4c\x20\x39\x2e\x33\x34\x37\x34\
+\x32\x20\x35\x34\x2e\x38\x39\x32\x36\x4c\x20\x39\x2e\x33\x34\x37\
+\x34\x32\x20\x35\x34\x2e\x38\x39\x32\x36\x43\x20\x39\x2e\x33\x34\
+\x37\x34\x32\x20\x35\x34\x2e\x38\x39\x32\x36\x20\x39\x2e\x33\x34\
+\x37\x34\x32\x20\x35\x34\x2e\x38\x39\x32\x36\x20\x39\x2e\x33\x34\
+\x37\x34\x32\x20\x35\x34\x2e\x38\x39\x32\x36\x43\x20\x39\x2e\x33\
+\x34\x37\x34\x32\x20\x35\x39\x2e\x30\x38\x34\x39\x20\x31\x39\x2e\
+\x35\x34\x33\x31\x20\x36\x32\x2e\x34\x38\x33\x34\x20\x33\x32\x2e\
+\x31\x32\x20\x36\x32\x2e\x34\x38\x33\x34\x43\x20\x34\x34\x2e\x36\
+\x39\x36\x39\x20\x36\x32\x2e\x34\x38\x33\x34\x20\x35\x34\x2e\x38\
+\x39\x32\x36\x20\x35\x39\x2e\x30\x38\x34\x39\x20\x35\x34\x2e\x38\
+\x39\x32\x36\x20\x35\x34\x2e\x38\x39\x32\x36\x4c\x20\x35\x34\x2e\
+\x38\x39\x32\x36\x20\x35\x34\x2e\x38\x39\x32\x36\x4c\x20\x35\x34\
+\x2e\x38\x39\x32\x36\x20\x32\x34\x2e\x35\x32\x39\x31\x27\x20\x66\
+\x69\x6c\x6c\x3d\x27\x6e\x6f\x6e\x65\x27\x20\x73\x74\x72\x6f\x6b\
+\x65\x3d\x27\x23\x30\x30\x30\x30\x30\x30\x27\x20\x73\x74\x72\x6f\
+\x6b\x65\x2d\x6c\x69\x6e\x65\x63\x61\x70\x3d\x27\x72\x6f\x75\x6e\
+\x64\x27\x20\x73\x74\x72\x6f\x6b\x65\x2d\x6c\x69\x6e\x65\x6a\x6f\
+\x69\x6e\x3d\x27\x72\x6f\x75\x6e\x64\x27\x20\x73\x74\x72\x6f\x6b\
+\x65\x2d\x6d\x69\x74\x65\x72\x6c\x69\x6d\x69\x74\x3d\x27\x31\x30\
+\x2e\x30\x33\x37\x35\x27\x20\x73\x74\x72\x6f\x6b\x65\x2d\x77\x69\
+\x64\x74\x68\x3d\x27\x33\x2e\x35\x31\x33\x31\x32\x27\x2f\x3e\x0a\
+\x3c\x2f\x67\x3e\x0a\x3c\x67\x20\x74\x72\x61\x6e\x73\x66\x6f\x72\
+\x6d\x3d\x27\x74\x72\x61\x6e\x73\x6c\x61\x74\x65\x28\x35\x36\x2e\
+\x34\x30\x39\x34\x20\x31\x31\x37\x2e\x38\x35\x38\x29\x73\x63\x61\
+\x6c\x65\x28\x2e\x39\x39\x36\x32\x36\x34\x29\x27\x3e\x0a\x3c\x70\
+\x61\x74\x68\x20\x64\x3d\x27\x4d\x20\x35\x34\x2e\x38\x39\x32\x36\
+\x20\x32\x34\x2e\x35\x32\x39\x31\x43\x20\x35\x34\x2e\x38\x39\x32\
+\x36\x20\x31\x31\x2e\x39\x35\x32\x32\x20\x34\x34\x2e\x36\x39\x36\
+\x39\x20\x31\x2e\x37\x35\x36\x35\x36\x20\x33\x32\x2e\x31\x32\x20\
+\x31\x2e\x37\x35\x36\x35\x36\x43\x20\x31\x39\x2e\x35\x34\x33\x31\
+\x20\x31\x2e\x37\x35\x36\x35\x36\x20\x39\x2e\x33\x34\x37\x34\x32\
+\x20\x31\x31\x2e\x39\x35\x32\x32\x20\x39\x2e\x33\x34\x37\x34\x32\
+\x20\x32\x34\x2e\x35\x32\x39\x31\x27\x20\x66\x69\x6c\x6c\x3d\x27\
+\x6e\x6f\x6e\x65\x27\x20\x73\x74\x72\x6f\x6b\x65\x3d\x27\x23\x30\
+\x30\x30\x30\x30\x30\x27\x20\x73\x74\x72\x6f\x6b\x65\x2d\x6c\x69\
+\x6e\x65\x63\x61\x70\x3d\x27\x72\x6f\x75\x6e\x64\x27\x20\x73\x74\
+\x72\x6f\x6b\x65\x2d\x6c\x69\x6e\x65\x6a\x6f\x69\x6e\x3d\x27\x72\
+\x6f\x75\x6e\x64\x27\x20\x73\x74\x72\x6f\x6b\x65\x2d\x6d\x69\x74\
+\x65\x72\x6c\x69\x6d\x69\x74\x3d\x27\x31\x30\x2e\x30\x33\x37\x35\
+\x27\x20\x73\x74\x72\x6f\x6b\x65\x2d\x77\x69\x64\x74\x68\x3d\x27\
+\x33\x2e\x35\x31\x33\x31\x32\x27\x2f\x3e\x0a\x3c\x2f\x67\x3e\x0a\
+\x3c\x2f\x67\x3e\x0a\x3c\x2f\x73\x76\x67\x3e\
+\x00\x00\x02\x72\
+\x3c\
+\x3f\x78\x6d\x6c\x20\x76\x65\x72\x73\x69\x6f\x6e\x3d\x22\x31\x2e\
+\x30\x22\x20\x65\x6e\x63\x6f\x64\x69\x6e\x67\x3d\x22\x75\x74\x66\
+\x2d\x38\x22\x3f\x3e\x0a\x3c\x21\x2d\x2d\x20\x47\x65\x6e\x65\x72\
+\x61\x74\x6f\x72\x3a\x20\x41\x64\x6f\x62\x65\x20\x49\x6c\x6c\x75\
+\x73\x74\x72\x61\x74\x6f\x72\x20\x31\x36\x2e\x32\x2e\x31\x2c\x20\
+\x53\x56\x47\x20\x45\x78\x70\x6f\x72\x74\x20\x50\x6c\x75\x67\x2d\
+\x49\x6e\x20\x2e\x20\x53\x56\x47\x20\x56\x65\x72\x73\x69\x6f\x6e\
+\x3a\x20\x36\x2e\x30\x30\x20\x42\x75\x69\x6c\x64\x20\x30\x29\x20\
+\x20\x2d\x2d\x3e\x0a\x3c\x21\x44\x4f\x43\x54\x59\x50\x45\x20\x73\
+\x76\x67\x20\x50\x55\x42\x4c\x49\x43\x20\x22\x2d\x2f\x2f\x57\x33\
+\x43\x2f\x2f\x44\x54\x44\x20\x53\x56\x47\x20\x31\x2e\x31\x2f\x2f\
+\x45\x4e\x22\x20\x22\x68\x74\x74\x70\x3a\x2f\x2f\x77\x77\x77\x2e\
+\x77\x33\x2e\x6f\x72\x67\x2f\x47\x72\x61\x70\x68\x69\x63\x73\x2f\
+\x53\x56\x47\x2f\x31\x2e\x31\x2f\x44\x54\x44\x2f\x73\x76\x67\x31\
+\x31\x2e\x64\x74\x64\x22\x3e\x0a\x3c\x73\x76\x67\x20\x76\x65\x72\
+\x73\x69\x6f\x6e\x3d\x22\x31\x2e\x31\x22\x20\x69\x64\x3d\x22\x4c\
+\x61\x79\x65\x72\x5f\x31\x22\x20\x78\x6d\x6c\x6e\x73\x3d\x22\x68\
+\x74\x74\x70\x3a\x2f\x2f\x77\x77\x77\x2e\x77\x33\x2e\x6f\x72\x67\
+\x2f\x32\x30\x30\x30\x2f\x73\x76\x67\x22\x20\x78\x6d\x6c\x6e\x73\
+\x3a\x78\x6c\x69\x6e\x6b\x3d\x22\x68\x74\x74\x70\x3a\x2f\x2f\x77\
+\x77\x77\x2e\x77\x33\x2e\x6f\x72\x67\x2f\x31\x39\x39\x39\x2f\x78\
+\x6c\x69\x6e\x6b\x22\x20\x78\x3d\x22\x30\x70\x78\x22\x20\x79\x3d\
+\x22\x30\x70\x78\x22\x0a\x09\x20\x77\x69\x64\x74\x68\x3d\x22\x35\
+\x31\x32\x70\x78\x22\x20\x68\x65\x69\x67\x68\x74\x3d\x22\x35\x31\
+\x32\x70\x78\x22\x20\x76\x69\x65\x77\x42\x6f\x78\x3d\x22\x30\x20\
+\x30\x20\x35\x31\x32\x20\x35\x31\x32\x22\x20\x65\x6e\x61\x62\x6c\
+\x65\x2d\x62\x61\x63\x6b\x67\x72\x6f\x75\x6e\x64\x3d\x22\x6e\x65\
+\x77\x20\x30\x20\x30\x20\x35\x31\x32\x20\x35\x31\x32\x22\x20\x78\
+\x6d\x6c\x3a\x73\x70\x61\x63\x65\x3d\x22\x70\x72\x65\x73\x65\x72\
+\x76\x65\x22\x3e\x0a\x3c\x67\x20\x69\x64\x3d\x22\x49\x63\x6f\x6e\
+\x5f\x38\x5f\x22\x3e\x0a\x09\x3c\x67\x3e\x0a\x09\x09\x3c\x70\x61\
+\x74\x68\x20\x64\x3d\x22\x4d\x34\x32\x37\x2c\x32\x33\x34\x2e\x36\
+\x32\x35\x48\x31\x36\x37\x2e\x32\x39\x36\x6c\x31\x31\x39\x2e\x37\
+\x30\x32\x2d\x31\x31\x39\x2e\x37\x30\x32\x4c\x32\x35\x36\x2c\x38\
+\x35\x4c\x38\x35\x2c\x32\x35\x36\x6c\x31\x37\x31\x2c\x31\x37\x31\
+\x6c\x32\x39\x2e\x39\x32\x32\x2d\x32\x39\x2e\x39\x32\x34\x4c\x31\
+\x36\x37\x2e\x32\x39\x36\x2c\x32\x37\x37\x2e\x33\x37\x35\x48\x34\
+\x32\x37\x56\x32\x33\x34\x2e\x36\x32\x35\x7a\x22\x2f\x3e\x0a\x09\
+\x3c\x2f\x67\x3e\x0a\x3c\x2f\x67\x3e\x0a\x3c\x2f\x73\x76\x67\x3e\
+\x0a\
+\x00\x00\x03\x1b\
+\x3c\
+\x3f\x78\x6d\x6c\x20\x76\x65\x72\x73\x69\x6f\x6e\x3d\x22\x31\x2e\
+\x30\x22\x20\x65\x6e\x63\x6f\x64\x69\x6e\x67\x3d\x22\x75\x74\x66\
+\x2d\x38\x22\x3f\x3e\x0a\x3c\x21\x2d\x2d\x20\x47\x65\x6e\x65\x72\
+\x61\x74\x6f\x72\x3a\x20\x41\x64\x6f\x62\x65\x20\x49\x6c\x6c\x75\
+\x73\x74\x72\x61\x74\x6f\x72\x20\x31\x36\x2e\x32\x2e\x31\x2c\x20\
+\x53\x56\x47\x20\x45\x78\x70\x6f\x72\x74\x20\x50\x6c\x75\x67\x2d\
+\x49\x6e\x20\x2e\x20\x53\x56\x47\x20\x56\x65\x72\x73\x69\x6f\x6e\
+\x3a\x20\x36\x2e\x30\x30\x20\x42\x75\x69\x6c\x64\x20\x30\x29\x20\
+\x20\x2d\x2d\x3e\x0a\x3c\x21\x44\x4f\x43\x54\x59\x50\x45\x20\x73\
+\x76\x67\x20\x50\x55\x42\x4c\x49\x43\x20\x22\x2d\x2f\x2f\x57\x33\
+\x43\x2f\x2f\x44\x54\x44\x20\x53\x56\x47\x20\x31\x2e\x31\x2f\x2f\
+\x45\x4e\x22\x20\x22\x68\x74\x74\x70\x3a\x2f\x2f\x77\x77\x77\x2e\
+\x77\x33\x2e\x6f\x72\x67\x2f\x47\x72\x61\x70\x68\x69\x63\x73\x2f\
+\x53\x56\x47\x2f\x31\x2e\x31\x2f\x44\x54\x44\x2f\x73\x76\x67\x31\
+\x31\x2e\x64\x74\x64\x22\x3e\x0a\x3c\x73\x76\x67\x20\x76\x65\x72\
+\x73\x69\x6f\x6e\x3d\x22\x31\x2e\x31\x22\x20\x69\x64\x3d\x22\x4c\
+\x61\x79\x65\x72\x5f\x31\x22\x20\x78\x6d\x6c\x6e\x73\x3d\x22\x68\
+\x74\x74\x70\x3a\x2f\x2f\x77\x77\x77\x2e\x77\x33\x2e\x6f\x72\x67\
+\x2f\x32\x30\x30\x30\x2f\x73\x76\x67\x22\x20\x78\x6d\x6c\x6e\x73\
+\x3a\x78\x6c\x69\x6e\x6b\x3d\x22\x68\x74\x74\x70\x3a\x2f\x2f\x77\
+\x77\x77\x2e\x77\x33\x2e\x6f\x72\x67\x2f\x31\x39\x39\x39\x2f\x78\
+\x6c\x69\x6e\x6b\x22\x20\x78\x3d\x22\x30\x70\x78\x22\x20\x79\x3d\
+\x22\x30\x70\x78\x22\x0a\x09\x20\x77\x69\x64\x74\x68\x3d\x22\x35\
+\x31\x32\x70\x78\x22\x20\x68\x65\x69\x67\x68\x74\x3d\x22\x35\x31\
+\x32\x70\x78\x22\x20\x76\x69\x65\x77\x42\x6f\x78\x3d\x22\x30\x20\
+\x30\x20\x35\x31\x32\x20\x35\x31\x32\x22\x20\x65\x6e\x61\x62\x6c\
+\x65\x2d\x62\x61\x63\x6b\x67\x72\x6f\x75\x6e\x64\x3d\x22\x6e\x65\
+\x77\x20\x30\x20\x30\x20\x35\x31\x32\x20\x35\x31\x32\x22\x20\x78\
+\x6d\x6c\x3a\x73\x70\x61\x63\x65\x3d\x22\x70\x72\x65\x73\x65\x72\
+\x76\x65\x22\x3e\x0a\x3c\x67\x3e\x0a\x09\x3c\x70\x61\x74\x68\x20\
+\x64\x3d\x22\x4d\x32\x35\x36\x2c\x33\x38\x38\x63\x2d\x37\x32\x2e\
+\x35\x39\x37\x2c\x30\x2d\x31\x33\x32\x2d\x35\x39\x2e\x34\x30\x35\
+\x2d\x31\x33\x32\x2d\x31\x33\x32\x63\x30\x2d\x37\x32\x2e\x36\x30\
+\x31\x2c\x35\x39\x2e\x34\x30\x33\x2d\x31\x33\x32\x2c\x31\x33\x32\
+\x2d\x31\x33\x32\x63\x33\x36\x2e\x33\x2c\x30\x2c\x36\x39\x2e\x32\
+\x39\x39\x2c\x31\x35\x2e\x34\x2c\x39\x32\x2e\x34\x30\x36\x2c\x33\
+\x39\x2e\x36\x30\x31\x4c\x32\x37\x38\x2c\x32\x33\x34\x68\x31\x35\
+\x34\x56\x38\x30\x0a\x09\x09\x6c\x2d\x35\x31\x2e\x36\x39\x38\x2c\
+\x35\x31\x2e\x37\x30\x32\x43\x33\x34\x38\x2e\x34\x30\x36\x2c\x39\
+\x39\x2e\x37\x39\x38\x2c\x33\x30\x34\x2e\x34\x30\x36\x2c\x38\x30\
+\x2c\x32\x35\x36\x2c\x38\x30\x63\x2d\x39\x36\x2e\x37\x39\x37\x2c\
+\x30\x2d\x31\x37\x36\x2c\x37\x39\x2e\x32\x30\x33\x2d\x31\x37\x36\
+\x2c\x31\x37\x36\x73\x37\x38\x2e\x30\x39\x34\x2c\x31\x37\x36\x2c\
+\x31\x37\x36\x2c\x31\x37\x36\x0a\x09\x09\x63\x38\x31\x2e\x30\x34\
+\x35\x2c\x30\x2c\x31\x34\x38\x2e\x32\x38\x37\x2d\x35\x34\x2e\x31\
+\x33\x34\x2c\x31\x36\x39\x2e\x34\x30\x31\x2d\x31\x32\x38\x48\x33\
+\x37\x38\x2e\x38\x35\x43\x33\x36\x30\x2e\x31\x30\x35\x2c\x33\x35\
+\x33\x2e\x35\x36\x31\x2c\x33\x31\x31\x2e\x37\x31\x32\x2c\x33\x38\
+\x38\x2c\x32\x35\x36\x2c\x33\x38\x38\x7a\x22\x2f\x3e\x0a\x3c\x2f\
+\x67\x3e\x0a\x3c\x2f\x73\x76\x67\x3e\x0a\
+\x00\x00\x03\xe8\
+\x3c\
+\x3f\x78\x6d\x6c\x20\x76\x65\x72\x73\x69\x6f\x6e\x3d\x22\x31\x2e\
+\x30\x22\x20\x65\x6e\x63\x6f\x64\x69\x6e\x67\x3d\x22\x75\x74\x66\
+\x2d\x38\x22\x3f\x3e\x0a\x3c\x21\x2d\x2d\x20\x47\x65\x6e\x65\x72\
+\x61\x74\x6f\x72\x3a\x20\x41\x64\x6f\x62\x65\x20\x49\x6c\x6c\x75\
+\x73\x74\x72\x61\x74\x6f\x72\x20\x31\x38\x2e\x31\x2e\x31\x2c\x20\
+\x53\x56\x47\x20\x45\x78\x70\x6f\x72\x74\x20\x50\x6c\x75\x67\x2d\
+\x49\x6e\x20\x2e\x20\x53\x56\x47\x20\x56\x65\x72\x73\x69\x6f\x6e\
+\x3a\x20\x36\x2e\x30\x30\x20\x42\x75\x69\x6c\x64\x20\x30\x29\x20\
+\x20\x2d\x2d\x3e\x0a\x3c\x21\x44\x4f\x43\x54\x59\x50\x45\x20\x73\
+\x76\x67\x20\x50\x55\x42\x4c\x49\x43\x20\x22\x2d\x2f\x2f\x57\x33\
+\x43\x2f\x2f\x44\x54\x44\x20\x53\x56\x47\x20\x31\x2e\x31\x2f\x2f\
+\x45\x4e\x22\x20\x22\x68\x74\x74\x70\x3a\x2f\x2f\x77\x77\x77\x2e\
+\x77\x33\x2e\x6f\x72\x67\x2f\x47\x72\x61\x70\x68\x69\x63\x73\x2f\
+\x53\x56\x47\x2f\x31\x2e\x31\x2f\x44\x54\x44\x2f\x73\x76\x67\x31\
+\x31\x2e\x64\x74\x64\x22\x3e\x0a\x3c\x73\x76\x67\x20\x76\x65\x72\
+\x73\x69\x6f\x6e\x3d\x22\x31\x2e\x31\x22\x20\x69\x64\x3d\x22\x43\
+\x68\x65\x76\x72\x6f\x6e\x5f\x63\x69\x72\x63\x6c\x65\x64\x5f\x6c\
+\x65\x66\x74\x22\x20\x78\x6d\x6c\x6e\x73\x3d\x22\x68\x74\x74\x70\
+\x3a\x2f\x2f\x77\x77\x77\x2e\x77\x33\x2e\x6f\x72\x67\x2f\x32\x30\
+\x30\x30\x2f\x73\x76\x67\x22\x20\x78\x6d\x6c\x6e\x73\x3a\x78\x6c\
+\x69\x6e\x6b\x3d\x22\x68\x74\x74\x70\x3a\x2f\x2f\x77\x77\x77\x2e\
+\x77\x33\x2e\x6f\x72\x67\x2f\x31\x39\x39\x39\x2f\x78\x6c\x69\x6e\
+\x6b\x22\x0a\x09\x20\x78\x3d\x22\x30\x70\x78\x22\x20\x79\x3d\x22\
+\x30\x70\x78\x22\x20\x76\x69\x65\x77\x42\x6f\x78\x3d\x22\x30\x20\
+\x30\x20\x35\x31\x32\x20\x35\x31\x32\x22\x20\x65\x6e\x61\x62\x6c\
+\x65\x2d\x62\x61\x63\x6b\x67\x72\x6f\x75\x6e\x64\x3d\x22\x6e\x65\
+\x77\x20\x30\x20\x30\x20\x35\x31\x32\x20\x35\x31\x32\x22\x20\x78\
+\x6d\x6c\x3a\x73\x70\x61\x63\x65\x3d\x22\x70\x72\x65\x73\x65\x72\
+\x76\x65\x22\x3e\x0a\x3c\x67\x20\x74\x72\x61\x6e\x73\x66\x6f\x72\
+\x6d\x3d\x27\x6d\x61\x74\x72\x69\x78\x28\x32\x34\x20\x30\x20\x30\
+\x20\x32\x34\x20\x30\x20\x30\x29\x27\x3e\x0a\x3c\x70\x61\x74\x68\
+\x20\x64\x3d\x22\x4d\x31\x31\x2e\x33\x30\x32\x2c\x36\x2e\x37\x37\
+\x36\x63\x2d\x30\x2e\x31\x39\x36\x2d\x30\x2e\x31\x39\x37\x2d\x30\
+\x2e\x35\x31\x35\x2d\x30\x2e\x31\x39\x37\x2d\x30\x2e\x37\x31\x2c\
+\x30\x4c\x37\x2e\x37\x38\x35\x2c\x39\x2e\x36\x34\x31\x63\x2d\x30\
+\x2e\x31\x39\x36\x2c\x30\x2e\x31\x39\x39\x2d\x30\x2e\x31\x39\x36\
+\x2c\x30\x2e\x35\x32\x2c\x30\x2c\x30\x2e\x37\x31\x37\x6c\x32\x2e\
+\x38\x30\x37\x2c\x32\x2e\x38\x36\x34\x0a\x09\x63\x30\x2e\x31\x39\
+\x35\x2c\x30\x2e\x31\x39\x39\x2c\x30\x2e\x35\x31\x34\x2c\x30\x2e\
+\x31\x39\x38\x2c\x30\x2e\x37\x31\x2c\x30\x63\x30\x2e\x31\x39\x36\
+\x2d\x30\x2e\x31\x39\x37\x2c\x30\x2e\x31\x39\x36\x2d\x30\x2e\x35\
+\x31\x38\x2c\x30\x2d\x30\x2e\x37\x31\x37\x4c\x39\x2c\x31\x30\x6c\
+\x32\x2e\x33\x30\x32\x2d\x32\x2e\x35\x30\x36\x43\x31\x31\x2e\x34\
+\x39\x38\x2c\x37\x2e\x32\x39\x36\x2c\x31\x31\x2e\x34\x39\x38\x2c\
+\x36\x2e\x39\x37\x36\x2c\x31\x31\x2e\x33\x30\x32\x2c\x36\x2e\x37\
+\x37\x36\x7a\x0a\x09\x20\x4d\x31\x30\x2c\x30\x2e\x34\x63\x2d\x35\
+\x2e\x33\x30\x32\x2c\x30\x2d\x39\x2e\x36\x2c\x34\x2e\x32\x39\x38\
+\x2d\x39\x2e\x36\x2c\x39\x2e\x36\x63\x30\x2c\x35\x2e\x33\x30\x33\
+\x2c\x34\x2e\x32\x39\x38\x2c\x39\x2e\x36\x2c\x39\x2e\x36\x2c\x39\
+\x2e\x36\x73\x39\x2e\x36\x2d\x34\x2e\x32\x39\x37\x2c\x39\x2e\x36\
+\x2d\x39\x2e\x36\x43\x31\x39\x2e\x36\x2c\x34\x2e\x36\x39\x38\x2c\
+\x31\x35\x2e\x33\x30\x32\x2c\x30\x2e\x34\x2c\x31\x30\x2c\x30\x2e\
+\x34\x7a\x20\x4d\x31\x30\x2c\x31\x38\x2e\x33\x35\x34\x0a\x09\x63\
+\x2d\x34\x2e\x36\x31\x35\x2c\x30\x2d\x38\x2e\x33\x35\x34\x2d\x33\
+\x2e\x37\x34\x2d\x38\x2e\x33\x35\x34\x2d\x38\x2e\x33\x35\x34\x63\
+\x30\x2d\x34\x2e\x36\x31\x34\x2c\x33\x2e\x37\x33\x39\x2d\x38\x2e\
+\x33\x35\x34\x2c\x38\x2e\x33\x35\x34\x2d\x38\x2e\x33\x35\x34\x63\
+\x34\x2e\x36\x31\x33\x2c\x30\x2c\x38\x2e\x33\x35\x34\x2c\x33\x2e\
+\x37\x34\x2c\x38\x2e\x33\x35\x34\x2c\x38\x2e\x33\x35\x34\x0a\x09\
+\x43\x31\x38\x2e\x33\x35\x34\x2c\x31\x34\x2e\x36\x31\x34\x2c\x31\
+\x34\x2e\x36\x31\x33\x2c\x31\x38\x2e\x33\x35\x34\x2c\x31\x30\x2c\
+\x31\x38\x2e\x33\x35\x34\x7a\x22\x2f\x3e\x0a\x3c\x2f\x67\x3e\x0a\
+\x3c\x2f\x73\x76\x67\x3e\x0a\
+\x00\x00\x02\x1f\
+\x00\
+\x00\x07\x5c\x78\x9c\xdd\x53\x3d\x6f\xdb\x30\x10\xdd\xfd\x2b\xae\
+\xc8\xc0\x64\xf0\x89\x5f\xa2\xc4\xc0\x74\x80\x1a\xe8\x94\x6e\xc9\
+\xd2\x4d\xb6\x68\x99\x8d\x2c\x19\x92\x2a\xb9\xff\xbe\x88\x2d\xd2\
+\xae\xda\xa0\x4b\x86\x22\x1a\x08\xbd\x77\x7a\xa7\x7b\x77\xbc\xc5\
+\xc3\x71\x5f\x42\x6f\x9b\xd6\xd5\x95\x21\x0c\x29\x01\x5b\x6d\xea\
+\xdc\x55\x85\x21\xcf\x4f\x5f\xe6\x29\x79\x58\xce\x16\x9f\xe6\x73\
+\x78\xda\xb9\x16\xb6\xae\xb4\x30\x64\x2d\x14\xb6\xb2\x4d\xd6\xd9\
+\x1c\xd6\x3f\x21\xef\x5d\xdb\x17\x7b\xe0\xc8\x18\x32\x98\xcf\x97\
+\xb3\x45\xdb\x17\xd7\x89\x19\x81\xe3\xbe\xac\x5a\x43\x76\x5d\x77\
+\xb8\x8f\xa2\x61\x18\x70\x10\x58\x37\x45\xc4\x29\xa5\x51\xdb\x17\
+\xe3\x27\xf7\xc7\xd2\x55\x2f\x7f\xfb\x90\x69\xad\xa3\x53\x94\xc0\
+\xe0\xf2\x6e\x67\x88\x12\xa8\xb5\x56\x87\x8e\xc0\xce\xba\x62\xd7\
+\x19\xa2\xe4\x2b\xea\x9d\x1d\x3e\xd7\x47\x43\x62\x85\x92\x6a\x09\
+\x8c\x25\x98\xc6\x29\x8c\x0a\x50\x92\x2c\x67\x8b\x02\x5c\x6e\xc8\
+\x21\x2b\x2c\x3b\xc3\xae\xc9\xaa\x76\x5b\x37\x7b\x43\x4e\xaf\x65\
+\xd6\xd9\xdb\x49\x8e\xbb\x76\x93\x95\xf6\x16\xb5\x56\x5c\xc9\xbb\
+\x57\xe1\x21\xeb\x76\x90\x1b\xf2\x15\x34\x0a\x99\x48\x0e\x92\x63\
+\x22\x13\xfe\x18\x88\x58\x62\xaa\xb9\xfa\x83\x58\x4d\x89\x7f\xe1\
+\x2b\x81\x46\x9a\x4a\x0d\x4c\x63\x2c\x05\x03\xc5\x51\xa6\x42\x82\
+\xe0\xc8\xb8\x47\x2b\x90\x12\x95\x56\x3a\x84\x7d\x5e\x2f\x0f\xd8\
+\x57\xf8\x26\x11\x4c\x79\x42\x50\x54\x94\xa5\xab\x40\xf0\x53\xab\
+\xe2\xf0\x4f\x2e\x90\x32\x36\x56\x74\x06\xab\x50\xef\x18\xf4\x76\
+\xbc\xd6\xe3\x31\xf9\xe3\xb4\xa7\xdf\xc8\xeb\x45\x2c\x0d\xb9\x59\
+\x6f\xd7\xdb\xed\x96\x44\xcb\xd9\x22\x2a\xde\x67\x7e\xc1\x88\xc4\
+\x98\x6b\x76\xe5\x8c\xa2\x10\x2a\x0d\xce\x98\x42\x2d\x52\x31\x5a\
+\x1b\xd1\xc5\x9b\x0f\x07\x73\xa3\x3c\x60\x9f\x3f\x10\x29\x26\x9c\
+\xc5\x21\xc1\x39\xef\xd5\x79\x19\xe4\x99\x0c\x85\x8d\xc2\x49\xe5\
+\xa1\x4b\x55\x5d\x59\x02\x6d\xd7\xd4\x2f\xd6\x90\x1b\x7a\x7a\x3c\
+\x31\x2f\x5d\x65\x37\xd9\xc1\x90\xa6\xfe\x51\xe5\xbf\xd1\xdf\x6b\
+\x57\x4d\xf9\xbd\xeb\x6c\x53\xba\xbd\xeb\x0c\x61\x14\xa9\x48\xe2\
+\x10\x1b\x77\x52\x60\xcc\x04\xe3\xef\x3a\x95\x49\xd7\x3e\xd6\x56\
+\x8d\xa6\x3e\xd2\xbc\xde\xdc\x22\xc6\x50\xc7\x9c\x5f\xb6\x08\x93\
+\x58\xc5\xca\x6f\xd1\x19\x5d\x6d\xd1\x18\xf6\xb3\xf1\xf2\xc9\x7d\
+\xf8\x6f\x5a\x77\x3e\xda\xbe\x58\xfe\x02\xb3\x30\xdb\xa9\
+\x00\x00\x03\x2a\
+\x3c\
+\x3f\x78\x6d\x6c\x20\x76\x65\x72\x73\x69\x6f\x6e\x3d\x22\x31\x2e\
+\x30\x22\x20\x65\x6e\x63\x6f\x64\x69\x6e\x67\x3d\x22\x75\x74\x66\
+\x2d\x38\x22\x3f\x3e\x0a\x3c\x21\x2d\x2d\x20\x47\x65\x6e\x65\x72\
+\x61\x74\x6f\x72\x3a\x20\x41\x64\x6f\x62\x65\x20\x49\x6c\x6c\x75\
+\x73\x74\x72\x61\x74\x6f\x72\x20\x31\x36\x2e\x32\x2e\x31\x2c\x20\
+\x53\x56\x47\x20\x45\x78\x70\x6f\x72\x74\x20\x50\x6c\x75\x67\x2d\
+\x49\x6e\x20\x2e\x20\x53\x56\x47\x20\x56\x65\x72\x73\x69\x6f\x6e\
+\x3a\x20\x36\x2e\x30\x30\x20\x42\x75\x69\x6c\x64\x20\x30\x29\x20\
+\x20\x2d\x2d\x3e\x0a\x3c\x21\x44\x4f\x43\x54\x59\x50\x45\x20\x73\
+\x76\x67\x20\x50\x55\x42\x4c\x49\x43\x20\x22\x2d\x2f\x2f\x57\x33\
+\x43\x2f\x2f\x44\x54\x44\x20\x53\x56\x47\x20\x31\x2e\x31\x2f\x2f\
+\x45\x4e\x22\x20\x22\x68\x74\x74\x70\x3a\x2f\x2f\x77\x77\x77\x2e\
+\x77\x33\x2e\x6f\x72\x67\x2f\x47\x72\x61\x70\x68\x69\x63\x73\x2f\
+\x53\x56\x47\x2f\x31\x2e\x31\x2f\x44\x54\x44\x2f\x73\x76\x67\x31\
+\x31\x2e\x64\x74\x64\x22\x3e\x0a\x3c\x73\x76\x67\x20\x76\x65\x72\
+\x73\x69\x6f\x6e\x3d\x22\x31\x2e\x31\x22\x20\x69\x64\x3d\x22\x4c\
+\x61\x79\x65\x72\x5f\x31\x22\x20\x78\x6d\x6c\x6e\x73\x3d\x22\x68\
+\x74\x74\x70\x3a\x2f\x2f\x77\x77\x77\x2e\x77\x33\x2e\x6f\x72\x67\
+\x2f\x32\x30\x30\x30\x2f\x73\x76\x67\x22\x20\x78\x6d\x6c\x6e\x73\
+\x3a\x78\x6c\x69\x6e\x6b\x3d\x22\x68\x74\x74\x70\x3a\x2f\x2f\x77\
+\x77\x77\x2e\x77\x33\x2e\x6f\x72\x67\x2f\x31\x39\x39\x39\x2f\x78\
+\x6c\x69\x6e\x6b\x22\x20\x78\x3d\x22\x30\x70\x78\x22\x20\x79\x3d\
+\x22\x30\x70\x78\x22\x0a\x09\x20\x77\x69\x64\x74\x68\x3d\x22\x35\
+\x31\x32\x70\x78\x22\x20\x68\x65\x69\x67\x68\x74\x3d\x22\x35\x31\
+\x32\x70\x78\x22\x20\x76\x69\x65\x77\x42\x6f\x78\x3d\x22\x30\x20\
+\x30\x20\x35\x31\x32\x20\x35\x31\x32\x22\x20\x65\x6e\x61\x62\x6c\
+\x65\x2d\x62\x61\x63\x6b\x67\x72\x6f\x75\x6e\x64\x3d\x22\x6e\x65\
+\x77\x20\x30\x20\x30\x20\x35\x31\x32\x20\x35\x31\x32\x22\x20\x78\
+\x6d\x6c\x3a\x73\x70\x61\x63\x65\x3d\x22\x70\x72\x65\x73\x65\x72\
+\x76\x65\x22\x3e\x0a\x3c\x67\x3e\x0a\x09\x3c\x70\x6f\x6c\x79\x67\
+\x6f\x6e\x20\x70\x6f\x69\x6e\x74\x73\x3d\x22\x33\x39\x36\x2e\x37\
+\x39\x35\x2c\x33\x39\x36\x2e\x38\x20\x33\x32\x30\x2c\x33\x39\x36\
+\x2e\x38\x20\x33\x32\x30\x2c\x34\x34\x38\x20\x34\x34\x38\x2c\x34\
+\x34\x38\x20\x34\x34\x38\x2c\x33\x32\x30\x20\x33\x39\x36\x2e\x37\
+\x39\x35\x2c\x33\x32\x30\x20\x09\x22\x2f\x3e\x0a\x09\x3c\x70\x6f\
+\x6c\x79\x67\x6f\x6e\x20\x70\x6f\x69\x6e\x74\x73\x3d\x22\x33\x39\
+\x36\x2e\x38\x2c\x31\x31\x35\x2e\x32\x30\x35\x20\x33\x39\x36\x2e\
+\x38\x2c\x31\x39\x32\x20\x34\x34\x38\x2c\x31\x39\x32\x20\x34\x34\
+\x38\x2c\x36\x34\x20\x33\x32\x30\x2c\x36\x34\x20\x33\x32\x30\x2c\
+\x31\x31\x35\x2e\x32\x30\x35\x20\x09\x22\x2f\x3e\x0a\x09\x3c\x70\
+\x6f\x6c\x79\x67\x6f\x6e\x20\x70\x6f\x69\x6e\x74\x73\x3d\x22\x31\
+\x31\x35\x2e\x32\x30\x35\x2c\x31\x31\x35\x2e\x32\x20\x31\x39\x32\
+\x2c\x31\x31\x35\x2e\x32\x20\x31\x39\x32\x2c\x36\x34\x20\x36\x34\
+\x2c\x36\x34\x20\x36\x34\x2c\x31\x39\x32\x20\x31\x31\x35\x2e\x32\
+\x30\x35\x2c\x31\x39\x32\x20\x09\x22\x2f\x3e\x0a\x09\x3c\x70\x6f\
+\x6c\x79\x67\x6f\x6e\x20\x70\x6f\x69\x6e\x74\x73\x3d\x22\x31\x31\
+\x35\x2e\x32\x2c\x33\x39\x36\x2e\x37\x39\x35\x20\x31\x31\x35\x2e\
+\x32\x2c\x33\x32\x30\x20\x36\x34\x2c\x33\x32\x30\x20\x36\x34\x2c\
+\x34\x34\x38\x20\x31\x39\x32\x2c\x34\x34\x38\x20\x31\x39\x32\x2c\
+\x33\x39\x36\x2e\x37\x39\x35\x20\x09\x22\x2f\x3e\x0a\x3c\x2f\x67\
+\x3e\x0a\x3c\x2f\x73\x76\x67\x3e\x0a\
+\x00\x00\x04\x17\
+\x3c\
+\x3f\x78\x6d\x6c\x20\x76\x65\x72\x73\x69\x6f\x6e\x3d\x22\x31\x2e\
+\x30\x22\x20\x65\x6e\x63\x6f\x64\x69\x6e\x67\x3d\x22\x69\x73\x6f\
+\x2d\x38\x38\x35\x39\x2d\x31\x22\x3f\x3e\x0a\x3c\x21\x2d\x2d\x20\
+\x47\x65\x6e\x65\x72\x61\x74\x6f\x72\x3a\x20\x41\x64\x6f\x62\x65\
+\x20\x49\x6c\x6c\x75\x73\x74\x72\x61\x74\x6f\x72\x20\x31\x39\x2e\
+\x30\x2e\x30\x2c\x20\x53\x56\x47\x20\x45\x78\x70\x6f\x72\x74\x20\
+\x50\x6c\x75\x67\x2d\x49\x6e\x20\x2e\x20\x53\x56\x47\x20\x56\x65\
+\x72\x73\x69\x6f\x6e\x3a\x20\x36\x2e\x30\x30\x20\x42\x75\x69\x6c\
+\x64\x20\x30\x29\x20\x20\x2d\x2d\x3e\x0a\x3c\x73\x76\x67\x20\x76\
+\x65\x72\x73\x69\x6f\x6e\x3d\x22\x31\x2e\x31\x22\x20\x69\x64\x3d\
+\x22\x4c\x61\x79\x65\x72\x5f\x31\x22\x20\x78\x6d\x6c\x6e\x73\x3d\
+\x22\x68\x74\x74\x70\x3a\x2f\x2f\x77\x77\x77\x2e\x77\x33\x2e\x6f\
+\x72\x67\x2f\x32\x30\x30\x30\x2f\x73\x76\x67\x22\x20\x78\x6d\x6c\
+\x6e\x73\x3a\x78\x6c\x69\x6e\x6b\x3d\x22\x68\x74\x74\x70\x3a\x2f\
+\x2f\x77\x77\x77\x2e\x77\x33\x2e\x6f\x72\x67\x2f\x31\x39\x39\x39\
+\x2f\x78\x6c\x69\x6e\x6b\x22\x20\x78\x3d\x22\x30\x70\x78\x22\x20\
+\x79\x3d\x22\x30\x70\x78\x22\x0a\x09\x20\x76\x69\x65\x77\x42\x6f\
+\x78\x3d\x22\x30\x20\x30\x20\x34\x32\x33\x2e\x37\x35\x34\x20\x34\
+\x32\x33\x2e\x37\x35\x34\x22\x20\x73\x74\x79\x6c\x65\x3d\x22\x65\
+\x6e\x61\x62\x6c\x65\x2d\x62\x61\x63\x6b\x67\x72\x6f\x75\x6e\x64\
+\x3a\x6e\x65\x77\x20\x30\x20\x30\x20\x34\x32\x33\x2e\x37\x35\x34\
+\x20\x34\x32\x33\x2e\x37\x35\x34\x3b\x22\x20\x78\x6d\x6c\x3a\x73\
+\x70\x61\x63\x65\x3d\x22\x70\x72\x65\x73\x65\x72\x76\x65\x22\x3e\
+\x0a\x3c\x70\x61\x74\x68\x20\x64\x3d\x22\x4d\x33\x35\x34\x2e\x32\
+\x34\x2c\x34\x37\x2e\x34\x6c\x33\x39\x2e\x38\x37\x39\x2d\x33\x39\
+\x2e\x38\x37\x39\x48\x32\x37\x32\x2e\x31\x39\x36\x76\x31\x32\x31\
+\x2e\x39\x32\x34\x6c\x36\x30\x2e\x38\x30\x31\x2d\x36\x30\x2e\x38\
+\x30\x31\x63\x35\x36\x2c\x35\x30\x2e\x30\x36\x36\x2c\x37\x37\x2e\
+\x32\x35\x31\x2c\x31\x33\x32\x2e\x30\x30\x34\x2c\x34\x36\x2e\x39\
+\x31\x38\x2c\x32\x30\x35\x2e\x32\x33\x35\x0a\x09\x63\x2d\x31\x38\
+\x2e\x35\x38\x35\x2c\x34\x34\x2e\x38\x36\x39\x2d\x35\x33\x2e\x35\
+\x33\x31\x2c\x37\x39\x2e\x38\x31\x35\x2d\x39\x38\x2e\x34\x2c\x39\
+\x38\x2e\x34\x63\x2d\x34\x34\x2e\x38\x36\x36\x2c\x31\x38\x2e\x35\
+\x38\x35\x2d\x39\x34\x2e\x32\x38\x38\x2c\x31\x38\x2e\x35\x38\x35\
+\x2d\x31\x33\x39\x2e\x31\x35\x38\x2c\x30\x63\x2d\x34\x34\x2e\x38\
+\x36\x39\x2d\x31\x38\x2e\x35\x38\x35\x2d\x37\x39\x2e\x38\x31\x35\
+\x2d\x35\x33\x2e\x35\x33\x31\x2d\x39\x38\x2e\x34\x2d\x39\x38\x2e\
+\x34\x0a\x09\x63\x2d\x31\x38\x2e\x35\x38\x35\x2d\x34\x34\x2e\x38\
+\x36\x39\x2d\x31\x38\x2e\x35\x38\x35\x2d\x39\x34\x2e\x32\x39\x2c\
+\x30\x2d\x31\x33\x39\x2e\x31\x35\x39\x6c\x2d\x32\x37\x2e\x37\x31\
+\x37\x2d\x31\x31\x2e\x34\x38\x63\x2d\x32\x31\x2e\x36\x35\x31\x2c\
+\x35\x32\x2e\x32\x37\x32\x2d\x32\x31\x2e\x36\x35\x31\x2c\x31\x30\
+\x39\x2e\x38\x34\x38\x2c\x30\x2c\x31\x36\x32\x2e\x31\x32\x0a\x09\
+\x63\x32\x31\x2e\x36\x35\x32\x2c\x35\x32\x2e\x32\x37\x32\x2c\x36\
+\x32\x2e\x33\x36\x34\x2c\x39\x32\x2e\x39\x38\x34\x2c\x31\x31\x34\
+\x2e\x36\x33\x37\x2c\x31\x31\x34\x2e\x36\x33\x36\x63\x32\x36\x2e\
+\x31\x34\x2c\x31\x30\x2e\x38\x32\x37\x2c\x35\x33\x2e\x35\x39\x35\
+\x2c\x31\x36\x2e\x32\x34\x2c\x38\x31\x2e\x30\x36\x2c\x31\x36\x2e\
+\x32\x33\x39\x63\x32\x37\x2e\x34\x35\x39\x2d\x30\x2e\x30\x30\x31\
+\x2c\x35\x34\x2e\x39\x32\x37\x2d\x35\x2e\x34\x31\x34\x2c\x38\x31\
+\x2e\x30\x36\x31\x2d\x31\x36\x2e\x32\x33\x39\x0a\x09\x63\x35\x32\
+\x2e\x32\x37\x31\x2d\x32\x31\x2e\x36\x35\x32\x2c\x39\x32\x2e\x39\
+\x38\x33\x2d\x36\x32\x2e\x33\x36\x34\x2c\x31\x31\x34\x2e\x36\x33\
+\x36\x2d\x31\x31\x34\x2e\x36\x33\x36\x43\x34\x34\x32\x2e\x37\x33\
+\x39\x2c\x32\x30\x30\x2e\x36\x2c\x34\x31\x38\x2e\x35\x33\x32\x2c\
+\x31\x30\x35\x2e\x38\x32\x36\x2c\x33\x35\x34\x2e\x32\x34\x2c\x34\
+\x37\x2e\x34\x7a\x22\x2f\x3e\x0a\x3c\x67\x3e\x0a\x3c\x2f\x67\x3e\
+\x0a\x3c\x67\x3e\x0a\x3c\x2f\x67\x3e\x0a\x3c\x67\x3e\x0a\x3c\x2f\
+\x67\x3e\x0a\x3c\x67\x3e\x0a\x3c\x2f\x67\x3e\x0a\x3c\x67\x3e\x0a\
+\x3c\x2f\x67\x3e\x0a\x3c\x67\x3e\x0a\x3c\x2f\x67\x3e\x0a\x3c\x67\
+\x3e\x0a\x3c\x2f\x67\x3e\x0a\x3c\x67\x3e\x0a\x3c\x2f\x67\x3e\x0a\
+\x3c\x67\x3e\x0a\x3c\x2f\x67\x3e\x0a\x3c\x67\x3e\x0a\x3c\x2f\x67\
+\x3e\x0a\x3c\x67\x3e\x0a\x3c\x2f\x67\x3e\x0a\x3c\x67\x3e\x0a\x3c\
+\x2f\x67\x3e\x0a\x3c\x67\x3e\x0a\x3c\x2f\x67\x3e\x0a\x3c\x67\x3e\
+\x0a\x3c\x2f\x67\x3e\x0a\x3c\x67\x3e\x0a\x3c\x2f\x67\x3e\x0a\x3c\
+\x2f\x73\x76\x67\x3e\x0a\
+\x00\x00\x04\xa3\
+\x3c\
+\x3f\x78\x6d\x6c\x20\x76\x65\x72\x73\x69\x6f\x6e\x3d\x27\x31\x2e\
+\x30\x27\x20\x65\x6e\x63\x6f\x64\x69\x6e\x67\x3d\x27\x55\x54\x46\
+\x2d\x38\x27\x3f\x3e\x0a\x3c\x21\x2d\x2d\x20\x54\x68\x69\x73\x20\
+\x66\x69\x6c\x65\x20\x77\x61\x73\x20\x67\x65\x6e\x65\x72\x61\x74\
+\x65\x64\x20\x62\x79\x20\x64\x76\x69\x73\x76\x67\x6d\x20\x32\x2e\
+\x31\x31\x2e\x31\x20\x2d\x2d\x3e\x0a\x3c\x73\x76\x67\x20\x76\x65\
+\x72\x73\x69\x6f\x6e\x3d\x27\x31\x2e\x31\x27\x20\x78\x6d\x6c\x6e\
+\x73\x3d\x27\x68\x74\x74\x70\x3a\x2f\x2f\x77\x77\x77\x2e\x77\x33\
+\x2e\x6f\x72\x67\x2f\x32\x30\x30\x30\x2f\x73\x76\x67\x27\x20\x78\
+\x6d\x6c\x6e\x73\x3a\x78\x6c\x69\x6e\x6b\x3d\x27\x68\x74\x74\x70\
+\x3a\x2f\x2f\x77\x77\x77\x2e\x77\x33\x2e\x6f\x72\x67\x2f\x31\x39\
+\x39\x39\x2f\x78\x6c\x69\x6e\x6b\x27\x20\x77\x69\x64\x74\x68\x3d\
+\x27\x36\x34\x2e\x30\x30\x30\x31\x70\x74\x27\x20\x68\x65\x69\x67\
+\x68\x74\x3d\x27\x36\x34\x70\x74\x27\x20\x76\x69\x65\x77\x42\x6f\
+\x78\x3d\x27\x35\x38\x2e\x34\x36\x36\x39\x20\x31\x31\x37\x2e\x38\
+\x35\x38\x20\x36\x34\x2e\x30\x30\x30\x31\x20\x36\x34\x27\x3e\x0a\
+\x3c\x67\x20\x69\x64\x3d\x27\x70\x61\x67\x65\x31\x27\x3e\x0a\x3c\
+\x67\x20\x74\x72\x61\x6e\x73\x66\x6f\x72\x6d\x3d\x27\x74\x72\x61\
+\x6e\x73\x6c\x61\x74\x65\x28\x35\x38\x2e\x34\x36\x36\x39\x20\x31\
+\x31\x37\x2e\x38\x35\x38\x29\x73\x63\x61\x6c\x65\x28\x2e\x39\x39\
+\x36\x32\x36\x34\x29\x27\x3e\x0a\x3c\x70\x61\x74\x68\x20\x64\x3d\
+\x27\x4d\x20\x36\x2e\x30\x32\x32\x35\x20\x33\x32\x2e\x31\x32\x43\
+\x20\x34\x2e\x33\x35\x34\x33\x38\x20\x32\x34\x2e\x39\x32\x38\x37\
+\x20\x38\x2e\x34\x33\x32\x31\x37\x20\x31\x38\x2e\x30\x30\x31\x34\
+\x20\x31\x33\x2e\x39\x36\x38\x37\x20\x31\x32\x2e\x39\x33\x36\x31\
+\x43\x20\x33\x31\x2e\x37\x33\x33\x39\x20\x2d\x33\x2e\x33\x31\x36\
+\x37\x35\x20\x35\x37\x2e\x32\x39\x34\x33\x20\x33\x2e\x35\x39\x37\
+\x39\x37\x20\x35\x38\x2e\x32\x31\x37\x35\x20\x32\x31\x2e\x37\x33\
+\x37\x38\x43\x20\x35\x38\x2e\x36\x37\x38\x38\x20\x33\x30\x2e\x38\
+\x30\x31\x39\x20\x35\x31\x2e\x31\x37\x38\x33\x20\x33\x37\x2e\x36\
+\x34\x34\x31\x20\x34\x32\x2e\x37\x34\x34\x35\x20\x34\x31\x2e\x37\
+\x31\x31\x39\x43\x20\x32\x37\x2e\x34\x36\x34\x36\x20\x34\x39\x2e\
+\x30\x38\x31\x38\x20\x39\x2e\x32\x36\x34\x35\x31\x20\x34\x36\x2e\
+\x30\x39\x36\x34\x20\x36\x2e\x30\x32\x32\x35\x20\x33\x32\x2e\x31\
+\x32\x5a\x27\x20\x66\x69\x6c\x6c\x3d\x27\x6e\x6f\x6e\x65\x27\x20\
+\x73\x74\x72\x6f\x6b\x65\x3d\x27\x23\x30\x30\x30\x30\x30\x30\x27\
+\x20\x73\x74\x72\x6f\x6b\x65\x2d\x6c\x69\x6e\x65\x63\x61\x70\x3d\
+\x27\x72\x6f\x75\x6e\x64\x27\x20\x73\x74\x72\x6f\x6b\x65\x2d\x6c\
+\x69\x6e\x65\x6a\x6f\x69\x6e\x3d\x27\x72\x6f\x75\x6e\x64\x27\x20\
+\x73\x74\x72\x6f\x6b\x65\x2d\x6d\x69\x74\x65\x72\x6c\x69\x6d\x69\
+\x74\x3d\x27\x31\x30\x2e\x30\x33\x37\x35\x27\x20\x73\x74\x72\x6f\
+\x6b\x65\x2d\x77\x69\x64\x74\x68\x3d\x27\x32\x2e\x35\x30\x39\x33\
+\x37\x27\x2f\x3e\x0a\x3c\x2f\x67\x3e\x0a\x3c\x67\x20\x74\x72\x61\
+\x6e\x73\x66\x6f\x72\x6d\x3d\x27\x74\x72\x61\x6e\x73\x6c\x61\x74\
+\x65\x28\x35\x38\x2e\x34\x36\x36\x39\x20\x31\x31\x37\x2e\x38\x35\
+\x38\x29\x73\x63\x61\x6c\x65\x28\x2e\x39\x39\x36\x32\x36\x34\x29\
+\x27\x3e\x0a\x3c\x63\x69\x72\x63\x6c\x65\x20\x63\x78\x3d\x27\x36\
+\x2e\x30\x32\x32\x35\x27\x20\x63\x79\x3d\x27\x33\x32\x2e\x31\x32\
+\x27\x20\x66\x69\x6c\x6c\x3d\x27\x23\x66\x66\x30\x30\x30\x30\x27\
+\x20\x72\x3d\x27\x36\x2e\x30\x32\x32\x35\x27\x2f\x3e\x0a\x3c\x2f\
+\x67\x3e\x0a\x3c\x67\x20\x74\x72\x61\x6e\x73\x66\x6f\x72\x6d\x3d\
+\x27\x74\x72\x61\x6e\x73\x6c\x61\x74\x65\x28\x35\x38\x2e\x34\x36\
+\x36\x39\x20\x31\x31\x37\x2e\x38\x35\x38\x29\x73\x63\x61\x6c\x65\
+\x28\x2e\x39\x39\x36\x32\x36\x34\x29\x27\x3e\x0a\x3c\x63\x69\x72\
+\x63\x6c\x65\x20\x63\x78\x3d\x27\x31\x33\x2e\x39\x36\x38\x37\x27\
+\x20\x63\x79\x3d\x27\x31\x32\x2e\x39\x33\x36\x31\x27\x20\x66\x69\
+\x6c\x6c\x3d\x27\x23\x66\x66\x30\x30\x30\x30\x27\x20\x72\x3d\x27\
+\x36\x2e\x30\x32\x32\x35\x27\x2f\x3e\x0a\x3c\x2f\x67\x3e\x0a\x3c\
+\x67\x20\x74\x72\x61\x6e\x73\x66\x6f\x72\x6d\x3d\x27\x74\x72\x61\
+\x6e\x73\x6c\x61\x74\x65\x28\x35\x38\x2e\x34\x36\x36\x39\x20\x31\
+\x31\x37\x2e\x38\x35\x38\x29\x73\x63\x61\x6c\x65\x28\x2e\x39\x39\
+\x36\x32\x36\x34\x29\x27\x3e\x0a\x3c\x63\x69\x72\x63\x6c\x65\x20\
+\x63\x78\x3d\x27\x35\x38\x2e\x32\x31\x37\x35\x27\x20\x63\x79\x3d\
+\x27\x32\x31\x2e\x37\x33\x37\x38\x27\x20\x66\x69\x6c\x6c\x3d\x27\
+\x23\x66\x66\x30\x30\x30\x30\x27\x20\x72\x3d\x27\x36\x2e\x30\x32\
+\x32\x35\x27\x2f\x3e\x0a\x3c\x2f\x67\x3e\x0a\x3c\x67\x20\x74\x72\
+\x61\x6e\x73\x66\x6f\x72\x6d\x3d\x27\x74\x72\x61\x6e\x73\x6c\x61\
+\x74\x65\x28\x35\x38\x2e\x34\x36\x36\x39\x20\x31\x31\x37\x2e\x38\
+\x35\x38\x29\x73\x63\x61\x6c\x65\x28\x2e\x39\x39\x36\x32\x36\x34\
+\x29\x27\x3e\x0a\x3c\x63\x69\x72\x63\x6c\x65\x20\x63\x78\x3d\x27\
+\x34\x32\x2e\x37\x34\x34\x35\x27\x20\x63\x79\x3d\x27\x34\x31\x2e\
+\x37\x31\x31\x39\x27\x20\x66\x69\x6c\x6c\x3d\x27\x23\x66\x66\x30\
+\x30\x30\x30\x27\x20\x72\x3d\x27\x36\x2e\x30\x32\x32\x35\x27\x2f\
+\x3e\x0a\x3c\x2f\x67\x3e\x0a\x3c\x2f\x67\x3e\x0a\x3c\x2f\x73\x76\
+\x67\x3e\
+\x00\x00\x04\x73\
+\x3c\
+\x3f\x78\x6d\x6c\x20\x76\x65\x72\x73\x69\x6f\x6e\x3d\x27\x31\x2e\
+\x30\x27\x20\x65\x6e\x63\x6f\x64\x69\x6e\x67\x3d\x27\x55\x54\x46\
+\x2d\x38\x27\x3f\x3e\x0a\x3c\x21\x2d\x2d\x20\x54\x68\x69\x73\x20\
+\x66\x69\x6c\x65\x20\x77\x61\x73\x20\x67\x65\x6e\x65\x72\x61\x74\
+\x65\x64\x20\x62\x79\x20\x64\x76\x69\x73\x76\x67\x6d\x20\x32\x2e\
+\x31\x31\x2e\x31\x20\x2d\x2d\x3e\x0a\x3c\x73\x76\x67\x20\x76\x65\
+\x72\x73\x69\x6f\x6e\x3d\x27\x31\x2e\x31\x27\x20\x78\x6d\x6c\x6e\
+\x73\x3d\x27\x68\x74\x74\x70\x3a\x2f\x2f\x77\x77\x77\x2e\x77\x33\
+\x2e\x6f\x72\x67\x2f\x32\x30\x30\x30\x2f\x73\x76\x67\x27\x20\x78\
+\x6d\x6c\x6e\x73\x3a\x78\x6c\x69\x6e\x6b\x3d\x27\x68\x74\x74\x70\
+\x3a\x2f\x2f\x77\x77\x77\x2e\x77\x33\x2e\x6f\x72\x67\x2f\x31\x39\
+\x39\x39\x2f\x78\x6c\x69\x6e\x6b\x27\x20\x77\x69\x64\x74\x68\x3d\
+\x27\x36\x34\x2e\x30\x30\x30\x31\x70\x74\x27\x20\x68\x65\x69\x67\
+\x68\x74\x3d\x27\x36\x34\x70\x74\x27\x20\x76\x69\x65\x77\x42\x6f\
+\x78\x3d\x27\x35\x38\x2e\x34\x36\x36\x39\x20\x31\x31\x37\x2e\x38\
+\x35\x38\x20\x36\x34\x2e\x30\x30\x30\x31\x20\x36\x34\x27\x3e\x0a\
+\x3c\x67\x20\x69\x64\x3d\x27\x70\x61\x67\x65\x31\x27\x3e\x0a\x3c\
+\x67\x20\x74\x72\x61\x6e\x73\x66\x6f\x72\x6d\x3d\x27\x74\x72\x61\
+\x6e\x73\x6c\x61\x74\x65\x28\x35\x38\x2e\x34\x36\x36\x39\x20\x31\
+\x31\x37\x2e\x38\x35\x38\x29\x73\x63\x61\x6c\x65\x28\x2e\x39\x39\
+\x36\x32\x36\x34\x29\x27\x3e\x0a\x3c\x70\x61\x74\x68\x20\x64\x3d\
+\x27\x4d\x20\x36\x2e\x30\x32\x32\x35\x20\x33\x32\x2e\x31\x32\x43\
+\x20\x36\x2e\x32\x32\x30\x37\x32\x20\x32\x34\x2e\x39\x36\x35\x35\
+\x20\x39\x2e\x30\x34\x39\x38\x39\x20\x31\x38\x2e\x31\x33\x35\x33\
+\x20\x31\x33\x2e\x39\x36\x38\x37\x20\x31\x32\x2e\x39\x33\x36\x31\
+\x43\x20\x32\x39\x2e\x35\x30\x36\x32\x20\x2d\x33\x2e\x34\x38\x36\
+\x38\x36\x20\x35\x35\x2e\x33\x36\x37\x33\x20\x32\x2e\x36\x39\x39\
+\x35\x20\x35\x38\x2e\x32\x31\x37\x35\x20\x32\x31\x2e\x37\x33\x37\
+\x38\x43\x20\x35\x39\x2e\x36\x39\x32\x32\x20\x33\x31\x2e\x35\x38\
+\x38\x31\x20\x35\x32\x2e\x36\x35\x30\x38\x20\x34\x30\x2e\x36\x37\
+\x37\x39\x20\x34\x32\x2e\x37\x34\x34\x35\x20\x34\x31\x2e\x37\x31\
+\x31\x39\x27\x20\x66\x69\x6c\x6c\x3d\x27\x6e\x6f\x6e\x65\x27\x20\
+\x73\x74\x72\x6f\x6b\x65\x3d\x27\x23\x30\x30\x30\x30\x30\x30\x27\
+\x20\x73\x74\x72\x6f\x6b\x65\x2d\x6c\x69\x6e\x65\x63\x61\x70\x3d\
+\x27\x72\x6f\x75\x6e\x64\x27\x20\x73\x74\x72\x6f\x6b\x65\x2d\x6c\
+\x69\x6e\x65\x6a\x6f\x69\x6e\x3d\x27\x72\x6f\x75\x6e\x64\x27\x20\
+\x73\x74\x72\x6f\x6b\x65\x2d\x6d\x69\x74\x65\x72\x6c\x69\x6d\x69\
+\x74\x3d\x27\x31\x30\x2e\x30\x33\x37\x35\x27\x20\x73\x74\x72\x6f\
+\x6b\x65\x2d\x77\x69\x64\x74\x68\x3d\x27\x32\x2e\x35\x30\x39\x33\
+\x37\x27\x2f\x3e\x0a\x3c\x2f\x67\x3e\x0a\x3c\x67\x20\x74\x72\x61\
+\x6e\x73\x66\x6f\x72\x6d\x3d\x27\x74\x72\x61\x6e\x73\x6c\x61\x74\
+\x65\x28\x35\x38\x2e\x34\x36\x36\x39\x20\x31\x31\x37\x2e\x38\x35\
+\x38\x29\x73\x63\x61\x6c\x65\x28\x2e\x39\x39\x36\x32\x36\x34\x29\
+\x27\x3e\x0a\x3c\x63\x69\x72\x63\x6c\x65\x20\x63\x78\x3d\x27\x36\
+\x2e\x30\x32\x32\x35\x27\x20\x63\x79\x3d\x27\x33\x32\x2e\x31\x32\
+\x27\x20\x66\x69\x6c\x6c\x3d\x27\x23\x66\x66\x30\x30\x30\x30\x27\
+\x20\x72\x3d\x27\x36\x2e\x30\x32\x32\x35\x27\x2f\x3e\x0a\x3c\x2f\
+\x67\x3e\x0a\x3c\x67\x20\x74\x72\x61\x6e\x73\x66\x6f\x72\x6d\x3d\
+\x27\x74\x72\x61\x6e\x73\x6c\x61\x74\x65\x28\x35\x38\x2e\x34\x36\
+\x36\x39\x20\x31\x31\x37\x2e\x38\x35\x38\x29\x73\x63\x61\x6c\x65\
+\x28\x2e\x39\x39\x36\x32\x36\x34\x29\x27\x3e\x0a\x3c\x63\x69\x72\
+\x63\x6c\x65\x20\x63\x78\x3d\x27\x31\x33\x2e\x39\x36\x38\x37\x27\
+\x20\x63\x79\x3d\x27\x31\x32\x2e\x39\x33\x36\x31\x27\x20\x66\x69\
+\x6c\x6c\x3d\x27\x23\x66\x66\x30\x30\x30\x30\x27\x20\x72\x3d\x27\
+\x36\x2e\x30\x32\x32\x35\x27\x2f\x3e\x0a\x3c\x2f\x67\x3e\x0a\x3c\
+\x67\x20\x74\x72\x61\x6e\x73\x66\x6f\x72\x6d\x3d\x27\x74\x72\x61\
+\x6e\x73\x6c\x61\x74\x65\x28\x35\x38\x2e\x34\x36\x36\x39\x20\x31\
+\x31\x37\x2e\x38\x35\x38\x29\x73\x63\x61\x6c\x65\x28\x2e\x39\x39\
+\x36\x32\x36\x34\x29\x27\x3e\x0a\x3c\x63\x69\x72\x63\x6c\x65\x20\
+\x63\x78\x3d\x27\x35\x38\x2e\x32\x31\x37\x35\x27\x20\x63\x79\x3d\
+\x27\x32\x31\x2e\x37\x33\x37\x38\x27\x20\x66\x69\x6c\x6c\x3d\x27\
+\x23\x66\x66\x30\x30\x30\x30\x27\x20\x72\x3d\x27\x36\x2e\x30\x32\
+\x32\x35\x27\x2f\x3e\x0a\x3c\x2f\x67\x3e\x0a\x3c\x67\x20\x74\x72\
+\x61\x6e\x73\x66\x6f\x72\x6d\x3d\x27\x74\x72\x61\x6e\x73\x6c\x61\
+\x74\x65\x28\x35\x38\x2e\x34\x36\x36\x39\x20\x31\x31\x37\x2e\x38\
+\x35\x38\x29\x73\x63\x61\x6c\x65\x28\x2e\x39\x39\x36\x32\x36\x34\
+\x29\x27\x3e\x0a\x3c\x63\x69\x72\x63\x6c\x65\x20\x63\x78\x3d\x27\
+\x34\x32\x2e\x37\x34\x34\x35\x27\x20\x63\x79\x3d\x27\x34\x31\x2e\
+\x37\x31\x31\x39\x27\x20\x66\x69\x6c\x6c\x3d\x27\x23\x66\x66\x30\
+\x30\x30\x30\x27\x20\x72\x3d\x27\x36\x2e\x30\x32\x32\x35\x27\x2f\
+\x3e\x0a\x3c\x2f\x67\x3e\x0a\x3c\x2f\x67\x3e\x0a\x3c\x2f\x73\x76\
+\x67\x3e\
+\x00\x00\x04\x9c\
+\x3c\
+\x3f\x78\x6d\x6c\x20\x76\x65\x72\x73\x69\x6f\x6e\x3d\x22\x31\x2e\
+\x30\x22\x20\x65\x6e\x63\x6f\x64\x69\x6e\x67\x3d\x22\x75\x74\x66\
+\x2d\x38\x22\x3f\x3e\x0a\x3c\x21\x2d\x2d\x20\x47\x65\x6e\x65\x72\
+\x61\x74\x6f\x72\x3a\x20\x41\x64\x6f\x62\x65\x20\x49\x6c\x6c\x75\
+\x73\x74\x72\x61\x74\x6f\x72\x20\x31\x38\x2e\x31\x2e\x30\x2c\x20\
+\x53\x56\x47\x20\x45\x78\x70\x6f\x72\x74\x20\x50\x6c\x75\x67\x2d\
+\x49\x6e\x20\x2e\x20\x53\x56\x47\x20\x56\x65\x72\x73\x69\x6f\x6e\
+\x3a\x20\x36\x2e\x30\x30\x20\x42\x75\x69\x6c\x64\x20\x30\x29\x20\
+\x20\x2d\x2d\x3e\x0a\x3c\x21\x44\x4f\x43\x54\x59\x50\x45\x20\x73\
+\x76\x67\x20\x50\x55\x42\x4c\x49\x43\x20\x22\x2d\x2f\x2f\x57\x33\
+\x43\x2f\x2f\x44\x54\x44\x20\x53\x56\x47\x20\x31\x2e\x31\x2f\x2f\
+\x45\x4e\x22\x20\x22\x68\x74\x74\x70\x3a\x2f\x2f\x77\x77\x77\x2e\
+\x77\x33\x2e\x6f\x72\x67\x2f\x47\x72\x61\x70\x68\x69\x63\x73\x2f\
+\x53\x56\x47\x2f\x31\x2e\x31\x2f\x44\x54\x44\x2f\x73\x76\x67\x31\
+\x31\x2e\x64\x74\x64\x22\x3e\x0a\x3c\x73\x76\x67\x20\x76\x65\x72\
+\x73\x69\x6f\x6e\x3d\x22\x31\x2e\x31\x22\x20\x69\x64\x3d\x22\x43\
+\x6f\x64\x65\x22\x20\x78\x6d\x6c\x6e\x73\x3d\x22\x68\x74\x74\x70\
+\x3a\x2f\x2f\x77\x77\x77\x2e\x77\x33\x2e\x6f\x72\x67\x2f\x32\x30\
+\x30\x30\x2f\x73\x76\x67\x22\x20\x78\x6d\x6c\x6e\x73\x3a\x78\x6c\
+\x69\x6e\x6b\x3d\x22\x68\x74\x74\x70\x3a\x2f\x2f\x77\x77\x77\x2e\
+\x77\x33\x2e\x6f\x72\x67\x2f\x31\x39\x39\x39\x2f\x78\x6c\x69\x6e\
+\x6b\x22\x20\x78\x3d\x22\x32\x34\x70\x78\x22\x20\x79\x3d\x22\x32\
+\x34\x70\x78\x22\x0a\x09\x20\x76\x69\x65\x77\x42\x6f\x78\x3d\x22\
+\x30\x20\x30\x20\x35\x31\x32\x20\x35\x31\x32\x22\x20\x65\x6e\x61\
+\x62\x6c\x65\x2d\x62\x61\x63\x6b\x67\x72\x6f\x75\x6e\x64\x3d\x22\
+\x6e\x65\x77\x20\x30\x20\x30\x20\x35\x31\x32\x20\x35\x31\x32\x22\
+\x20\x78\x6d\x6c\x3a\x73\x70\x61\x63\x65\x3d\x22\x70\x72\x65\x73\
+\x65\x72\x76\x65\x22\x3e\x0a\x3c\x67\x20\x74\x72\x61\x6e\x73\x66\
+\x6f\x72\x6d\x3d\x27\x6d\x61\x74\x72\x69\x78\x28\x32\x34\x20\x30\
+\x20\x30\x20\x32\x34\x20\x30\x20\x30\x29\x27\x3e\x3c\x70\x61\x74\
+\x68\x20\x64\x3d\x22\x4d\x35\x2e\x37\x31\x39\x2c\x31\x34\x2e\x37\
+\x35\x63\x2d\x30\x2e\x32\x33\x36\x2c\x30\x2d\x30\x2e\x34\x37\x34\
+\x2d\x30\x2e\x30\x38\x33\x2d\x30\x2e\x36\x36\x34\x2d\x30\x2e\x32\
+\x35\x32\x4c\x2d\x30\x2e\x30\x30\x35\x2c\x31\x30\x6c\x35\x2e\x33\
+\x34\x31\x2d\x34\x2e\x37\x34\x38\x43\x35\x2e\x37\x34\x38\x2c\x34\
+\x2e\x38\x38\x37\x2c\x36\x2e\x33\x38\x2c\x34\x2e\x39\x32\x32\x2c\
+\x36\x2e\x37\x34\x37\x2c\x35\x2e\x33\x33\x35\x0a\x09\x63\x30\x2e\
+\x33\x36\x37\x2c\x30\x2e\x34\x31\x33\x2c\x30\x2e\x33\x33\x2c\x31\
+\x2e\x30\x34\x35\x2d\x30\x2e\x30\x38\x33\x2c\x31\x2e\x34\x31\x32\
+\x4c\x33\x2e\x30\x30\x35\x2c\x31\x30\x6c\x33\x2e\x33\x37\x38\x2c\
+\x33\x2e\x30\x30\x32\x63\x30\x2e\x34\x31\x33\x2c\x30\x2e\x33\x36\
+\x37\x2c\x30\x2e\x34\x35\x2c\x30\x2e\x39\x39\x39\x2c\x30\x2e\x30\
+\x38\x33\x2c\x31\x2e\x34\x31\x32\x0a\x09\x43\x36\x2e\x32\x36\x39\
+\x2c\x31\x34\x2e\x36\x33\x37\x2c\x35\x2e\x39\x39\x34\x2c\x31\x34\
+\x2e\x37\x35\x2c\x35\x2e\x37\x31\x39\x2c\x31\x34\x2e\x37\x35\x7a\
+\x20\x4d\x31\x34\x2e\x36\x36\x34\x2c\x31\x34\x2e\x37\x34\x38\x4c\
+\x32\x30\x2e\x30\x30\x35\x2c\x31\x30\x6c\x2d\x35\x2e\x30\x36\x2d\
+\x34\x2e\x34\x39\x38\x63\x2d\x30\x2e\x34\x31\x33\x2d\x30\x2e\x33\
+\x36\x37\x2d\x31\x2e\x30\x34\x35\x2d\x30\x2e\x33\x33\x2d\x31\x2e\
+\x34\x31\x31\x2c\x30\x2e\x30\x38\x33\x0a\x09\x63\x2d\x30\x2e\x33\
+\x36\x37\x2c\x30\x2e\x34\x31\x33\x2d\x30\x2e\x33\x33\x2c\x31\x2e\
+\x30\x34\x35\x2c\x30\x2e\x30\x38\x33\x2c\x31\x2e\x34\x31\x32\x4c\
+\x31\x36\x2e\x39\x39\x35\x2c\x31\x30\x6c\x2d\x33\x2e\x36\x35\x39\
+\x2c\x33\x2e\x32\x35\x32\x63\x2d\x30\x2e\x34\x31\x33\x2c\x30\x2e\
+\x33\x36\x37\x2d\x30\x2e\x34\x35\x2c\x30\x2e\x39\x39\x39\x2d\x30\
+\x2e\x30\x38\x33\x2c\x31\x2e\x34\x31\x32\x43\x31\x33\x2e\x34\x35\
+\x2c\x31\x34\x2e\x38\x38\x37\x2c\x31\x33\x2e\x37\x32\x35\x2c\x31\
+\x35\x2c\x31\x34\x2c\x31\x35\x0a\x09\x43\x31\x34\x2e\x32\x33\x36\
+\x2c\x31\x35\x2c\x31\x34\x2e\x34\x37\x34\x2c\x31\x34\x2e\x39\x31\
+\x37\x2c\x31\x34\x2e\x36\x36\x34\x2c\x31\x34\x2e\x37\x34\x38\x7a\
+\x20\x4d\x39\x2e\x39\x38\x36\x2c\x31\x36\x2e\x31\x36\x35\x6c\x32\
+\x2d\x31\x32\x63\x30\x2e\x30\x39\x31\x2d\x30\x2e\x35\x34\x35\x2d\
+\x30\x2e\x32\x37\x37\x2d\x31\x2e\x30\x36\x2d\x30\x2e\x38\x32\x32\
+\x2d\x31\x2e\x31\x35\x31\x0a\x09\x63\x2d\x30\x2e\x35\x34\x37\x2d\
+\x30\x2e\x30\x39\x32\x2d\x31\x2e\x30\x36\x31\x2c\x30\x2e\x32\x37\
+\x37\x2d\x31\x2e\x31\x35\x2c\x30\x2e\x38\x32\x32\x6c\x2d\x32\x2c\
+\x31\x32\x63\x2d\x30\x2e\x30\x39\x31\x2c\x30\x2e\x35\x34\x35\x2c\
+\x30\x2e\x32\x37\x37\x2c\x31\x2e\x30\x36\x2c\x30\x2e\x38\x32\x32\
+\x2c\x31\x2e\x31\x35\x31\x43\x38\x2e\x38\x39\x32\x2c\x31\x36\x2e\
+\x39\x39\x36\x2c\x38\x2e\x39\x34\x36\x2c\x31\x37\x2c\x39\x2e\x30\
+\x30\x31\x2c\x31\x37\x0a\x09\x43\x39\x2e\x34\x38\x31\x2c\x31\x37\
+\x2c\x39\x2e\x39\x30\x35\x2c\x31\x36\x2e\x36\x35\x33\x2c\x39\x2e\
+\x39\x38\x36\x2c\x31\x36\x2e\x31\x36\x35\x7a\x22\x2f\x3e\x0a\x3c\
+\x2f\x67\x3e\x0a\x3c\x2f\x73\x76\x67\x3e\x0a\
+\x00\x00\x02\xc1\
+\x3c\
+\x3f\x78\x6d\x6c\x20\x76\x65\x72\x73\x69\x6f\x6e\x3d\x22\x31\x2e\
+\x30\x22\x20\x65\x6e\x63\x6f\x64\x69\x6e\x67\x3d\x22\x75\x74\x66\
+\x2d\x38\x22\x3f\x3e\x0a\x3c\x21\x2d\x2d\x20\x47\x65\x6e\x65\x72\
+\x61\x74\x6f\x72\x3a\x20\x41\x64\x6f\x62\x65\x20\x49\x6c\x6c\x75\
+\x73\x74\x72\x61\x74\x6f\x72\x20\x31\x36\x2e\x32\x2e\x31\x2c\x20\
+\x53\x56\x47\x20\x45\x78\x70\x6f\x72\x74\x20\x50\x6c\x75\x67\x2d\
+\x49\x6e\x20\x2e\x20\x53\x56\x47\x20\x56\x65\x72\x73\x69\x6f\x6e\
+\x3a\x20\x36\x2e\x30\x30\x20\x42\x75\x69\x6c\x64\x20\x30\x29\x20\
+\x20\x2d\x2d\x3e\x0a\x3c\x21\x44\x4f\x43\x54\x59\x50\x45\x20\x73\
+\x76\x67\x20\x50\x55\x42\x4c\x49\x43\x20\x22\x2d\x2f\x2f\x57\x33\
+\x43\x2f\x2f\x44\x54\x44\x20\x53\x56\x47\x20\x31\x2e\x31\x2f\x2f\
+\x45\x4e\x22\x20\x22\x68\x74\x74\x70\x3a\x2f\x2f\x77\x77\x77\x2e\
+\x77\x33\x2e\x6f\x72\x67\x2f\x47\x72\x61\x70\x68\x69\x63\x73\x2f\
+\x53\x56\x47\x2f\x31\x2e\x31\x2f\x44\x54\x44\x2f\x73\x76\x67\x31\
+\x31\x2e\x64\x74\x64\x22\x3e\x0a\x3c\x73\x76\x67\x20\x76\x65\x72\
+\x73\x69\x6f\x6e\x3d\x22\x31\x2e\x31\x22\x20\x69\x64\x3d\x22\x4c\
+\x61\x79\x65\x72\x5f\x31\x22\x20\x78\x6d\x6c\x6e\x73\x3d\x22\x68\
+\x74\x74\x70\x3a\x2f\x2f\x77\x77\x77\x2e\x77\x33\x2e\x6f\x72\x67\
+\x2f\x32\x30\x30\x30\x2f\x73\x76\x67\x22\x20\x78\x6d\x6c\x6e\x73\
+\x3a\x78\x6c\x69\x6e\x6b\x3d\x22\x68\x74\x74\x70\x3a\x2f\x2f\x77\
+\x77\x77\x2e\x77\x33\x2e\x6f\x72\x67\x2f\x31\x39\x39\x39\x2f\x78\
+\x6c\x69\x6e\x6b\x22\x20\x78\x3d\x22\x30\x70\x78\x22\x20\x79\x3d\
+\x22\x30\x70\x78\x22\x0a\x09\x20\x77\x69\x64\x74\x68\x3d\x22\x35\
+\x31\x32\x70\x78\x22\x20\x68\x65\x69\x67\x68\x74\x3d\x22\x35\x31\
+\x32\x70\x78\x22\x20\x76\x69\x65\x77\x42\x6f\x78\x3d\x22\x30\x20\
+\x30\x20\x35\x31\x32\x20\x35\x31\x32\x22\x20\x73\x74\x79\x6c\x65\
+\x3d\x22\x65\x6e\x61\x62\x6c\x65\x2d\x62\x61\x63\x6b\x67\x72\x6f\
+\x75\x6e\x64\x3a\x6e\x65\x77\x20\x30\x20\x30\x20\x35\x31\x32\x20\
+\x35\x31\x32\x3b\x22\x20\x78\x6d\x6c\x3a\x73\x70\x61\x63\x65\x3d\
+\x22\x70\x72\x65\x73\x65\x72\x76\x65\x22\x3e\x0a\x3c\x70\x6f\x6c\
+\x79\x67\x6f\x6e\x20\x70\x6f\x69\x6e\x74\x73\x3d\x22\x34\x38\x30\
+\x2c\x32\x35\x36\x20\x33\x38\x34\x2c\x31\x36\x30\x20\x33\x38\x34\
+\x2c\x32\x33\x36\x20\x32\x37\x36\x2c\x32\x33\x36\x20\x32\x37\x36\
+\x2c\x31\x32\x38\x20\x33\x35\x32\x2c\x31\x32\x38\x20\x32\x35\x36\
+\x2c\x33\x32\x20\x31\x36\x30\x2c\x31\x32\x38\x20\x32\x33\x36\x2c\
+\x31\x32\x38\x20\x32\x33\x36\x2c\x32\x33\x36\x20\x31\x32\x38\x2c\
+\x32\x33\x36\x20\x31\x32\x38\x2c\x31\x36\x30\x20\x33\x32\x2c\x32\
+\x35\x36\x20\x31\x32\x38\x2c\x33\x35\x32\x20\x0a\x09\x31\x32\x38\
+\x2c\x32\x37\x36\x20\x32\x33\x36\x2c\x32\x37\x36\x20\x32\x33\x36\
+\x2c\x33\x38\x34\x20\x31\x36\x30\x2c\x33\x38\x34\x20\x32\x35\x36\
+\x2c\x34\x38\x30\x20\x33\x35\x32\x2c\x33\x38\x34\x20\x32\x37\x35\
+\x2e\x38\x2c\x33\x38\x34\x20\x32\x37\x35\x2e\x34\x2c\x32\x37\x35\
+\x2e\x35\x20\x33\x38\x34\x2c\x32\x37\x35\x2e\x38\x20\x33\x38\x34\
+\x2c\x33\x35\x32\x20\x22\x2f\x3e\x0a\x3c\x2f\x73\x76\x67\x3e\x0a\
+\
+\x00\x00\x04\xca\
+\x3c\
+\x3f\x78\x6d\x6c\x20\x76\x65\x72\x73\x69\x6f\x6e\x3d\x22\x31\x2e\
+\x30\x22\x20\x65\x6e\x63\x6f\x64\x69\x6e\x67\x3d\x22\x75\x74\x66\
+\x2d\x38\x22\x3f\x3e\x0a\x3c\x21\x2d\x2d\x20\x47\x65\x6e\x65\x72\
+\x61\x74\x6f\x72\x3a\x20\x41\x64\x6f\x62\x65\x20\x49\x6c\x6c\x75\
+\x73\x74\x72\x61\x74\x6f\x72\x20\x31\x39\x2e\x32\x2e\x31\x2c\x20\
+\x53\x56\x47\x20\x45\x78\x70\x6f\x72\x74\x20\x50\x6c\x75\x67\x2d\
+\x49\x6e\x20\x2e\x20\x53\x56\x47\x20\x56\x65\x72\x73\x69\x6f\x6e\
+\x3a\x20\x36\x2e\x30\x30\x20\x42\x75\x69\x6c\x64\x20\x30\x29\x20\
+\x20\x2d\x2d\x3e\x0a\x3c\x21\x44\x4f\x43\x54\x59\x50\x45\x20\x73\
+\x76\x67\x20\x50\x55\x42\x4c\x49\x43\x20\x22\x2d\x2f\x2f\x57\x33\
+\x43\x2f\x2f\x44\x54\x44\x20\x53\x56\x47\x20\x31\x2e\x31\x2f\x2f\
+\x45\x4e\x22\x20\x22\x68\x74\x74\x70\x3a\x2f\x2f\x77\x77\x77\x2e\
+\x77\x33\x2e\x6f\x72\x67\x2f\x47\x72\x61\x70\x68\x69\x63\x73\x2f\
+\x53\x56\x47\x2f\x31\x2e\x31\x2f\x44\x54\x44\x2f\x73\x76\x67\x31\
+\x31\x2e\x64\x74\x64\x22\x3e\x0a\x3c\x73\x76\x67\x20\x76\x65\x72\
+\x73\x69\x6f\x6e\x3d\x22\x31\x2e\x31\x22\x0a\x09\x20\x69\x64\x3d\
+\x22\x73\x76\x67\x34\x36\x31\x39\x22\x20\x69\x6e\x6b\x73\x63\x61\
+\x70\x65\x3a\x76\x65\x72\x73\x69\x6f\x6e\x3d\x22\x30\x2e\x39\x31\
+\x2b\x64\x65\x76\x65\x6c\x2b\x6f\x73\x78\x6d\x65\x6e\x75\x20\x72\
+\x31\x32\x39\x31\x31\x22\x20\x73\x6f\x64\x69\x70\x6f\x64\x69\x3a\
+\x64\x6f\x63\x6e\x61\x6d\x65\x3d\x22\x74\x72\x69\x61\x6e\x67\x6c\
+\x65\x2d\x73\x74\x72\x6f\x6b\x65\x64\x2d\x31\x35\x2e\x73\x76\x67\
+\x22\x20\x78\x6d\x6c\x6e\x73\x3a\x63\x63\x3d\x22\x68\x74\x74\x70\
+\x3a\x2f\x2f\x63\x72\x65\x61\x74\x69\x76\x65\x63\x6f\x6d\x6d\x6f\
+\x6e\x73\x2e\x6f\x72\x67\x2f\x6e\x73\x23\x22\x20\x78\x6d\x6c\x6e\
+\x73\x3a\x64\x63\x3d\x22\x68\x74\x74\x70\x3a\x2f\x2f\x70\x75\x72\
+\x6c\x2e\x6f\x72\x67\x2f\x64\x63\x2f\x65\x6c\x65\x6d\x65\x6e\x74\
+\x73\x2f\x31\x2e\x31\x2f\x22\x20\x78\x6d\x6c\x6e\x73\x3a\x69\x6e\
+\x6b\x73\x63\x61\x70\x65\x3d\x22\x68\x74\x74\x70\x3a\x2f\x2f\x77\
+\x77\x77\x2e\x69\x6e\x6b\x73\x63\x61\x70\x65\x2e\x6f\x72\x67\x2f\
+\x6e\x61\x6d\x65\x73\x70\x61\x63\x65\x73\x2f\x69\x6e\x6b\x73\x63\
+\x61\x70\x65\x22\x20\x78\x6d\x6c\x6e\x73\x3a\x72\x64\x66\x3d\x22\
+\x68\x74\x74\x70\x3a\x2f\x2f\x77\x77\x77\x2e\x77\x33\x2e\x6f\x72\
+\x67\x2f\x31\x39\x39\x39\x2f\x30\x32\x2f\x32\x32\x2d\x72\x64\x66\
+\x2d\x73\x79\x6e\x74\x61\x78\x2d\x6e\x73\x23\x22\x20\x78\x6d\x6c\
+\x6e\x73\x3a\x73\x6f\x64\x69\x70\x6f\x64\x69\x3d\x22\x68\x74\x74\
+\x70\x3a\x2f\x2f\x73\x6f\x64\x69\x70\x6f\x64\x69\x2e\x73\x6f\x75\
+\x72\x63\x65\x66\x6f\x72\x67\x65\x2e\x6e\x65\x74\x2f\x44\x54\x44\
+\x2f\x73\x6f\x64\x69\x70\x6f\x64\x69\x2d\x30\x2e\x64\x74\x64\x22\
+\x20\x78\x6d\x6c\x6e\x73\x3a\x73\x76\x67\x3d\x22\x68\x74\x74\x70\
+\x3a\x2f\x2f\x77\x77\x77\x2e\x77\x33\x2e\x6f\x72\x67\x2f\x32\x30\
+\x30\x30\x2f\x73\x76\x67\x22\x0a\x09\x20\x78\x6d\x6c\x6e\x73\x3d\
+\x22\x68\x74\x74\x70\x3a\x2f\x2f\x77\x77\x77\x2e\x77\x33\x2e\x6f\
+\x72\x67\x2f\x32\x30\x30\x30\x2f\x73\x76\x67\x22\x20\x78\x6d\x6c\
+\x6e\x73\x3a\x78\x6c\x69\x6e\x6b\x3d\x22\x68\x74\x74\x70\x3a\x2f\
+\x2f\x77\x77\x77\x2e\x77\x33\x2e\x6f\x72\x67\x2f\x31\x39\x39\x39\
+\x2f\x78\x6c\x69\x6e\x6b\x22\x20\x78\x3d\x22\x30\x70\x78\x22\x20\
+\x79\x3d\x22\x30\x70\x78\x22\x20\x77\x69\x64\x74\x68\x3d\x22\x36\
+\x34\x70\x78\x22\x20\x68\x65\x69\x67\x68\x74\x3d\x22\x36\x34\x70\
+\x78\x22\x0a\x09\x20\x76\x69\x65\x77\x42\x6f\x78\x3d\x22\x30\x20\
+\x30\x20\x31\x35\x20\x31\x35\x22\x20\x73\x74\x79\x6c\x65\x3d\x22\
+\x65\x6e\x61\x62\x6c\x65\x2d\x62\x61\x63\x6b\x67\x72\x6f\x75\x6e\
+\x64\x3a\x6e\x65\x77\x20\x30\x20\x30\x20\x31\x35\x20\x31\x35\x3b\
+\x22\x20\x78\x6d\x6c\x3a\x73\x70\x61\x63\x65\x3d\x22\x70\x72\x65\
+\x73\x65\x72\x76\x65\x22\x3e\x0a\x3c\x70\x61\x74\x68\x20\x69\x64\
+\x3d\x22\x72\x65\x63\x74\x33\x33\x33\x38\x22\x20\x69\x6e\x6b\x73\
+\x63\x61\x70\x65\x3a\x63\x6f\x6e\x6e\x65\x63\x74\x6f\x72\x2d\x63\
+\x75\x72\x76\x61\x74\x75\x72\x65\x3d\x22\x30\x22\x20\x73\x6f\x64\
+\x69\x70\x6f\x64\x69\x3a\x6e\x6f\x64\x65\x74\x79\x70\x65\x73\x3d\
+\x22\x63\x63\x63\x63\x63\x63\x63\x63\x63\x63\x63\x63\x22\x20\x64\
+\x3d\x22\x4d\x37\x2e\x35\x32\x34\x33\x2c\x31\x2e\x35\x30\x30\x34\
+\x0a\x09\x43\x37\x2e\x32\x34\x32\x39\x2c\x31\x2e\x34\x39\x31\x33\
+\x2c\x36\x2e\x39\x37\x38\x37\x2c\x31\x2e\x36\x34\x32\x33\x2c\x36\
+\x2e\x38\x33\x33\x36\x2c\x31\x2e\x38\x39\x35\x32\x6c\x2d\x35\x2e\
+\x35\x2c\x39\x2e\x38\x36\x39\x32\x43\x31\x2e\x30\x32\x31\x38\x2c\
+\x31\x32\x2e\x33\x30\x37\x38\x2c\x31\x2e\x33\x39\x35\x2c\x31\x32\
+\x2e\x39\x39\x39\x39\x2c\x32\x2c\x31\x33\x68\x31\x31\x0a\x09\x63\
+\x30\x2e\x36\x30\x35\x2d\x30\x2e\x30\x30\x30\x31\x2c\x30\x2e\x39\
+\x37\x38\x32\x2d\x30\x2e\x36\x39\x32\x32\x2c\x30\x2e\x36\x36\x36\
+\x34\x2d\x31\x2e\x32\x33\x35\x35\x6c\x2d\x35\x2e\x35\x2d\x39\x2e\
+\x38\x36\x39\x32\x43\x38\x2e\x30\x33\x30\x32\x2c\x31\x2e\x36\x35\
+\x37\x39\x2c\x37\x2e\x37\x38\x38\x34\x2c\x31\x2e\x35\x30\x39\x32\
+\x2c\x37\x2e\x35\x32\x34\x33\x2c\x31\x2e\x35\x30\x30\x34\x7a\x20\
+\x4d\x37\x2e\x35\x2c\x33\x2e\x38\x39\x39\x33\x6c\x34\x2e\x31\x32\
+\x36\x37\x2c\x37\x2e\x34\x37\x30\x34\x0a\x09\x48\x33\x2e\x33\x37\
+\x33\x33\x4c\x37\x2e\x35\x2c\x33\x2e\x38\x39\x39\x33\x7a\x22\x2f\
+\x3e\x0a\x3c\x2f\x73\x76\x67\x3e\x0a\
+\x00\x00\x05\xbb\
+\x3c\
+\x3f\x78\x6d\x6c\x20\x76\x65\x72\x73\x69\x6f\x6e\x3d\x22\x31\x2e\
+\x30\x22\x20\x65\x6e\x63\x6f\x64\x69\x6e\x67\x3d\x22\x75\x74\x66\
+\x2d\x38\x22\x3f\x3e\x0a\x3c\x21\x2d\x2d\x20\x47\x65\x6e\x65\x72\
+\x61\x74\x6f\x72\x3a\x20\x41\x64\x6f\x62\x65\x20\x49\x6c\x6c\x75\
+\x73\x74\x72\x61\x74\x6f\x72\x20\x31\x36\x2e\x32\x2e\x31\x2c\x20\
+\x53\x56\x47\x20\x45\x78\x70\x6f\x72\x74\x20\x50\x6c\x75\x67\x2d\
+\x49\x6e\x20\x2e\x20\x53\x56\x47\x20\x56\x65\x72\x73\x69\x6f\x6e\
+\x3a\x20\x36\x2e\x30\x30\x20\x42\x75\x69\x6c\x64\x20\x30\x29\x20\
+\x20\x2d\x2d\x3e\x0a\x3c\x21\x44\x4f\x43\x54\x59\x50\x45\x20\x73\
+\x76\x67\x20\x50\x55\x42\x4c\x49\x43\x20\x22\x2d\x2f\x2f\x57\x33\
+\x43\x2f\x2f\x44\x54\x44\x20\x53\x56\x47\x20\x31\x2e\x31\x2f\x2f\
+\x45\x4e\x22\x20\x22\x68\x74\x74\x70\x3a\x2f\x2f\x77\x77\x77\x2e\
+\x77\x33\x2e\x6f\x72\x67\x2f\x47\x72\x61\x70\x68\x69\x63\x73\x2f\
+\x53\x56\x47\x2f\x31\x2e\x31\x2f\x44\x54\x44\x2f\x73\x76\x67\x31\
+\x31\x2e\x64\x74\x64\x22\x3e\x0a\x3c\x73\x76\x67\x20\x76\x65\x72\
+\x73\x69\x6f\x6e\x3d\x22\x31\x2e\x31\x22\x20\x69\x64\x3d\x22\x4c\
+\x61\x79\x65\x72\x5f\x31\x22\x20\x78\x6d\x6c\x6e\x73\x3d\x22\x68\
+\x74\x74\x70\x3a\x2f\x2f\x77\x77\x77\x2e\x77\x33\x2e\x6f\x72\x67\
+\x2f\x32\x30\x30\x30\x2f\x73\x76\x67\x22\x20\x78\x6d\x6c\x6e\x73\
+\x3a\x78\x6c\x69\x6e\x6b\x3d\x22\x68\x74\x74\x70\x3a\x2f\x2f\x77\
+\x77\x77\x2e\x77\x33\x2e\x6f\x72\x67\x2f\x31\x39\x39\x39\x2f\x78\
+\x6c\x69\x6e\x6b\x22\x20\x78\x3d\x22\x30\x70\x78\x22\x20\x79\x3d\
+\x22\x30\x70\x78\x22\x0a\x09\x20\x77\x69\x64\x74\x68\x3d\x22\x35\
+\x31\x32\x70\x78\x22\x20\x68\x65\x69\x67\x68\x74\x3d\x22\x35\x31\
+\x32\x70\x78\x22\x20\x76\x69\x65\x77\x42\x6f\x78\x3d\x22\x30\x20\
+\x30\x20\x35\x31\x32\x20\x35\x31\x32\x22\x20\x65\x6e\x61\x62\x6c\
+\x65\x2d\x62\x61\x63\x6b\x67\x72\x6f\x75\x6e\x64\x3d\x22\x6e\x65\
+\x77\x20\x30\x20\x30\x20\x35\x31\x32\x20\x35\x31\x32\x22\x20\x78\
+\x6d\x6c\x3a\x73\x70\x61\x63\x65\x3d\x22\x70\x72\x65\x73\x65\x72\
+\x76\x65\x22\x3e\x0a\x3c\x70\x61\x74\x68\x20\x64\x3d\x22\x4d\x34\
+\x35\x30\x2e\x36\x37\x39\x2c\x32\x37\x33\x2e\x35\x63\x2d\x31\x34\
+\x2e\x35\x38\x35\x2d\x31\x34\x2e\x35\x37\x37\x2d\x33\x36\x2e\x30\
+\x35\x34\x2d\x31\x35\x2e\x38\x39\x2d\x35\x30\x2e\x36\x33\x39\x2d\
+\x31\x2e\x33\x31\x32\x6c\x2d\x34\x31\x2e\x36\x38\x37\x2c\x34\x31\
+\x2e\x36\x36\x34\x63\x2d\x31\x30\x2e\x38\x35\x32\x2c\x31\x30\x2e\
+\x38\x33\x36\x2d\x32\x33\x2e\x39\x33\x2c\x31\x30\x2e\x38\x35\x39\
+\x2d\x33\x31\x2e\x35\x36\x34\x2c\x31\x2e\x38\x35\x32\x0a\x09\x63\
+\x2d\x35\x2e\x30\x35\x37\x2d\x35\x2e\x39\x36\x38\x2d\x33\x2e\x30\
+\x36\x31\x2d\x32\x34\x2e\x33\x37\x34\x2d\x31\x2e\x36\x34\x34\x2d\
+\x33\x36\x2e\x30\x34\x39\x6c\x32\x30\x2e\x39\x30\x37\x2d\x31\x37\
+\x31\x2e\x38\x34\x39\x63\x31\x2e\x38\x36\x37\x2d\x31\x35\x2e\x33\
+\x35\x33\x2d\x39\x2e\x30\x37\x2d\x33\x30\x2e\x31\x38\x35\x2d\x32\
+\x34\x2e\x34\x33\x2d\x33\x32\x2e\x30\x35\x31\x0a\x09\x63\x2d\x31\
+\x35\x2e\x33\x35\x38\x2d\x31\x2e\x38\x36\x37\x2d\x32\x39\x2e\x33\
+\x32\x32\x2c\x39\x2e\x39\x33\x39\x2d\x33\x31\x2e\x31\x39\x31\x2c\
+\x32\x35\x2e\x32\x38\x39\x4c\x32\x36\x37\x2e\x33\x37\x2c\x32\x33\
+\x36\x2e\x30\x32\x31\x63\x2d\x31\x2e\x32\x30\x35\x2c\x33\x2e\x33\
+\x35\x38\x2d\x33\x2e\x37\x39\x2c\x33\x2e\x39\x33\x38\x2d\x34\x2e\
+\x30\x38\x31\x2d\x30\x2e\x35\x38\x32\x4c\x32\x35\x35\x2e\x34\x34\
+\x2c\x36\x30\x0a\x09\x63\x30\x2d\x31\x35\x2e\x34\x36\x35\x2d\x31\
+\x32\x2e\x35\x34\x32\x2d\x32\x38\x2d\x32\x38\x2e\x30\x31\x34\x2d\
+\x32\x38\x63\x2d\x31\x35\x2e\x34\x37\x33\x2c\x30\x2d\x32\x38\x2e\
+\x30\x31\x35\x2c\x31\x32\x2e\x35\x33\x35\x2d\x32\x38\x2e\x30\x31\
+\x35\x2c\x32\x38\x6c\x2d\x30\x2e\x35\x35\x32\x2c\x31\x37\x36\x2e\
+\x37\x35\x32\x63\x30\x2e\x31\x34\x36\x2c\x32\x2e\x30\x34\x2d\x31\
+\x2e\x36\x30\x34\x2c\x32\x2e\x36\x32\x34\x2d\x31\x2e\x39\x32\x2c\
+\x30\x2e\x32\x39\x34\x4c\x31\x37\x32\x2e\x30\x31\x36\x2c\x39\x39\
+\x2e\x30\x37\x37\x0a\x09\x63\x2d\x32\x2e\x37\x35\x2d\x31\x35\x2e\
+\x32\x31\x39\x2d\x31\x37\x2e\x33\x32\x33\x2d\x32\x36\x2e\x32\x30\
+\x33\x2d\x33\x32\x2e\x35\x34\x38\x2d\x32\x33\x2e\x34\x35\x33\x63\
+\x2d\x31\x35\x2e\x32\x32\x37\x2c\x32\x2e\x37\x34\x38\x2d\x32\x35\
+\x2e\x33\x33\x39\x2c\x31\x38\x2e\x31\x38\x37\x2d\x32\x32\x2e\x35\
+\x39\x31\x2c\x33\x33\x2e\x34\x30\x33\x6c\x32\x32\x2e\x31\x39\x33\
+\x2c\x31\x36\x31\x2e\x34\x35\x35\x0a\x09\x63\x30\x2e\x30\x32\x33\
+\x2c\x32\x2e\x38\x37\x32\x2d\x30\x2e\x39\x34\x31\x2c\x34\x2e\x35\
+\x31\x33\x2d\x32\x2e\x33\x30\x38\x2c\x30\x2e\x38\x33\x31\x6c\x2d\
+\x33\x33\x2e\x31\x30\x39\x2d\x38\x38\x2e\x35\x31\x37\x63\x2d\x35\
+\x2e\x31\x38\x2d\x31\x34\x2e\x35\x37\x32\x2d\x32\x31\x2e\x31\x39\
+\x36\x2d\x32\x33\x2e\x30\x36\x35\x2d\x33\x35\x2e\x37\x37\x36\x2d\
+\x31\x37\x2e\x38\x38\x39\x0a\x09\x63\x2d\x31\x34\x2e\x35\x37\x39\
+\x2c\x35\x2e\x31\x37\x37\x2d\x32\x32\x2e\x32\x30\x31\x2c\x32\x32\
+\x2e\x30\x36\x31\x2d\x31\x37\x2e\x30\x32\x33\x2c\x33\x36\x2e\x36\
+\x33\x31\x6c\x35\x38\x2e\x30\x34\x32\x2c\x31\x38\x39\x2e\x36\x32\
+\x35\x63\x30\x2e\x33\x30\x33\x2c\x31\x2e\x30\x34\x36\x2c\x30\x2e\
+\x36\x32\x34\x2c\x32\x2e\x30\x38\x35\x2c\x30\x2e\x39\x35\x33\x2c\
+\x33\x2e\x31\x31\x38\x6c\x30\x2e\x31\x32\x31\x2c\x30\x2e\x33\x39\
+\x0a\x09\x63\x30\x2e\x30\x31\x31\x2c\x30\x2e\x30\x33\x31\x2c\x30\
+\x2e\x30\x32\x35\x2c\x30\x2e\x30\x35\x38\x2c\x30\x2e\x30\x33\x35\
+\x2c\x30\x2e\x30\x38\x38\x43\x31\x32\x36\x2e\x30\x37\x39\x2c\x34\
+\x34\x34\x2e\x32\x33\x33\x2c\x31\x37\x32\x2e\x35\x37\x2c\x34\x38\
+\x30\x2c\x32\x32\x37\x2e\x34\x32\x37\x2c\x34\x38\x30\x63\x33\x35\
+\x2e\x31\x31\x36\x2c\x30\x2c\x37\x31\x2e\x35\x39\x31\x2d\x31\x32\
+\x2e\x33\x37\x38\x2c\x39\x39\x2e\x33\x35\x37\x2d\x33\x33\x2e\x36\
+\x37\x32\x0a\x09\x63\x30\x2e\x30\x30\x31\x2c\x30\x2c\x30\x2e\x30\
+\x30\x33\x2d\x30\x2e\x30\x30\x32\x2c\x30\x2e\x30\x30\x33\x2d\x30\
+\x2e\x30\x30\x32\x63\x32\x39\x2e\x39\x39\x2d\x31\x38\x2e\x30\x35\
+\x31\x2c\x31\x32\x36\x2e\x30\x37\x31\x2d\x31\x32\x31\x2e\x33\x34\
+\x37\x2c\x31\x32\x36\x2e\x30\x37\x31\x2d\x31\x32\x31\x2e\x33\x34\
+\x37\x43\x34\x36\x37\x2e\x34\x34\x35\x2c\x33\x31\x30\x2e\x34\x30\
+\x32\x2c\x34\x36\x35\x2e\x32\x36\x36\x2c\x32\x38\x38\x2e\x30\x38\
+\x2c\x34\x35\x30\x2e\x36\x37\x39\x2c\x32\x37\x33\x2e\x35\x7a\x22\
+\x2f\x3e\x0a\x3c\x2f\x73\x76\x67\x3e\x0a\
+\x00\x00\x03\xd9\
+\x3c\
+\x3f\x78\x6d\x6c\x20\x76\x65\x72\x73\x69\x6f\x6e\x3d\x22\x31\x2e\
+\x30\x22\x20\x65\x6e\x63\x6f\x64\x69\x6e\x67\x3d\x22\x75\x74\x66\
+\x2d\x38\x22\x3f\x3e\x0a\x3c\x21\x2d\x2d\x20\x47\x65\x6e\x65\x72\
+\x61\x74\x6f\x72\x3a\x20\x41\x64\x6f\x62\x65\x20\x49\x6c\x6c\x75\
+\x73\x74\x72\x61\x74\x6f\x72\x20\x31\x38\x2e\x31\x2e\x31\x2c\x20\
+\x53\x56\x47\x20\x45\x78\x70\x6f\x72\x74\x20\x50\x6c\x75\x67\x2d\
+\x49\x6e\x20\x2e\x20\x53\x56\x47\x20\x56\x65\x72\x73\x69\x6f\x6e\
+\x3a\x20\x36\x2e\x30\x30\x20\x42\x75\x69\x6c\x64\x20\x30\x29\x20\
+\x20\x2d\x2d\x3e\x0a\x3c\x21\x44\x4f\x43\x54\x59\x50\x45\x20\x73\
+\x76\x67\x20\x50\x55\x42\x4c\x49\x43\x20\x22\x2d\x2f\x2f\x57\x33\
+\x43\x2f\x2f\x44\x54\x44\x20\x53\x56\x47\x20\x31\x2e\x31\x2f\x2f\
+\x45\x4e\x22\x20\x22\x68\x74\x74\x70\x3a\x2f\x2f\x77\x77\x77\x2e\
+\x77\x33\x2e\x6f\x72\x67\x2f\x47\x72\x61\x70\x68\x69\x63\x73\x2f\
+\x53\x56\x47\x2f\x31\x2e\x31\x2f\x44\x54\x44\x2f\x73\x76\x67\x31\
+\x31\x2e\x64\x74\x64\x22\x3e\x0a\x3c\x73\x76\x67\x20\x76\x65\x72\
+\x73\x69\x6f\x6e\x3d\x22\x31\x2e\x31\x22\x20\x69\x64\x3d\x22\x43\
+\x68\x65\x76\x72\x6f\x6e\x5f\x63\x69\x72\x63\x6c\x65\x64\x5f\x72\
+\x69\x67\x68\x74\x22\x20\x78\x6d\x6c\x6e\x73\x3d\x22\x68\x74\x74\
+\x70\x3a\x2f\x2f\x77\x77\x77\x2e\x77\x33\x2e\x6f\x72\x67\x2f\x32\
+\x30\x30\x30\x2f\x73\x76\x67\x22\x20\x78\x6d\x6c\x6e\x73\x3a\x78\
+\x6c\x69\x6e\x6b\x3d\x22\x68\x74\x74\x70\x3a\x2f\x2f\x77\x77\x77\
+\x2e\x77\x33\x2e\x6f\x72\x67\x2f\x31\x39\x39\x39\x2f\x78\x6c\x69\
+\x6e\x6b\x22\x0a\x09\x20\x78\x3d\x22\x30\x70\x78\x22\x20\x79\x3d\
+\x22\x30\x70\x78\x22\x20\x76\x69\x65\x77\x42\x6f\x78\x3d\x22\x30\
+\x20\x30\x20\x35\x31\x32\x20\x35\x31\x32\x22\x20\x65\x6e\x61\x62\
+\x6c\x65\x2d\x62\x61\x63\x6b\x67\x72\x6f\x75\x6e\x64\x3d\x22\x6e\
+\x65\x77\x20\x30\x20\x30\x20\x35\x31\x32\x20\x35\x31\x32\x22\x20\
+\x78\x6d\x6c\x3a\x73\x70\x61\x63\x65\x3d\x22\x70\x72\x65\x73\x65\
+\x72\x76\x65\x22\x3e\x0a\x3c\x67\x20\x74\x72\x61\x6e\x73\x66\x6f\
+\x72\x6d\x3d\x27\x6d\x61\x74\x72\x69\x78\x28\x32\x34\x20\x30\x20\
+\x30\x20\x32\x34\x20\x30\x20\x30\x29\x27\x3e\x0a\x3c\x70\x61\x74\
+\x68\x20\x64\x3d\x22\x4d\x31\x31\x2c\x31\x30\x4c\x38\x2e\x36\x39\
+\x38\x2c\x37\x2e\x34\x39\x34\x63\x2d\x30\x2e\x31\x39\x36\x2d\x30\
+\x2e\x31\x39\x38\x2d\x30\x2e\x31\x39\x36\x2d\x30\x2e\x35\x31\x39\
+\x2c\x30\x2d\x30\x2e\x37\x31\x38\x63\x30\x2e\x31\x39\x36\x2d\x30\
+\x2e\x31\x39\x37\x2c\x30\x2e\x35\x31\x35\x2d\x30\x2e\x31\x39\x37\
+\x2c\x30\x2e\x37\x31\x2c\x30\x6c\x32\x2e\x38\x30\x37\x2c\x32\x2e\
+\x38\x36\x34\x0a\x09\x63\x30\x2e\x31\x39\x36\x2c\x30\x2e\x31\x39\
+\x39\x2c\x30\x2e\x31\x39\x36\x2c\x30\x2e\x35\x32\x2c\x30\x2c\x30\
+\x2e\x37\x31\x37\x6c\x2d\x32\x2e\x38\x30\x37\x2c\x32\x2e\x38\x36\
+\x34\x63\x2d\x30\x2e\x31\x39\x35\x2c\x30\x2e\x31\x39\x39\x2d\x30\
+\x2e\x35\x31\x34\x2c\x30\x2e\x31\x39\x38\x2d\x30\x2e\x37\x31\x2c\
+\x30\x63\x2d\x30\x2e\x31\x39\x36\x2d\x30\x2e\x31\x39\x37\x2d\x30\
+\x2e\x31\x39\x36\x2d\x30\x2e\x35\x31\x38\x2c\x30\x2d\x30\x2e\x37\
+\x31\x37\x4c\x31\x31\x2c\x31\x30\x7a\x20\x4d\x31\x30\x2c\x30\x2e\
+\x34\x0a\x09\x63\x35\x2e\x33\x30\x32\x2c\x30\x2c\x39\x2e\x36\x2c\
+\x34\x2e\x32\x39\x38\x2c\x39\x2e\x36\x2c\x39\x2e\x36\x63\x30\x2c\
+\x35\x2e\x33\x30\x33\x2d\x34\x2e\x32\x39\x38\x2c\x39\x2e\x36\x2d\
+\x39\x2e\x36\x2c\x39\x2e\x36\x53\x30\x2e\x34\x2c\x31\x35\x2e\x33\
+\x30\x33\x2c\x30\x2e\x34\x2c\x31\x30\x43\x30\x2e\x34\x2c\x34\x2e\
+\x36\x39\x38\x2c\x34\x2e\x36\x39\x38\x2c\x30\x2e\x34\x2c\x31\x30\
+\x2c\x30\x2e\x34\x7a\x20\x4d\x31\x30\x2c\x31\x38\x2e\x33\x35\x34\
+\x0a\x09\x63\x34\x2e\x36\x31\x33\x2c\x30\x2c\x38\x2e\x33\x35\x34\
+\x2d\x33\x2e\x37\x34\x2c\x38\x2e\x33\x35\x34\x2d\x38\x2e\x33\x35\
+\x34\x63\x30\x2d\x34\x2e\x36\x31\x34\x2d\x33\x2e\x37\x34\x31\x2d\
+\x38\x2e\x33\x35\x34\x2d\x38\x2e\x33\x35\x34\x2d\x38\x2e\x33\x35\
+\x34\x63\x2d\x34\x2e\x36\x31\x35\x2c\x30\x2d\x38\x2e\x33\x35\x34\
+\x2c\x33\x2e\x37\x34\x2d\x38\x2e\x33\x35\x34\x2c\x38\x2e\x33\x35\
+\x34\x0a\x09\x43\x31\x2e\x36\x34\x35\x2c\x31\x34\x2e\x36\x31\x34\
+\x2c\x35\x2e\x33\x38\x35\x2c\x31\x38\x2e\x33\x35\x34\x2c\x31\x30\
+\x2c\x31\x38\x2e\x33\x35\x34\x7a\x22\x2f\x3e\x0a\x3c\x2f\x67\x3e\
+\x0a\x3c\x2f\x73\x76\x67\x3e\x0a\
+\x00\x00\x04\x13\
+\x3c\
+\x3f\x78\x6d\x6c\x20\x76\x65\x72\x73\x69\x6f\x6e\x3d\x27\x31\x2e\
+\x30\x27\x20\x65\x6e\x63\x6f\x64\x69\x6e\x67\x3d\x27\x55\x54\x46\
+\x2d\x38\x27\x3f\x3e\x0a\x3c\x21\x2d\x2d\x20\x54\x68\x69\x73\x20\
+\x66\x69\x6c\x65\x20\x77\x61\x73\x20\x67\x65\x6e\x65\x72\x61\x74\
+\x65\x64\x20\x62\x79\x20\x64\x76\x69\x73\x76\x67\x6d\x20\x32\x2e\
+\x31\x31\x2e\x31\x20\x2d\x2d\x3e\x0a\x3c\x73\x76\x67\x20\x76\x65\
+\x72\x73\x69\x6f\x6e\x3d\x27\x31\x2e\x31\x27\x20\x78\x6d\x6c\x6e\
+\x73\x3d\x27\x68\x74\x74\x70\x3a\x2f\x2f\x77\x77\x77\x2e\x77\x33\
+\x2e\x6f\x72\x67\x2f\x32\x30\x30\x30\x2f\x73\x76\x67\x27\x20\x78\
+\x6d\x6c\x6e\x73\x3a\x78\x6c\x69\x6e\x6b\x3d\x27\x68\x74\x74\x70\
+\x3a\x2f\x2f\x77\x77\x77\x2e\x77\x33\x2e\x6f\x72\x67\x2f\x31\x39\
+\x39\x39\x2f\x78\x6c\x69\x6e\x6b\x27\x20\x77\x69\x64\x74\x68\x3d\
+\x27\x36\x34\x2e\x30\x30\x30\x31\x70\x74\x27\x20\x68\x65\x69\x67\
+\x68\x74\x3d\x27\x36\x34\x70\x74\x27\x20\x76\x69\x65\x77\x42\x6f\
+\x78\x3d\x27\x35\x38\x2e\x34\x36\x36\x39\x20\x31\x31\x37\x2e\x38\
+\x35\x38\x20\x36\x34\x2e\x30\x30\x30\x31\x20\x36\x34\x27\x3e\x0a\
+\x3c\x67\x20\x69\x64\x3d\x27\x70\x61\x67\x65\x31\x27\x3e\x0a\x3c\
+\x67\x20\x74\x72\x61\x6e\x73\x66\x6f\x72\x6d\x3d\x27\x74\x72\x61\
+\x6e\x73\x6c\x61\x74\x65\x28\x35\x38\x2e\x34\x36\x36\x39\x20\x31\
+\x31\x37\x2e\x38\x35\x38\x29\x73\x63\x61\x6c\x65\x28\x2e\x39\x39\
+\x36\x32\x36\x34\x29\x27\x3e\x0a\x3c\x70\x61\x74\x68\x20\x64\x3d\
+\x27\x4d\x20\x36\x2e\x30\x32\x32\x35\x20\x33\x32\x2e\x31\x32\x4c\
+\x20\x31\x33\x2e\x39\x36\x38\x37\x20\x31\x32\x2e\x39\x33\x36\x31\
+\x4c\x20\x35\x38\x2e\x32\x31\x37\x35\x20\x32\x31\x2e\x37\x33\x37\
+\x38\x4c\x20\x34\x32\x2e\x37\x34\x34\x35\x20\x34\x31\x2e\x37\x31\
+\x31\x39\x27\x20\x66\x69\x6c\x6c\x3d\x27\x6e\x6f\x6e\x65\x27\x20\
+\x73\x74\x72\x6f\x6b\x65\x3d\x27\x23\x30\x30\x30\x30\x30\x30\x27\
+\x20\x73\x74\x72\x6f\x6b\x65\x2d\x6c\x69\x6e\x65\x63\x61\x70\x3d\
+\x27\x72\x6f\x75\x6e\x64\x27\x20\x73\x74\x72\x6f\x6b\x65\x2d\x6c\
+\x69\x6e\x65\x6a\x6f\x69\x6e\x3d\x27\x72\x6f\x75\x6e\x64\x27\x20\
+\x73\x74\x72\x6f\x6b\x65\x2d\x6d\x69\x74\x65\x72\x6c\x69\x6d\x69\
+\x74\x3d\x27\x31\x30\x2e\x30\x33\x37\x35\x27\x20\x73\x74\x72\x6f\
+\x6b\x65\x2d\x77\x69\x64\x74\x68\x3d\x27\x32\x2e\x35\x30\x39\x33\
+\x37\x27\x2f\x3e\x0a\x3c\x2f\x67\x3e\x0a\x3c\x67\x20\x74\x72\x61\
+\x6e\x73\x66\x6f\x72\x6d\x3d\x27\x74\x72\x61\x6e\x73\x6c\x61\x74\
+\x65\x28\x35\x38\x2e\x34\x36\x36\x39\x20\x31\x31\x37\x2e\x38\x35\
+\x38\x29\x73\x63\x61\x6c\x65\x28\x2e\x39\x39\x36\x32\x36\x34\x29\
+\x27\x3e\x0a\x3c\x63\x69\x72\x63\x6c\x65\x20\x63\x78\x3d\x27\x36\
+\x2e\x30\x32\x32\x35\x27\x20\x63\x79\x3d\x27\x33\x32\x2e\x31\x32\
+\x27\x20\x66\x69\x6c\x6c\x3d\x27\x23\x66\x66\x30\x30\x30\x30\x27\
+\x20\x72\x3d\x27\x36\x2e\x30\x32\x32\x35\x27\x2f\x3e\x0a\x3c\x2f\
+\x67\x3e\x0a\x3c\x67\x20\x74\x72\x61\x6e\x73\x66\x6f\x72\x6d\x3d\
+\x27\x74\x72\x61\x6e\x73\x6c\x61\x74\x65\x28\x35\x38\x2e\x34\x36\
+\x36\x39\x20\x31\x31\x37\x2e\x38\x35\x38\x29\x73\x63\x61\x6c\x65\
+\x28\x2e\x39\x39\x36\x32\x36\x34\x29\x27\x3e\x0a\x3c\x63\x69\x72\
+\x63\x6c\x65\x20\x63\x78\x3d\x27\x31\x33\x2e\x39\x36\x38\x37\x27\
+\x20\x63\x79\x3d\x27\x31\x32\x2e\x39\x33\x36\x31\x27\x20\x66\x69\
+\x6c\x6c\x3d\x27\x23\x66\x66\x30\x30\x30\x30\x27\x20\x72\x3d\x27\
+\x36\x2e\x30\x32\x32\x35\x27\x2f\x3e\x0a\x3c\x2f\x67\x3e\x0a\x3c\
+\x67\x20\x74\x72\x61\x6e\x73\x66\x6f\x72\x6d\x3d\x27\x74\x72\x61\
+\x6e\x73\x6c\x61\x74\x65\x28\x35\x38\x2e\x34\x36\x36\x39\x20\x31\
+\x31\x37\x2e\x38\x35\x38\x29\x73\x63\x61\x6c\x65\x28\x2e\x39\x39\
+\x36\x32\x36\x34\x29\x27\x3e\x0a\x3c\x63\x69\x72\x63\x6c\x65\x20\
+\x63\x78\x3d\x27\x35\x38\x2e\x32\x31\x37\x35\x27\x20\x63\x79\x3d\
+\x27\x32\x31\x2e\x37\x33\x37\x38\x27\x20\x66\x69\x6c\x6c\x3d\x27\
+\x23\x66\x66\x30\x30\x30\x30\x27\x20\x72\x3d\x27\x36\x2e\x30\x32\
+\x32\x35\x27\x2f\x3e\x0a\x3c\x2f\x67\x3e\x0a\x3c\x67\x20\x74\x72\
+\x61\x6e\x73\x66\x6f\x72\x6d\x3d\x27\x74\x72\x61\x6e\x73\x6c\x61\
+\x74\x65\x28\x35\x38\x2e\x34\x36\x36\x39\x20\x31\x31\x37\x2e\x38\
+\x35\x38\x29\x73\x63\x61\x6c\x65\x28\x2e\x39\x39\x36\x32\x36\x34\
+\x29\x27\x3e\x0a\x3c\x63\x69\x72\x63\x6c\x65\x20\x63\x78\x3d\x27\
+\x34\x32\x2e\x37\x34\x34\x35\x27\x20\x63\x79\x3d\x27\x34\x31\x2e\
+\x37\x31\x31\x39\x27\x20\x66\x69\x6c\x6c\x3d\x27\x23\x66\x66\x30\
+\x30\x30\x30\x27\x20\x72\x3d\x27\x36\x2e\x30\x32\x32\x35\x27\x2f\
+\x3e\x0a\x3c\x2f\x67\x3e\x0a\x3c\x2f\x67\x3e\x0a\x3c\x2f\x73\x76\
+\x67\x3e\
+\x00\x00\x03\x48\
+\x3c\
+\x3f\x78\x6d\x6c\x20\x76\x65\x72\x73\x69\x6f\x6e\x3d\x22\x31\x2e\
+\x30\x22\x20\x65\x6e\x63\x6f\x64\x69\x6e\x67\x3d\x22\x75\x74\x66\
+\x2d\x38\x22\x3f\x3e\x0a\x3c\x21\x2d\x2d\x20\x47\x65\x6e\x65\x72\
+\x61\x74\x6f\x72\x3a\x20\x41\x64\x6f\x62\x65\x20\x49\x6c\x6c\x75\
+\x73\x74\x72\x61\x74\x6f\x72\x20\x31\x36\x2e\x32\x2e\x31\x2c\x20\
+\x53\x56\x47\x20\x45\x78\x70\x6f\x72\x74\x20\x50\x6c\x75\x67\x2d\
+\x49\x6e\x20\x2e\x20\x53\x56\x47\x20\x56\x65\x72\x73\x69\x6f\x6e\
+\x3a\x20\x36\x2e\x30\x30\x20\x42\x75\x69\x6c\x64\x20\x30\x29\x20\
+\x20\x2d\x2d\x3e\x0a\x3c\x21\x44\x4f\x43\x54\x59\x50\x45\x20\x73\
+\x76\x67\x20\x50\x55\x42\x4c\x49\x43\x20\x22\x2d\x2f\x2f\x57\x33\
+\x43\x2f\x2f\x44\x54\x44\x20\x53\x56\x47\x20\x31\x2e\x31\x2f\x2f\
+\x45\x4e\x22\x20\x22\x68\x74\x74\x70\x3a\x2f\x2f\x77\x77\x77\x2e\
+\x77\x33\x2e\x6f\x72\x67\x2f\x47\x72\x61\x70\x68\x69\x63\x73\x2f\
+\x53\x56\x47\x2f\x31\x2e\x31\x2f\x44\x54\x44\x2f\x73\x76\x67\x31\
+\x31\x2e\x64\x74\x64\x22\x3e\x0a\x3c\x73\x76\x67\x20\x76\x65\x72\
+\x73\x69\x6f\x6e\x3d\x22\x31\x2e\x31\x22\x20\x69\x64\x3d\x22\x4c\
+\x61\x79\x65\x72\x5f\x31\x22\x20\x78\x6d\x6c\x6e\x73\x3d\x22\x68\
+\x74\x74\x70\x3a\x2f\x2f\x77\x77\x77\x2e\x77\x33\x2e\x6f\x72\x67\
+\x2f\x32\x30\x30\x30\x2f\x73\x76\x67\x22\x20\x78\x6d\x6c\x6e\x73\
+\x3a\x78\x6c\x69\x6e\x6b\x3d\x22\x68\x74\x74\x70\x3a\x2f\x2f\x77\
+\x77\x77\x2e\x77\x33\x2e\x6f\x72\x67\x2f\x31\x39\x39\x39\x2f\x78\
+\x6c\x69\x6e\x6b\x22\x20\x78\x3d\x22\x30\x70\x78\x22\x20\x79\x3d\
+\x22\x30\x70\x78\x22\x0a\x09\x20\x77\x69\x64\x74\x68\x3d\x22\x35\
+\x31\x32\x70\x78\x22\x20\x68\x65\x69\x67\x68\x74\x3d\x22\x35\x31\
+\x32\x70\x78\x22\x20\x76\x69\x65\x77\x42\x6f\x78\x3d\x22\x30\x20\
+\x30\x20\x35\x31\x32\x20\x35\x31\x32\x22\x20\x65\x6e\x61\x62\x6c\
+\x65\x2d\x62\x61\x63\x6b\x67\x72\x6f\x75\x6e\x64\x3d\x22\x6e\x65\
+\x77\x20\x30\x20\x30\x20\x35\x31\x32\x20\x35\x31\x32\x22\x20\x78\
+\x6d\x6c\x3a\x73\x70\x61\x63\x65\x3d\x22\x70\x72\x65\x73\x65\x72\
+\x76\x65\x22\x3e\x0a\x3c\x70\x61\x74\x68\x20\x64\x3d\x22\x4d\x34\
+\x33\x37\x2e\x33\x33\x34\x2c\x31\x34\x34\x48\x32\x35\x36\x2e\x30\
+\x30\x36\x6c\x2d\x34\x32\x2e\x36\x36\x38\x2d\x34\x38\x48\x37\x34\
+\x2e\x36\x36\x36\x43\x35\x31\x2e\x31\x39\x37\x2c\x39\x36\x2c\x33\
+\x32\x2c\x31\x31\x35\x2e\x31\x39\x38\x2c\x33\x32\x2c\x31\x33\x38\
+\x2e\x36\x36\x37\x76\x32\x33\x34\x2e\x36\x36\x36\x43\x33\x32\x2c\
+\x33\x39\x36\x2e\x38\x30\x32\x2c\x35\x31\x2e\x31\x39\x37\x2c\x34\
+\x31\x36\x2c\x37\x34\x2e\x36\x36\x36\x2c\x34\x31\x36\x68\x33\x36\
+\x32\x2e\x36\x36\x38\x0a\x09\x43\x34\x36\x30\x2e\x38\x30\x33\x2c\
+\x34\x31\x36\x2c\x34\x38\x30\x2c\x33\x39\x36\x2e\x38\x30\x32\x2c\
+\x34\x38\x30\x2c\x33\x37\x33\x2e\x33\x33\x33\x56\x31\x38\x36\x2e\
+\x36\x36\x37\x43\x34\x38\x30\x2c\x31\x36\x33\x2e\x31\x39\x38\x2c\
+\x34\x36\x30\x2e\x38\x30\x33\x2c\x31\x34\x34\x2c\x34\x33\x37\x2e\
+\x33\x33\x34\x2c\x31\x34\x34\x7a\x20\x4d\x34\x34\x38\x2c\x33\x37\
+\x33\x2e\x33\x33\x33\x0a\x09\x63\x30\x2c\x35\x2e\x37\x38\x32\x2d\
+\x34\x2e\x38\x38\x35\x2c\x31\x30\x2e\x36\x36\x37\x2d\x31\x30\x2e\
+\x36\x36\x36\x2c\x31\x30\x2e\x36\x36\x37\x48\x37\x34\x2e\x36\x36\
+\x36\x43\x36\x38\x2e\x38\x38\x34\x2c\x33\x38\x34\x2c\x36\x34\x2c\
+\x33\x37\x39\x2e\x31\x31\x35\x2c\x36\x34\x2c\x33\x37\x33\x2e\x33\
+\x33\x33\x56\x31\x37\x36\x68\x33\x37\x33\x2e\x33\x33\x34\x63\x35\
+\x2e\x37\x38\x31\x2c\x30\x2c\x31\x30\x2e\x36\x36\x36\x2c\x34\x2e\
+\x38\x38\x35\x2c\x31\x30\x2e\x36\x36\x36\x2c\x31\x30\x2e\x36\x36\
+\x37\x0a\x09\x56\x33\x37\x33\x2e\x33\x33\x33\x7a\x22\x2f\x3e\x0a\
+\x3c\x2f\x73\x76\x67\x3e\x0a\
+\x00\x00\x02\x98\
+\x3c\
+\x3f\x78\x6d\x6c\x20\x76\x65\x72\x73\x69\x6f\x6e\x3d\x22\x31\x2e\
+\x30\x22\x20\x65\x6e\x63\x6f\x64\x69\x6e\x67\x3d\x22\x75\x74\x66\
+\x2d\x38\x22\x3f\x3e\x0a\x3c\x21\x2d\x2d\x20\x47\x65\x6e\x65\x72\
+\x61\x74\x6f\x72\x3a\x20\x41\x64\x6f\x62\x65\x20\x49\x6c\x6c\x75\
+\x73\x74\x72\x61\x74\x6f\x72\x20\x31\x36\x2e\x32\x2e\x31\x2c\x20\
+\x53\x56\x47\x20\x45\x78\x70\x6f\x72\x74\x20\x50\x6c\x75\x67\x2d\
+\x49\x6e\x20\x2e\x20\x53\x56\x47\x20\x56\x65\x72\x73\x69\x6f\x6e\
+\x3a\x20\x36\x2e\x30\x30\x20\x42\x75\x69\x6c\x64\x20\x30\x29\x20\
+\x20\x2d\x2d\x3e\x0a\x3c\x21\x44\x4f\x43\x54\x59\x50\x45\x20\x73\
+\x76\x67\x20\x50\x55\x42\x4c\x49\x43\x20\x22\x2d\x2f\x2f\x57\x33\
+\x43\x2f\x2f\x44\x54\x44\x20\x53\x56\x47\x20\x31\x2e\x31\x2f\x2f\
+\x45\x4e\x22\x20\x22\x68\x74\x74\x70\x3a\x2f\x2f\x77\x77\x77\x2e\
+\x77\x33\x2e\x6f\x72\x67\x2f\x47\x72\x61\x70\x68\x69\x63\x73\x2f\
+\x53\x56\x47\x2f\x31\x2e\x31\x2f\x44\x54\x44\x2f\x73\x76\x67\x31\
+\x31\x2e\x64\x74\x64\x22\x3e\x0a\x3c\x73\x76\x67\x20\x76\x65\x72\
+\x73\x69\x6f\x6e\x3d\x22\x31\x2e\x31\x22\x20\x69\x64\x3d\x22\x4c\
+\x61\x79\x65\x72\x5f\x31\x22\x20\x78\x6d\x6c\x6e\x73\x3d\x22\x68\
+\x74\x74\x70\x3a\x2f\x2f\x77\x77\x77\x2e\x77\x33\x2e\x6f\x72\x67\
+\x2f\x32\x30\x30\x30\x2f\x73\x76\x67\x22\x20\x78\x6d\x6c\x6e\x73\
+\x3a\x78\x6c\x69\x6e\x6b\x3d\x22\x68\x74\x74\x70\x3a\x2f\x2f\x77\
+\x77\x77\x2e\x77\x33\x2e\x6f\x72\x67\x2f\x31\x39\x39\x39\x2f\x78\
+\x6c\x69\x6e\x6b\x22\x20\x78\x3d\x22\x30\x70\x78\x22\x20\x79\x3d\
+\x22\x30\x70\x78\x22\x0a\x09\x20\x77\x69\x64\x74\x68\x3d\x22\x35\
+\x31\x32\x70\x78\x22\x20\x68\x65\x69\x67\x68\x74\x3d\x22\x35\x31\
+\x32\x70\x78\x22\x20\x76\x69\x65\x77\x42\x6f\x78\x3d\x22\x30\x20\
+\x30\x20\x35\x31\x32\x20\x35\x31\x32\x22\x20\x65\x6e\x61\x62\x6c\
+\x65\x2d\x62\x61\x63\x6b\x67\x72\x6f\x75\x6e\x64\x3d\x22\x6e\x65\
+\x77\x20\x30\x20\x30\x20\x35\x31\x32\x20\x35\x31\x32\x22\x20\x78\
+\x6d\x6c\x3a\x73\x70\x61\x63\x65\x3d\x22\x70\x72\x65\x73\x65\x72\
+\x76\x65\x22\x3e\x0a\x3c\x67\x3e\x0a\x09\x3c\x70\x61\x74\x68\x20\
+\x64\x3d\x22\x4d\x31\x32\x38\x2c\x34\x30\x35\x2e\x34\x32\x39\x43\
+\x31\x32\x38\x2c\x34\x32\x38\x2e\x38\x34\x36\x2c\x31\x34\x37\x2e\
+\x31\x39\x38\x2c\x34\x34\x38\x2c\x31\x37\x30\x2e\x36\x36\x37\x2c\
+\x34\x34\x38\x68\x31\x37\x30\x2e\x36\x36\x37\x43\x33\x36\x34\x2e\
+\x38\x30\x32\x2c\x34\x34\x38\x2c\x33\x38\x34\x2c\x34\x32\x38\x2e\
+\x38\x34\x36\x2c\x33\x38\x34\x2c\x34\x30\x35\x2e\x34\x32\x39\x56\
+\x31\x36\x30\x48\x31\x32\x38\x56\x34\x30\x35\x2e\x34\x32\x39\x7a\
+\x20\x4d\x34\x31\x36\x2c\x39\x36\x0a\x09\x09\x68\x2d\x38\x30\x6c\
+\x2d\x32\x36\x2e\x37\x38\x35\x2d\x33\x32\x48\x32\x30\x32\x2e\x37\
+\x38\x36\x4c\x31\x37\x36\x2c\x39\x36\x48\x39\x36\x76\x33\x32\x68\
+\x33\x32\x30\x56\x39\x36\x7a\x22\x2f\x3e\x0a\x3c\x2f\x67\x3e\x0a\
+\x3c\x2f\x73\x76\x67\x3e\x0a\
+\x00\x00\x03\x16\
+\x3c\
+\x3f\x78\x6d\x6c\x20\x76\x65\x72\x73\x69\x6f\x6e\x3d\x22\x31\x2e\
+\x30\x22\x20\x65\x6e\x63\x6f\x64\x69\x6e\x67\x3d\x22\x75\x74\x66\
+\x2d\x38\x22\x3f\x3e\x0a\x3c\x21\x2d\x2d\x20\x47\x65\x6e\x65\x72\
+\x61\x74\x6f\x72\x3a\x20\x41\x64\x6f\x62\x65\x20\x49\x6c\x6c\x75\
+\x73\x74\x72\x61\x74\x6f\x72\x20\x31\x36\x2e\x32\x2e\x31\x2c\x20\
+\x53\x56\x47\x20\x45\x78\x70\x6f\x72\x74\x20\x50\x6c\x75\x67\x2d\
+\x49\x6e\x20\x2e\x20\x53\x56\x47\x20\x56\x65\x72\x73\x69\x6f\x6e\
+\x3a\x20\x36\x2e\x30\x30\x20\x42\x75\x69\x6c\x64\x20\x30\x29\x20\
+\x20\x2d\x2d\x3e\x0a\x3c\x21\x44\x4f\x43\x54\x59\x50\x45\x20\x73\
+\x76\x67\x20\x50\x55\x42\x4c\x49\x43\x20\x22\x2d\x2f\x2f\x57\x33\
+\x43\x2f\x2f\x44\x54\x44\x20\x53\x56\x47\x20\x31\x2e\x31\x2f\x2f\
+\x45\x4e\x22\x20\x22\x68\x74\x74\x70\x3a\x2f\x2f\x77\x77\x77\x2e\
+\x77\x33\x2e\x6f\x72\x67\x2f\x47\x72\x61\x70\x68\x69\x63\x73\x2f\
+\x53\x56\x47\x2f\x31\x2e\x31\x2f\x44\x54\x44\x2f\x73\x76\x67\x31\
+\x31\x2e\x64\x74\x64\x22\x3e\x0a\x3c\x73\x76\x67\x20\x76\x65\x72\
+\x73\x69\x6f\x6e\x3d\x22\x31\x2e\x31\x22\x20\x69\x64\x3d\x22\x4c\
+\x61\x79\x65\x72\x5f\x31\x22\x20\x78\x6d\x6c\x6e\x73\x3d\x22\x68\
+\x74\x74\x70\x3a\x2f\x2f\x77\x77\x77\x2e\x77\x33\x2e\x6f\x72\x67\
+\x2f\x32\x30\x30\x30\x2f\x73\x76\x67\x22\x20\x78\x6d\x6c\x6e\x73\
+\x3a\x78\x6c\x69\x6e\x6b\x3d\x22\x68\x74\x74\x70\x3a\x2f\x2f\x77\
+\x77\x77\x2e\x77\x33\x2e\x6f\x72\x67\x2f\x31\x39\x39\x39\x2f\x78\
+\x6c\x69\x6e\x6b\x22\x20\x78\x3d\x22\x30\x70\x78\x22\x20\x79\x3d\
+\x22\x30\x70\x78\x22\x0a\x09\x20\x77\x69\x64\x74\x68\x3d\x22\x35\
+\x31\x32\x70\x78\x22\x20\x68\x65\x69\x67\x68\x74\x3d\x22\x35\x31\
+\x32\x70\x78\x22\x20\x76\x69\x65\x77\x42\x6f\x78\x3d\x22\x30\x20\
+\x30\x20\x35\x31\x32\x20\x35\x31\x32\x22\x20\x65\x6e\x61\x62\x6c\
+\x65\x2d\x62\x61\x63\x6b\x67\x72\x6f\x75\x6e\x64\x3d\x22\x6e\x65\
+\x77\x20\x30\x20\x30\x20\x35\x31\x32\x20\x35\x31\x32\x22\x20\x78\
+\x6d\x6c\x3a\x73\x70\x61\x63\x65\x3d\x22\x70\x72\x65\x73\x65\x72\
+\x76\x65\x22\x3e\x0a\x3c\x67\x3e\x0a\x09\x3c\x63\x69\x72\x63\x6c\
+\x65\x20\x63\x78\x3d\x22\x32\x35\x36\x22\x20\x63\x79\x3d\x22\x32\
+\x38\x30\x22\x20\x72\x3d\x22\x36\x33\x22\x2f\x3e\x0a\x09\x3c\x70\
+\x61\x74\x68\x20\x64\x3d\x22\x4d\x34\x34\x30\x2c\x39\x36\x68\x2d\
+\x38\x38\x6c\x2d\x33\x32\x2d\x33\x32\x48\x31\x39\x32\x6c\x2d\x33\
+\x32\x2c\x33\x32\x48\x37\x32\x63\x2d\x32\x32\x2e\x30\x39\x32\x2c\
+\x30\x2d\x34\x30\x2c\x31\x37\x2e\x39\x30\x38\x2d\x34\x30\x2c\x34\
+\x30\x76\x32\x37\x32\x63\x30\x2c\x32\x32\x2e\x30\x39\x32\x2c\x31\
+\x37\x2e\x39\x30\x38\x2c\x34\x30\x2c\x34\x30\x2c\x34\x30\x68\x33\
+\x36\x38\x63\x32\x32\x2e\x30\x39\x32\x2c\x30\x2c\x34\x30\x2d\x31\
+\x37\x2e\x39\x30\x38\x2c\x34\x30\x2d\x34\x30\x0a\x09\x09\x56\x31\
+\x33\x36\x43\x34\x38\x30\x2c\x31\x31\x33\x2e\x39\x30\x38\x2c\x34\
+\x36\x32\x2e\x30\x39\x32\x2c\x39\x36\x2c\x34\x34\x30\x2c\x39\x36\
+\x7a\x20\x4d\x32\x35\x36\x2c\x33\x39\x32\x63\x2d\x36\x31\x2e\x38\
+\x35\x35\x2c\x30\x2d\x31\x31\x32\x2d\x35\x30\x2e\x31\x34\x35\x2d\
+\x31\x31\x32\x2d\x31\x31\x32\x73\x35\x30\x2e\x31\x34\x35\x2d\x31\
+\x31\x32\x2c\x31\x31\x32\x2d\x31\x31\x32\x73\x31\x31\x32\x2c\x35\
+\x30\x2e\x31\x34\x35\x2c\x31\x31\x32\x2c\x31\x31\x32\x0a\x09\x09\
+\x53\x33\x31\x37\x2e\x38\x35\x35\x2c\x33\x39\x32\x2c\x32\x35\x36\
+\x2c\x33\x39\x32\x7a\x22\x2f\x3e\x0a\x3c\x2f\x67\x3e\x0a\x3c\x2f\
+\x73\x76\x67\x3e\x0a\
+\x00\x00\x03\xfe\
+\x3c\
+\x3f\x78\x6d\x6c\x20\x76\x65\x72\x73\x69\x6f\x6e\x3d\x27\x31\x2e\
+\x30\x27\x20\x65\x6e\x63\x6f\x64\x69\x6e\x67\x3d\x27\x55\x54\x46\
+\x2d\x38\x27\x3f\x3e\x0a\x3c\x21\x2d\x2d\x20\x54\x68\x69\x73\x20\
+\x66\x69\x6c\x65\x20\x77\x61\x73\x20\x67\x65\x6e\x65\x72\x61\x74\
+\x65\x64\x20\x62\x79\x20\x64\x76\x69\x73\x76\x67\x6d\x20\x32\x2e\
+\x31\x31\x2e\x31\x20\x2d\x2d\x3e\x0a\x3c\x73\x76\x67\x20\x76\x65\
+\x72\x73\x69\x6f\x6e\x3d\x27\x31\x2e\x31\x27\x20\x78\x6d\x6c\x6e\
+\x73\x3d\x27\x68\x74\x74\x70\x3a\x2f\x2f\x77\x77\x77\x2e\x77\x33\
+\x2e\x6f\x72\x67\x2f\x32\x30\x30\x30\x2f\x73\x76\x67\x27\x20\x78\
+\x6d\x6c\x6e\x73\x3a\x78\x6c\x69\x6e\x6b\x3d\x27\x68\x74\x74\x70\
+\x3a\x2f\x2f\x77\x77\x77\x2e\x77\x33\x2e\x6f\x72\x67\x2f\x31\x39\
+\x39\x39\x2f\x78\x6c\x69\x6e\x6b\x27\x20\x77\x69\x64\x74\x68\x3d\
+\x27\x36\x33\x2e\x39\x39\x39\x36\x70\x74\x27\x20\x68\x65\x69\x67\
+\x68\x74\x3d\x27\x36\x34\x70\x74\x27\x20\x76\x69\x65\x77\x42\x6f\
+\x78\x3d\x27\x35\x36\x2e\x34\x30\x39\x34\x20\x31\x31\x37\x2e\x38\
+\x35\x38\x20\x36\x33\x2e\x39\x39\x39\x36\x20\x36\x34\x27\x3e\x0a\
+\x3c\x67\x20\x69\x64\x3d\x27\x70\x61\x67\x65\x31\x27\x3e\x0a\x3c\
+\x67\x20\x74\x72\x61\x6e\x73\x66\x6f\x72\x6d\x3d\x27\x74\x72\x61\
+\x6e\x73\x6c\x61\x74\x65\x28\x35\x36\x2e\x34\x30\x39\x34\x20\x31\
+\x31\x37\x2e\x38\x35\x38\x29\x73\x63\x61\x6c\x65\x28\x2e\x39\x39\
+\x36\x32\x36\x34\x29\x27\x3e\x0a\x3c\x70\x61\x74\x68\x20\x64\x3d\
+\x27\x4d\x20\x32\x2e\x30\x30\x37\x35\x20\x36\x32\x2e\x32\x33\x32\
+\x35\x4c\x20\x36\x32\x2e\x32\x33\x32\x35\x20\x36\x32\x2e\x32\x33\
+\x32\x35\x4c\x20\x36\x32\x2e\x32\x33\x32\x35\x20\x32\x2e\x30\x30\
+\x37\x35\x4c\x20\x32\x2e\x30\x30\x37\x35\x20\x32\x2e\x30\x30\x37\
+\x35\x4c\x20\x32\x2e\x30\x30\x37\x35\x20\x36\x32\x2e\x32\x33\x32\
+\x35\x5a\x27\x20\x66\x69\x6c\x6c\x3d\x27\x6e\x6f\x6e\x65\x27\x20\
+\x73\x74\x72\x6f\x6b\x65\x3d\x27\x23\x30\x30\x30\x30\x30\x30\x27\
+\x20\x73\x74\x72\x6f\x6b\x65\x2d\x6c\x69\x6e\x65\x63\x61\x70\x3d\
+\x27\x72\x6f\x75\x6e\x64\x27\x20\x73\x74\x72\x6f\x6b\x65\x2d\x6c\
+\x69\x6e\x65\x6a\x6f\x69\x6e\x3d\x27\x72\x6f\x75\x6e\x64\x27\x20\
+\x73\x74\x72\x6f\x6b\x65\x2d\x6d\x69\x74\x65\x72\x6c\x69\x6d\x69\
+\x74\x3d\x27\x31\x30\x2e\x30\x33\x37\x35\x27\x20\x73\x74\x72\x6f\
+\x6b\x65\x2d\x77\x69\x64\x74\x68\x3d\x27\x34\x2e\x30\x31\x35\x27\
+\x2f\x3e\x0a\x3c\x2f\x67\x3e\x0a\x3c\x67\x20\x74\x72\x61\x6e\x73\
+\x66\x6f\x72\x6d\x3d\x27\x74\x72\x61\x6e\x73\x6c\x61\x74\x65\x28\
+\x35\x36\x2e\x34\x30\x39\x34\x20\x31\x31\x37\x2e\x38\x35\x38\x29\
+\x73\x63\x61\x6c\x65\x28\x2e\x39\x39\x36\x32\x36\x34\x29\x27\x3e\
+\x0a\x3c\x70\x61\x74\x68\x20\x64\x3d\x27\x4d\x20\x32\x2e\x30\x30\
+\x37\x35\x20\x33\x32\x2e\x31\x32\x4c\x20\x36\x32\x2e\x32\x33\x32\
+\x35\x20\x33\x32\x2e\x31\x32\x27\x20\x66\x69\x6c\x6c\x3d\x27\x6e\
+\x6f\x6e\x65\x27\x20\x73\x74\x72\x6f\x6b\x65\x3d\x27\x23\x30\x30\
+\x30\x30\x30\x30\x27\x20\x73\x74\x72\x6f\x6b\x65\x2d\x6c\x69\x6e\
+\x65\x63\x61\x70\x3d\x27\x72\x6f\x75\x6e\x64\x27\x20\x73\x74\x72\
+\x6f\x6b\x65\x2d\x6c\x69\x6e\x65\x6a\x6f\x69\x6e\x3d\x27\x72\x6f\
+\x75\x6e\x64\x27\x20\x73\x74\x72\x6f\x6b\x65\x2d\x6d\x69\x74\x65\
+\x72\x6c\x69\x6d\x69\x74\x3d\x27\x31\x30\x2e\x30\x33\x37\x35\x27\
+\x20\x73\x74\x72\x6f\x6b\x65\x2d\x77\x69\x64\x74\x68\x3d\x27\x34\
+\x2e\x30\x31\x35\x27\x2f\x3e\x0a\x3c\x2f\x67\x3e\x0a\x3c\x67\x20\
+\x74\x72\x61\x6e\x73\x66\x6f\x72\x6d\x3d\x27\x74\x72\x61\x6e\x73\
+\x6c\x61\x74\x65\x28\x35\x36\x2e\x34\x30\x39\x34\x20\x31\x31\x37\
+\x2e\x38\x35\x38\x29\x73\x63\x61\x6c\x65\x28\x2e\x39\x39\x36\x32\
+\x36\x34\x29\x27\x3e\x0a\x3c\x70\x61\x74\x68\x20\x64\x3d\x27\x4d\
+\x20\x33\x32\x2e\x31\x32\x20\x36\x32\x2e\x32\x33\x32\x35\x4c\x20\
+\x33\x32\x2e\x31\x32\x20\x32\x2e\x30\x30\x37\x35\x27\x20\x66\x69\
+\x6c\x6c\x3d\x27\x6e\x6f\x6e\x65\x27\x20\x73\x74\x72\x6f\x6b\x65\
+\x3d\x27\x23\x30\x30\x30\x30\x30\x30\x27\x20\x73\x74\x72\x6f\x6b\
+\x65\x2d\x6c\x69\x6e\x65\x63\x61\x70\x3d\x27\x72\x6f\x75\x6e\x64\
+\x27\x20\x73\x74\x72\x6f\x6b\x65\x2d\x6c\x69\x6e\x65\x6a\x6f\x69\
+\x6e\x3d\x27\x72\x6f\x75\x6e\x64\x27\x20\x73\x74\x72\x6f\x6b\x65\
+\x2d\x6d\x69\x74\x65\x72\x6c\x69\x6d\x69\x74\x3d\x27\x31\x30\x2e\
+\x30\x33\x37\x35\x27\x20\x73\x74\x72\x6f\x6b\x65\x2d\x77\x69\x64\
+\x74\x68\x3d\x27\x34\x2e\x30\x31\x35\x27\x2f\x3e\x0a\x3c\x2f\x67\
+\x3e\x0a\x3c\x2f\x67\x3e\x0a\x3c\x2f\x73\x76\x67\x3e\
+\x00\x00\x02\xf0\
+\x3c\
+\x3f\x78\x6d\x6c\x20\x76\x65\x72\x73\x69\x6f\x6e\x3d\x22\x31\x2e\
+\x30\x22\x20\x65\x6e\x63\x6f\x64\x69\x6e\x67\x3d\x22\x75\x74\x66\
+\x2d\x38\x22\x3f\x3e\x0a\x3c\x21\x2d\x2d\x20\x47\x65\x6e\x65\x72\
+\x61\x74\x6f\x72\x3a\x20\x41\x64\x6f\x62\x65\x20\x49\x6c\x6c\x75\
+\x73\x74\x72\x61\x74\x6f\x72\x20\x31\x36\x2e\x32\x2e\x31\x2c\x20\
+\x53\x56\x47\x20\x45\x78\x70\x6f\x72\x74\x20\x50\x6c\x75\x67\x2d\
+\x49\x6e\x20\x2e\x20\x53\x56\x47\x20\x56\x65\x72\x73\x69\x6f\x6e\
+\x3a\x20\x36\x2e\x30\x30\x20\x42\x75\x69\x6c\x64\x20\x30\x29\x20\
+\x20\x2d\x2d\x3e\x0a\x3c\x21\x44\x4f\x43\x54\x59\x50\x45\x20\x73\
+\x76\x67\x20\x50\x55\x42\x4c\x49\x43\x20\x22\x2d\x2f\x2f\x57\x33\
+\x43\x2f\x2f\x44\x54\x44\x20\x53\x56\x47\x20\x31\x2e\x31\x2f\x2f\
+\x45\x4e\x22\x20\x22\x68\x74\x74\x70\x3a\x2f\x2f\x77\x77\x77\x2e\
+\x77\x33\x2e\x6f\x72\x67\x2f\x47\x72\x61\x70\x68\x69\x63\x73\x2f\
+\x53\x56\x47\x2f\x31\x2e\x31\x2f\x44\x54\x44\x2f\x73\x76\x67\x31\
+\x31\x2e\x64\x74\x64\x22\x3e\x0a\x3c\x73\x76\x67\x20\x76\x65\x72\
+\x73\x69\x6f\x6e\x3d\x22\x31\x2e\x31\x22\x20\x69\x64\x3d\x22\x4c\
+\x61\x79\x65\x72\x5f\x31\x22\x20\x78\x6d\x6c\x6e\x73\x3d\x22\x68\
+\x74\x74\x70\x3a\x2f\x2f\x77\x77\x77\x2e\x77\x33\x2e\x6f\x72\x67\
+\x2f\x32\x30\x30\x30\x2f\x73\x76\x67\x22\x20\x78\x6d\x6c\x6e\x73\
+\x3a\x78\x6c\x69\x6e\x6b\x3d\x22\x68\x74\x74\x70\x3a\x2f\x2f\x77\
+\x77\x77\x2e\x77\x33\x2e\x6f\x72\x67\x2f\x31\x39\x39\x39\x2f\x78\
+\x6c\x69\x6e\x6b\x22\x20\x78\x3d\x22\x30\x70\x78\x22\x20\x79\x3d\
+\x22\x30\x70\x78\x22\x0a\x09\x20\x77\x69\x64\x74\x68\x3d\x22\x35\
+\x31\x32\x70\x78\x22\x20\x68\x65\x69\x67\x68\x74\x3d\x22\x35\x31\
+\x32\x70\x78\x22\x20\x76\x69\x65\x77\x42\x6f\x78\x3d\x22\x30\x20\
+\x30\x20\x35\x31\x32\x20\x35\x31\x32\x22\x20\x65\x6e\x61\x62\x6c\
+\x65\x2d\x62\x61\x63\x6b\x67\x72\x6f\x75\x6e\x64\x3d\x22\x6e\x65\
+\x77\x20\x30\x20\x30\x20\x35\x31\x32\x20\x35\x31\x32\x22\x20\x78\
+\x6d\x6c\x3a\x73\x70\x61\x63\x65\x3d\x22\x70\x72\x65\x73\x65\x72\
+\x76\x65\x22\x3e\x0a\x3c\x67\x20\x69\x64\x3d\x22\x49\x63\x6f\x6e\
+\x5f\x32\x30\x5f\x22\x3e\x0a\x09\x3c\x67\x3e\x0a\x09\x09\x3c\x70\
+\x61\x74\x68\x20\x64\x3d\x22\x4d\x32\x35\x36\x2c\x34\x38\x43\x31\
+\x34\x31\x2e\x36\x30\x31\x2c\x34\x38\x2c\x34\x38\x2c\x31\x34\x31\
+\x2e\x36\x30\x31\x2c\x34\x38\x2c\x32\x35\x36\x73\x39\x33\x2e\x36\
+\x30\x31\x2c\x32\x30\x38\x2c\x32\x30\x38\x2c\x32\x30\x38\x73\x32\
+\x30\x38\x2d\x39\x33\x2e\x36\x30\x31\x2c\x32\x30\x38\x2d\x32\x30\
+\x38\x53\x33\x37\x30\x2e\x33\x39\x39\x2c\x34\x38\x2c\x32\x35\x36\
+\x2c\x34\x38\x7a\x20\x4d\x32\x35\x36\x2c\x34\x32\x32\x2e\x33\x39\
+\x39\x0a\x09\x09\x09\x63\x2d\x39\x31\x2e\x35\x31\x38\x2c\x30\x2d\
+\x31\x36\x36\x2e\x33\x39\x39\x2d\x37\x34\x2e\x38\x38\x32\x2d\x31\
+\x36\x36\x2e\x33\x39\x39\x2d\x31\x36\x36\x2e\x33\x39\x39\x53\x31\
+\x36\x34\x2e\x34\x38\x32\x2c\x38\x39\x2e\x36\x2c\x32\x35\x36\x2c\
+\x38\x39\x2e\x36\x53\x34\x32\x32\x2e\x34\x2c\x31\x36\x34\x2e\x34\
+\x38\x32\x2c\x34\x32\x32\x2e\x34\x2c\x32\x35\x36\x53\x33\x34\x37\
+\x2e\x35\x31\x38\x2c\x34\x32\x32\x2e\x33\x39\x39\x2c\x32\x35\x36\
+\x2c\x34\x32\x32\x2e\x33\x39\x39\x7a\x22\x2f\x3e\x0a\x09\x3c\x2f\
+\x67\x3e\x0a\x3c\x2f\x67\x3e\x0a\x3c\x2f\x73\x76\x67\x3e\x0a\
+\x00\x00\x02\x97\
+\x3c\
+\x3f\x78\x6d\x6c\x20\x76\x65\x72\x73\x69\x6f\x6e\x3d\x22\x31\x2e\
+\x30\x22\x20\x65\x6e\x63\x6f\x64\x69\x6e\x67\x3d\x22\x75\x74\x66\
+\x2d\x38\x22\x3f\x3e\x0a\x3c\x21\x2d\x2d\x20\x47\x65\x6e\x65\x72\
+\x61\x74\x6f\x72\x3a\x20\x41\x64\x6f\x62\x65\x20\x49\x6c\x6c\x75\
+\x73\x74\x72\x61\x74\x6f\x72\x20\x31\x38\x2e\x31\x2e\x31\x2c\x20\
+\x53\x56\x47\x20\x45\x78\x70\x6f\x72\x74\x20\x50\x6c\x75\x67\x2d\
+\x49\x6e\x20\x2e\x20\x53\x56\x47\x20\x56\x65\x72\x73\x69\x6f\x6e\
+\x3a\x20\x36\x2e\x30\x30\x20\x42\x75\x69\x6c\x64\x20\x30\x29\x20\
+\x20\x2d\x2d\x3e\x0a\x3c\x21\x44\x4f\x43\x54\x59\x50\x45\x20\x73\
+\x76\x67\x20\x50\x55\x42\x4c\x49\x43\x20\x22\x2d\x2f\x2f\x57\x33\
+\x43\x2f\x2f\x44\x54\x44\x20\x53\x56\x47\x20\x31\x2e\x31\x2f\x2f\
+\x45\x4e\x22\x20\x22\x68\x74\x74\x70\x3a\x2f\x2f\x77\x77\x77\x2e\
+\x77\x33\x2e\x6f\x72\x67\x2f\x47\x72\x61\x70\x68\x69\x63\x73\x2f\
+\x53\x56\x47\x2f\x31\x2e\x31\x2f\x44\x54\x44\x2f\x73\x76\x67\x31\
+\x31\x2e\x64\x74\x64\x22\x3e\x0a\x3c\x73\x76\x67\x20\x76\x65\x72\
+\x73\x69\x6f\x6e\x3d\x22\x31\x2e\x31\x22\x20\x69\x64\x3d\x22\x53\
+\x61\x76\x65\x22\x20\x78\x6d\x6c\x6e\x73\x3d\x22\x68\x74\x74\x70\
+\x3a\x2f\x2f\x77\x77\x77\x2e\x77\x33\x2e\x6f\x72\x67\x2f\x32\x30\
+\x30\x30\x2f\x73\x76\x67\x22\x20\x78\x6d\x6c\x6e\x73\x3a\x78\x6c\
+\x69\x6e\x6b\x3d\x22\x68\x74\x74\x70\x3a\x2f\x2f\x77\x77\x77\x2e\
+\x77\x33\x2e\x6f\x72\x67\x2f\x31\x39\x39\x39\x2f\x78\x6c\x69\x6e\
+\x6b\x22\x20\x78\x3d\x22\x35\x31\x32\x70\x78\x22\x20\x79\x3d\x22\
+\x35\x31\x32\x70\x78\x22\x0a\x09\x20\x76\x69\x65\x77\x42\x6f\x78\
+\x3d\x22\x30\x20\x30\x20\x35\x31\x32\x20\x35\x31\x32\x22\x20\x65\
+\x6e\x61\x62\x6c\x65\x2d\x62\x61\x63\x6b\x67\x72\x6f\x75\x6e\x64\
+\x3d\x22\x6e\x65\x77\x20\x30\x20\x30\x20\x35\x31\x32\x20\x35\x31\
+\x32\x22\x20\x78\x6d\x6c\x3a\x73\x70\x61\x63\x65\x3d\x22\x70\x72\
+\x65\x73\x65\x72\x76\x65\x22\x3e\x0a\x3c\x67\x20\x74\x72\x61\x6e\
+\x73\x66\x6f\x72\x6d\x3d\x27\x6d\x61\x74\x72\x69\x78\x28\x32\x34\
+\x20\x30\x20\x30\x20\x32\x34\x20\x30\x20\x30\x29\x27\x3e\x0a\x3c\
+\x70\x61\x74\x68\x20\x64\x3d\x22\x4d\x31\x35\x2e\x31\x37\x33\x2c\
+\x32\x48\x34\x43\x32\x2e\x38\x39\x39\x2c\x32\x2c\x32\x2c\x32\x2e\
+\x39\x2c\x32\x2c\x34\x76\x31\x32\x63\x30\x2c\x31\x2e\x31\x2c\x30\
+\x2e\x38\x39\x39\x2c\x32\x2c\x32\x2c\x32\x68\x31\x32\x63\x31\x2e\
+\x31\x30\x31\x2c\x30\x2c\x32\x2d\x30\x2e\x39\x2c\x32\x2d\x32\x56\
+\x35\x2e\x31\x32\x37\x4c\x31\x35\x2e\x31\x37\x33\x2c\x32\x7a\x20\
+\x4d\x31\x34\x2c\x38\x63\x30\x2c\x30\x2e\x35\x34\x39\x2d\x30\x2e\
+\x34\x35\x2c\x31\x2d\x31\x2c\x31\x48\x37\x0a\x09\x43\x36\x2e\x34\
+\x35\x2c\x39\x2c\x36\x2c\x38\x2e\x35\x34\x39\x2c\x36\x2c\x38\x56\
+\x33\x68\x38\x56\x38\x7a\x20\x4d\x31\x33\x2c\x34\x68\x2d\x32\x76\
+\x34\x68\x32\x56\x34\x7a\x22\x2f\x3e\x0a\x3c\x2f\x67\x3e\x0a\x3c\
+\x2f\x73\x76\x67\x3e\x0a\
+\x00\x00\x02\x6c\
+\x3c\
+\x3f\x78\x6d\x6c\x20\x76\x65\x72\x73\x69\x6f\x6e\x3d\x22\x31\x2e\
+\x30\x22\x20\x65\x6e\x63\x6f\x64\x69\x6e\x67\x3d\x22\x75\x74\x66\
+\x2d\x38\x22\x3f\x3e\x0a\x3c\x21\x2d\x2d\x20\x47\x65\x6e\x65\x72\
+\x61\x74\x6f\x72\x3a\x20\x41\x64\x6f\x62\x65\x20\x49\x6c\x6c\x75\
+\x73\x74\x72\x61\x74\x6f\x72\x20\x31\x36\x2e\x32\x2e\x31\x2c\x20\
+\x53\x56\x47\x20\x45\x78\x70\x6f\x72\x74\x20\x50\x6c\x75\x67\x2d\
+\x49\x6e\x20\x2e\x20\x53\x56\x47\x20\x56\x65\x72\x73\x69\x6f\x6e\
+\x3a\x20\x36\x2e\x30\x30\x20\x42\x75\x69\x6c\x64\x20\x30\x29\x20\
+\x20\x2d\x2d\x3e\x0a\x3c\x21\x44\x4f\x43\x54\x59\x50\x45\x20\x73\
+\x76\x67\x20\x50\x55\x42\x4c\x49\x43\x20\x22\x2d\x2f\x2f\x57\x33\
+\x43\x2f\x2f\x44\x54\x44\x20\x53\x56\x47\x20\x31\x2e\x31\x2f\x2f\
+\x45\x4e\x22\x20\x22\x68\x74\x74\x70\x3a\x2f\x2f\x77\x77\x77\x2e\
+\x77\x33\x2e\x6f\x72\x67\x2f\x47\x72\x61\x70\x68\x69\x63\x73\x2f\
+\x53\x56\x47\x2f\x31\x2e\x31\x2f\x44\x54\x44\x2f\x73\x76\x67\x31\
+\x31\x2e\x64\x74\x64\x22\x3e\x0a\x3c\x73\x76\x67\x20\x76\x65\x72\
+\x73\x69\x6f\x6e\x3d\x22\x31\x2e\x31\x22\x20\x69\x64\x3d\x22\x4c\
+\x61\x79\x65\x72\x5f\x31\x22\x20\x78\x6d\x6c\x6e\x73\x3d\x22\x68\
+\x74\x74\x70\x3a\x2f\x2f\x77\x77\x77\x2e\x77\x33\x2e\x6f\x72\x67\
+\x2f\x32\x30\x30\x30\x2f\x73\x76\x67\x22\x20\x78\x6d\x6c\x6e\x73\
+\x3a\x78\x6c\x69\x6e\x6b\x3d\x22\x68\x74\x74\x70\x3a\x2f\x2f\x77\
+\x77\x77\x2e\x77\x33\x2e\x6f\x72\x67\x2f\x31\x39\x39\x39\x2f\x78\
+\x6c\x69\x6e\x6b\x22\x20\x78\x3d\x22\x30\x70\x78\x22\x20\x79\x3d\
+\x22\x30\x70\x78\x22\x0a\x09\x20\x77\x69\x64\x74\x68\x3d\x22\x35\
+\x31\x32\x70\x78\x22\x20\x68\x65\x69\x67\x68\x74\x3d\x22\x35\x31\
+\x32\x70\x78\x22\x20\x76\x69\x65\x77\x42\x6f\x78\x3d\x22\x30\x20\
+\x30\x20\x35\x31\x32\x20\x35\x31\x32\x22\x20\x65\x6e\x61\x62\x6c\
+\x65\x2d\x62\x61\x63\x6b\x67\x72\x6f\x75\x6e\x64\x3d\x22\x6e\x65\
+\x77\x20\x30\x20\x30\x20\x35\x31\x32\x20\x35\x31\x32\x22\x20\x78\
+\x6d\x6c\x3a\x73\x70\x61\x63\x65\x3d\x22\x70\x72\x65\x73\x65\x72\
+\x76\x65\x22\x3e\x0a\x3c\x67\x20\x69\x64\x3d\x22\x49\x63\x6f\x6e\
+\x5f\x31\x5f\x22\x3e\x0a\x09\x3c\x67\x3e\x0a\x09\x09\x3c\x67\x3e\
+\x0a\x09\x09\x09\x3c\x70\x6f\x6c\x79\x67\x6f\x6e\x20\x70\x6f\x69\
+\x6e\x74\x73\x3d\x22\x31\x38\x36\x2e\x33\x30\x31\x2c\x33\x33\x39\
+\x2e\x38\x39\x33\x20\x39\x36\x2c\x32\x34\x39\x2e\x34\x36\x31\x20\
+\x36\x34\x2c\x32\x37\x39\x2e\x39\x36\x38\x20\x31\x38\x36\x2e\x33\
+\x30\x31\x2c\x34\x30\x32\x20\x34\x34\x38\x2c\x31\x34\x30\x2e\x35\
+\x30\x36\x20\x34\x31\x36\x2c\x31\x31\x30\x20\x09\x09\x09\x22\x2f\
+\x3e\x0a\x09\x09\x3c\x2f\x67\x3e\x0a\x09\x3c\x2f\x67\x3e\x0a\x3c\
+\x2f\x67\x3e\x0a\x3c\x2f\x73\x76\x67\x3e\x0a\
+\x00\x00\x01\xdd\
+\x00\
+\x00\x06\xc4\x78\x9c\xcd\x51\x4d\x8f\x9b\x30\x14\x3c\xc3\xaf\x78\
+\xf5\xad\x12\xfe\x82\x85\x24\x14\xb2\x6a\x3e\x14\x45\xda\xb6\x91\
+\x36\x4d\xd5\x53\x45\xc0\x05\xb4\x2c\x20\x70\x80\xf4\xd7\x57\x76\
+\xd2\x6a\x2b\x6d\xae\x4b\x0f\xf6\x93\x67\xde\x9b\x37\xd6\x04\xf7\
+\xc3\x73\x01\x9d\x68\xda\xbc\x2a\x43\xc4\x09\x43\x20\xca\xb8\x4a\
+\xf2\x32\x0d\xd1\x49\xfe\xc4\x53\x74\x3f\x37\x83\x77\x18\xc3\x46\
+\x94\xa2\x89\x64\xd5\xf8\xf0\x31\xa9\x8e\x02\xb6\x45\x71\x6a\xa5\
+\x86\x80\x7b\xc4\x26\xdc\x82\xc7\xc3\x06\xd6\x43\x5d\x35\x12\x76\
+\xc5\x29\xc5\xdb\x12\x88\x06\x0f\x97\x1d\x3e\x78\x84\x31\x58\x9c\
+\xf2\x22\x01\xf6\x1e\x00\x63\x25\xbf\xfa\xb2\xdc\x7f\xdf\xad\xa1\
+\xed\x52\xd8\x7d\x5d\x3c\x6c\x97\x80\x30\xa5\xdf\x9c\x25\xa5\xab\
+\xfd\x4a\x2b\x70\xc2\x29\x5d\x7f\x46\x80\x32\x29\x6b\x9f\xd2\xbe\
+\xef\x49\xef\x90\xaa\x49\xe9\xa6\x89\xea\x2c\x8f\x5b\xfa\x78\xd8\
+\x50\xd5\xb8\xda\xaf\x68\xdb\xa5\x9c\x93\x44\x26\x68\x6e\x06\x4a\
+\xf9\xc5\x3f\x39\x82\x3c\x09\xd1\x43\x74\x16\xcd\x0f\x8e\x60\x78\
+\x2e\xca\x36\x7c\x45\xd9\x66\x8c\x29\xa5\x6b\x8b\x3f\x14\x79\xf9\
+\xf4\x5a\x23\x9f\xcd\x66\x54\xb3\x08\x86\x10\xb1\x7a\x40\x70\xbe\
+\x54\xd3\x80\x3e\x4f\x64\x16\x22\x97\xdb\x0a\xcf\x44\x9e\x66\xf2\
+\xef\xb3\xcb\x45\xbf\xa8\xd4\x10\x30\x70\xb9\xad\x0e\x82\x56\x9e\
+\x0b\x11\x22\x51\x46\xc7\x42\xe0\x63\x14\x3f\xa5\x4d\x75\x2a\x13\
+\xbf\x14\x3d\xbc\xe8\xfc\xa0\xad\xf9\x6d\x1d\xc5\x22\x44\x75\x23\
+\x5a\xd1\x74\x42\xfd\x39\x9d\x9b\x86\xbe\x8c\xa0\x8e\x64\x06\x49\
+\x88\x3e\x71\x8f\x59\xdc\x75\x88\x13\x33\xcb\x21\x13\xec\x58\x1e\
+\x99\x60\x8f\x4c\x54\xcd\xb0\xcb\x88\x1b\x63\x87\x4c\x2c\xa6\x40\
+\xec\xe0\x2b\xdd\x5d\x28\xa6\x39\xe7\xcf\x80\xaa\x99\x26\xf4\x88\
+\x82\x2c\xad\xa8\xce\x41\xef\xf9\x85\x4c\xc3\x30\xe8\xbf\x2e\xec\
+\xe9\xf4\x3f\x70\x71\xc7\xbd\xb1\x5c\x04\xf4\x56\x38\xf6\x94\xbf\
+\x89\x21\xbd\xe7\x66\x38\xe3\xbb\x50\xe1\x8c\xe4\xe2\x76\x38\x77\
+\x6c\xf6\x26\x86\xf4\x9e\x9b\xe1\x8c\xef\x42\x85\x33\x92\x0b\x1d\
+\xce\xf5\x6a\xbb\x74\x6e\xfe\x06\x44\x1a\x94\x79\
+\x00\x00\x03\x3d\
+\x3c\
+\x3f\x78\x6d\x6c\x20\x76\x65\x72\x73\x69\x6f\x6e\x3d\x22\x31\x2e\
+\x30\x22\x20\x65\x6e\x63\x6f\x64\x69\x6e\x67\x3d\x22\x75\x74\x66\
+\x2d\x38\x22\x3f\x3e\x0a\x3c\x21\x2d\x2d\x20\x47\x65\x6e\x65\x72\
+\x61\x74\x6f\x72\x3a\x20\x41\x64\x6f\x62\x65\x20\x49\x6c\x6c\x75\
+\x73\x74\x72\x61\x74\x6f\x72\x20\x31\x36\x2e\x32\x2e\x31\x2c\x20\
+\x53\x56\x47\x20\x45\x78\x70\x6f\x72\x74\x20\x50\x6c\x75\x67\x2d\
+\x49\x6e\x20\x2e\x20\x53\x56\x47\x20\x56\x65\x72\x73\x69\x6f\x6e\
+\x3a\x20\x36\x2e\x30\x30\x20\x42\x75\x69\x6c\x64\x20\x30\x29\x20\
+\x20\x2d\x2d\x3e\x0a\x3c\x21\x44\x4f\x43\x54\x59\x50\x45\x20\x73\
+\x76\x67\x20\x50\x55\x42\x4c\x49\x43\x20\x22\x2d\x2f\x2f\x57\x33\
+\x43\x2f\x2f\x44\x54\x44\x20\x53\x56\x47\x20\x31\x2e\x31\x2f\x2f\
+\x45\x4e\x22\x20\x22\x68\x74\x74\x70\x3a\x2f\x2f\x77\x77\x77\x2e\
+\x77\x33\x2e\x6f\x72\x67\x2f\x47\x72\x61\x70\x68\x69\x63\x73\x2f\
+\x53\x56\x47\x2f\x31\x2e\x31\x2f\x44\x54\x44\x2f\x73\x76\x67\x31\
+\x31\x2e\x64\x74\x64\x22\x3e\x0a\x3c\x73\x76\x67\x20\x76\x65\x72\
+\x73\x69\x6f\x6e\x3d\x22\x31\x2e\x31\x22\x20\x69\x64\x3d\x22\x4c\
+\x61\x79\x65\x72\x5f\x31\x22\x20\x78\x6d\x6c\x6e\x73\x3d\x22\x68\
+\x74\x74\x70\x3a\x2f\x2f\x77\x77\x77\x2e\x77\x33\x2e\x6f\x72\x67\
+\x2f\x32\x30\x30\x30\x2f\x73\x76\x67\x22\x20\x78\x6d\x6c\x6e\x73\
+\x3a\x78\x6c\x69\x6e\x6b\x3d\x22\x68\x74\x74\x70\x3a\x2f\x2f\x77\
+\x77\x77\x2e\x77\x33\x2e\x6f\x72\x67\x2f\x31\x39\x39\x39\x2f\x78\
+\x6c\x69\x6e\x6b\x22\x20\x78\x3d\x22\x30\x70\x78\x22\x20\x79\x3d\
+\x22\x30\x70\x78\x22\x0a\x09\x20\x77\x69\x64\x74\x68\x3d\x22\x35\
+\x31\x32\x70\x78\x22\x20\x68\x65\x69\x67\x68\x74\x3d\x22\x35\x31\
+\x32\x70\x78\x22\x20\x76\x69\x65\x77\x42\x6f\x78\x3d\x22\x30\x20\
+\x30\x20\x35\x31\x32\x20\x35\x31\x32\x22\x20\x73\x74\x79\x6c\x65\
+\x3d\x22\x65\x6e\x61\x62\x6c\x65\x2d\x62\x61\x63\x6b\x67\x72\x6f\
+\x75\x6e\x64\x3a\x6e\x65\x77\x20\x30\x20\x30\x20\x35\x31\x32\x20\
+\x35\x31\x32\x3b\x22\x20\x78\x6d\x6c\x3a\x73\x70\x61\x63\x65\x3d\
+\x22\x70\x72\x65\x73\x65\x72\x76\x65\x22\x3e\x0a\x3c\x70\x61\x74\
+\x68\x20\x64\x3d\x22\x4d\x34\x33\x37\x2e\x35\x2c\x33\x38\x36\x2e\
+\x36\x4c\x33\x30\x36\x2e\x39\x2c\x32\x35\x36\x6c\x31\x33\x30\x2e\
+\x36\x2d\x31\x33\x30\x2e\x36\x63\x31\x34\x2e\x31\x2d\x31\x34\x2e\
+\x31\x2c\x31\x34\x2e\x31\x2d\x33\x36\x2e\x38\x2c\x30\x2d\x35\x30\
+\x2e\x39\x63\x2d\x31\x34\x2e\x31\x2d\x31\x34\x2e\x31\x2d\x33\x36\
+\x2e\x38\x2d\x31\x34\x2e\x31\x2d\x35\x30\x2e\x39\x2c\x30\x4c\x32\
+\x35\x36\x2c\x32\x30\x35\x2e\x31\x4c\x31\x32\x35\x2e\x34\x2c\x37\
+\x34\x2e\x35\x0a\x09\x63\x2d\x31\x34\x2e\x31\x2d\x31\x34\x2e\x31\
+\x2d\x33\x36\x2e\x38\x2d\x31\x34\x2e\x31\x2d\x35\x30\x2e\x39\x2c\
+\x30\x63\x2d\x31\x34\x2e\x31\x2c\x31\x34\x2e\x31\x2d\x31\x34\x2e\
+\x31\x2c\x33\x36\x2e\x38\x2c\x30\x2c\x35\x30\x2e\x39\x4c\x32\x30\
+\x35\x2e\x31\x2c\x32\x35\x36\x4c\x37\x34\x2e\x35\x2c\x33\x38\x36\
+\x2e\x36\x63\x2d\x31\x34\x2e\x31\x2c\x31\x34\x2e\x31\x2d\x31\x34\
+\x2e\x31\x2c\x33\x36\x2e\x38\x2c\x30\x2c\x35\x30\x2e\x39\x0a\x09\
+\x63\x31\x34\x2e\x31\x2c\x31\x34\x2e\x31\x2c\x33\x36\x2e\x38\x2c\
+\x31\x34\x2e\x31\x2c\x35\x30\x2e\x39\x2c\x30\x4c\x32\x35\x36\x2c\
+\x33\x30\x36\x2e\x39\x6c\x31\x33\x30\x2e\x36\x2c\x31\x33\x30\x2e\
+\x36\x63\x31\x34\x2e\x31\x2c\x31\x34\x2e\x31\x2c\x33\x36\x2e\x38\
+\x2c\x31\x34\x2e\x31\x2c\x35\x30\x2e\x39\x2c\x30\x43\x34\x35\x31\
+\x2e\x35\x2c\x34\x32\x33\x2e\x34\x2c\x34\x35\x31\x2e\x35\x2c\x34\
+\x30\x30\x2e\x36\x2c\x34\x33\x37\x2e\x35\x2c\x33\x38\x36\x2e\x36\
+\x7a\x22\x2f\x3e\x0a\x3c\x2f\x73\x76\x67\x3e\x0a\
+\x00\x00\x02\xe7\
+\x3c\
+\x3f\x78\x6d\x6c\x20\x76\x65\x72\x73\x69\x6f\x6e\x3d\x22\x31\x2e\
+\x30\x22\x20\x65\x6e\x63\x6f\x64\x69\x6e\x67\x3d\x22\x75\x74\x66\
+\x2d\x38\x22\x3f\x3e\x0a\x3c\x21\x2d\x2d\x20\x47\x65\x6e\x65\x72\
+\x61\x74\x6f\x72\x3a\x20\x41\x64\x6f\x62\x65\x20\x49\x6c\x6c\x75\
+\x73\x74\x72\x61\x74\x6f\x72\x20\x31\x38\x2e\x31\x2e\x30\x2c\x20\
+\x53\x56\x47\x20\x45\x78\x70\x6f\x72\x74\x20\x50\x6c\x75\x67\x2d\
+\x49\x6e\x20\x2e\x20\x53\x56\x47\x20\x56\x65\x72\x73\x69\x6f\x6e\
+\x3a\x20\x36\x2e\x30\x30\x20\x42\x75\x69\x6c\x64\x20\x30\x29\x20\
+\x20\x2d\x2d\x3e\x0a\x3c\x21\x44\x4f\x43\x54\x59\x50\x45\x20\x73\
+\x76\x67\x20\x50\x55\x42\x4c\x49\x43\x20\x22\x2d\x2f\x2f\x57\x33\
+\x43\x2f\x2f\x44\x54\x44\x20\x53\x56\x47\x20\x31\x2e\x31\x2f\x2f\
+\x45\x4e\x22\x20\x22\x68\x74\x74\x70\x3a\x2f\x2f\x77\x77\x77\x2e\
+\x77\x33\x2e\x6f\x72\x67\x2f\x47\x72\x61\x70\x68\x69\x63\x73\x2f\
+\x53\x56\x47\x2f\x31\x2e\x31\x2f\x44\x54\x44\x2f\x73\x76\x67\x31\
+\x31\x2e\x64\x74\x64\x22\x3e\x0a\x3c\x73\x76\x67\x20\x76\x65\x72\
+\x73\x69\x6f\x6e\x3d\x22\x31\x2e\x31\x22\x20\x69\x64\x3d\x22\x43\
+\x69\x72\x63\x6c\x65\x22\x20\x78\x6d\x6c\x6e\x73\x3d\x22\x68\x74\
+\x74\x70\x3a\x2f\x2f\x77\x77\x77\x2e\x77\x33\x2e\x6f\x72\x67\x2f\
+\x32\x30\x30\x30\x2f\x73\x76\x67\x22\x20\x78\x6d\x6c\x6e\x73\x3a\
+\x78\x6c\x69\x6e\x6b\x3d\x22\x68\x74\x74\x70\x3a\x2f\x2f\x77\x77\
+\x77\x2e\x77\x33\x2e\x6f\x72\x67\x2f\x31\x39\x39\x39\x2f\x78\x6c\
+\x69\x6e\x6b\x22\x20\x78\x3d\x22\x35\x31\x32\x70\x78\x22\x20\x79\
+\x3d\x22\x35\x31\x32\x70\x78\x22\x0a\x09\x20\x76\x69\x65\x77\x42\
+\x6f\x78\x3d\x22\x30\x20\x30\x20\x35\x31\x32\x20\x35\x31\x32\x22\
+\x20\x65\x6e\x61\x62\x6c\x65\x2d\x62\x61\x63\x6b\x67\x72\x6f\x75\
+\x6e\x64\x3d\x22\x6e\x65\x77\x20\x30\x20\x30\x20\x35\x31\x32\x20\
+\x35\x31\x32\x22\x20\x78\x6d\x6c\x3a\x73\x70\x61\x63\x65\x3d\x22\
+\x70\x72\x65\x73\x65\x72\x76\x65\x22\x3e\x0a\x3c\x67\x20\x74\x72\
+\x61\x6e\x73\x66\x6f\x72\x6d\x3d\x27\x6d\x61\x74\x72\x69\x78\x28\
+\x32\x34\x20\x30\x20\x30\x20\x32\x34\x20\x30\x20\x30\x29\x27\x3e\
+\x0a\x3c\x70\x61\x74\x68\x20\x64\x3d\x22\x4d\x31\x30\x2c\x30\x2e\
+\x34\x43\x34\x2e\x36\x39\x38\x2c\x30\x2e\x34\x2c\x30\x2e\x34\x2c\
+\x34\x2e\x36\x39\x38\x2c\x30\x2e\x34\x2c\x31\x30\x43\x30\x2e\x34\
+\x2c\x31\x35\x2e\x33\x30\x32\x2c\x34\x2e\x36\x39\x38\x2c\x31\x39\
+\x2e\x36\x2c\x31\x30\x2c\x31\x39\x2e\x36\x63\x35\x2e\x33\x30\x31\
+\x2c\x30\x2c\x39\x2e\x36\x2d\x34\x2e\x32\x39\x38\x2c\x39\x2e\x36\
+\x2d\x39\x2e\x36\x30\x31\x0a\x09\x43\x31\x39\x2e\x36\x2c\x34\x2e\
+\x36\x39\x38\x2c\x31\x35\x2e\x33\x30\x31\x2c\x30\x2e\x34\x2c\x31\
+\x30\x2c\x30\x2e\x34\x7a\x20\x4d\x31\x30\x2c\x31\x37\x2e\x35\x39\
+\x39\x63\x2d\x34\x2e\x31\x39\x37\x2c\x30\x2d\x37\x2e\x36\x2d\x33\
+\x2e\x34\x30\x32\x2d\x37\x2e\x36\x2d\x37\x2e\x36\x53\x35\x2e\x38\
+\x30\x32\x2c\x32\x2e\x34\x2c\x31\x30\x2c\x32\x2e\x34\x63\x34\x2e\
+\x31\x39\x37\x2c\x30\x2c\x37\x2e\x36\x30\x31\x2c\x33\x2e\x34\x30\
+\x32\x2c\x37\x2e\x36\x30\x31\x2c\x37\x2e\x36\x0a\x09\x53\x31\x34\
+\x2e\x31\x39\x37\x2c\x31\x37\x2e\x35\x39\x39\x2c\x31\x30\x2c\x31\
+\x37\x2e\x35\x39\x39\x7a\x22\x2f\x3e\x0a\x3c\x2f\x67\x3e\x0a\x3c\
+\x2f\x73\x76\x67\x3e\x0a\
+\x00\x00\x02\x72\
+\x3c\
+\x3f\x78\x6d\x6c\x20\x76\x65\x72\x73\x69\x6f\x6e\x3d\x22\x31\x2e\
+\x30\x22\x20\x65\x6e\x63\x6f\x64\x69\x6e\x67\x3d\x22\x75\x74\x66\
+\x2d\x38\x22\x3f\x3e\x0a\x3c\x21\x2d\x2d\x20\x47\x65\x6e\x65\x72\
+\x61\x74\x6f\x72\x3a\x20\x41\x64\x6f\x62\x65\x20\x49\x6c\x6c\x75\
+\x73\x74\x72\x61\x74\x6f\x72\x20\x31\x36\x2e\x32\x2e\x31\x2c\x20\
+\x53\x56\x47\x20\x45\x78\x70\x6f\x72\x74\x20\x50\x6c\x75\x67\x2d\
+\x49\x6e\x20\x2e\x20\x53\x56\x47\x20\x56\x65\x72\x73\x69\x6f\x6e\
+\x3a\x20\x36\x2e\x30\x30\x20\x42\x75\x69\x6c\x64\x20\x30\x29\x20\
+\x20\x2d\x2d\x3e\x0a\x3c\x21\x44\x4f\x43\x54\x59\x50\x45\x20\x73\
+\x76\x67\x20\x50\x55\x42\x4c\x49\x43\x20\x22\x2d\x2f\x2f\x57\x33\
+\x43\x2f\x2f\x44\x54\x44\x20\x53\x56\x47\x20\x31\x2e\x31\x2f\x2f\
+\x45\x4e\x22\x20\x22\x68\x74\x74\x70\x3a\x2f\x2f\x77\x77\x77\x2e\
+\x77\x33\x2e\x6f\x72\x67\x2f\x47\x72\x61\x70\x68\x69\x63\x73\x2f\
+\x53\x56\x47\x2f\x31\x2e\x31\x2f\x44\x54\x44\x2f\x73\x76\x67\x31\
+\x31\x2e\x64\x74\x64\x22\x3e\x0a\x3c\x73\x76\x67\x20\x76\x65\x72\
+\x73\x69\x6f\x6e\x3d\x22\x31\x2e\x31\x22\x20\x69\x64\x3d\x22\x4c\
+\x61\x79\x65\x72\x5f\x31\x22\x20\x78\x6d\x6c\x6e\x73\x3d\x22\x68\
+\x74\x74\x70\x3a\x2f\x2f\x77\x77\x77\x2e\x77\x33\x2e\x6f\x72\x67\
+\x2f\x32\x30\x30\x30\x2f\x73\x76\x67\x22\x20\x78\x6d\x6c\x6e\x73\
+\x3a\x78\x6c\x69\x6e\x6b\x3d\x22\x68\x74\x74\x70\x3a\x2f\x2f\x77\
+\x77\x77\x2e\x77\x33\x2e\x6f\x72\x67\x2f\x31\x39\x39\x39\x2f\x78\
+\x6c\x69\x6e\x6b\x22\x20\x78\x3d\x22\x30\x70\x78\x22\x20\x79\x3d\
+\x22\x30\x70\x78\x22\x0a\x09\x20\x77\x69\x64\x74\x68\x3d\x22\x35\
+\x31\x32\x70\x78\x22\x20\x68\x65\x69\x67\x68\x74\x3d\x22\x35\x31\
+\x32\x70\x78\x22\x20\x76\x69\x65\x77\x42\x6f\x78\x3d\x22\x30\x20\
+\x30\x20\x35\x31\x32\x20\x35\x31\x32\x22\x20\x65\x6e\x61\x62\x6c\
+\x65\x2d\x62\x61\x63\x6b\x67\x72\x6f\x75\x6e\x64\x3d\x22\x6e\x65\
+\x77\x20\x30\x20\x30\x20\x35\x31\x32\x20\x35\x31\x32\x22\x20\x78\
+\x6d\x6c\x3a\x73\x70\x61\x63\x65\x3d\x22\x70\x72\x65\x73\x65\x72\
+\x76\x65\x22\x3e\x0a\x3c\x67\x20\x69\x64\x3d\x22\x49\x63\x6f\x6e\
+\x5f\x38\x5f\x22\x3e\x0a\x09\x3c\x67\x3e\x0a\x09\x09\x3c\x70\x61\
+\x74\x68\x20\x64\x3d\x22\x4d\x38\x35\x2c\x32\x37\x37\x2e\x33\x37\
+\x35\x68\x32\x35\x39\x2e\x37\x30\x34\x4c\x32\x32\x35\x2e\x30\x30\
+\x32\x2c\x33\x39\x37\x2e\x30\x37\x37\x4c\x32\x35\x36\x2c\x34\x32\
+\x37\x6c\x31\x37\x31\x2d\x31\x37\x31\x4c\x32\x35\x36\x2c\x38\x35\
+\x6c\x2d\x32\x39\x2e\x39\x32\x32\x2c\x32\x39\x2e\x39\x32\x34\x6c\
+\x31\x31\x38\x2e\x36\x32\x36\x2c\x31\x31\x39\x2e\x37\x30\x31\x48\
+\x38\x35\x56\x32\x37\x37\x2e\x33\x37\x35\x7a\x22\x2f\x3e\x0a\x09\
+\x3c\x2f\x67\x3e\x0a\x3c\x2f\x67\x3e\x0a\x3c\x2f\x73\x76\x67\x3e\
+\x0a\
+\x00\x00\x03\x5a\
+\x3c\
+\x3f\x78\x6d\x6c\x20\x76\x65\x72\x73\x69\x6f\x6e\x3d\x27\x31\x2e\
+\x30\x27\x20\x65\x6e\x63\x6f\x64\x69\x6e\x67\x3d\x27\x55\x54\x46\
+\x2d\x38\x27\x3f\x3e\x0a\x3c\x21\x2d\x2d\x20\x54\x68\x69\x73\x20\
+\x66\x69\x6c\x65\x20\x77\x61\x73\x20\x67\x65\x6e\x65\x72\x61\x74\
+\x65\x64\x20\x62\x79\x20\x64\x76\x69\x73\x76\x67\x6d\x20\x32\x2e\
+\x31\x31\x2e\x31\x20\x2d\x2d\x3e\x0a\x3c\x73\x76\x67\x20\x76\x65\
+\x72\x73\x69\x6f\x6e\x3d\x27\x31\x2e\x31\x27\x20\x78\x6d\x6c\x6e\
+\x73\x3d\x27\x68\x74\x74\x70\x3a\x2f\x2f\x77\x77\x77\x2e\x77\x33\
+\x2e\x6f\x72\x67\x2f\x32\x30\x30\x30\x2f\x73\x76\x67\x27\x20\x78\
+\x6d\x6c\x6e\x73\x3a\x78\x6c\x69\x6e\x6b\x3d\x27\x68\x74\x74\x70\
+\x3a\x2f\x2f\x77\x77\x77\x2e\x77\x33\x2e\x6f\x72\x67\x2f\x31\x39\
+\x39\x39\x2f\x78\x6c\x69\x6e\x6b\x27\x20\x77\x69\x64\x74\x68\x3d\
+\x27\x36\x33\x2e\x39\x39\x39\x36\x70\x74\x27\x20\x68\x65\x69\x67\
+\x68\x74\x3d\x27\x36\x34\x70\x74\x27\x20\x76\x69\x65\x77\x42\x6f\
+\x78\x3d\x27\x35\x36\x2e\x34\x30\x39\x34\x20\x31\x31\x37\x2e\x38\
+\x35\x38\x20\x36\x33\x2e\x39\x39\x39\x36\x20\x36\x34\x27\x3e\x0a\
+\x3c\x67\x20\x69\x64\x3d\x27\x70\x61\x67\x65\x31\x27\x3e\x0a\x3c\
+\x67\x20\x74\x72\x61\x6e\x73\x66\x6f\x72\x6d\x3d\x27\x74\x72\x61\
+\x6e\x73\x6c\x61\x74\x65\x28\x35\x36\x2e\x34\x30\x39\x34\x20\x31\
+\x31\x37\x2e\x38\x35\x38\x29\x73\x63\x61\x6c\x65\x28\x2e\x39\x39\
+\x36\x32\x36\x34\x29\x27\x3e\x0a\x3c\x70\x61\x74\x68\x20\x64\x3d\
+\x27\x4d\x20\x32\x2e\x30\x30\x37\x35\x20\x36\x32\x2e\x32\x33\x32\
+\x35\x4c\x20\x36\x32\x2e\x32\x33\x32\x35\x20\x36\x32\x2e\x32\x33\
+\x32\x35\x4c\x20\x36\x32\x2e\x32\x33\x32\x35\x20\x32\x2e\x30\x30\
+\x37\x35\x4c\x20\x32\x2e\x30\x30\x37\x35\x20\x32\x2e\x30\x30\x37\
+\x35\x4c\x20\x32\x2e\x30\x30\x37\x35\x20\x36\x32\x2e\x32\x33\x32\
+\x35\x5a\x27\x20\x66\x69\x6c\x6c\x3d\x27\x6e\x6f\x6e\x65\x27\x20\
+\x73\x74\x72\x6f\x6b\x65\x3d\x27\x23\x30\x30\x30\x30\x30\x30\x27\
+\x20\x73\x74\x72\x6f\x6b\x65\x2d\x6c\x69\x6e\x65\x63\x61\x70\x3d\
+\x27\x72\x6f\x75\x6e\x64\x27\x20\x73\x74\x72\x6f\x6b\x65\x2d\x6c\
+\x69\x6e\x65\x6a\x6f\x69\x6e\x3d\x27\x72\x6f\x75\x6e\x64\x27\x20\
+\x73\x74\x72\x6f\x6b\x65\x2d\x6d\x69\x74\x65\x72\x6c\x69\x6d\x69\
+\x74\x3d\x27\x31\x30\x2e\x30\x33\x37\x35\x27\x20\x73\x74\x72\x6f\
+\x6b\x65\x2d\x77\x69\x64\x74\x68\x3d\x27\x34\x2e\x30\x31\x35\x27\
+\x2f\x3e\x0a\x3c\x2f\x67\x3e\x0a\x3c\x67\x20\x74\x72\x61\x6e\x73\
+\x66\x6f\x72\x6d\x3d\x27\x74\x72\x61\x6e\x73\x6c\x61\x74\x65\x28\
+\x35\x36\x2e\x34\x30\x39\x34\x20\x31\x31\x37\x2e\x38\x35\x38\x29\
+\x73\x63\x61\x6c\x65\x28\x2e\x39\x39\x36\x32\x36\x34\x29\x27\x3e\
+\x0a\x3c\x70\x61\x74\x68\x20\x64\x3d\x27\x4d\x20\x34\x37\x2e\x31\
+\x37\x36\x32\x20\x33\x32\x2e\x31\x32\x43\x20\x34\x37\x2e\x31\x37\
+\x36\x32\x20\x32\x33\x2e\x38\x30\x34\x37\x20\x34\x30\x2e\x34\x33\
+\x35\x33\x20\x31\x37\x2e\x30\x36\x33\x37\x20\x33\x32\x2e\x31\x32\
+\x20\x31\x37\x2e\x30\x36\x33\x37\x43\x20\x32\x33\x2e\x38\x30\x34\
+\x37\x20\x31\x37\x2e\x30\x36\x33\x37\x20\x31\x37\x2e\x30\x36\x33\
+\x37\x20\x32\x33\x2e\x38\x30\x34\x37\x20\x31\x37\x2e\x30\x36\x33\
+\x37\x20\x33\x32\x2e\x31\x32\x43\x20\x31\x37\x2e\x30\x36\x33\x37\
+\x20\x34\x30\x2e\x34\x33\x35\x33\x20\x32\x33\x2e\x38\x30\x34\x37\
+\x20\x34\x37\x2e\x31\x37\x36\x32\x20\x33\x32\x2e\x31\x32\x20\x34\
+\x37\x2e\x31\x37\x36\x32\x43\x20\x34\x30\x2e\x34\x33\x35\x33\x20\
+\x34\x37\x2e\x31\x37\x36\x32\x20\x34\x37\x2e\x31\x37\x36\x32\x20\
+\x34\x30\x2e\x34\x33\x35\x33\x20\x34\x37\x2e\x31\x37\x36\x32\x20\
+\x33\x32\x2e\x31\x32\x5a\x27\x20\x66\x69\x6c\x6c\x3d\x27\x23\x30\
+\x30\x30\x30\x30\x30\x27\x2f\x3e\x0a\x3c\x2f\x67\x3e\x0a\x3c\x2f\
+\x67\x3e\x0a\x3c\x2f\x73\x76\x67\x3e\
+\x00\x00\x03\x5f\
+\x3c\
+\x3f\x78\x6d\x6c\x20\x76\x65\x72\x73\x69\x6f\x6e\x3d\x22\x31\x2e\
+\x30\x22\x20\x65\x6e\x63\x6f\x64\x69\x6e\x67\x3d\x22\x75\x74\x66\
+\x2d\x38\x22\x3f\x3e\x0a\x3c\x21\x2d\x2d\x20\x47\x65\x6e\x65\x72\
+\x61\x74\x6f\x72\x3a\x20\x41\x64\x6f\x62\x65\x20\x49\x6c\x6c\x75\
+\x73\x74\x72\x61\x74\x6f\x72\x20\x31\x36\x2e\x32\x2e\x31\x2c\x20\
+\x53\x56\x47\x20\x45\x78\x70\x6f\x72\x74\x20\x50\x6c\x75\x67\x2d\
+\x49\x6e\x20\x2e\x20\x53\x56\x47\x20\x56\x65\x72\x73\x69\x6f\x6e\
+\x3a\x20\x36\x2e\x30\x30\x20\x42\x75\x69\x6c\x64\x20\x30\x29\x20\
+\x20\x2d\x2d\x3e\x0a\x3c\x21\x44\x4f\x43\x54\x59\x50\x45\x20\x73\
+\x76\x67\x20\x50\x55\x42\x4c\x49\x43\x20\x22\x2d\x2f\x2f\x57\x33\
+\x43\x2f\x2f\x44\x54\x44\x20\x53\x56\x47\x20\x31\x2e\x31\x2f\x2f\
+\x45\x4e\x22\x20\x22\x68\x74\x74\x70\x3a\x2f\x2f\x77\x77\x77\x2e\
+\x77\x33\x2e\x6f\x72\x67\x2f\x47\x72\x61\x70\x68\x69\x63\x73\x2f\
+\x53\x56\x47\x2f\x31\x2e\x31\x2f\x44\x54\x44\x2f\x73\x76\x67\x31\
+\x31\x2e\x64\x74\x64\x22\x3e\x0a\x3c\x73\x76\x67\x20\x76\x65\x72\
+\x73\x69\x6f\x6e\x3d\x22\x31\x2e\x31\x22\x20\x69\x64\x3d\x22\x4c\
+\x61\x79\x65\x72\x5f\x31\x22\x20\x78\x6d\x6c\x6e\x73\x3d\x22\x68\
+\x74\x74\x70\x3a\x2f\x2f\x77\x77\x77\x2e\x77\x33\x2e\x6f\x72\x67\
+\x2f\x32\x30\x30\x30\x2f\x73\x76\x67\x22\x20\x78\x6d\x6c\x6e\x73\
+\x3a\x78\x6c\x69\x6e\x6b\x3d\x22\x68\x74\x74\x70\x3a\x2f\x2f\x77\
+\x77\x77\x2e\x77\x33\x2e\x6f\x72\x67\x2f\x31\x39\x39\x39\x2f\x78\
+\x6c\x69\x6e\x6b\x22\x20\x78\x3d\x22\x30\x70\x78\x22\x20\x79\x3d\
+\x22\x30\x70\x78\x22\x0a\x09\x20\x77\x69\x64\x74\x68\x3d\x22\x35\
+\x31\x32\x70\x78\x22\x20\x68\x65\x69\x67\x68\x74\x3d\x22\x35\x31\
+\x32\x70\x78\x22\x20\x76\x69\x65\x77\x42\x6f\x78\x3d\x22\x30\x20\
+\x30\x20\x35\x31\x32\x20\x35\x31\x32\x22\x20\x65\x6e\x61\x62\x6c\
+\x65\x2d\x62\x61\x63\x6b\x67\x72\x6f\x75\x6e\x64\x3d\x22\x6e\x65\
+\x77\x20\x30\x20\x30\x20\x35\x31\x32\x20\x35\x31\x32\x22\x20\x78\
+\x6d\x6c\x3a\x73\x70\x61\x63\x65\x3d\x22\x70\x72\x65\x73\x65\x72\
+\x76\x65\x22\x3e\x0a\x3c\x67\x3e\x0a\x09\x0a\x09\x09\x3c\x72\x65\
+\x63\x74\x20\x78\x3d\x22\x31\x37\x38\x2e\x38\x34\x36\x22\x20\x79\
+\x3d\x22\x39\x32\x2e\x30\x38\x37\x22\x20\x74\x72\x61\x6e\x73\x66\
+\x6f\x72\x6d\x3d\x22\x6d\x61\x74\x72\x69\x78\x28\x2d\x30\x2e\x37\
+\x30\x37\x31\x20\x2d\x30\x2e\x37\x30\x37\x31\x20\x30\x2e\x37\x30\
+\x37\x31\x20\x2d\x30\x2e\x37\x30\x37\x31\x20\x32\x32\x34\x2e\x33\
+\x34\x37\x36\x20\x36\x33\x31\x2e\x31\x34\x39\x38\x29\x22\x20\x77\
+\x69\x64\x74\x68\x3d\x22\x31\x32\x38\x2e\x30\x38\x35\x22\x20\x68\
+\x65\x69\x67\x68\x74\x3d\x22\x33\x35\x34\x2e\x30\x34\x39\x22\x2f\
+\x3e\x0a\x09\x3c\x70\x61\x74\x68\x20\x64\x3d\x22\x4d\x34\x37\x31\
+\x2e\x37\x32\x33\x2c\x38\x38\x2e\x33\x39\x33\x6c\x2d\x34\x38\x2e\
+\x31\x31\x35\x2d\x34\x38\x2e\x31\x31\x34\x63\x2d\x31\x31\x2e\x37\
+\x32\x33\x2d\x31\x31\x2e\x37\x32\x34\x2d\x33\x31\x2e\x35\x35\x38\
+\x2d\x31\x30\x2e\x38\x39\x36\x2d\x34\x34\x2e\x33\x30\x34\x2c\x31\
+\x2e\x38\x35\x6c\x2d\x34\x35\x2e\x32\x30\x32\x2c\x34\x35\x2e\x32\
+\x30\x33\x6c\x39\x30\x2e\x35\x36\x39\x2c\x39\x30\x2e\x35\x36\x38\
+\x6c\x34\x35\x2e\x32\x30\x32\x2d\x34\x35\x2e\x32\x30\x32\x0a\x09\
+\x09\x43\x34\x38\x32\x2e\x36\x31\x36\x2c\x31\x31\x39\x2e\x39\x35\
+\x32\x2c\x34\x38\x33\x2e\x34\x34\x35\x2c\x31\x30\x30\x2e\x31\x31\
+\x36\x2c\x34\x37\x31\x2e\x37\x32\x33\x2c\x38\x38\x2e\x33\x39\x33\
+\x7a\x22\x2f\x3e\x0a\x09\x3c\x70\x6f\x6c\x79\x67\x6f\x6e\x20\x70\
+\x6f\x69\x6e\x74\x73\x3d\x22\x36\x34\x2e\x30\x32\x31\x2c\x33\x36\
+\x33\x2e\x32\x35\x32\x20\x33\x32\x2c\x34\x38\x30\x20\x31\x34\x38\
+\x2e\x37\x33\x37\x2c\x34\x34\x37\x2e\x39\x37\x39\x20\x09\x22\x2f\
+\x3e\x0a\x3c\x2f\x67\x3e\x0a\x3c\x2f\x73\x76\x67\x3e\x0a\
+\x00\x00\x03\x03\
+\x3c\
+\x3f\x78\x6d\x6c\x20\x76\x65\x72\x73\x69\x6f\x6e\x3d\x22\x31\x2e\
+\x30\x22\x20\x65\x6e\x63\x6f\x64\x69\x6e\x67\x3d\x22\x75\x74\x66\
+\x2d\x38\x22\x3f\x3e\x0a\x3c\x21\x2d\x2d\x20\x47\x65\x6e\x65\x72\
+\x61\x74\x6f\x72\x3a\x20\x41\x64\x6f\x62\x65\x20\x49\x6c\x6c\x75\
+\x73\x74\x72\x61\x74\x6f\x72\x20\x31\x38\x2e\x31\x2e\x30\x2c\x20\
+\x53\x56\x47\x20\x45\x78\x70\x6f\x72\x74\x20\x50\x6c\x75\x67\x2d\
+\x49\x6e\x20\x2e\x20\x53\x56\x47\x20\x56\x65\x72\x73\x69\x6f\x6e\
+\x3a\x20\x36\x2e\x30\x30\x20\x42\x75\x69\x6c\x64\x20\x30\x29\x20\
+\x20\x2d\x2d\x3e\x0a\x3c\x21\x44\x4f\x43\x54\x59\x50\x45\x20\x73\
+\x76\x67\x20\x50\x55\x42\x4c\x49\x43\x20\x22\x2d\x2f\x2f\x57\x33\
+\x43\x2f\x2f\x44\x54\x44\x20\x53\x56\x47\x20\x31\x2e\x31\x2f\x2f\
+\x45\x4e\x22\x20\x22\x68\x74\x74\x70\x3a\x2f\x2f\x77\x77\x77\x2e\
+\x77\x33\x2e\x6f\x72\x67\x2f\x47\x72\x61\x70\x68\x69\x63\x73\x2f\
+\x53\x56\x47\x2f\x31\x2e\x31\x2f\x44\x54\x44\x2f\x73\x76\x67\x31\
+\x31\x2e\x64\x74\x64\x22\x3e\x0a\x3c\x73\x76\x67\x20\x76\x65\x72\
+\x73\x69\x6f\x6e\x3d\x22\x31\x2e\x31\x22\x20\x69\x64\x3d\x22\x43\
+\x68\x65\x63\x6b\x22\x20\x78\x6d\x6c\x6e\x73\x3d\x22\x68\x74\x74\
+\x70\x3a\x2f\x2f\x77\x77\x77\x2e\x77\x33\x2e\x6f\x72\x67\x2f\x32\
+\x30\x30\x30\x2f\x73\x76\x67\x22\x20\x78\x6d\x6c\x6e\x73\x3a\x78\
+\x6c\x69\x6e\x6b\x3d\x22\x68\x74\x74\x70\x3a\x2f\x2f\x77\x77\x77\
+\x2e\x77\x33\x2e\x6f\x72\x67\x2f\x31\x39\x39\x39\x2f\x78\x6c\x69\
+\x6e\x6b\x22\x20\x78\x3d\x22\x30\x70\x78\x22\x20\x79\x3d\x22\x30\
+\x70\x78\x22\x0a\x09\x20\x76\x69\x65\x77\x42\x6f\x78\x3d\x22\x30\
+\x20\x30\x20\x32\x30\x20\x32\x30\x22\x20\x65\x6e\x61\x62\x6c\x65\
+\x2d\x62\x61\x63\x6b\x67\x72\x6f\x75\x6e\x64\x3d\x22\x6e\x65\x77\
+\x20\x30\x20\x30\x20\x32\x30\x20\x32\x30\x22\x20\x78\x6d\x6c\x3a\
+\x73\x70\x61\x63\x65\x3d\x22\x70\x72\x65\x73\x65\x72\x76\x65\x22\
+\x3e\x0a\x3c\x70\x61\x74\x68\x20\x64\x3d\x22\x4d\x38\x2e\x32\x39\
+\x34\x2c\x31\x36\x2e\x39\x39\x38\x63\x2d\x30\x2e\x34\x33\x35\x2c\
+\x30\x2d\x30\x2e\x38\x34\x37\x2d\x30\x2e\x32\x30\x33\x2d\x31\x2e\
+\x31\x31\x31\x2d\x30\x2e\x35\x35\x33\x4c\x33\x2e\x36\x31\x2c\x31\
+\x31\x2e\x37\x32\x34\x63\x2d\x30\x2e\x34\x36\x35\x2d\x30\x2e\x36\
+\x31\x33\x2d\x30\x2e\x33\x34\x34\x2d\x31\x2e\x34\x38\x36\x2c\x30\
+\x2e\x32\x37\x2d\x31\x2e\x39\x35\x31\x0a\x09\x63\x30\x2e\x36\x31\
+\x35\x2d\x30\x2e\x34\x36\x37\x2c\x31\x2e\x34\x38\x38\x2d\x30\x2e\
+\x33\x34\x34\x2c\x31\x2e\x39\x35\x33\x2c\x30\x2e\x32\x37\x6c\x32\
+\x2e\x33\x35\x31\x2c\x33\x2e\x31\x30\x34\x6c\x35\x2e\x39\x31\x31\
+\x2d\x39\x2e\x34\x39\x32\x63\x30\x2e\x34\x30\x37\x2d\x30\x2e\x36\
+\x35\x32\x2c\x31\x2e\x32\x36\x37\x2d\x30\x2e\x38\x35\x32\x2c\x31\
+\x2e\x39\x32\x31\x2d\x30\x2e\x34\x34\x35\x0a\x09\x63\x30\x2e\x36\
+\x35\x33\x2c\x30\x2e\x34\x30\x36\x2c\x30\x2e\x38\x35\x34\x2c\x31\
+\x2e\x32\x36\x36\x2c\x30\x2e\x34\x34\x36\x2c\x31\x2e\x39\x32\x4c\
+\x39\x2e\x34\x37\x38\x2c\x31\x36\x2e\x33\x34\x63\x2d\x30\x2e\x32\
+\x34\x32\x2c\x30\x2e\x33\x39\x31\x2d\x30\x2e\x36\x36\x31\x2c\x30\
+\x2e\x36\x33\x35\x2d\x31\x2e\x31\x32\x2c\x30\x2e\x36\x35\x36\x43\
+\x38\x2e\x33\x33\x36\x2c\x31\x36\x2e\x39\x39\x38\x2c\x38\x2e\x33\
+\x31\x36\x2c\x31\x36\x2e\x39\x39\x38\x2c\x38\x2e\x32\x39\x34\x2c\
+\x31\x36\x2e\x39\x39\x38\x7a\x22\x2f\x3e\x0a\x3c\x2f\x73\x76\x67\
+\x3e\x0a\
+\x00\x00\x04\x42\
+\x3c\
+\x3f\x78\x6d\x6c\x20\x76\x65\x72\x73\x69\x6f\x6e\x3d\x22\x31\x2e\
+\x30\x22\x20\x65\x6e\x63\x6f\x64\x69\x6e\x67\x3d\x22\x69\x73\x6f\
+\x2d\x38\x38\x35\x39\x2d\x31\x22\x3f\x3e\x0a\x3c\x21\x2d\x2d\x20\
+\x47\x65\x6e\x65\x72\x61\x74\x6f\x72\x3a\x20\x41\x64\x6f\x62\x65\
+\x20\x49\x6c\x6c\x75\x73\x74\x72\x61\x74\x6f\x72\x20\x31\x39\x2e\
+\x30\x2e\x30\x2c\x20\x53\x56\x47\x20\x45\x78\x70\x6f\x72\x74\x20\
+\x50\x6c\x75\x67\x2d\x49\x6e\x20\x2e\x20\x53\x56\x47\x20\x56\x65\
+\x72\x73\x69\x6f\x6e\x3a\x20\x36\x2e\x30\x30\x20\x42\x75\x69\x6c\
+\x64\x20\x30\x29\x20\x20\x2d\x2d\x3e\x0a\x3c\x73\x76\x67\x20\x76\
+\x65\x72\x73\x69\x6f\x6e\x3d\x22\x31\x2e\x31\x22\x20\x69\x64\x3d\
+\x22\x4c\x61\x79\x65\x72\x5f\x31\x22\x20\x78\x6d\x6c\x6e\x73\x3d\
+\x22\x68\x74\x74\x70\x3a\x2f\x2f\x77\x77\x77\x2e\x77\x33\x2e\x6f\
+\x72\x67\x2f\x32\x30\x30\x30\x2f\x73\x76\x67\x22\x20\x78\x6d\x6c\
+\x6e\x73\x3a\x78\x6c\x69\x6e\x6b\x3d\x22\x68\x74\x74\x70\x3a\x2f\
+\x2f\x77\x77\x77\x2e\x77\x33\x2e\x6f\x72\x67\x2f\x31\x39\x39\x39\
+\x2f\x78\x6c\x69\x6e\x6b\x22\x20\x78\x3d\x22\x30\x70\x78\x22\x20\
+\x79\x3d\x22\x30\x70\x78\x22\x0a\x09\x20\x76\x69\x65\x77\x42\x6f\
+\x78\x3d\x22\x30\x20\x30\x20\x34\x32\x33\x2e\x37\x35\x34\x20\x34\
+\x32\x33\x2e\x37\x35\x34\x22\x20\x73\x74\x79\x6c\x65\x3d\x22\x65\
+\x6e\x61\x62\x6c\x65\x2d\x62\x61\x63\x6b\x67\x72\x6f\x75\x6e\x64\
+\x3a\x6e\x65\x77\x20\x30\x20\x30\x20\x34\x32\x33\x2e\x37\x35\x34\
+\x20\x34\x32\x33\x2e\x37\x35\x34\x3b\x22\x20\x78\x6d\x6c\x3a\x73\
+\x70\x61\x63\x65\x3d\x22\x70\x72\x65\x73\x65\x72\x76\x65\x22\x3e\
+\x0a\x3c\x70\x61\x74\x68\x20\x64\x3d\x22\x4d\x34\x30\x37\x2e\x35\
+\x31\x36\x2c\x31\x32\x33\x2e\x32\x33\x39\x6c\x2d\x32\x37\x2e\x37\
+\x31\x37\x2c\x31\x31\x2e\x34\x38\x63\x31\x38\x2e\x35\x38\x35\x2c\
+\x34\x34\x2e\x38\x36\x39\x2c\x31\x38\x2e\x35\x38\x35\x2c\x39\x34\
+\x2e\x32\x39\x31\x2c\x30\x2c\x31\x33\x39\x2e\x31\x35\x39\x63\x2d\
+\x31\x38\x2e\x35\x38\x35\x2c\x34\x34\x2e\x38\x36\x39\x2d\x35\x33\
+\x2e\x35\x33\x31\x2c\x37\x39\x2e\x38\x31\x35\x2d\x39\x38\x2e\x34\
+\x2c\x39\x38\x2e\x34\x0a\x09\x63\x2d\x32\x32\x2e\x34\x33\x38\x2c\
+\x39\x2e\x32\x39\x33\x2d\x34\x36\x2e\x30\x30\x34\x2c\x31\x33\x2e\
+\x39\x34\x2d\x36\x39\x2e\x35\x37\x39\x2c\x31\x33\x2e\x39\x33\x39\
+\x63\x2d\x32\x33\x2e\x35\x36\x39\x2d\x30\x2e\x30\x30\x31\x2d\x34\
+\x37\x2e\x31\x34\x37\x2d\x34\x2e\x36\x34\x37\x2d\x36\x39\x2e\x35\
+\x37\x39\x2d\x31\x33\x2e\x39\x33\x39\x63\x2d\x34\x34\x2e\x38\x36\
+\x39\x2d\x31\x38\x2e\x35\x38\x35\x2d\x37\x39\x2e\x38\x31\x35\x2d\
+\x35\x33\x2e\x35\x33\x31\x2d\x39\x38\x2e\x34\x2d\x39\x38\x2e\x34\
+\x0a\x09\x43\x31\x33\x2e\x35\x30\x37\x2c\x32\x30\x30\x2e\x36\x34\
+\x37\x2c\x33\x34\x2e\x37\x35\x38\x2c\x31\x31\x38\x2e\x37\x31\x2c\
+\x39\x30\x2e\x37\x35\x38\x2c\x36\x38\x2e\x36\x34\x34\x6c\x36\x30\
+\x2e\x38\x30\x31\x2c\x36\x30\x2e\x38\x30\x31\x56\x37\x2e\x35\x32\
+\x31\x48\x32\x39\x2e\x36\x33\x35\x4c\x36\x39\x2e\x35\x31\x34\x2c\
+\x34\x37\x2e\x34\x43\x35\x2e\x32\x32\x32\x2c\x31\x30\x35\x2e\x38\
+\x32\x36\x2d\x31\x38\x2e\x39\x38\x35\x2c\x32\x30\x30\x2e\x36\x2c\
+\x31\x36\x2e\x31\x32\x33\x2c\x32\x38\x35\x2e\x33\x35\x39\x0a\x09\
+\x63\x32\x31\x2e\x36\x35\x32\x2c\x35\x32\x2e\x32\x37\x32\x2c\x36\
+\x32\x2e\x33\x36\x34\x2c\x39\x32\x2e\x39\x38\x34\x2c\x31\x31\x34\
+\x2e\x36\x33\x36\x2c\x31\x31\x34\x2e\x36\x33\x36\x63\x32\x36\x2e\
+\x31\x33\x37\x2c\x31\x30\x2e\x38\x32\x36\x2c\x35\x33\x2e\x35\x39\
+\x39\x2c\x31\x36\x2e\x32\x33\x39\x2c\x38\x31\x2e\x30\x36\x31\x2c\
+\x31\x36\x2e\x32\x33\x39\x73\x35\x34\x2e\x39\x32\x34\x2d\x35\x2e\
+\x34\x31\x33\x2c\x38\x31\x2e\x30\x36\x2d\x31\x36\x2e\x32\x33\x39\
+\x0a\x09\x63\x35\x32\x2e\x32\x37\x32\x2d\x32\x31\x2e\x36\x35\x32\
+\x2c\x39\x32\x2e\x39\x38\x34\x2d\x36\x32\x2e\x33\x36\x34\x2c\x31\
+\x31\x34\x2e\x36\x33\x37\x2d\x31\x31\x34\x2e\x36\x33\x36\x43\x34\
+\x32\x39\x2e\x31\x36\x37\x2c\x32\x33\x33\x2e\x30\x38\x37\x2c\x34\
+\x32\x39\x2e\x31\x36\x37\x2c\x31\x37\x35\x2e\x35\x31\x31\x2c\x34\
+\x30\x37\x2e\x35\x31\x36\x2c\x31\x32\x33\x2e\x32\x33\x39\x7a\x22\
+\x2f\x3e\x0a\x3c\x67\x3e\x0a\x3c\x2f\x67\x3e\x0a\x3c\x67\x3e\x0a\
+\x3c\x2f\x67\x3e\x0a\x3c\x67\x3e\x0a\x3c\x2f\x67\x3e\x0a\x3c\x67\
+\x3e\x0a\x3c\x2f\x67\x3e\x0a\x3c\x67\x3e\x0a\x3c\x2f\x67\x3e\x0a\
+\x3c\x67\x3e\x0a\x3c\x2f\x67\x3e\x0a\x3c\x67\x3e\x0a\x3c\x2f\x67\
+\x3e\x0a\x3c\x67\x3e\x0a\x3c\x2f\x67\x3e\x0a\x3c\x67\x3e\x0a\x3c\
+\x2f\x67\x3e\x0a\x3c\x67\x3e\x0a\x3c\x2f\x67\x3e\x0a\x3c\x67\x3e\
+\x0a\x3c\x2f\x67\x3e\x0a\x3c\x67\x3e\x0a\x3c\x2f\x67\x3e\x0a\x3c\
+\x67\x3e\x0a\x3c\x2f\x67\x3e\x0a\x3c\x67\x3e\x0a\x3c\x2f\x67\x3e\
+\x0a\x3c\x67\x3e\x0a\x3c\x2f\x67\x3e\x0a\x3c\x2f\x73\x76\x67\x3e\
+\x0a\
+\x00\x00\x02\x77\
+\x3c\
+\x3f\x78\x6d\x6c\x20\x76\x65\x72\x73\x69\x6f\x6e\x3d\x22\x31\x2e\
+\x30\x22\x20\x65\x6e\x63\x6f\x64\x69\x6e\x67\x3d\x22\x75\x74\x66\
+\x2d\x38\x22\x3f\x3e\x0a\x3c\x21\x2d\x2d\x20\x47\x65\x6e\x65\x72\
+\x61\x74\x6f\x72\x3a\x20\x41\x64\x6f\x62\x65\x20\x49\x6c\x6c\x75\
+\x73\x74\x72\x61\x74\x6f\x72\x20\x31\x36\x2e\x32\x2e\x31\x2c\x20\
+\x53\x56\x47\x20\x45\x78\x70\x6f\x72\x74\x20\x50\x6c\x75\x67\x2d\
+\x49\x6e\x20\x2e\x20\x53\x56\x47\x20\x56\x65\x72\x73\x69\x6f\x6e\
+\x3a\x20\x36\x2e\x30\x30\x20\x42\x75\x69\x6c\x64\x20\x30\x29\x20\
+\x20\x2d\x2d\x3e\x0a\x3c\x21\x44\x4f\x43\x54\x59\x50\x45\x20\x73\
+\x76\x67\x20\x50\x55\x42\x4c\x49\x43\x20\x22\x2d\x2f\x2f\x57\x33\
+\x43\x2f\x2f\x44\x54\x44\x20\x53\x56\x47\x20\x31\x2e\x31\x2f\x2f\
+\x45\x4e\x22\x20\x22\x68\x74\x74\x70\x3a\x2f\x2f\x77\x77\x77\x2e\
+\x77\x33\x2e\x6f\x72\x67\x2f\x47\x72\x61\x70\x68\x69\x63\x73\x2f\
+\x53\x56\x47\x2f\x31\x2e\x31\x2f\x44\x54\x44\x2f\x73\x76\x67\x31\
+\x31\x2e\x64\x74\x64\x22\x3e\x0a\x3c\x73\x76\x67\x20\x76\x65\x72\
+\x73\x69\x6f\x6e\x3d\x22\x31\x2e\x31\x22\x20\x69\x64\x3d\x22\x4c\
+\x61\x79\x65\x72\x5f\x31\x22\x20\x78\x6d\x6c\x6e\x73\x3d\x22\x68\
+\x74\x74\x70\x3a\x2f\x2f\x77\x77\x77\x2e\x77\x33\x2e\x6f\x72\x67\
+\x2f\x32\x30\x30\x30\x2f\x73\x76\x67\x22\x20\x78\x6d\x6c\x6e\x73\
+\x3a\x78\x6c\x69\x6e\x6b\x3d\x22\x68\x74\x74\x70\x3a\x2f\x2f\x77\
+\x77\x77\x2e\x77\x33\x2e\x6f\x72\x67\x2f\x31\x39\x39\x39\x2f\x78\
+\x6c\x69\x6e\x6b\x22\x20\x78\x3d\x22\x30\x70\x78\x22\x20\x79\x3d\
+\x22\x30\x70\x78\x22\x0a\x09\x20\x77\x69\x64\x74\x68\x3d\x22\x35\
+\x31\x32\x70\x78\x22\x20\x68\x65\x69\x67\x68\x74\x3d\x22\x35\x31\
+\x32\x70\x78\x22\x20\x76\x69\x65\x77\x42\x6f\x78\x3d\x22\x30\x20\
+\x30\x20\x35\x31\x32\x20\x35\x31\x32\x22\x20\x73\x74\x79\x6c\x65\
+\x3d\x22\x65\x6e\x61\x62\x6c\x65\x2d\x62\x61\x63\x6b\x67\x72\x6f\
+\x75\x6e\x64\x3a\x6e\x65\x77\x20\x30\x20\x30\x20\x35\x31\x32\x20\
+\x35\x31\x32\x3b\x22\x20\x78\x6d\x6c\x3a\x73\x70\x61\x63\x65\x3d\
+\x22\x70\x72\x65\x73\x65\x72\x76\x65\x22\x3e\x0a\x3c\x70\x6f\x6c\
+\x79\x67\x6f\x6e\x20\x70\x6f\x69\x6e\x74\x73\x3d\x22\x32\x38\x38\
+\x2c\x39\x36\x20\x33\x33\x37\x2e\x39\x2c\x31\x34\x35\x2e\x39\x20\
+\x32\x37\x34\x2c\x32\x30\x39\x2e\x37\x20\x32\x37\x34\x2c\x32\x30\
+\x39\x2e\x37\x20\x31\x34\x35\x2e\x39\x2c\x33\x33\x37\x2e\x39\x20\
+\x39\x36\x2c\x32\x38\x38\x20\x39\x36\x2c\x34\x31\x36\x20\x32\x32\
+\x34\x2c\x34\x31\x36\x20\x31\x37\x34\x2e\x31\x2c\x33\x36\x36\x2e\
+\x31\x20\x33\x35\x37\x2e\x34\x2c\x31\x38\x32\x2e\x39\x20\x33\x36\
+\x36\x2e\x31\x2c\x31\x37\x34\x2e\x31\x20\x0a\x09\x34\x31\x36\x2c\
+\x32\x32\x34\x20\x34\x31\x36\x2c\x39\x36\x20\x22\x2f\x3e\x0a\x3c\
+\x2f\x73\x76\x67\x3e\x0a\
+\x00\x00\x04\x54\
+\x3c\
+\x3f\x78\x6d\x6c\x20\x76\x65\x72\x73\x69\x6f\x6e\x3d\x22\x31\x2e\
+\x30\x22\x20\x65\x6e\x63\x6f\x64\x69\x6e\x67\x3d\x22\x75\x74\x66\
+\x2d\x38\x22\x3f\x3e\x0a\x3c\x21\x2d\x2d\x20\x47\x65\x6e\x65\x72\
+\x61\x74\x6f\x72\x3a\x20\x41\x64\x6f\x62\x65\x20\x49\x6c\x6c\x75\
+\x73\x74\x72\x61\x74\x6f\x72\x20\x31\x36\x2e\x32\x2e\x31\x2c\x20\
+\x53\x56\x47\x20\x45\x78\x70\x6f\x72\x74\x20\x50\x6c\x75\x67\x2d\
+\x49\x6e\x20\x2e\x20\x53\x56\x47\x20\x56\x65\x72\x73\x69\x6f\x6e\
+\x3a\x20\x36\x2e\x30\x30\x20\x42\x75\x69\x6c\x64\x20\x30\x29\x20\
+\x20\x2d\x2d\x3e\x0a\x3c\x21\x44\x4f\x43\x54\x59\x50\x45\x20\x73\
+\x76\x67\x20\x50\x55\x42\x4c\x49\x43\x20\x22\x2d\x2f\x2f\x57\x33\
+\x43\x2f\x2f\x44\x54\x44\x20\x53\x56\x47\x20\x31\x2e\x31\x2f\x2f\
+\x45\x4e\x22\x20\x22\x68\x74\x74\x70\x3a\x2f\x2f\x77\x77\x77\x2e\
+\x77\x33\x2e\x6f\x72\x67\x2f\x47\x72\x61\x70\x68\x69\x63\x73\x2f\
+\x53\x56\x47\x2f\x31\x2e\x31\x2f\x44\x54\x44\x2f\x73\x76\x67\x31\
+\x31\x2e\x64\x74\x64\x22\x3e\x0a\x3c\x73\x76\x67\x20\x76\x65\x72\
+\x73\x69\x6f\x6e\x3d\x22\x31\x2e\x31\x22\x20\x69\x64\x3d\x22\x4c\
+\x61\x79\x65\x72\x5f\x31\x22\x20\x78\x6d\x6c\x6e\x73\x3d\x22\x68\
+\x74\x74\x70\x3a\x2f\x2f\x77\x77\x77\x2e\x77\x33\x2e\x6f\x72\x67\
+\x2f\x32\x30\x30\x30\x2f\x73\x76\x67\x22\x20\x78\x6d\x6c\x6e\x73\
+\x3a\x78\x6c\x69\x6e\x6b\x3d\x22\x68\x74\x74\x70\x3a\x2f\x2f\x77\
+\x77\x77\x2e\x77\x33\x2e\x6f\x72\x67\x2f\x31\x39\x39\x39\x2f\x78\
+\x6c\x69\x6e\x6b\x22\x20\x78\x3d\x22\x30\x70\x78\x22\x20\x79\x3d\
+\x22\x30\x70\x78\x22\x0a\x09\x20\x77\x69\x64\x74\x68\x3d\x22\x35\
+\x31\x32\x70\x78\x22\x20\x68\x65\x69\x67\x68\x74\x3d\x22\x35\x31\
+\x32\x70\x78\x22\x20\x76\x69\x65\x77\x42\x6f\x78\x3d\x22\x30\x20\
+\x30\x20\x35\x31\x32\x20\x35\x31\x32\x22\x20\x65\x6e\x61\x62\x6c\
+\x65\x2d\x62\x61\x63\x6b\x67\x72\x6f\x75\x6e\x64\x3d\x22\x6e\x65\
+\x77\x20\x30\x20\x30\x20\x35\x31\x32\x20\x35\x31\x32\x22\x20\x78\
+\x6d\x6c\x3a\x73\x70\x61\x63\x65\x3d\x22\x70\x72\x65\x73\x65\x72\
+\x76\x65\x22\x3e\x0a\x3c\x67\x20\x69\x64\x3d\x22\x49\x63\x6f\x6e\
+\x22\x3e\x0a\x09\x3c\x67\x3e\x0a\x09\x09\x3c\x70\x61\x74\x68\x20\
+\x64\x3d\x22\x4d\x32\x35\x36\x2c\x31\x37\x36\x63\x2d\x34\x34\x2e\
+\x30\x30\x34\x2c\x30\x2d\x38\x30\x2e\x30\x30\x31\x2c\x33\x36\x2d\
+\x38\x30\x2e\x30\x30\x31\x2c\x38\x30\x63\x30\x2c\x34\x34\x2e\x30\
+\x30\x34\x2c\x33\x35\x2e\x39\x39\x37\x2c\x38\x30\x2c\x38\x30\x2e\
+\x30\x30\x31\x2c\x38\x30\x63\x34\x34\x2e\x30\x30\x35\x2c\x30\x2c\
+\x37\x39\x2e\x39\x39\x39\x2d\x33\x35\x2e\x39\x39\x36\x2c\x37\x39\
+\x2e\x39\x39\x39\x2d\x38\x30\x0a\x09\x09\x09\x43\x33\x33\x35\x2e\
+\x39\x39\x39\x2c\x32\x31\x32\x2c\x33\x30\x30\x2e\x30\x30\x35\x2c\
+\x31\x37\x36\x2c\x32\x35\x36\x2c\x31\x37\x36\x7a\x20\x4d\x34\x34\
+\x36\x2e\x39\x33\x38\x2c\x32\x33\x34\x2e\x36\x36\x37\x63\x2d\x39\
+\x2e\x36\x30\x35\x2d\x38\x38\x2e\x35\x33\x31\x2d\x38\x31\x2e\x30\
+\x37\x34\x2d\x31\x36\x30\x2d\x31\x36\x39\x2e\x36\x30\x35\x2d\x31\
+\x36\x39\x2e\x35\x39\x39\x56\x33\x32\x68\x2d\x34\x32\x2e\x36\x36\
+\x36\x76\x33\x33\x2e\x30\x36\x37\x0a\x09\x09\x09\x63\x2d\x38\x38\
+\x2e\x35\x33\x31\x2c\x39\x2e\x35\x39\x39\x2d\x31\x36\x30\x2c\x38\
+\x31\x2e\x30\x36\x38\x2d\x31\x36\x39\x2e\x36\x30\x34\x2c\x31\x36\
+\x39\x2e\x35\x39\x39\x48\x33\x32\x76\x34\x32\x2e\x36\x36\x37\x68\
+\x33\x33\x2e\x30\x36\x32\x63\x39\x2e\x36\x30\x34\x2c\x38\x38\x2e\
+\x35\x33\x31\x2c\x38\x31\x2e\x30\x37\x32\x2c\x31\x36\x30\x2c\x31\
+\x36\x39\x2e\x36\x30\x34\x2c\x31\x36\x39\x2e\x36\x30\x34\x56\x34\
+\x38\x30\x68\x34\x32\x2e\x36\x36\x36\x76\x2d\x33\x33\x2e\x30\x36\
+\x32\x0a\x09\x09\x09\x63\x38\x38\x2e\x35\x33\x31\x2d\x39\x2e\x36\
+\x30\x34\x2c\x31\x36\x30\x2d\x38\x31\x2e\x30\x37\x33\x2c\x31\x36\
+\x39\x2e\x36\x30\x35\x2d\x31\x36\x39\x2e\x36\x30\x34\x48\x34\x38\
+\x30\x76\x2d\x34\x32\x2e\x36\x36\x37\x48\x34\x34\x36\x2e\x39\x33\
+\x38\x7a\x20\x4d\x32\x35\x36\x2c\x34\x30\x35\x2e\x33\x33\x33\x63\
+\x2d\x38\x32\x2e\x31\x33\x37\x2c\x30\x2d\x31\x34\x39\x2e\x33\x33\
+\x34\x2d\x36\x37\x2e\x31\x39\x38\x2d\x31\x34\x39\x2e\x33\x33\x34\
+\x2d\x31\x34\x39\x2e\x33\x33\x33\x0a\x09\x09\x09\x63\x30\x2d\x38\
+\x32\x2e\x31\x33\x36\x2c\x36\x37\x2e\x31\x39\x37\x2d\x31\x34\x39\
+\x2e\x33\x33\x33\x2c\x31\x34\x39\x2e\x33\x33\x34\x2d\x31\x34\x39\
+\x2e\x33\x33\x33\x63\x38\x32\x2e\x31\x33\x35\x2c\x30\x2c\x31\x34\
+\x39\x2e\x33\x33\x32\x2c\x36\x37\x2e\x31\x39\x38\x2c\x31\x34\x39\
+\x2e\x33\x33\x32\x2c\x31\x34\x39\x2e\x33\x33\x33\x43\x34\x30\x35\
+\x2e\x33\x33\x32\x2c\x33\x33\x38\x2e\x31\x33\x35\x2c\x33\x33\x38\
+\x2e\x31\x33\x35\x2c\x34\x30\x35\x2e\x33\x33\x33\x2c\x32\x35\x36\
+\x2c\x34\x30\x35\x2e\x33\x33\x33\x7a\x0a\x09\x09\x09\x22\x2f\x3e\
+\x0a\x09\x3c\x2f\x67\x3e\x0a\x3c\x2f\x67\x3e\x0a\x3c\x2f\x73\x76\
+\x67\x3e\x0a\
+\x00\x00\x03\xda\
+\x3c\
+\x3f\x78\x6d\x6c\x20\x76\x65\x72\x73\x69\x6f\x6e\x3d\x22\x31\x2e\
+\x30\x22\x20\x65\x6e\x63\x6f\x64\x69\x6e\x67\x3d\x22\x75\x74\x66\
+\x2d\x38\x22\x3f\x3e\x0a\x3c\x21\x2d\x2d\x20\x47\x65\x6e\x65\x72\
+\x61\x74\x6f\x72\x3a\x20\x41\x64\x6f\x62\x65\x20\x49\x6c\x6c\x75\
+\x73\x74\x72\x61\x74\x6f\x72\x20\x31\x36\x2e\x30\x2e\x30\x2c\x20\
+\x53\x56\x47\x20\x45\x78\x70\x6f\x72\x74\x20\x50\x6c\x75\x67\x2d\
+\x49\x6e\x20\x2e\x20\x53\x56\x47\x20\x56\x65\x72\x73\x69\x6f\x6e\
+\x3a\x20\x36\x2e\x30\x30\x20\x42\x75\x69\x6c\x64\x20\x30\x29\x20\
+\x20\x2d\x2d\x3e\x0a\x3c\x21\x44\x4f\x43\x54\x59\x50\x45\x20\x73\
+\x76\x67\x20\x50\x55\x42\x4c\x49\x43\x20\x22\x2d\x2f\x2f\x57\x33\
+\x43\x2f\x2f\x44\x54\x44\x20\x53\x56\x47\x20\x31\x2e\x31\x2f\x2f\
+\x45\x4e\x22\x20\x22\x68\x74\x74\x70\x3a\x2f\x2f\x77\x77\x77\x2e\
+\x77\x33\x2e\x6f\x72\x67\x2f\x47\x72\x61\x70\x68\x69\x63\x73\x2f\
+\x53\x56\x47\x2f\x31\x2e\x31\x2f\x44\x54\x44\x2f\x73\x76\x67\x31\
+\x31\x2e\x64\x74\x64\x22\x3e\x0a\x3c\x73\x76\x67\x20\x76\x65\x72\
+\x73\x69\x6f\x6e\x3d\x22\x31\x2e\x31\x22\x20\x69\x64\x3d\x22\x4c\
+\x61\x79\x65\x72\x5f\x31\x22\x20\x78\x6d\x6c\x6e\x73\x3d\x22\x68\
+\x74\x74\x70\x3a\x2f\x2f\x77\x77\x77\x2e\x77\x33\x2e\x6f\x72\x67\
+\x2f\x32\x30\x30\x30\x2f\x73\x76\x67\x22\x20\x78\x6d\x6c\x6e\x73\
+\x3a\x78\x6c\x69\x6e\x6b\x3d\x22\x68\x74\x74\x70\x3a\x2f\x2f\x77\
+\x77\x77\x2e\x77\x33\x2e\x6f\x72\x67\x2f\x31\x39\x39\x39\x2f\x78\
+\x6c\x69\x6e\x6b\x22\x20\x78\x3d\x22\x30\x70\x78\x22\x20\x79\x3d\
+\x22\x30\x70\x78\x22\x0a\x09\x20\x77\x69\x64\x74\x68\x3d\x22\x35\
+\x31\x32\x70\x78\x22\x20\x68\x65\x69\x67\x68\x74\x3d\x22\x35\x31\
+\x32\x70\x78\x22\x20\x76\x69\x65\x77\x42\x6f\x78\x3d\x22\x30\x20\
+\x30\x20\x35\x31\x32\x20\x35\x31\x32\x22\x20\x65\x6e\x61\x62\x6c\
+\x65\x2d\x62\x61\x63\x6b\x67\x72\x6f\x75\x6e\x64\x3d\x22\x6e\x65\
+\x77\x20\x30\x20\x30\x20\x35\x31\x32\x20\x35\x31\x32\x22\x20\x78\
+\x6d\x6c\x3a\x73\x70\x61\x63\x65\x3d\x22\x70\x72\x65\x73\x65\x72\
+\x76\x65\x22\x3e\x0a\x3c\x67\x3e\x0a\x09\x3c\x70\x61\x74\x68\x20\
+\x64\x3d\x22\x4d\x34\x38\x2e\x34\x35\x31\x2c\x34\x36\x34\x2e\x38\
+\x32\x38\x63\x34\x30\x2e\x30\x32\x33\x2d\x30\x2e\x33\x31\x35\x2c\
+\x34\x35\x2e\x30\x31\x2d\x39\x2e\x39\x35\x35\x2c\x35\x38\x2e\x30\
+\x35\x32\x2d\x35\x30\x2e\x31\x33\x32\x63\x32\x34\x2e\x30\x35\x37\
+\x2d\x36\x33\x2e\x34\x30\x38\x2c\x31\x33\x32\x2e\x34\x31\x39\x2c\
+\x31\x36\x2e\x35\x39\x31\x2c\x36\x35\x2e\x32\x36\x39\x2c\x34\x34\
+\x2e\x33\x37\x34\x0a\x09\x09\x43\x31\x30\x34\x2e\x36\x32\x32\x2c\
+\x34\x38\x36\x2e\x38\x35\x32\x2c\x38\x2e\x34\x32\x38\x2c\x34\x36\
+\x35\x2e\x31\x34\x33\x2c\x34\x38\x2e\x34\x35\x31\x2c\x34\x36\x34\
+\x2e\x38\x32\x38\x7a\x22\x2f\x3e\x0a\x09\x3c\x70\x61\x74\x68\x20\
+\x64\x3d\x22\x4d\x34\x35\x38\x2e\x38\x35\x37\x2c\x34\x36\x2e\x39\
+\x30\x32\x63\x2d\x31\x39\x2e\x34\x31\x37\x2d\x31\x35\x2e\x36\x34\
+\x37\x2d\x35\x31\x2e\x35\x39\x32\x2d\x37\x2e\x39\x33\x38\x2d\x37\
+\x31\x2e\x38\x36\x34\x2c\x31\x37\x2e\x32\x31\x39\x4c\x31\x38\x31\
+\x2e\x36\x34\x35\x2c\x33\x35\x35\x2e\x38\x34\x39\x63\x2d\x32\x30\
+\x2e\x32\x37\x32\x2c\x32\x35\x2e\x31\x35\x34\x2d\x32\x30\x2e\x31\
+\x37\x31\x2c\x32\x30\x2e\x33\x34\x37\x2d\x30\x2e\x37\x35\x34\x2c\
+\x33\x35\x2e\x39\x39\x32\x0a\x09\x09\x63\x31\x39\x2e\x34\x31\x37\
+\x2c\x31\x35\x2e\x36\x34\x38\x2c\x31\x34\x2e\x37\x33\x38\x2c\x31\
+\x36\x2e\x37\x37\x2c\x33\x35\x2e\x30\x31\x31\x2d\x38\x2e\x33\x38\
+\x38\x6c\x32\x34\x31\x2e\x34\x30\x36\x2d\x32\x36\x32\x2e\x36\x36\
+\x39\x43\x34\x37\x37\x2e\x35\x38\x31\x2c\x39\x35\x2e\x36\x32\x38\
+\x2c\x34\x37\x38\x2e\x32\x37\x35\x2c\x36\x32\x2e\x35\x35\x2c\x34\
+\x35\x38\x2e\x38\x35\x37\x2c\x34\x36\x2e\x39\x30\x32\x7a\x20\x4d\
+\x34\x30\x36\x2e\x30\x36\x35\x2c\x38\x31\x2e\x38\x32\x35\x0a\x09\
+\x09\x63\x30\x2c\x30\x2d\x33\x2d\x33\x2e\x35\x2d\x31\x33\x2d\x31\
+\x31\x2e\x35\x63\x31\x35\x2d\x32\x34\x2e\x35\x2c\x34\x34\x2e\x35\
+\x2d\x32\x30\x2c\x34\x34\x2e\x35\x2d\x32\x30\x43\x34\x30\x39\x2e\
+\x35\x36\x35\x2c\x36\x36\x2e\x38\x32\x35\x2c\x34\x30\x36\x2e\x30\
+\x36\x35\x2c\x38\x31\x2e\x38\x32\x35\x2c\x34\x30\x36\x2e\x30\x36\
+\x35\x2c\x38\x31\x2e\x38\x32\x35\x7a\x22\x2f\x3e\x0a\x3c\x2f\x67\
+\x3e\x0a\x3c\x2f\x73\x76\x67\x3e\x0a\
+\x00\x00\x04\x22\
+\x3c\
+\x3f\x78\x6d\x6c\x20\x76\x65\x72\x73\x69\x6f\x6e\x3d\x27\x31\x2e\
+\x30\x27\x20\x65\x6e\x63\x6f\x64\x69\x6e\x67\x3d\x27\x55\x54\x46\
+\x2d\x38\x27\x3f\x3e\x0a\x3c\x21\x2d\x2d\x20\x54\x68\x69\x73\x20\
+\x66\x69\x6c\x65\x20\x77\x61\x73\x20\x67\x65\x6e\x65\x72\x61\x74\
+\x65\x64\x20\x62\x79\x20\x64\x76\x69\x73\x76\x67\x6d\x20\x32\x2e\
+\x31\x31\x2e\x31\x20\x2d\x2d\x3e\x0a\x3c\x73\x76\x67\x20\x76\x65\
+\x72\x73\x69\x6f\x6e\x3d\x27\x31\x2e\x31\x27\x20\x78\x6d\x6c\x6e\
+\x73\x3d\x27\x68\x74\x74\x70\x3a\x2f\x2f\x77\x77\x77\x2e\x77\x33\
+\x2e\x6f\x72\x67\x2f\x32\x30\x30\x30\x2f\x73\x76\x67\x27\x20\x78\
+\x6d\x6c\x6e\x73\x3a\x78\x6c\x69\x6e\x6b\x3d\x27\x68\x74\x74\x70\
+\x3a\x2f\x2f\x77\x77\x77\x2e\x77\x33\x2e\x6f\x72\x67\x2f\x31\x39\
+\x39\x39\x2f\x78\x6c\x69\x6e\x6b\x27\x20\x77\x69\x64\x74\x68\x3d\
+\x27\x36\x34\x2e\x30\x30\x30\x31\x70\x74\x27\x20\x68\x65\x69\x67\
+\x68\x74\x3d\x27\x36\x34\x70\x74\x27\x20\x76\x69\x65\x77\x42\x6f\
+\x78\x3d\x27\x35\x38\x2e\x34\x36\x36\x39\x20\x31\x31\x37\x2e\x38\
+\x35\x38\x20\x36\x34\x2e\x30\x30\x30\x31\x20\x36\x34\x27\x3e\x0a\
+\x3c\x67\x20\x69\x64\x3d\x27\x70\x61\x67\x65\x31\x27\x3e\x0a\x3c\
+\x67\x20\x74\x72\x61\x6e\x73\x66\x6f\x72\x6d\x3d\x27\x74\x72\x61\
+\x6e\x73\x6c\x61\x74\x65\x28\x35\x38\x2e\x34\x36\x36\x39\x20\x31\
+\x31\x37\x2e\x38\x35\x38\x29\x73\x63\x61\x6c\x65\x28\x2e\x39\x39\
+\x36\x32\x36\x34\x29\x27\x3e\x0a\x3c\x70\x61\x74\x68\x20\x64\x3d\
+\x27\x4d\x20\x36\x2e\x30\x32\x32\x35\x20\x33\x32\x2e\x31\x32\x4c\
+\x20\x31\x33\x2e\x39\x36\x38\x37\x20\x31\x32\x2e\x39\x33\x36\x31\
+\x4c\x20\x35\x38\x2e\x32\x31\x37\x35\x20\x32\x31\x2e\x37\x33\x37\
+\x38\x4c\x20\x34\x32\x2e\x37\x34\x34\x35\x20\x34\x31\x2e\x37\x31\
+\x31\x39\x4c\x20\x36\x2e\x30\x32\x32\x35\x20\x33\x32\x2e\x31\x32\
+\x5a\x27\x20\x66\x69\x6c\x6c\x3d\x27\x6e\x6f\x6e\x65\x27\x20\x73\
+\x74\x72\x6f\x6b\x65\x3d\x27\x23\x30\x30\x30\x30\x30\x30\x27\x20\
+\x73\x74\x72\x6f\x6b\x65\x2d\x6c\x69\x6e\x65\x63\x61\x70\x3d\x27\
+\x72\x6f\x75\x6e\x64\x27\x20\x73\x74\x72\x6f\x6b\x65\x2d\x6c\x69\
+\x6e\x65\x6a\x6f\x69\x6e\x3d\x27\x72\x6f\x75\x6e\x64\x27\x20\x73\
+\x74\x72\x6f\x6b\x65\x2d\x6d\x69\x74\x65\x72\x6c\x69\x6d\x69\x74\
+\x3d\x27\x31\x30\x2e\x30\x33\x37\x35\x27\x20\x73\x74\x72\x6f\x6b\
+\x65\x2d\x77\x69\x64\x74\x68\x3d\x27\x32\x2e\x35\x30\x39\x33\x37\
+\x27\x2f\x3e\x0a\x3c\x2f\x67\x3e\x0a\x3c\x67\x20\x74\x72\x61\x6e\
+\x73\x66\x6f\x72\x6d\x3d\x27\x74\x72\x61\x6e\x73\x6c\x61\x74\x65\
+\x28\x35\x38\x2e\x34\x36\x36\x39\x20\x31\x31\x37\x2e\x38\x35\x38\
+\x29\x73\x63\x61\x6c\x65\x28\x2e\x39\x39\x36\x32\x36\x34\x29\x27\
+\x3e\x0a\x3c\x63\x69\x72\x63\x6c\x65\x20\x63\x78\x3d\x27\x36\x2e\
+\x30\x32\x32\x35\x27\x20\x63\x79\x3d\x27\x33\x32\x2e\x31\x32\x27\
+\x20\x66\x69\x6c\x6c\x3d\x27\x23\x66\x66\x30\x30\x30\x30\x27\x20\
+\x72\x3d\x27\x36\x2e\x30\x32\x32\x35\x27\x2f\x3e\x0a\x3c\x2f\x67\
+\x3e\x0a\x3c\x67\x20\x74\x72\x61\x6e\x73\x66\x6f\x72\x6d\x3d\x27\
+\x74\x72\x61\x6e\x73\x6c\x61\x74\x65\x28\x35\x38\x2e\x34\x36\x36\
+\x39\x20\x31\x31\x37\x2e\x38\x35\x38\x29\x73\x63\x61\x6c\x65\x28\
+\x2e\x39\x39\x36\x32\x36\x34\x29\x27\x3e\x0a\x3c\x63\x69\x72\x63\
+\x6c\x65\x20\x63\x78\x3d\x27\x31\x33\x2e\x39\x36\x38\x37\x27\x20\
+\x63\x79\x3d\x27\x31\x32\x2e\x39\x33\x36\x31\x27\x20\x66\x69\x6c\
+\x6c\x3d\x27\x23\x66\x66\x30\x30\x30\x30\x27\x20\x72\x3d\x27\x36\
+\x2e\x30\x32\x32\x35\x27\x2f\x3e\x0a\x3c\x2f\x67\x3e\x0a\x3c\x67\
+\x20\x74\x72\x61\x6e\x73\x66\x6f\x72\x6d\x3d\x27\x74\x72\x61\x6e\
+\x73\x6c\x61\x74\x65\x28\x35\x38\x2e\x34\x36\x36\x39\x20\x31\x31\
+\x37\x2e\x38\x35\x38\x29\x73\x63\x61\x6c\x65\x28\x2e\x39\x39\x36\
+\x32\x36\x34\x29\x27\x3e\x0a\x3c\x63\x69\x72\x63\x6c\x65\x20\x63\
+\x78\x3d\x27\x35\x38\x2e\x32\x31\x37\x35\x27\x20\x63\x79\x3d\x27\
+\x32\x31\x2e\x37\x33\x37\x38\x27\x20\x66\x69\x6c\x6c\x3d\x27\x23\
+\x66\x66\x30\x30\x30\x30\x27\x20\x72\x3d\x27\x36\x2e\x30\x32\x32\
+\x35\x27\x2f\x3e\x0a\x3c\x2f\x67\x3e\x0a\x3c\x67\x20\x74\x72\x61\
+\x6e\x73\x66\x6f\x72\x6d\x3d\x27\x74\x72\x61\x6e\x73\x6c\x61\x74\
+\x65\x28\x35\x38\x2e\x34\x36\x36\x39\x20\x31\x31\x37\x2e\x38\x35\
+\x38\x29\x73\x63\x61\x6c\x65\x28\x2e\x39\x39\x36\x32\x36\x34\x29\
+\x27\x3e\x0a\x3c\x63\x69\x72\x63\x6c\x65\x20\x63\x78\x3d\x27\x34\
+\x32\x2e\x37\x34\x34\x35\x27\x20\x63\x79\x3d\x27\x34\x31\x2e\x37\
+\x31\x31\x39\x27\x20\x66\x69\x6c\x6c\x3d\x27\x23\x66\x66\x30\x30\
+\x30\x30\x27\x20\x72\x3d\x27\x36\x2e\x30\x32\x32\x35\x27\x2f\x3e\
+\x0a\x3c\x2f\x67\x3e\x0a\x3c\x2f\x67\x3e\x0a\x3c\x2f\x73\x76\x67\
+\x3e\
+\x00\x00\x02\xab\
+\x3c\
+\x3f\x78\x6d\x6c\x20\x76\x65\x72\x73\x69\x6f\x6e\x3d\x22\x31\x2e\
+\x30\x22\x20\x65\x6e\x63\x6f\x64\x69\x6e\x67\x3d\x22\x75\x74\x66\
+\x2d\x38\x22\x3f\x3e\x0a\x3c\x21\x2d\x2d\x20\x47\x65\x6e\x65\x72\
+\x61\x74\x6f\x72\x3a\x20\x41\x64\x6f\x62\x65\x20\x49\x6c\x6c\x75\
+\x73\x74\x72\x61\x74\x6f\x72\x20\x31\x36\x2e\x32\x2e\x31\x2c\x20\
+\x53\x56\x47\x20\x45\x78\x70\x6f\x72\x74\x20\x50\x6c\x75\x67\x2d\
+\x49\x6e\x20\x2e\x20\x53\x56\x47\x20\x56\x65\x72\x73\x69\x6f\x6e\
+\x3a\x20\x36\x2e\x30\x30\x20\x42\x75\x69\x6c\x64\x20\x30\x29\x20\
+\x20\x2d\x2d\x3e\x0a\x3c\x21\x44\x4f\x43\x54\x59\x50\x45\x20\x73\
+\x76\x67\x20\x50\x55\x42\x4c\x49\x43\x20\x22\x2d\x2f\x2f\x57\x33\
+\x43\x2f\x2f\x44\x54\x44\x20\x53\x56\x47\x20\x31\x2e\x31\x2f\x2f\
+\x45\x4e\x22\x20\x22\x68\x74\x74\x70\x3a\x2f\x2f\x77\x77\x77\x2e\
+\x77\x33\x2e\x6f\x72\x67\x2f\x47\x72\x61\x70\x68\x69\x63\x73\x2f\
+\x53\x56\x47\x2f\x31\x2e\x31\x2f\x44\x54\x44\x2f\x73\x76\x67\x31\
+\x31\x2e\x64\x74\x64\x22\x3e\x0a\x3c\x73\x76\x67\x20\x76\x65\x72\
+\x73\x69\x6f\x6e\x3d\x22\x31\x2e\x31\x22\x20\x69\x64\x3d\x22\x4c\
+\x61\x79\x65\x72\x5f\x31\x22\x20\x78\x6d\x6c\x6e\x73\x3d\x22\x68\
+\x74\x74\x70\x3a\x2f\x2f\x77\x77\x77\x2e\x77\x33\x2e\x6f\x72\x67\
+\x2f\x32\x30\x30\x30\x2f\x73\x76\x67\x22\x20\x78\x6d\x6c\x6e\x73\
+\x3a\x78\x6c\x69\x6e\x6b\x3d\x22\x68\x74\x74\x70\x3a\x2f\x2f\x77\
+\x77\x77\x2e\x77\x33\x2e\x6f\x72\x67\x2f\x31\x39\x39\x39\x2f\x78\
+\x6c\x69\x6e\x6b\x22\x20\x78\x3d\x22\x30\x70\x78\x22\x20\x79\x3d\
+\x22\x30\x70\x78\x22\x0a\x09\x20\x77\x69\x64\x74\x68\x3d\x22\x35\
+\x31\x32\x70\x78\x22\x20\x68\x65\x69\x67\x68\x74\x3d\x22\x35\x31\
+\x32\x70\x78\x22\x20\x76\x69\x65\x77\x42\x6f\x78\x3d\x22\x30\x20\
+\x30\x20\x35\x31\x32\x20\x35\x31\x32\x22\x20\x65\x6e\x61\x62\x6c\
+\x65\x2d\x62\x61\x63\x6b\x67\x72\x6f\x75\x6e\x64\x3d\x22\x6e\x65\
+\x77\x20\x30\x20\x30\x20\x35\x31\x32\x20\x35\x31\x32\x22\x20\x78\
+\x6d\x6c\x3a\x73\x70\x61\x63\x65\x3d\x22\x70\x72\x65\x73\x65\x72\
+\x76\x65\x22\x3e\x0a\x3c\x67\x20\x69\x64\x3d\x22\x49\x63\x6f\x6e\
+\x5f\x35\x5f\x22\x3e\x0a\x09\x3c\x67\x3e\x0a\x09\x09\x3c\x70\x6f\
+\x6c\x79\x67\x6f\x6e\x20\x70\x6f\x69\x6e\x74\x73\x3d\x22\x34\x30\
+\x35\x2c\x31\x33\x36\x2e\x37\x39\x38\x20\x33\x37\x35\x2e\x32\x30\
+\x32\x2c\x31\x30\x37\x20\x32\x35\x36\x2c\x32\x32\x36\x2e\x32\x30\
+\x32\x20\x31\x33\x36\x2e\x37\x39\x38\x2c\x31\x30\x37\x20\x31\x30\
+\x37\x2c\x31\x33\x36\x2e\x37\x39\x38\x20\x32\x32\x36\x2e\x32\x30\
+\x32\x2c\x32\x35\x36\x20\x31\x30\x37\x2c\x33\x37\x35\x2e\x32\x30\
+\x32\x20\x31\x33\x36\x2e\x37\x39\x38\x2c\x34\x30\x35\x20\x32\x35\
+\x36\x2c\x32\x38\x35\x2e\x37\x39\x38\x20\x0a\x09\x09\x09\x33\x37\
+\x35\x2e\x32\x30\x32\x2c\x34\x30\x35\x20\x34\x30\x35\x2c\x33\x37\
+\x35\x2e\x32\x30\x32\x20\x32\x38\x35\x2e\x37\x39\x38\x2c\x32\x35\
+\x36\x20\x09\x09\x22\x2f\x3e\x0a\x09\x3c\x2f\x67\x3e\x0a\x3c\x2f\
+\x67\x3e\x0a\x3c\x2f\x73\x76\x67\x3e\x0a\
+\x00\x00\x01\x1c\
+\x3c\
+\x73\x76\x67\x20\x78\x6d\x6c\x6e\x73\x3d\x22\x68\x74\x74\x70\x3a\
+\x2f\x2f\x77\x77\x77\x2e\x77\x33\x2e\x6f\x72\x67\x2f\x32\x30\x30\
+\x30\x2f\x73\x76\x67\x22\x20\x77\x69\x64\x74\x68\x3d\x22\x35\x31\
+\x32\x70\x78\x22\x20\x68\x65\x69\x67\x68\x74\x3d\x22\x35\x31\x32\
+\x70\x78\x22\x0a\x20\x20\x20\x20\x20\x76\x69\x65\x77\x42\x6f\x78\
+\x3d\x22\x30\x20\x30\x20\x35\x31\x32\x20\x35\x31\x32\x22\x3e\x0a\
+\x3c\x67\x20\x74\x72\x61\x6e\x73\x66\x6f\x72\x6d\x3d\x27\x6d\x61\
+\x74\x72\x69\x78\x28\x34\x38\x20\x30\x20\x30\x20\x34\x38\x20\x34\
+\x38\x20\x34\x38\x29\x27\x3e\x0a\x20\x20\x3c\x70\x61\x74\x68\x20\
+\x64\x3d\x22\x4d\x30\x20\x30\x76\x32\x68\x2e\x35\x63\x30\x2d\x2e\
+\x35\x35\x2e\x34\x35\x2d\x31\x20\x31\x2d\x31\x68\x31\x2e\x35\x76\
+\x35\x2e\x35\x63\x30\x20\x2e\x32\x38\x2d\x2e\x32\x32\x2e\x35\x2d\
+\x2e\x35\x2e\x35\x68\x2d\x2e\x35\x76\x31\x68\x34\x76\x2d\x31\x68\
+\x2d\x2e\x35\x63\x2d\x2e\x32\x38\x20\x30\x2d\x2e\x35\x2d\x2e\x32\
+\x32\x2d\x2e\x35\x2d\x2e\x35\x76\x2d\x35\x2e\x35\x68\x31\x2e\x35\
+\x63\x2e\x35\x35\x20\x30\x20\x31\x20\x2e\x34\x35\x20\x31\x20\x31\
+\x68\x2e\x35\x76\x2d\x32\x68\x2d\x38\x7a\x22\x20\x2f\x3e\x0a\x3c\
+\x2f\x67\x3e\x0a\x3c\x2f\x73\x76\x67\x3e\x0a\
+\x00\x00\x03\xdc\
+\x3c\
+\x3f\x78\x6d\x6c\x20\x76\x65\x72\x73\x69\x6f\x6e\x3d\x22\x31\x2e\
+\x30\x22\x20\x65\x6e\x63\x6f\x64\x69\x6e\x67\x3d\x22\x75\x74\x66\
+\x2d\x38\x22\x3f\x3e\x0a\x3c\x21\x2d\x2d\x20\x47\x65\x6e\x65\x72\
+\x61\x74\x6f\x72\x3a\x20\x41\x64\x6f\x62\x65\x20\x49\x6c\x6c\x75\
+\x73\x74\x72\x61\x74\x6f\x72\x20\x31\x36\x2e\x32\x2e\x31\x2c\x20\
+\x53\x56\x47\x20\x45\x78\x70\x6f\x72\x74\x20\x50\x6c\x75\x67\x2d\
+\x49\x6e\x20\x2e\x20\x53\x56\x47\x20\x56\x65\x72\x73\x69\x6f\x6e\
+\x3a\x20\x36\x2e\x30\x30\x20\x42\x75\x69\x6c\x64\x20\x30\x29\x20\
+\x20\x2d\x2d\x3e\x0a\x3c\x21\x44\x4f\x43\x54\x59\x50\x45\x20\x73\
+\x76\x67\x20\x50\x55\x42\x4c\x49\x43\x20\x22\x2d\x2f\x2f\x57\x33\
+\x43\x2f\x2f\x44\x54\x44\x20\x53\x56\x47\x20\x31\x2e\x31\x2f\x2f\
+\x45\x4e\x22\x20\x22\x68\x74\x74\x70\x3a\x2f\x2f\x77\x77\x77\x2e\
+\x77\x33\x2e\x6f\x72\x67\x2f\x47\x72\x61\x70\x68\x69\x63\x73\x2f\
+\x53\x56\x47\x2f\x31\x2e\x31\x2f\x44\x54\x44\x2f\x73\x76\x67\x31\
+\x31\x2e\x64\x74\x64\x22\x3e\x0a\x3c\x73\x76\x67\x20\x76\x65\x72\
+\x73\x69\x6f\x6e\x3d\x22\x31\x2e\x31\x22\x20\x69\x64\x3d\x22\x4c\
+\x61\x79\x65\x72\x5f\x31\x22\x20\x78\x6d\x6c\x6e\x73\x3d\x22\x68\
+\x74\x74\x70\x3a\x2f\x2f\x77\x77\x77\x2e\x77\x33\x2e\x6f\x72\x67\
+\x2f\x32\x30\x30\x30\x2f\x73\x76\x67\x22\x20\x78\x6d\x6c\x6e\x73\
+\x3a\x78\x6c\x69\x6e\x6b\x3d\x22\x68\x74\x74\x70\x3a\x2f\x2f\x77\
+\x77\x77\x2e\x77\x33\x2e\x6f\x72\x67\x2f\x31\x39\x39\x39\x2f\x78\
+\x6c\x69\x6e\x6b\x22\x20\x78\x3d\x22\x30\x70\x78\x22\x20\x79\x3d\
+\x22\x30\x70\x78\x22\x0a\x09\x20\x77\x69\x64\x74\x68\x3d\x22\x35\
+\x31\x32\x70\x78\x22\x20\x68\x65\x69\x67\x68\x74\x3d\x22\x35\x31\
+\x32\x70\x78\x22\x20\x76\x69\x65\x77\x42\x6f\x78\x3d\x22\x30\x20\
+\x30\x20\x35\x31\x32\x20\x35\x31\x32\x22\x20\x73\x74\x79\x6c\x65\
+\x3d\x22\x65\x6e\x61\x62\x6c\x65\x2d\x62\x61\x63\x6b\x67\x72\x6f\
+\x75\x6e\x64\x3a\x6e\x65\x77\x20\x30\x20\x30\x20\x35\x31\x32\x20\
+\x35\x31\x32\x3b\x22\x20\x78\x6d\x6c\x3a\x73\x70\x61\x63\x65\x3d\
+\x22\x70\x72\x65\x73\x65\x72\x76\x65\x22\x3e\x0a\x3c\x67\x3e\x0a\
+\x09\x3c\x70\x61\x74\x68\x20\x64\x3d\x22\x4d\x32\x35\x36\x2c\x31\
+\x32\x38\x63\x2d\x38\x31\x2e\x39\x2c\x30\x2d\x31\x34\x35\x2e\x37\
+\x2c\x34\x38\x2e\x38\x2d\x32\x32\x34\x2c\x31\x32\x38\x63\x36\x37\
+\x2e\x34\x2c\x36\x37\x2e\x37\x2c\x31\x32\x34\x2c\x31\x32\x38\x2c\
+\x32\x32\x34\x2c\x31\x32\x38\x63\x39\x39\x2e\x39\x2c\x30\x2c\x31\
+\x37\x33\x2e\x34\x2d\x37\x36\x2e\x34\x2c\x32\x32\x34\x2d\x31\x32\
+\x36\x2e\x36\x0a\x09\x09\x43\x34\x32\x38\x2e\x32\x2c\x31\x39\x38\
+\x2e\x36\x2c\x33\x35\x34\x2e\x38\x2c\x31\x32\x38\x2c\x32\x35\x36\
+\x2c\x31\x32\x38\x7a\x20\x4d\x32\x35\x36\x2c\x33\x34\x37\x2e\x33\
+\x63\x2d\x34\x39\x2e\x34\x2c\x30\x2d\x38\x39\x2e\x36\x2d\x34\x31\
+\x2d\x38\x39\x2e\x36\x2d\x39\x31\x2e\x33\x63\x30\x2d\x35\x30\x2e\
+\x34\x2c\x34\x30\x2e\x32\x2d\x39\x31\x2e\x33\x2c\x38\x39\x2e\x36\
+\x2d\x39\x31\x2e\x33\x73\x38\x39\x2e\x36\x2c\x34\x31\x2c\x38\x39\
+\x2e\x36\x2c\x39\x31\x2e\x33\x0a\x09\x09\x43\x33\x34\x35\x2e\x36\
+\x2c\x33\x30\x36\x2e\x34\x2c\x33\x30\x35\x2e\x34\x2c\x33\x34\x37\
+\x2e\x33\x2c\x32\x35\x36\x2c\x33\x34\x37\x2e\x33\x7a\x22\x2f\x3e\
+\x0a\x09\x3c\x67\x3e\x0a\x09\x09\x3c\x70\x61\x74\x68\x20\x64\x3d\
+\x22\x4d\x32\x35\x36\x2c\x32\x32\x34\x63\x30\x2d\x37\x2e\x39\x2c\
+\x32\x2e\x39\x2d\x31\x35\x2e\x31\x2c\x37\x2e\x36\x2d\x32\x30\x2e\
+\x37\x63\x2d\x32\x2e\x35\x2d\x30\x2e\x34\x2d\x35\x2d\x30\x2e\x36\
+\x2d\x37\x2e\x36\x2d\x30\x2e\x36\x63\x2d\x32\x38\x2e\x38\x2c\x30\
+\x2d\x35\x32\x2e\x33\x2c\x32\x33\x2e\x39\x2d\x35\x32\x2e\x33\x2c\
+\x35\x33\x2e\x33\x63\x30\x2c\x32\x39\x2e\x34\x2c\x32\x33\x2e\x35\
+\x2c\x35\x33\x2e\x33\x2c\x35\x32\x2e\x33\x2c\x35\x33\x2e\x33\x0a\
+\x09\x09\x09\x73\x35\x32\x2e\x33\x2d\x32\x33\x2e\x39\x2c\x35\x32\
+\x2e\x33\x2d\x35\x33\x2e\x33\x63\x30\x2d\x32\x2e\x33\x2d\x30\x2e\
+\x32\x2d\x34\x2e\x36\x2d\x30\x2e\x34\x2d\x36\x2e\x39\x63\x2d\x35\
+\x2e\x35\x2c\x34\x2e\x33\x2d\x31\x32\x2e\x33\x2c\x36\x2e\x39\x2d\
+\x31\x39\x2e\x38\x2c\x36\x2e\x39\x43\x32\x37\x30\x2e\x33\x2c\x32\
+\x35\x36\x2c\x32\x35\x36\x2c\x32\x34\x31\x2e\x37\x2c\x32\x35\x36\
+\x2c\x32\x32\x34\x7a\x22\x2f\x3e\x0a\x09\x3c\x2f\x67\x3e\x0a\x3c\
+\x2f\x67\x3e\x0a\x3c\x2f\x73\x76\x67\x3e\x0a\
+\x00\x00\x03\x3f\
+\x3c\
+\x3f\x78\x6d\x6c\x20\x76\x65\x72\x73\x69\x6f\x6e\x3d\x22\x31\x2e\
+\x30\x22\x20\x65\x6e\x63\x6f\x64\x69\x6e\x67\x3d\x22\x75\x74\x66\
+\x2d\x38\x22\x3f\x3e\x0a\x3c\x21\x2d\x2d\x20\x47\x65\x6e\x65\x72\
+\x61\x74\x6f\x72\x3a\x20\x41\x64\x6f\x62\x65\x20\x49\x6c\x6c\x75\
+\x73\x74\x72\x61\x74\x6f\x72\x20\x31\x36\x2e\x32\x2e\x31\x2c\x20\
+\x53\x56\x47\x20\x45\x78\x70\x6f\x72\x74\x20\x50\x6c\x75\x67\x2d\
+\x49\x6e\x20\x2e\x20\x53\x56\x47\x20\x56\x65\x72\x73\x69\x6f\x6e\
+\x3a\x20\x36\x2e\x30\x30\x20\x42\x75\x69\x6c\x64\x20\x30\x29\x20\
+\x20\x2d\x2d\x3e\x0a\x3c\x21\x44\x4f\x43\x54\x59\x50\x45\x20\x73\
+\x76\x67\x20\x50\x55\x42\x4c\x49\x43\x20\x22\x2d\x2f\x2f\x57\x33\
+\x43\x2f\x2f\x44\x54\x44\x20\x53\x56\x47\x20\x31\x2e\x31\x2f\x2f\
+\x45\x4e\x22\x20\x22\x68\x74\x74\x70\x3a\x2f\x2f\x77\x77\x77\x2e\
+\x77\x33\x2e\x6f\x72\x67\x2f\x47\x72\x61\x70\x68\x69\x63\x73\x2f\
+\x53\x56\x47\x2f\x31\x2e\x31\x2f\x44\x54\x44\x2f\x73\x76\x67\x31\
+\x31\x2e\x64\x74\x64\x22\x3e\x0a\x3c\x73\x76\x67\x20\x76\x65\x72\
+\x73\x69\x6f\x6e\x3d\x22\x31\x2e\x31\x22\x20\x69\x64\x3d\x22\x4c\
+\x61\x79\x65\x72\x5f\x31\x22\x20\x78\x6d\x6c\x6e\x73\x3d\x22\x68\
+\x74\x74\x70\x3a\x2f\x2f\x77\x77\x77\x2e\x77\x33\x2e\x6f\x72\x67\
+\x2f\x32\x30\x30\x30\x2f\x73\x76\x67\x22\x20\x78\x6d\x6c\x6e\x73\
+\x3a\x78\x6c\x69\x6e\x6b\x3d\x22\x68\x74\x74\x70\x3a\x2f\x2f\x77\
+\x77\x77\x2e\x77\x33\x2e\x6f\x72\x67\x2f\x31\x39\x39\x39\x2f\x78\
+\x6c\x69\x6e\x6b\x22\x20\x78\x3d\x22\x30\x70\x78\x22\x20\x79\x3d\
+\x22\x30\x70\x78\x22\x0a\x09\x20\x77\x69\x64\x74\x68\x3d\x22\x35\
+\x31\x32\x70\x78\x22\x20\x68\x65\x69\x67\x68\x74\x3d\x22\x35\x31\
+\x32\x70\x78\x22\x20\x76\x69\x65\x77\x42\x6f\x78\x3d\x22\x30\x20\
+\x30\x20\x35\x31\x32\x20\x35\x31\x32\x22\x20\x65\x6e\x61\x62\x6c\
+\x65\x2d\x62\x61\x63\x6b\x67\x72\x6f\x75\x6e\x64\x3d\x22\x6e\x65\
+\x77\x20\x30\x20\x30\x20\x35\x31\x32\x20\x35\x31\x32\x22\x20\x78\
+\x6d\x6c\x3a\x73\x70\x61\x63\x65\x3d\x22\x70\x72\x65\x73\x65\x72\
+\x76\x65\x22\x3e\x0a\x3c\x67\x20\x69\x64\x3d\x22\x49\x63\x6f\x6e\
+\x5f\x32\x31\x5f\x22\x3e\x0a\x09\x3c\x67\x3e\x0a\x09\x09\x3c\x70\
+\x61\x74\x68\x20\x64\x3d\x22\x4d\x32\x35\x36\x2c\x31\x35\x32\x63\
+\x2d\x35\x37\x2e\x32\x2c\x30\x2d\x31\x30\x34\x2c\x34\x36\x2e\x38\
+\x2d\x31\x30\x34\x2c\x31\x30\x34\x73\x34\x36\x2e\x38\x2c\x31\x30\
+\x34\x2c\x31\x30\x34\x2c\x31\x30\x34\x73\x31\x30\x34\x2d\x34\x36\
+\x2e\x38\x2c\x31\x30\x34\x2d\x31\x30\x34\x53\x33\x31\x33\x2e\x32\
+\x2c\x31\x35\x32\x2c\x32\x35\x36\x2c\x31\x35\x32\x7a\x20\x4d\x32\
+\x35\x36\x2c\x34\x38\x0a\x09\x09\x09\x43\x31\x34\x31\x2e\x36\x30\
+\x31\x2c\x34\x38\x2c\x34\x38\x2c\x31\x34\x31\x2e\x36\x30\x31\x2c\
+\x34\x38\x2c\x32\x35\x36\x73\x39\x33\x2e\x36\x30\x31\x2c\x32\x30\
+\x38\x2c\x32\x30\x38\x2c\x32\x30\x38\x73\x32\x30\x38\x2d\x39\x33\
+\x2e\x36\x30\x31\x2c\x32\x30\x38\x2d\x32\x30\x38\x53\x33\x37\x30\
+\x2e\x33\x39\x39\x2c\x34\x38\x2c\x32\x35\x36\x2c\x34\x38\x7a\x20\
+\x4d\x32\x35\x36\x2c\x34\x32\x32\x2e\x34\x0a\x09\x09\x09\x63\x2d\
+\x39\x31\x2e\x35\x31\x38\x2c\x30\x2d\x31\x36\x36\x2e\x34\x2d\x37\
+\x34\x2e\x38\x38\x33\x2d\x31\x36\x36\x2e\x34\x2d\x31\x36\x36\x2e\
+\x34\x53\x31\x36\x34\x2e\x34\x38\x32\x2c\x38\x39\x2e\x36\x2c\x32\
+\x35\x36\x2c\x38\x39\x2e\x36\x53\x34\x32\x32\x2e\x34\x2c\x31\x36\
+\x34\x2e\x34\x38\x32\x2c\x34\x32\x32\x2e\x34\x2c\x32\x35\x36\x53\
+\x33\x34\x37\x2e\x35\x31\x38\x2c\x34\x32\x32\x2e\x34\x2c\x32\x35\
+\x36\x2c\x34\x32\x32\x2e\x34\x7a\x22\x2f\x3e\x0a\x09\x3c\x2f\x67\
+\x3e\x0a\x3c\x2f\x67\x3e\x0a\x3c\x2f\x73\x76\x67\x3e\x0a\
+\x00\x00\x01\x69\
+\x3c\
+\x73\x76\x67\x20\x78\x6d\x6c\x6e\x73\x3d\x22\x68\x74\x74\x70\x3a\
+\x2f\x2f\x77\x77\x77\x2e\x77\x33\x2e\x6f\x72\x67\x2f\x32\x30\x30\
+\x30\x2f\x73\x76\x67\x22\x20\x77\x69\x64\x74\x68\x3d\x22\x35\x31\
+\x32\x70\x78\x22\x20\x68\x65\x69\x67\x68\x74\x3d\x22\x35\x31\x32\
+\x70\x78\x22\x20\x76\x69\x65\x77\x42\x6f\x78\x3d\x22\x30\x20\x30\
+\x20\x35\x31\x32\x20\x35\x31\x32\x22\x3e\x3c\x67\x20\x74\x72\x61\
+\x6e\x73\x66\x6f\x72\x6d\x3d\x27\x6d\x61\x74\x72\x69\x78\x28\x32\
+\x34\x20\x30\x20\x30\x20\x32\x34\x20\x30\x20\x30\x29\x27\x3e\x3c\
+\x70\x61\x74\x68\x20\x64\x3d\x22\x4d\x34\x2e\x33\x34\x20\x31\x35\
+\x2e\x36\x36\x41\x37\x2e\x39\x37\x20\x37\x2e\x39\x37\x20\x30\x20\
+\x30\x20\x30\x20\x39\x20\x31\x37\x2e\x39\x34\x56\x31\x30\x48\x35\
+\x56\x38\x68\x34\x56\x35\x2e\x38\x33\x61\x33\x20\x33\x20\x30\x20\
+\x31\x20\x31\x20\x32\x20\x30\x56\x38\x68\x34\x76\x32\x68\x2d\x34\
+\x76\x37\x2e\x39\x34\x61\x37\x2e\x39\x37\x20\x37\x2e\x39\x37\x20\
+\x30\x20\x30\x20\x30\x20\x34\x2e\x36\x36\x2d\x32\x2e\x32\x38\x6c\
+\x2d\x31\x2e\x34\x32\x2d\x31\x2e\x34\x32\x68\x35\x2e\x36\x36\x6c\
+\x2d\x32\x2e\x38\x33\x20\x32\x2e\x38\x33\x61\x31\x30\x20\x31\x30\
+\x20\x30\x20\x30\x20\x31\x2d\x31\x34\x2e\x31\x34\x20\x30\x4c\x2e\
+\x31\x20\x31\x34\x2e\x32\x34\x68\x35\x2e\x36\x36\x6c\x2d\x31\x2e\
+\x34\x32\x20\x31\x2e\x34\x32\x7a\x4d\x31\x30\x20\x34\x61\x31\x20\
+\x31\x20\x30\x20\x31\x20\x30\x20\x30\x2d\x32\x20\x31\x20\x31\x20\
+\x30\x20\x30\x20\x30\x20\x30\x20\x32\x7a\x22\x2f\x3e\x3c\x2f\x67\
+\x3e\x3c\x2f\x73\x76\x67\x3e\x0a\
+\x00\x00\x03\xb7\
+\x3c\
+\x3f\x78\x6d\x6c\x20\x76\x65\x72\x73\x69\x6f\x6e\x3d\x22\x31\x2e\
+\x30\x22\x20\x65\x6e\x63\x6f\x64\x69\x6e\x67\x3d\x22\x75\x74\x66\
+\x2d\x38\x22\x3f\x3e\x0a\x3c\x21\x2d\x2d\x20\x47\x65\x6e\x65\x72\
+\x61\x74\x6f\x72\x3a\x20\x41\x64\x6f\x62\x65\x20\x49\x6c\x6c\x75\
+\x73\x74\x72\x61\x74\x6f\x72\x20\x31\x38\x2e\x31\x2e\x30\x2c\x20\
+\x53\x56\x47\x20\x45\x78\x70\x6f\x72\x74\x20\x50\x6c\x75\x67\x2d\
+\x49\x6e\x20\x2e\x20\x53\x56\x47\x20\x56\x65\x72\x73\x69\x6f\x6e\
+\x3a\x20\x36\x2e\x30\x30\x20\x42\x75\x69\x6c\x64\x20\x30\x29\x20\
+\x20\x2d\x2d\x3e\x0a\x3c\x21\x44\x4f\x43\x54\x59\x50\x45\x20\x73\
+\x76\x67\x20\x50\x55\x42\x4c\x49\x43\x20\x22\x2d\x2f\x2f\x57\x33\
+\x43\x2f\x2f\x44\x54\x44\x20\x53\x56\x47\x20\x31\x2e\x31\x2f\x2f\
+\x45\x4e\x22\x20\x22\x68\x74\x74\x70\x3a\x2f\x2f\x77\x77\x77\x2e\
+\x77\x33\x2e\x6f\x72\x67\x2f\x47\x72\x61\x70\x68\x69\x63\x73\x2f\
+\x53\x56\x47\x2f\x31\x2e\x31\x2f\x44\x54\x44\x2f\x73\x76\x67\x31\
+\x31\x2e\x64\x74\x64\x22\x3e\x0a\x3c\x73\x76\x67\x20\x76\x65\x72\
+\x73\x69\x6f\x6e\x3d\x22\x31\x2e\x31\x22\x20\x69\x64\x3d\x22\x4d\
+\x61\x67\x6e\x69\x66\x79\x69\x6e\x67\x5f\x67\x6c\x61\x73\x73\x22\
+\x20\x78\x6d\x6c\x6e\x73\x3d\x22\x68\x74\x74\x70\x3a\x2f\x2f\x77\
+\x77\x77\x2e\x77\x33\x2e\x6f\x72\x67\x2f\x32\x30\x30\x30\x2f\x73\
+\x76\x67\x22\x20\x78\x6d\x6c\x6e\x73\x3a\x78\x6c\x69\x6e\x6b\x3d\
+\x22\x68\x74\x74\x70\x3a\x2f\x2f\x77\x77\x77\x2e\x77\x33\x2e\x6f\
+\x72\x67\x2f\x31\x39\x39\x39\x2f\x78\x6c\x69\x6e\x6b\x22\x20\x78\
+\x3d\x22\x30\x70\x78\x22\x0a\x09\x20\x79\x3d\x22\x30\x70\x78\x22\
+\x20\x76\x69\x65\x77\x42\x6f\x78\x3d\x22\x30\x20\x30\x20\x35\x31\
+\x32\x20\x35\x31\x32\x22\x20\x65\x6e\x61\x62\x6c\x65\x2d\x62\x61\
+\x63\x6b\x67\x72\x6f\x75\x6e\x64\x3d\x22\x6e\x65\x77\x20\x30\x20\
+\x30\x20\x35\x31\x32\x20\x35\x31\x32\x22\x20\x78\x6d\x6c\x3a\x73\
+\x70\x61\x63\x65\x3d\x22\x70\x72\x65\x73\x65\x72\x76\x65\x22\x3e\
+\x0a\x3c\x67\x20\x74\x72\x61\x6e\x73\x66\x6f\x72\x6d\x3d\x27\x6d\
+\x61\x74\x72\x69\x78\x28\x32\x34\x20\x30\x20\x30\x20\x32\x34\x20\
+\x30\x20\x30\x29\x27\x3e\x0a\x3c\x70\x61\x74\x68\x20\x64\x3d\x22\
+\x4d\x31\x37\x2e\x35\x34\x35\x2c\x31\x35\x2e\x34\x36\x37\x6c\x2d\
+\x33\x2e\x37\x37\x39\x2d\x33\x2e\x37\x37\x39\x63\x30\x2e\x35\x37\
+\x2d\x30\x2e\x39\x33\x35\x2c\x30\x2e\x38\x39\x38\x2d\x32\x2e\x30\
+\x33\x35\x2c\x30\x2e\x38\x39\x38\x2d\x33\x2e\x32\x31\x63\x30\x2d\
+\x33\x2e\x34\x31\x37\x2d\x32\x2e\x39\x36\x31\x2d\x36\x2e\x33\x37\
+\x37\x2d\x36\x2e\x33\x37\x38\x2d\x36\x2e\x33\x37\x37\x0a\x09\x43\
+\x34\x2e\x38\x36\x39\x2c\x32\x2e\x31\x2c\x32\x2e\x31\x2c\x34\x2e\
+\x38\x37\x2c\x32\x2e\x31\x2c\x38\x2e\x32\x38\x37\x63\x30\x2c\x33\
+\x2e\x34\x31\x36\x2c\x32\x2e\x39\x36\x31\x2c\x36\x2e\x33\x37\x37\
+\x2c\x36\x2e\x33\x37\x37\x2c\x36\x2e\x33\x37\x37\x63\x31\x2e\x31\
+\x33\x37\x2c\x30\x2c\x32\x2e\x32\x2d\x30\x2e\x33\x30\x39\x2c\x33\
+\x2e\x31\x31\x35\x2d\x30\x2e\x38\x34\x34\x6c\x33\x2e\x37\x39\x39\
+\x2c\x33\x2e\x38\x30\x31\x0a\x09\x63\x30\x2e\x33\x37\x32\x2c\x30\
+\x2e\x33\x37\x31\x2c\x30\x2e\x39\x37\x35\x2c\x30\x2e\x33\x37\x31\
+\x2c\x31\x2e\x33\x34\x36\x2c\x30\x6c\x30\x2e\x39\x34\x33\x2d\x30\
+\x2e\x39\x34\x33\x43\x31\x38\x2e\x30\x35\x31\x2c\x31\x36\x2e\x33\
+\x30\x37\x2c\x31\x37\x2e\x39\x31\x36\x2c\x31\x35\x2e\x38\x33\x38\
+\x2c\x31\x37\x2e\x35\x34\x35\x2c\x31\x35\x2e\x34\x36\x37\x7a\x20\
+\x4d\x34\x2e\x30\x30\x34\x2c\x38\x2e\x32\x38\x37\x0a\x09\x63\x30\
+\x2d\x32\x2e\x33\x36\x36\x2c\x31\x2e\x39\x31\x37\x2d\x34\x2e\x32\
+\x38\x33\x2c\x34\x2e\x32\x38\x32\x2d\x34\x2e\x32\x38\x33\x63\x32\
+\x2e\x33\x36\x36\x2c\x30\x2c\x34\x2e\x34\x37\x34\x2c\x32\x2e\x31\
+\x30\x37\x2c\x34\x2e\x34\x37\x34\x2c\x34\x2e\x34\x37\x34\x63\x30\
+\x2c\x32\x2e\x33\x36\x35\x2d\x31\x2e\x39\x31\x38\x2c\x34\x2e\x32\
+\x38\x33\x2d\x34\x2e\x32\x38\x33\x2c\x34\x2e\x32\x38\x33\x0a\x09\
+\x43\x36\x2e\x31\x31\x31\x2c\x31\x32\x2e\x37\x36\x2c\x34\x2e\x30\
+\x30\x34\x2c\x31\x30\x2e\x36\x35\x32\x2c\x34\x2e\x30\x30\x34\x2c\
+\x38\x2e\x32\x38\x37\x7a\x22\x2f\x3e\x0a\x3c\x2f\x67\x3e\x0a\x3c\
+\x2f\x73\x76\x67\x3e\x0a\
+\x00\x00\x00\x6c\
+\x3c\
+\x73\x76\x67\x20\x78\x6d\x6c\x6e\x73\x3d\x22\x68\x74\x74\x70\x3a\
+\x2f\x2f\x77\x77\x77\x2e\x77\x33\x2e\x6f\x72\x67\x2f\x32\x30\x30\
+\x30\x2f\x73\x76\x67\x22\x20\x76\x69\x65\x77\x42\x6f\x78\x3d\x22\
+\x30\x20\x30\x20\x32\x30\x20\x32\x30\x22\x3e\x3c\x70\x61\x74\x68\
+\x20\x64\x3d\x22\x4d\x31\x38\x20\x31\x32\x76\x31\x48\x38\x76\x35\
+\x6c\x2d\x36\x2d\x36\x20\x36\x2d\x36\x76\x35\x68\x38\x56\x32\x68\
+\x32\x7a\x22\x2f\x3e\x3c\x2f\x73\x76\x67\x3e\
+\x00\x00\x02\xee\
+\x3c\
+\x3f\x78\x6d\x6c\x20\x76\x65\x72\x73\x69\x6f\x6e\x3d\x22\x31\x2e\
+\x30\x22\x20\x65\x6e\x63\x6f\x64\x69\x6e\x67\x3d\x22\x75\x74\x66\
+\x2d\x38\x22\x3f\x3e\x0a\x3c\x21\x2d\x2d\x20\x47\x65\x6e\x65\x72\
+\x61\x74\x6f\x72\x3a\x20\x41\x64\x6f\x62\x65\x20\x49\x6c\x6c\x75\
+\x73\x74\x72\x61\x74\x6f\x72\x20\x31\x36\x2e\x32\x2e\x31\x2c\x20\
+\x53\x56\x47\x20\x45\x78\x70\x6f\x72\x74\x20\x50\x6c\x75\x67\x2d\
+\x49\x6e\x20\x2e\x20\x53\x56\x47\x20\x56\x65\x72\x73\x69\x6f\x6e\
+\x3a\x20\x36\x2e\x30\x30\x20\x42\x75\x69\x6c\x64\x20\x30\x29\x20\
+\x20\x2d\x2d\x3e\x0a\x3c\x21\x44\x4f\x43\x54\x59\x50\x45\x20\x73\
+\x76\x67\x20\x50\x55\x42\x4c\x49\x43\x20\x22\x2d\x2f\x2f\x57\x33\
+\x43\x2f\x2f\x44\x54\x44\x20\x53\x56\x47\x20\x31\x2e\x31\x2f\x2f\
+\x45\x4e\x22\x20\x22\x68\x74\x74\x70\x3a\x2f\x2f\x77\x77\x77\x2e\
+\x77\x33\x2e\x6f\x72\x67\x2f\x47\x72\x61\x70\x68\x69\x63\x73\x2f\
+\x53\x56\x47\x2f\x31\x2e\x31\x2f\x44\x54\x44\x2f\x73\x76\x67\x31\
+\x31\x2e\x64\x74\x64\x22\x3e\x0a\x3c\x73\x76\x67\x20\x76\x65\x72\
+\x73\x69\x6f\x6e\x3d\x22\x31\x2e\x31\x22\x20\x69\x64\x3d\x22\x4c\
+\x61\x79\x65\x72\x5f\x31\x22\x20\x78\x6d\x6c\x6e\x73\x3d\x22\x68\
+\x74\x74\x70\x3a\x2f\x2f\x77\x77\x77\x2e\x77\x33\x2e\x6f\x72\x67\
+\x2f\x32\x30\x30\x30\x2f\x73\x76\x67\x22\x20\x78\x6d\x6c\x6e\x73\
+\x3a\x78\x6c\x69\x6e\x6b\x3d\x22\x68\x74\x74\x70\x3a\x2f\x2f\x77\
+\x77\x77\x2e\x77\x33\x2e\x6f\x72\x67\x2f\x31\x39\x39\x39\x2f\x78\
+\x6c\x69\x6e\x6b\x22\x20\x78\x3d\x22\x30\x70\x78\x22\x20\x79\x3d\
+\x22\x30\x70\x78\x22\x0a\x09\x20\x77\x69\x64\x74\x68\x3d\x22\x35\
+\x31\x32\x70\x78\x22\x20\x68\x65\x69\x67\x68\x74\x3d\x22\x35\x31\
+\x32\x70\x78\x22\x20\x76\x69\x65\x77\x42\x6f\x78\x3d\x22\x30\x20\
+\x30\x20\x35\x31\x32\x20\x35\x31\x32\x22\x20\x73\x74\x79\x6c\x65\
+\x3d\x22\x65\x6e\x61\x62\x6c\x65\x2d\x62\x61\x63\x6b\x67\x72\x6f\
+\x75\x6e\x64\x3a\x6e\x65\x77\x20\x30\x20\x30\x20\x35\x31\x32\x20\
+\x35\x31\x32\x3b\x22\x20\x78\x6d\x6c\x3a\x73\x70\x61\x63\x65\x3d\
+\x22\x70\x72\x65\x73\x65\x72\x76\x65\x22\x3e\x0a\x3c\x70\x61\x74\
+\x68\x20\x64\x3d\x22\x4d\x34\x31\x37\x2e\x34\x2c\x32\x32\x34\x48\
+\x32\x38\x38\x56\x39\x34\x2e\x36\x63\x30\x2d\x31\x36\x2e\x39\x2d\
+\x31\x34\x2e\x33\x2d\x33\x30\x2e\x36\x2d\x33\x32\x2d\x33\x30\x2e\
+\x36\x63\x2d\x31\x37\x2e\x37\x2c\x30\x2d\x33\x32\x2c\x31\x33\x2e\
+\x37\x2d\x33\x32\x2c\x33\x30\x2e\x36\x56\x32\x32\x34\x48\x39\x34\
+\x2e\x36\x43\x37\x37\x2e\x37\x2c\x32\x32\x34\x2c\x36\x34\x2c\x32\
+\x33\x38\x2e\x33\x2c\x36\x34\x2c\x32\x35\x36\x0a\x09\x63\x30\x2c\
+\x31\x37\x2e\x37\x2c\x31\x33\x2e\x37\x2c\x33\x32\x2c\x33\x30\x2e\
+\x36\x2c\x33\x32\x48\x32\x32\x34\x76\x31\x32\x39\x2e\x34\x63\x30\
+\x2c\x31\x36\x2e\x39\x2c\x31\x34\x2e\x33\x2c\x33\x30\x2e\x36\x2c\
+\x33\x32\x2c\x33\x30\x2e\x36\x63\x31\x37\x2e\x37\x2c\x30\x2c\x33\
+\x32\x2d\x31\x33\x2e\x37\x2c\x33\x32\x2d\x33\x30\x2e\x36\x56\x32\
+\x38\x38\x68\x31\x32\x39\x2e\x34\x63\x31\x36\x2e\x39\x2c\x30\x2c\
+\x33\x30\x2e\x36\x2d\x31\x34\x2e\x33\x2c\x33\x30\x2e\x36\x2d\x33\
+\x32\x0a\x09\x43\x34\x34\x38\x2c\x32\x33\x38\x2e\x33\x2c\x34\x33\
+\x34\x2e\x33\x2c\x32\x32\x34\x2c\x34\x31\x37\x2e\x34\x2c\x32\x32\
+\x34\x7a\x22\x2f\x3e\x0a\x3c\x2f\x73\x76\x67\x3e\x0a\
+\x00\x00\x05\x16\
+\x3c\
+\x3f\x78\x6d\x6c\x20\x76\x65\x72\x73\x69\x6f\x6e\x3d\x22\x31\x2e\
+\x30\x22\x20\x65\x6e\x63\x6f\x64\x69\x6e\x67\x3d\x22\x75\x74\x66\
+\x2d\x38\x22\x3f\x3e\x0a\x3c\x21\x2d\x2d\x20\x47\x65\x6e\x65\x72\
+\x61\x74\x6f\x72\x3a\x20\x41\x64\x6f\x62\x65\x20\x49\x6c\x6c\x75\
+\x73\x74\x72\x61\x74\x6f\x72\x20\x31\x36\x2e\x32\x2e\x31\x2c\x20\
+\x53\x56\x47\x20\x45\x78\x70\x6f\x72\x74\x20\x50\x6c\x75\x67\x2d\
+\x49\x6e\x20\x2e\x20\x53\x56\x47\x20\x56\x65\x72\x73\x69\x6f\x6e\
+\x3a\x20\x36\x2e\x30\x30\x20\x42\x75\x69\x6c\x64\x20\x30\x29\x20\
+\x20\x2d\x2d\x3e\x0a\x3c\x21\x44\x4f\x43\x54\x59\x50\x45\x20\x73\
+\x76\x67\x20\x50\x55\x42\x4c\x49\x43\x20\x22\x2d\x2f\x2f\x57\x33\
+\x43\x2f\x2f\x44\x54\x44\x20\x53\x56\x47\x20\x31\x2e\x31\x2f\x2f\
+\x45\x4e\x22\x20\x22\x68\x74\x74\x70\x3a\x2f\x2f\x77\x77\x77\x2e\
+\x77\x33\x2e\x6f\x72\x67\x2f\x47\x72\x61\x70\x68\x69\x63\x73\x2f\
+\x53\x56\x47\x2f\x31\x2e\x31\x2f\x44\x54\x44\x2f\x73\x76\x67\x31\
+\x31\x2e\x64\x74\x64\x22\x3e\x0a\x3c\x73\x76\x67\x20\x76\x65\x72\
+\x73\x69\x6f\x6e\x3d\x22\x31\x2e\x31\x22\x20\x69\x64\x3d\x22\x4c\
+\x61\x79\x65\x72\x5f\x31\x22\x20\x78\x6d\x6c\x6e\x73\x3d\x22\x68\
+\x74\x74\x70\x3a\x2f\x2f\x77\x77\x77\x2e\x77\x33\x2e\x6f\x72\x67\
+\x2f\x32\x30\x30\x30\x2f\x73\x76\x67\x22\x20\x78\x6d\x6c\x6e\x73\
+\x3a\x78\x6c\x69\x6e\x6b\x3d\x22\x68\x74\x74\x70\x3a\x2f\x2f\x77\
+\x77\x77\x2e\x77\x33\x2e\x6f\x72\x67\x2f\x31\x39\x39\x39\x2f\x78\
+\x6c\x69\x6e\x6b\x22\x20\x78\x3d\x22\x30\x70\x78\x22\x20\x79\x3d\
+\x22\x30\x70\x78\x22\x0a\x09\x20\x77\x69\x64\x74\x68\x3d\x22\x35\
+\x31\x32\x70\x78\x22\x20\x68\x65\x69\x67\x68\x74\x3d\x22\x35\x31\
+\x32\x70\x78\x22\x20\x76\x69\x65\x77\x42\x6f\x78\x3d\x22\x30\x20\
+\x30\x20\x35\x31\x32\x20\x35\x31\x32\x22\x20\x65\x6e\x61\x62\x6c\
+\x65\x2d\x62\x61\x63\x6b\x67\x72\x6f\x75\x6e\x64\x3d\x22\x6e\x65\
+\x77\x20\x30\x20\x30\x20\x35\x31\x32\x20\x35\x31\x32\x22\x20\x78\
+\x6d\x6c\x3a\x73\x70\x61\x63\x65\x3d\x22\x70\x72\x65\x73\x65\x72\
+\x76\x65\x22\x3e\x0a\x3c\x67\x20\x69\x64\x3d\x22\x49\x63\x6f\x6e\
+\x5f\x31\x32\x5f\x22\x3e\x0a\x09\x3c\x67\x3e\x0a\x09\x09\x3c\x70\
+\x61\x74\x68\x20\x64\x3d\x22\x4d\x32\x35\x36\x2c\x36\x34\x43\x31\
+\x35\x30\x2e\x34\x30\x31\x2c\x36\x34\x2c\x36\x34\x2c\x31\x35\x30\
+\x2e\x34\x30\x31\x2c\x36\x34\x2c\x32\x35\x36\x63\x30\x2c\x31\x30\
+\x35\x2e\x36\x30\x34\x2c\x38\x36\x2e\x34\x30\x31\x2c\x31\x39\x32\
+\x2c\x31\x39\x32\x2c\x31\x39\x32\x63\x31\x38\x2e\x31\x33\x36\x2c\
+\x30\x2c\x33\x32\x2d\x31\x33\x2e\x38\x36\x34\x2c\x33\x32\x2d\x33\
+\x32\x0a\x09\x09\x09\x63\x30\x2d\x38\x2e\x35\x33\x31\x2d\x33\x2e\
+\x31\x39\x38\x2d\x31\x36\x2d\x38\x2e\x35\x33\x31\x2d\x32\x31\x2e\
+\x33\x33\x33\x63\x2d\x35\x2e\x33\x33\x33\x2d\x35\x2e\x33\x33\x34\
+\x2d\x38\x2e\x35\x33\x31\x2d\x31\x32\x2e\x38\x30\x33\x2d\x38\x2e\
+\x35\x33\x31\x2d\x32\x31\x2e\x33\x33\x34\x63\x30\x2d\x31\x38\x2e\
+\x31\x33\x35\x2c\x31\x33\x2e\x38\x36\x34\x2d\x33\x32\x2c\x33\x32\
+\x2d\x33\x32\x68\x33\x38\x2e\x33\x39\x36\x0a\x09\x09\x09\x63\x35\
+\x38\x2e\x36\x36\x37\x2c\x30\x2c\x31\x30\x36\x2e\x36\x36\x37\x2d\
+\x34\x38\x2c\x31\x30\x36\x2e\x36\x36\x37\x2d\x31\x30\x36\x2e\x36\
+\x36\x36\x43\x34\x34\x38\x2c\x31\x34\x30\x2e\x38\x30\x32\x2c\x33\
+\x36\x31\x2e\x36\x30\x34\x2c\x36\x34\x2c\x32\x35\x36\x2c\x36\x34\
+\x7a\x20\x4d\x31\x33\x38\x2e\x36\x36\x37\x2c\x32\x35\x36\x63\x2d\
+\x31\x38\x2e\x31\x33\x36\x2c\x30\x2d\x33\x32\x2d\x31\x33\x2e\x38\
+\x36\x34\x2d\x33\x32\x2d\x33\x32\x73\x31\x33\x2e\x38\x36\x34\x2d\
+\x33\x32\x2c\x33\x32\x2d\x33\x32\x0a\x09\x09\x09\x63\x31\x38\x2e\
+\x31\x33\x35\x2c\x30\x2c\x33\x32\x2c\x31\x33\x2e\x38\x36\x34\x2c\
+\x33\x32\x2c\x33\x32\x53\x31\x35\x36\x2e\x38\x30\x32\x2c\x32\x35\
+\x36\x2c\x31\x33\x38\x2e\x36\x36\x37\x2c\x32\x35\x36\x7a\x20\x4d\
+\x32\x30\x32\x2e\x36\x36\x37\x2c\x31\x37\x30\x2e\x36\x36\x37\x63\
+\x2d\x31\x38\x2e\x31\x33\x36\x2c\x30\x2d\x33\x32\x2d\x31\x33\x2e\
+\x38\x36\x35\x2d\x33\x32\x2d\x33\x32\x63\x30\x2d\x31\x38\x2e\x31\
+\x33\x36\x2c\x31\x33\x2e\x38\x36\x34\x2d\x33\x32\x2c\x33\x32\x2d\
+\x33\x32\x0a\x09\x09\x09\x63\x31\x38\x2e\x31\x33\x35\x2c\x30\x2c\
+\x33\x32\x2c\x31\x33\x2e\x38\x36\x34\x2c\x33\x32\x2c\x33\x32\x43\
+\x32\x33\x34\x2e\x36\x36\x37\x2c\x31\x35\x36\x2e\x38\x30\x32\x2c\
+\x32\x32\x30\x2e\x38\x30\x32\x2c\x31\x37\x30\x2e\x36\x36\x37\x2c\
+\x32\x30\x32\x2e\x36\x36\x37\x2c\x31\x37\x30\x2e\x36\x36\x37\x7a\
+\x20\x4d\x33\x30\x39\x2e\x33\x33\x33\x2c\x31\x37\x30\x2e\x36\x36\
+\x37\x63\x2d\x31\x38\x2e\x31\x33\x35\x2c\x30\x2d\x33\x32\x2d\x31\
+\x33\x2e\x38\x36\x35\x2d\x33\x32\x2d\x33\x32\x0a\x09\x09\x09\x63\
+\x30\x2d\x31\x38\x2e\x31\x33\x36\x2c\x31\x33\x2e\x38\x36\x35\x2d\
+\x33\x32\x2c\x33\x32\x2d\x33\x32\x63\x31\x38\x2e\x31\x33\x36\x2c\
+\x30\x2c\x33\x32\x2c\x31\x33\x2e\x38\x36\x34\x2c\x33\x32\x2c\x33\
+\x32\x43\x33\x34\x31\x2e\x33\x33\x33\x2c\x31\x35\x36\x2e\x38\x30\
+\x32\x2c\x33\x32\x37\x2e\x34\x36\x39\x2c\x31\x37\x30\x2e\x36\x36\
+\x37\x2c\x33\x30\x39\x2e\x33\x33\x33\x2c\x31\x37\x30\x2e\x36\x36\
+\x37\x7a\x20\x4d\x33\x37\x33\x2e\x33\x33\x33\x2c\x32\x35\x36\x0a\
+\x09\x09\x09\x63\x2d\x31\x38\x2e\x31\x33\x35\x2c\x30\x2d\x33\x32\
+\x2d\x31\x33\x2e\x38\x36\x34\x2d\x33\x32\x2d\x33\x32\x73\x31\x33\
+\x2e\x38\x36\x35\x2d\x33\x32\x2c\x33\x32\x2d\x33\x32\x63\x31\x38\
+\x2e\x31\x33\x36\x2c\x30\x2c\x33\x32\x2c\x31\x33\x2e\x38\x36\x34\
+\x2c\x33\x32\x2c\x33\x32\x53\x33\x39\x31\x2e\x34\x36\x39\x2c\x32\
+\x35\x36\x2c\x33\x37\x33\x2e\x33\x33\x33\x2c\x32\x35\x36\x7a\x22\
+\x2f\x3e\x0a\x09\x3c\x2f\x67\x3e\x0a\x3c\x2f\x67\x3e\x0a\x3c\x2f\
+\x73\x76\x67\x3e\x0a\
+"
+
+qt_resource_name = b"\
+\x00\x05\
+\x00\x6f\xa6\x53\
+\x00\x69\
+\x00\x63\x00\x6f\x00\x6e\x00\x73\
+\x00\x11\
+\x01\x60\xbc\x47\
+\x00\x73\
+\x00\x6f\x00\x63\x00\x69\x00\x61\x00\x6c\x00\x2d\x00\x70\x00\x79\x00\x74\x00\x68\x00\x6f\x00\x6e\x00\x2e\x00\x73\x00\x76\x00\x67\
+\
+\x00\x0a\
+\x01\xca\x6d\x87\
+\x00\x62\
+\x00\x75\x00\x63\x00\x6b\x00\x65\x00\x74\x00\x2e\x00\x73\x00\x76\x00\x67\
+\x00\x16\
+\x01\xfb\x76\x27\
+\x00\x61\
+\x00\x6e\x00\x64\x00\x72\x00\x6f\x00\x69\x00\x64\x00\x2d\x00\x61\x00\x72\x00\x72\x00\x6f\x00\x77\x00\x2d\x00\x62\x00\x61\x00\x63\
+\x00\x6b\x00\x2e\x00\x73\x00\x76\x00\x67\
+\x00\x13\
+\x03\x24\x75\x47\
+\x00\x61\
+\x00\x6e\x00\x64\x00\x72\x00\x6f\x00\x69\x00\x64\x00\x2d\x00\x72\x00\x65\x00\x66\x00\x72\x00\x65\x00\x73\x00\x68\x00\x2e\x00\x73\
+\x00\x76\x00\x67\
+\x00\x1c\
+\x04\x66\xe1\x67\
+\x00\x63\
+\x00\x68\x00\x65\x00\x76\x00\x72\x00\x6f\x00\x6e\x00\x2d\x00\x77\x00\x69\x00\x74\x00\x68\x00\x2d\x00\x63\x00\x69\x00\x72\x00\x63\
+\x00\x6c\x00\x65\x00\x2d\x00\x6c\x00\x65\x00\x66\x00\x74\x00\x2e\x00\x73\x00\x76\x00\x67\
+\x00\x10\
+\x04\xa9\x22\xc7\
+\x00\x66\
+\x00\x69\x00\x6c\x00\x6c\x00\x65\x00\x64\x00\x62\x00\x75\x00\x63\x00\x6b\x00\x65\x00\x74\x00\x2e\x00\x73\x00\x76\x00\x67\
+\x00\x12\
+\x04\xb2\x21\x47\
+\x00\x61\
+\x00\x6e\x00\x64\x00\x72\x00\x6f\x00\x69\x00\x64\x00\x2d\x00\x65\x00\x78\x00\x70\x00\x61\x00\x6e\x00\x64\x00\x2e\x00\x73\x00\x76\
+\x00\x67\
+\x00\x08\
+\x04\xb2\x55\x47\
+\x00\x75\
+\x00\x6e\x00\x64\x00\x6f\x00\x2e\x00\x73\x00\x76\x00\x67\
+\x00\x0f\
+\x04\xf2\xa7\x87\
+\x00\x63\
+\x00\x6c\x00\x6f\x00\x73\x00\x65\x00\x64\x00\x63\x00\x75\x00\x72\x00\x76\x00\x65\x00\x2e\x00\x73\x00\x76\x00\x67\
+\x00\x0d\
+\x05\x20\xce\x87\
+\x00\x6f\
+\x00\x70\x00\x65\x00\x6e\x00\x63\x00\x75\x00\x72\x00\x76\x00\x65\x00\x2e\x00\x73\x00\x76\x00\x67\
+\x00\x08\
+\x05\xa8\x57\x87\
+\x00\x63\
+\x00\x6f\x00\x64\x00\x65\x00\x2e\x00\x73\x00\x76\x00\x67\
+\x00\x0e\
+\x05\xed\x38\x67\
+\x00\x61\
+\x00\x72\x00\x72\x00\x6f\x00\x77\x00\x2d\x00\x6d\x00\x6f\x00\x76\x00\x65\x00\x2e\x00\x73\x00\x76\x00\x67\
+\x00\x17\
+\x06\xc6\x02\xa7\
+\x00\x74\
+\x00\x72\x00\x69\x00\x61\x00\x6e\x00\x67\x00\x6c\x00\x65\x00\x2d\x00\x73\x00\x74\x00\x72\x00\x6f\x00\x6b\x00\x65\x00\x64\x00\x2d\
+\x00\x31\x00\x35\x00\x2e\x00\x73\x00\x76\x00\x67\
+\x00\x10\
+\x06\xe3\xaf\xe7\
+\x00\x61\
+\x00\x6e\x00\x64\x00\x72\x00\x6f\x00\x69\x00\x64\x00\x2d\x00\x68\x00\x61\x00\x6e\x00\x64\x00\x2e\x00\x73\x00\x76\x00\x67\
+\x00\x1d\
+\x06\xec\xf4\xc7\
+\x00\x63\
+\x00\x68\x00\x65\x00\x76\x00\x72\x00\x6f\x00\x6e\x00\x2d\x00\x77\x00\x69\x00\x74\x00\x68\x00\x2d\x00\x63\x00\x69\x00\x72\x00\x63\
+\x00\x6c\x00\x65\x00\x2d\x00\x72\x00\x69\x00\x67\x00\x68\x00\x74\x00\x2e\x00\x73\x00\x76\x00\x67\
+\x00\x0f\
+\x07\x0e\xc4\x87\
+\x00\x6f\
+\x00\x70\x00\x65\x00\x6e\x00\x70\x00\x6f\x00\x6c\x00\x79\x00\x67\x00\x6f\x00\x6e\x00\x2e\x00\x73\x00\x76\x00\x67\
+\x00\x17\
+\x07\x87\x48\x27\
+\x00\x61\
+\x00\x6e\x00\x64\x00\x72\x00\x6f\x00\x69\x00\x64\x00\x2d\x00\x66\x00\x6f\x00\x6c\x00\x64\x00\x65\x00\x72\x00\x2d\x00\x6f\x00\x70\
+\x00\x65\x00\x6e\x00\x2e\x00\x73\x00\x76\x00\x67\
+\x00\x12\
+\x08\x55\xef\xc7\
+\x00\x61\
+\x00\x6e\x00\x64\x00\x72\x00\x6f\x00\x69\x00\x64\x00\x2d\x00\x64\x00\x65\x00\x6c\x00\x65\x00\x74\x00\x65\x00\x2e\x00\x73\x00\x76\
+\x00\x67\
+\x00\x12\
+\x08\x79\x97\xe7\
+\x00\x61\
+\x00\x6e\x00\x64\x00\x72\x00\x6f\x00\x69\x00\x64\x00\x2d\x00\x63\x00\x61\x00\x6d\x00\x65\x00\x72\x00\x61\x00\x2e\x00\x73\x00\x76\
+\x00\x67\
+\x00\x10\
+\x08\x89\xfa\x47\
+\x00\x63\
+\x00\x65\x00\x6e\x00\x74\x00\x65\x00\x72\x00\x6f\x00\x72\x00\x69\x00\x67\x00\x69\x00\x6e\x00\x2e\x00\x73\x00\x76\x00\x67\
+\x00\x1c\
+\x08\x8a\x79\x07\
+\x00\x61\
+\x00\x6e\x00\x64\x00\x72\x00\x6f\x00\x69\x00\x64\x00\x2d\x00\x72\x00\x61\x00\x64\x00\x69\x00\x6f\x00\x2d\x00\x62\x00\x75\x00\x74\
+\x00\x74\x00\x6f\x00\x6e\x00\x2d\x00\x6f\x00\x66\x00\x66\x00\x2e\x00\x73\x00\x76\x00\x67\
+\x00\x08\
+\x08\xc8\x55\xe7\
+\x00\x73\
+\x00\x61\x00\x76\x00\x65\x00\x2e\x00\x73\x00\x76\x00\x67\
+\x00\x10\
+\x08\xe4\xaf\x47\
+\x00\x61\
+\x00\x6e\x00\x64\x00\x72\x00\x6f\x00\x69\x00\x64\x00\x2d\x00\x64\x00\x6f\x00\x6e\x00\x65\x00\x2e\x00\x73\x00\x76\x00\x67\
+\x00\x08\
+\x08\xf7\x57\x07\
+\x00\x67\
+\x00\x72\x00\x69\x00\x64\x00\x2e\x00\x73\x00\x76\x00\x67\
+\x00\x0f\
+\x09\x76\x60\xc7\
+\x00\x63\
+\x00\x6c\x00\x6f\x00\x73\x00\x65\x00\x2d\x00\x72\x00\x6f\x00\x75\x00\x6e\x00\x64\x00\x2e\x00\x73\x00\x76\x00\x67\
+\x00\x0a\
+\x0a\x2d\x1b\xc7\
+\x00\x63\
+\x00\x69\x00\x72\x00\x63\x00\x6c\x00\x65\x00\x2e\x00\x73\x00\x76\x00\x67\
+\x00\x19\
+\x0a\x43\x45\xc7\
+\x00\x61\
+\x00\x6e\x00\x64\x00\x72\x00\x6f\x00\x69\x00\x64\x00\x2d\x00\x61\x00\x72\x00\x72\x00\x6f\x00\x77\x00\x2d\x00\x66\x00\x6f\x00\x72\
+\x00\x77\x00\x61\x00\x72\x00\x64\x00\x2e\x00\x73\x00\x76\x00\x67\
+\x00\x0a\
+\x0a\xc8\x62\x67\
+\x00\x63\
+\x00\x65\x00\x6e\x00\x74\x00\x65\x00\x72\x00\x2e\x00\x73\x00\x76\x00\x67\
+\x00\x08\
+\x0b\x07\x57\xa7\
+\x00\x65\
+\x00\x64\x00\x69\x00\x74\x00\x2e\x00\x73\x00\x76\x00\x67\
+\x00\x09\
+\x0b\x9e\x89\x07\
+\x00\x63\
+\x00\x68\x00\x65\x00\x63\x00\x6b\x00\x2e\x00\x73\x00\x76\x00\x67\
+\x00\x08\
+\x0b\xb2\x55\xc7\
+\x00\x72\
+\x00\x65\x00\x64\x00\x6f\x00\x2e\x00\x73\x00\x76\x00\x67\
+\x00\x10\
+\x0c\x57\x65\x47\
+\x00\x61\
+\x00\x72\x00\x72\x00\x6f\x00\x77\x00\x2d\x00\x72\x00\x65\x00\x73\x00\x69\x00\x7a\x00\x65\x00\x2e\x00\x73\x00\x76\x00\x67\
+\x00\x12\
+\x0c\x5e\xd4\xa7\
+\x00\x61\
+\x00\x6e\x00\x64\x00\x72\x00\x6f\x00\x69\x00\x64\x00\x2d\x00\x6c\x00\x6f\x00\x63\x00\x61\x00\x74\x00\x65\x00\x2e\x00\x73\x00\x76\
+\x00\x67\
+\x00\x09\
+\x0c\x9b\x89\xe7\
+\x00\x62\
+\x00\x72\x00\x75\x00\x73\x00\x68\x00\x2e\x00\x73\x00\x76\x00\x67\
+\x00\x11\
+\x0c\xa7\xc7\x47\
+\x00\x63\
+\x00\x6c\x00\x6f\x00\x73\x00\x65\x00\x64\x00\x70\x00\x6f\x00\x6c\x00\x79\x00\x67\x00\x6f\x00\x6e\x00\x2e\x00\x73\x00\x76\x00\x67\
+\
+\x00\x11\
+\x0c\xdb\x38\xe7\
+\x00\x61\
+\x00\x6e\x00\x64\x00\x72\x00\x6f\x00\x69\x00\x64\x00\x2d\x00\x63\x00\x6c\x00\x6f\x00\x73\x00\x65\x00\x2e\x00\x73\x00\x76\x00\x67\
+\
+\x00\x08\
+\x0c\xf7\x55\x87\
+\x00\x74\
+\x00\x65\x00\x78\x00\x74\x00\x2e\x00\x73\x00\x76\x00\x67\
+\x00\x07\
+\x0c\xf8\x5a\x07\
+\x00\x65\
+\x00\x79\x00\x65\x00\x2e\x00\x73\x00\x76\x00\x67\
+\x00\x1b\
+\x0e\xb5\x68\xe7\
+\x00\x61\
+\x00\x6e\x00\x64\x00\x72\x00\x6f\x00\x69\x00\x64\x00\x2d\x00\x72\x00\x61\x00\x64\x00\x69\x00\x6f\x00\x2d\x00\x62\x00\x75\x00\x74\
+\x00\x74\x00\x6f\x00\x6e\x00\x2d\x00\x6f\x00\x6e\x00\x2e\x00\x73\x00\x76\x00\x67\
+\x00\x0a\
+\x0f\x68\x53\xe7\
+\x00\x61\
+\x00\x6e\x00\x63\x00\x68\x00\x6f\x00\x72\x00\x2e\x00\x73\x00\x76\x00\x67\
+\x00\x14\
+\x0f\xa5\xe0\xc7\
+\x00\x6d\
+\x00\x61\x00\x67\x00\x6e\x00\x69\x00\x66\x00\x79\x00\x69\x00\x6e\x00\x67\x00\x2d\x00\x67\x00\x6c\x00\x61\x00\x73\x00\x73\x00\x2e\
+\x00\x73\x00\x76\x00\x67\
+\x00\x15\
+\x0f\xc4\x59\xe7\
+\x00\x73\
+\x00\x75\x00\x62\x00\x64\x00\x69\x00\x72\x00\x65\x00\x63\x00\x74\x00\x6f\x00\x72\x00\x79\x00\x2d\x00\x6c\x00\x65\x00\x66\x00\x74\
+\x00\x2e\x00\x73\x00\x76\x00\x67\
+\x00\x0e\
+\x0f\xcb\xd5\xc7\
+\x00\x70\
+\x00\x6c\x00\x75\x00\x73\x00\x2d\x00\x72\x00\x6f\x00\x75\x00\x6e\x00\x64\x00\x2e\x00\x73\x00\x76\x00\x67\
+\x00\x19\
+\x0f\xef\x7b\xe7\
+\x00\x61\
+\x00\x6e\x00\x64\x00\x72\x00\x6f\x00\x69\x00\x64\x00\x2d\x00\x63\x00\x6f\x00\x6c\x00\x6f\x00\x72\x00\x2d\x00\x70\x00\x61\x00\x6c\
+\x00\x65\x00\x74\x00\x74\x00\x65\x00\x2e\x00\x73\x00\x76\x00\x67\
+"
+
+qt_resource_struct_v1 = b"\
+\x00\x00\x00\x00\x00\x02\x00\x00\x00\x01\x00\x00\x00\x01\
+\x00\x00\x00\x00\x00\x02\x00\x00\x00\x2c\x00\x00\x00\x02\
+\x00\x00\x00\x10\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\
+\x00\x00\x00\x38\x00\x00\x00\x00\x00\x01\x00\x00\x07\x6f\
+\x00\x00\x00\x52\x00\x00\x00\x00\x00\x01\x00\x00\x0d\x0f\
+\x00\x00\x00\x84\x00\x00\x00\x00\x00\x01\x00\x00\x0f\x85\
+\x00\x00\x00\xb0\x00\x00\x00\x00\x00\x01\x00\x00\x12\xa4\
+\x00\x00\x00\xee\x00\x01\x00\x00\x00\x01\x00\x00\x16\x90\
+\x00\x00\x01\x14\x00\x00\x00\x00\x00\x01\x00\x00\x18\xb3\
+\x00\x00\x01\x3e\x00\x00\x00\x00\x00\x01\x00\x00\x1b\xe1\
+\x00\x00\x01\x54\x00\x00\x00\x00\x00\x01\x00\x00\x1f\xfc\
+\x00\x00\x01\x78\x00\x00\x00\x00\x00\x01\x00\x00\x24\xa3\
+\x00\x00\x01\x98\x00\x00\x00\x00\x00\x01\x00\x00\x29\x1a\
+\x00\x00\x01\xae\x00\x00\x00\x00\x00\x01\x00\x00\x2d\xba\
+\x00\x00\x01\xd0\x00\x00\x00\x00\x00\x01\x00\x00\x30\x7f\
+\x00\x00\x02\x04\x00\x00\x00\x00\x00\x01\x00\x00\x35\x4d\
+\x00\x00\x02\x2a\x00\x00\x00\x00\x00\x01\x00\x00\x3b\x0c\
+\x00\x00\x02\x6a\x00\x00\x00\x00\x00\x01\x00\x00\x3e\xe9\
+\x00\x00\x02\x8e\x00\x00\x00\x00\x00\x01\x00\x00\x43\x00\
+\x00\x00\x02\xc2\x00\x00\x00\x00\x00\x01\x00\x00\x46\x4c\
+\x00\x00\x02\xec\x00\x00\x00\x00\x00\x01\x00\x00\x48\xe8\
+\x00\x00\x03\x16\x00\x00\x00\x00\x00\x01\x00\x00\x4c\x02\
+\x00\x00\x03\x3c\x00\x00\x00\x00\x00\x01\x00\x00\x50\x04\
+\x00\x00\x03\x7a\x00\x00\x00\x00\x00\x01\x00\x00\x52\xf8\
+\x00\x00\x03\x90\x00\x00\x00\x00\x00\x01\x00\x00\x55\x93\
+\x00\x00\x03\xb6\x00\x01\x00\x00\x00\x01\x00\x00\x58\x03\
+\x00\x00\x03\xcc\x00\x00\x00\x00\x00\x01\x00\x00\x59\xe4\
+\x00\x00\x03\xf0\x00\x00\x00\x00\x00\x01\x00\x00\x5d\x25\
+\x00\x00\x04\x0a\x00\x00\x00\x00\x00\x01\x00\x00\x60\x10\
+\x00\x00\x04\x42\x00\x00\x00\x00\x00\x01\x00\x00\x62\x86\
+\x00\x00\x04\x5c\x00\x00\x00\x00\x00\x01\x00\x00\x65\xe4\
+\x00\x00\x04\x72\x00\x00\x00\x00\x00\x01\x00\x00\x69\x47\
+\x00\x00\x04\x8a\x00\x00\x00\x00\x00\x01\x00\x00\x6c\x4e\
+\x00\x00\x04\xa0\x00\x00\x00\x00\x00\x01\x00\x00\x70\x94\
+\x00\x00\x04\xc6\x00\x00\x00\x00\x00\x01\x00\x00\x73\x0f\
+\x00\x00\x04\xf0\x00\x00\x00\x00\x00\x01\x00\x00\x77\x67\
+\x00\x00\x05\x08\x00\x00\x00\x00\x00\x01\x00\x00\x7b\x45\
+\x00\x00\x05\x30\x00\x00\x00\x00\x00\x01\x00\x00\x7f\x6b\
+\x00\x00\x05\x58\x00\x00\x00\x00\x00\x01\x00\x00\x82\x1a\
+\x00\x00\x05\x6e\x00\x00\x00\x00\x00\x01\x00\x00\x83\x3a\
+\x00\x00\x05\x82\x00\x00\x00\x00\x00\x01\x00\x00\x87\x1a\
+\x00\x00\x05\xbe\x00\x00\x00\x00\x00\x01\x00\x00\x8a\x5d\
+\x00\x00\x05\xd8\x00\x00\x00\x00\x00\x01\x00\x00\x8b\xca\
+\x00\x00\x06\x06\x00\x00\x00\x00\x00\x01\x00\x00\x8f\x85\
+\x00\x00\x06\x36\x00\x00\x00\x00\x00\x01\x00\x00\x8f\xf5\
+\x00\x00\x06\x58\x00\x00\x00\x00\x00\x01\x00\x00\x92\xe7\
+"
+
+qt_resource_struct_v2 = b"\
+\x00\x00\x00\x00\x00\x02\x00\x00\x00\x01\x00\x00\x00\x01\
+\x00\x00\x00\x00\x00\x00\x00\x00\
+\x00\x00\x00\x00\x00\x02\x00\x00\x00\x2c\x00\x00\x00\x02\
+\x00\x00\x00\x00\x00\x00\x00\x00\
+\x00\x00\x00\x10\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\
+\x00\x00\x01\x94\xec\x03\xf6\x15\
+\x00\x00\x00\x38\x00\x00\x00\x00\x00\x01\x00\x00\x07\x6f\
+\x00\x00\x01\x94\xec\x03\xf6\x13\
+\x00\x00\x00\x52\x00\x00\x00\x00\x00\x01\x00\x00\x0d\x0f\
+\x00\x00\x01\x94\xec\x03\xf6\x11\
+\x00\x00\x00\x84\x00\x00\x00\x00\x00\x01\x00\x00\x0f\x85\
+\x00\x00\x01\x94\xec\x03\xf6\x13\
+\x00\x00\x00\xb0\x00\x00\x00\x00\x00\x01\x00\x00\x12\xa4\
+\x00\x00\x01\x94\xec\x03\xf6\x14\
+\x00\x00\x00\xee\x00\x01\x00\x00\x00\x01\x00\x00\x16\x90\
+\x00\x00\x01\x94\xec\x03\xf6\x14\
+\x00\x00\x01\x14\x00\x00\x00\x00\x00\x01\x00\x00\x18\xb3\
+\x00\x00\x01\x94\xec\x03\xf6\x12\
+\x00\x00\x01\x3e\x00\x00\x00\x00\x00\x01\x00\x00\x1b\xe1\
+\x00\x00\x01\x94\xec\x03\xf6\x15\
+\x00\x00\x01\x54\x00\x00\x00\x00\x00\x01\x00\x00\x1f\xfc\
+\x00\x00\x01\x94\xec\x03\xf6\x14\
+\x00\x00\x01\x78\x00\x00\x00\x00\x00\x01\x00\x00\x24\xa3\
+\x00\x00\x01\x94\xec\x03\xf6\x15\
+\x00\x00\x01\x98\x00\x00\x00\x00\x00\x01\x00\x00\x29\x1a\
+\x00\x00\x01\x94\xec\x03\xf6\x14\
+\x00\x00\x01\xae\x00\x00\x00\x00\x00\x01\x00\x00\x2d\xba\
+\x00\x00\x01\x94\xec\x03\xf6\x13\
+\x00\x00\x01\xd0\x00\x00\x00\x00\x00\x01\x00\x00\x30\x7f\
+\x00\x00\x01\x94\xec\x03\xf6\x15\
+\x00\x00\x02\x04\x00\x00\x00\x00\x00\x01\x00\x00\x35\x4d\
+\x00\x00\x01\x94\xec\x03\xf6\x12\
+\x00\x00\x02\x2a\x00\x00\x00\x00\x00\x01\x00\x00\x3b\x0c\
+\x00\x00\x01\x94\xec\x03\xf6\x14\
+\x00\x00\x02\x6a\x00\x00\x00\x00\x00\x01\x00\x00\x3e\xe9\
+\x00\x00\x01\x94\xec\x03\xf6\x15\
+\x00\x00\x02\x8e\x00\x00\x00\x00\x00\x01\x00\x00\x43\x00\
+\x00\x00\x01\x94\xec\x03\xf6\x12\
+\x00\x00\x02\xc2\x00\x00\x00\x00\x00\x01\x00\x00\x46\x4c\
+\x00\x00\x01\x94\xec\x03\xf6\x12\
+\x00\x00\x02\xec\x00\x00\x00\x00\x00\x01\x00\x00\x48\xe8\
+\x00\x00\x01\x94\xec\x03\xf6\x12\
+\x00\x00\x03\x16\x00\x00\x00\x00\x00\x01\x00\x00\x4c\x02\
+\x00\x00\x01\x94\xec\x03\xf6\x13\
+\x00\x00\x03\x3c\x00\x00\x00\x00\x00\x01\x00\x00\x50\x04\
+\x00\x00\x01\x94\xec\x03\xf6\x12\
+\x00\x00\x03\x7a\x00\x00\x00\x00\x00\x01\x00\x00\x52\xf8\
+\x00\x00\x01\x94\xec\x03\xf6\x15\
+\x00\x00\x03\x90\x00\x00\x00\x00\x00\x01\x00\x00\x55\x93\
+\x00\x00\x01\x94\xec\x03\xf6\x12\
+\x00\x00\x03\xb6\x00\x01\x00\x00\x00\x01\x00\x00\x58\x03\
+\x00\x00\x01\x94\xec\x03\xf6\x14\
+\x00\x00\x03\xcc\x00\x00\x00\x00\x00\x01\x00\x00\x59\xe4\
+\x00\x00\x01\x94\xec\x03\xf6\x14\
+\x00\x00\x03\xf0\x00\x00\x00\x00\x00\x01\x00\x00\x5d\x25\
+\x00\x00\x01\x94\xec\x03\xf6\x14\
+\x00\x00\x04\x0a\x00\x00\x00\x00\x00\x01\x00\x00\x60\x10\
+\x00\x00\x01\x94\xec\x03\xf6\x12\
+\x00\x00\x04\x42\x00\x00\x00\x00\x00\x01\x00\x00\x62\x86\
+\x00\x00\x01\x94\xec\x03\xf6\x13\
+\x00\x00\x04\x5c\x00\x00\x00\x00\x00\x01\x00\x00\x65\xe4\
+\x00\x00\x01\x94\xec\x03\xf6\x14\
+\x00\x00\x04\x72\x00\x00\x00\x00\x00\x01\x00\x00\x69\x47\
+\x00\x00\x01\x94\xec\x03\xf6\x13\
+\x00\x00\x04\x8a\x00\x00\x00\x00\x00\x01\x00\x00\x6c\x4e\
+\x00\x00\x01\x94\xec\x03\xf6\x15\
+\x00\x00\x04\xa0\x00\x00\x00\x00\x00\x01\x00\x00\x70\x94\
+\x00\x00\x01\x94\xec\x03\xf6\x13\
+\x00\x00\x04\xc6\x00\x00\x00\x00\x00\x01\x00\x00\x73\x0f\
+\x00\x00\x01\x94\xec\x03\xf6\x12\
+\x00\x00\x04\xf0\x00\x00\x00\x00\x00\x01\x00\x00\x77\x67\
+\x00\x00\x01\x94\xec\x03\xf6\x13\
+\x00\x00\x05\x08\x00\x00\x00\x00\x00\x01\x00\x00\x7b\x45\
+\x00\x00\x01\x94\xec\x03\xf6\x14\
+\x00\x00\x05\x30\x00\x00\x00\x00\x00\x01\x00\x00\x7f\x6b\
+\x00\x00\x01\x94\xec\x03\xf6\x12\
+\x00\x00\x05\x58\x00\x00\x00\x00\x00\x01\x00\x00\x82\x1a\
+\x00\x00\x01\x94\xec\x03\xf6\x15\
+\x00\x00\x05\x6e\x00\x00\x00\x00\x00\x01\x00\x00\x83\x3a\
+\x00\x00\x01\x94\xec\x03\xf6\x14\
+\x00\x00\x05\x82\x00\x00\x00\x00\x00\x01\x00\x00\x87\x1a\
+\x00\x00\x01\x94\xec\x03\xf6\x13\
+\x00\x00\x05\xbe\x00\x00\x00\x00\x00\x01\x00\x00\x8a\x5d\
+\x00\x00\x01\x94\xec\x03\xf6\x11\
+\x00\x00\x05\xd8\x00\x00\x00\x00\x00\x01\x00\x00\x8b\xca\
+\x00\x00\x01\x94\xec\x03\xf6\x14\
+\x00\x00\x06\x06\x00\x00\x00\x00\x00\x01\x00\x00\x8f\x85\
+\x00\x00\x01\x94\xec\x03\xf6\x15\
+\x00\x00\x06\x36\x00\x00\x00\x00\x00\x01\x00\x00\x8f\xf5\
+\x00\x00\x01\x94\xec\x03\xf6\x15\
+\x00\x00\x06\x58\x00\x00\x00\x00\x00\x01\x00\x00\x92\xe7\
+\x00\x00\x01\x94\xec\x03\xf6\x12\
+"
+
+qt_version = [int(v) for v in QtCore.qVersion().split('.')]
+if qt_version < [5, 8, 0]:
+    rcc_version = 1
+    qt_resource_struct = qt_resource_struct_v1
+else:
+    rcc_version = 2
+    qt_resource_struct = qt_resource_struct_v2
+
+def qInitResources():
+    QtCore.qRegisterResourceData(rcc_version, qt_resource_struct, qt_resource_name, qt_resource_data)
+
+def qCleanupResources():
+    QtCore.qUnregisterResourceData(rcc_version, qt_resource_struct, qt_resource_name, qt_resource_data)
+
+qInitResources()


Property changes on: trunk/Master/texmf-dist/asymptote/GUI/xasyicons/icons_rc.py
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: trunk/Master/texmf-dist/asymptote/GUI/xasyqtui/custMatTransform.py
===================================================================
--- trunk/Master/texmf-dist/asymptote/GUI/xasyqtui/custMatTransform.py	                        (rev 0)
+++ trunk/Master/texmf-dist/asymptote/GUI/xasyqtui/custMatTransform.py	2025-02-10 16:49:00 UTC (rev 73847)
@@ -0,0 +1,175 @@
+# -*- coding: utf-8 -*-
+
+# Form implementation generated from reading ui file 'windows/custMatTransform.ui'
+#
+# Created by: PyQt5 UI code generator 5.15.10
+#
+# WARNING: Any manual changes made to this file will be lost when pyuic5 is
+# run again.  Do not edit this file unless you know what you are doing.
+
+
+from PyQt5 import QtCore, QtGui, QtWidgets
+
+
+class Ui_Dialog(object):
+    def setupUi(self, Dialog):
+        Dialog.setObjectName("Dialog")
+        Dialog.resize(500, 320)
+        sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Fixed, QtWidgets.QSizePolicy.Fixed)
+        sizePolicy.setHorizontalStretch(0)
+        sizePolicy.setVerticalStretch(0)
+        sizePolicy.setHeightForWidth(Dialog.sizePolicy().hasHeightForWidth())
+        Dialog.setSizePolicy(sizePolicy)
+        Dialog.setMinimumSize(QtCore.QSize(500, 320))
+        Dialog.setMaximumSize(QtCore.QSize(500, 320))
+        Dialog.setMouseTracking(False)
+        icon = QtGui.QIcon()
+        icon.addPixmap(QtGui.QPixmap(":/icons/android-expand.svg"), QtGui.QIcon.Normal, QtGui.QIcon.Off)
+        Dialog.setWindowIcon(icon)
+        Dialog.setSizeGripEnabled(True)
+        Dialog.setModal(False)
+        self.centralFrame = QtWidgets.QFrame(Dialog)
+        self.centralFrame.setGeometry(QtCore.QRect(20, 20, 461, 271))
+        sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Preferred, QtWidgets.QSizePolicy.Expanding)
+        sizePolicy.setHorizontalStretch(0)
+        sizePolicy.setVerticalStretch(0)
+        sizePolicy.setHeightForWidth(self.centralFrame.sizePolicy().hasHeightForWidth())
+        self.centralFrame.setSizePolicy(sizePolicy)
+        self.centralFrame.setBaseSize(QtCore.QSize(0, 0))
+        self.centralFrame.setObjectName("centralFrame")
+        self.verticalLayout_3 = QtWidgets.QVBoxLayout(self.centralFrame)
+        self.verticalLayout_3.setSpacing(4)
+        self.verticalLayout_3.setObjectName("verticalLayout_3")
+        self.horizontalLayout = QtWidgets.QHBoxLayout()
+        self.horizontalLayout.setObjectName("horizontalLayout")
+        self.horizontalLayout_3 = QtWidgets.QHBoxLayout()
+        self.horizontalLayout_3.setObjectName("horizontalLayout_3")
+        self.verticalLayout = QtWidgets.QVBoxLayout()
+        self.verticalLayout.setObjectName("verticalLayout")
+        self.label = QtWidgets.QLabel(self.centralFrame)
+        sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Preferred, QtWidgets.QSizePolicy.Fixed)
+        sizePolicy.setHorizontalStretch(0)
+        sizePolicy.setVerticalStretch(0)
+        sizePolicy.setHeightForWidth(self.label.sizePolicy().hasHeightForWidth())
+        self.label.setSizePolicy(sizePolicy)
+        self.label.setObjectName("label")
+        self.verticalLayout.addWidget(self.label)
+        self.gridFrame = QtWidgets.QFrame(self.centralFrame)
+        self.gridFrame.setFrameShape(QtWidgets.QFrame.Box)
+        self.gridFrame.setObjectName("gridFrame")
+        self.gridLayout = QtWidgets.QGridLayout(self.gridFrame)
+        self.gridLayout.setObjectName("gridLayout")
+        self.lineMat00 = QtWidgets.QLineEdit(self.gridFrame)
+        self.lineMat00.setMaximumSize(QtCore.QSize(70, 16777215))
+        self.lineMat00.setObjectName("lineMat00")
+        self.gridLayout.addWidget(self.lineMat00, 1, 0, 1, 1)
+        self.lineMat11 = QtWidgets.QLineEdit(self.gridFrame)
+        self.lineMat11.setMaximumSize(QtCore.QSize(70, 16777215))
+        self.lineMat11.setObjectName("lineMat11")
+        self.gridLayout.addWidget(self.lineMat11, 2, 1, 1, 1)
+        self.lineMat10 = QtWidgets.QLineEdit(self.gridFrame)
+        self.lineMat10.setMaximumSize(QtCore.QSize(70, 16777215))
+        self.lineMat10.setObjectName("lineMat10")
+        self.gridLayout.addWidget(self.lineMat10, 2, 0, 1, 1)
+        self.lineMat01 = QtWidgets.QLineEdit(self.gridFrame)
+        self.lineMat01.setMaximumSize(QtCore.QSize(70, 16777215))
+        self.lineMat01.setObjectName("lineMat01")
+        self.gridLayout.addWidget(self.lineMat01, 1, 1, 1, 1)
+        self.verticalLayout.addWidget(self.gridFrame)
+        self.horizontalLayout_3.addLayout(self.verticalLayout)
+        spacerItem = QtWidgets.QSpacerItem(40, 20, QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Minimum)
+        self.horizontalLayout_3.addItem(spacerItem)
+        self.verticalLayout_4 = QtWidgets.QVBoxLayout()
+        self.verticalLayout_4.setObjectName("verticalLayout_4")
+        self.label_3 = QtWidgets.QLabel(self.centralFrame)
+        sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Fixed, QtWidgets.QSizePolicy.Fixed)
+        sizePolicy.setHorizontalStretch(0)
+        sizePolicy.setVerticalStretch(0)
+        sizePolicy.setHeightForWidth(self.label_3.sizePolicy().hasHeightForWidth())
+        self.label_3.setSizePolicy(sizePolicy)
+        self.label_3.setObjectName("label_3")
+        self.verticalLayout_4.addWidget(self.label_3)
+        self.gridFrame_2 = QtWidgets.QFrame(self.centralFrame)
+        self.gridFrame_2.setFrameShape(QtWidgets.QFrame.Box)
+        self.gridFrame_2.setObjectName("gridFrame_2")
+        self.gridLayout_2 = QtWidgets.QGridLayout(self.gridFrame_2)
+        self.gridLayout_2.setObjectName("gridLayout_2")
+        self.lineMatTy = QtWidgets.QLineEdit(self.gridFrame_2)
+        self.lineMatTy.setMaximumSize(QtCore.QSize(70, 16777215))
+        self.lineMatTy.setObjectName("lineMatTy")
+        self.gridLayout_2.addWidget(self.lineMatTy, 2, 1, 1, 1)
+        self.lineMatTx = QtWidgets.QLineEdit(self.gridFrame_2)
+        self.lineMatTx.setMaximumSize(QtCore.QSize(70, 16777215))
+        self.lineMatTx.setObjectName("lineMatTx")
+        self.gridLayout_2.addWidget(self.lineMatTx, 1, 1, 1, 1)
+        self.verticalLayout_4.addWidget(self.gridFrame_2)
+        self.horizontalLayout_3.addLayout(self.verticalLayout_4)
+        self.horizontalLayout.addLayout(self.horizontalLayout_3)
+        spacerItem1 = QtWidgets.QSpacerItem(40, 20, QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Minimum)
+        self.horizontalLayout.addItem(spacerItem1)
+        self.verticalLayout_2 = QtWidgets.QVBoxLayout()
+        self.verticalLayout_2.setObjectName("verticalLayout_2")
+        self.label_2 = QtWidgets.QLabel(self.centralFrame)
+        self.label_2.setObjectName("label_2")
+        self.verticalLayout_2.addWidget(self.label_2)
+        self.imgPreview = QtWidgets.QLabel(self.centralFrame)
+        sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Minimum, QtWidgets.QSizePolicy.Minimum)
+        sizePolicy.setHorizontalStretch(0)
+        sizePolicy.setVerticalStretch(0)
+        sizePolicy.setHeightForWidth(self.imgPreview.sizePolicy().hasHeightForWidth())
+        self.imgPreview.setSizePolicy(sizePolicy)
+        self.imgPreview.setMinimumSize(QtCore.QSize(150, 150))
+        self.imgPreview.setBaseSize(QtCore.QSize(300, 300))
+        self.imgPreview.setFrameShape(QtWidgets.QFrame.Box)
+        self.imgPreview.setText("")
+        self.imgPreview.setObjectName("imgPreview")
+        self.verticalLayout_2.addWidget(self.imgPreview)
+        self.horizontalLayout.addLayout(self.verticalLayout_2)
+        self.verticalLayout_3.addLayout(self.horizontalLayout)
+        self.lblAnchor = QtWidgets.QLabel(self.centralFrame)
+        self.lblAnchor.setAlignment(QtCore.Qt.AlignRight|QtCore.Qt.AlignTrailing|QtCore.Qt.AlignVCenter)
+        self.lblAnchor.setObjectName("lblAnchor")
+        self.verticalLayout_3.addWidget(self.lblAnchor)
+        self.lblCoordsMode = QtWidgets.QLabel(self.centralFrame)
+        self.lblCoordsMode.setAlignment(QtCore.Qt.AlignRight|QtCore.Qt.AlignTrailing|QtCore.Qt.AlignVCenter)
+        self.lblCoordsMode.setObjectName("lblCoordsMode")
+        self.verticalLayout_3.addWidget(self.lblCoordsMode)
+        spacerItem2 = QtWidgets.QSpacerItem(20, 40, QtWidgets.QSizePolicy.Minimum, QtWidgets.QSizePolicy.Expanding)
+        self.verticalLayout_3.addItem(spacerItem2)
+        self.horizontalLayout_2 = QtWidgets.QHBoxLayout()
+        self.horizontalLayout_2.setObjectName("horizontalLayout_2")
+        spacerItem3 = QtWidgets.QSpacerItem(40, 20, QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Minimum)
+        self.horizontalLayout_2.addItem(spacerItem3)
+        self.btnReset = QtWidgets.QPushButton(self.centralFrame)
+        self.btnReset.setObjectName("btnReset")
+        self.horizontalLayout_2.addWidget(self.btnReset)
+        self.btnCancel = QtWidgets.QPushButton(self.centralFrame)
+        self.btnCancel.setObjectName("btnCancel")
+        self.horizontalLayout_2.addWidget(self.btnCancel)
+        self.btnAccept = QtWidgets.QPushButton(self.centralFrame)
+        self.btnAccept.setObjectName("btnAccept")
+        self.horizontalLayout_2.addWidget(self.btnAccept)
+        self.verticalLayout_3.addLayout(self.horizontalLayout_2)
+
+        self.retranslateUi(Dialog)
+        QtCore.QMetaObject.connectSlotsByName(Dialog)
+
+    def retranslateUi(self, Dialog):
+        _translate = QtCore.QCoreApplication.translate
+        Dialog.setWindowTitle(_translate("Dialog", "Set Custom Transformation"))
+        self.label.setText(_translate("Dialog", "Transformation Matrix"))
+        self.lineMat00.setText(_translate("Dialog", "1"))
+        self.lineMat11.setText(_translate("Dialog", "1"))
+        self.lineMat10.setText(_translate("Dialog", "0"))
+        self.lineMat01.setText(_translate("Dialog", "0"))
+        self.label_3.setText(_translate("Dialog", "Translation"))
+        self.lineMatTy.setText(_translate("Dialog", "0"))
+        self.lineMatTx.setText(_translate("Dialog", "0"))
+        self.label_2.setText(_translate("Dialog", "Preview:"))
+        self.imgPreview.setToolTip(_translate("Dialog", "Shows a red square if transformation determinant is negative."))
+        self.lblAnchor.setText(_translate("Dialog", "Anchor: Top Left"))
+        self.lblCoordsMode.setText(_translate("Dialog", "Coordinates: Global"))
+        self.btnReset.setText(_translate("Dialog", "Reset"))
+        self.btnCancel.setText(_translate("Dialog", "Cancel"))
+        self.btnAccept.setText(_translate("Dialog", "Accept"))
+from xasyicons import icons_rc


Property changes on: trunk/Master/texmf-dist/asymptote/GUI/xasyqtui/custMatTransform.py
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: trunk/Master/texmf-dist/asymptote/GUI/xasyqtui/labelTextEditor.py
===================================================================
--- trunk/Master/texmf-dist/asymptote/GUI/xasyqtui/labelTextEditor.py	                        (rev 0)
+++ trunk/Master/texmf-dist/asymptote/GUI/xasyqtui/labelTextEditor.py	2025-02-10 16:49:00 UTC (rev 73847)
@@ -0,0 +1,121 @@
+# -*- coding: utf-8 -*-
+
+# Form implementation generated from reading ui file 'windows/labelTextEditor.ui'
+#
+# Created by: PyQt5 UI code generator 5.15.10
+#
+# WARNING: Any manual changes made to this file will be lost when pyuic5 is
+# run again.  Do not edit this file unless you know what you are doing.
+
+
+from PyQt5 import QtCore, QtGui, QtWidgets
+
+
+class Ui_Dialog(object):
+    def setupUi(self, Dialog):
+        Dialog.setObjectName("Dialog")
+        Dialog.resize(473, 424)
+        self.verticalLayout = QtWidgets.QVBoxLayout(Dialog)
+        self.verticalLayout.setObjectName("verticalLayout")
+        self.frame = QtWidgets.QFrame(Dialog)
+        self.frame.setFrameShape(QtWidgets.QFrame.StyledPanel)
+        self.frame.setFrameShadow(QtWidgets.QFrame.Raised)
+        self.frame.setObjectName("frame")
+        self.verticalLayout_3 = QtWidgets.QVBoxLayout(self.frame)
+        self.verticalLayout_3.setObjectName("verticalLayout_3")
+        self.gridLayout = QtWidgets.QGridLayout()
+        self.gridLayout.setContentsMargins(-1, 0, -1, -1)
+        self.gridLayout.setObjectName("gridLayout")
+        spacerItem = QtWidgets.QSpacerItem(40, 20, QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Minimum)
+        self.gridLayout.addItem(spacerItem, 0, 2, 1, 1)
+        self.chkMathMode = QtWidgets.QCheckBox(self.frame)
+        self.chkMathMode.setObjectName("chkMathMode")
+        self.gridLayout.addWidget(self.chkMathMode, 0, 0, 1, 1)
+        self.cmbMathStyle = QtWidgets.QComboBox(self.frame)
+        self.cmbMathStyle.setEnabled(False)
+        sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Maximum, QtWidgets.QSizePolicy.Fixed)
+        sizePolicy.setHorizontalStretch(0)
+        sizePolicy.setVerticalStretch(0)
+        sizePolicy.setHeightForWidth(self.cmbMathStyle.sizePolicy().hasHeightForWidth())
+        self.cmbMathStyle.setSizePolicy(sizePolicy)
+        self.cmbMathStyle.setMinimumSize(QtCore.QSize(100, 0))
+        self.cmbMathStyle.setObjectName("cmbMathStyle")
+        self.cmbMathStyle.addItem("")
+        self.cmbMathStyle.addItem("")
+        self.cmbMathStyle.addItem("")
+        self.gridLayout.addWidget(self.cmbMathStyle, 0, 1, 1, 1)
+        self.verticalLayout_3.addLayout(self.gridLayout)
+        self.verticalLayout_2 = QtWidgets.QVBoxLayout()
+        self.verticalLayout_2.setObjectName("verticalLayout_2")
+        self.txtLabelEdit = QtWidgets.QPlainTextEdit(self.frame)
+        self.txtLabelEdit.setObjectName("txtLabelEdit")
+        self.verticalLayout_2.addWidget(self.txtLabelEdit)
+        self.verticalLayout_3.addLayout(self.verticalLayout_2)
+        self.verticalLayout_4 = QtWidgets.QVBoxLayout()
+        self.verticalLayout_4.setContentsMargins(-1, 0, -1, -1)
+        self.verticalLayout_4.setObjectName("verticalLayout_4")
+        self.label = QtWidgets.QLabel(self.frame)
+        self.label.setObjectName("label")
+        self.verticalLayout_4.addWidget(self.label)
+        self.lblLabelPreview = QtWidgets.QLabel(self.frame)
+        self.lblLabelPreview.setMinimumSize(QtCore.QSize(0, 100))
+        self.lblLabelPreview.setFrameShape(QtWidgets.QFrame.Box)
+        self.lblLabelPreview.setText("")
+        self.lblLabelPreview.setObjectName("lblLabelPreview")
+        self.verticalLayout_4.addWidget(self.lblLabelPreview)
+        self.verticalLayout_3.addLayout(self.verticalLayout_4)
+        self.horizontalLayout = QtWidgets.QHBoxLayout()
+        self.horizontalLayout.setObjectName("horizontalLayout")
+        spacerItem1 = QtWidgets.QSpacerItem(40, 20, QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Minimum)
+        self.horizontalLayout.addItem(spacerItem1)
+        self.btnGetText = QtWidgets.QPushButton(self.frame)
+        self.btnGetText.setMaximumSize(QtCore.QSize(32, 32))
+        self.btnGetText.setText("")
+        icon = QtGui.QIcon()
+        icon.addPixmap(QtGui.QPixmap(":/icons/text.svg"), QtGui.QIcon.Normal, QtGui.QIcon.Off)
+        self.btnGetText.setIcon(icon)
+        self.btnGetText.setFlat(True)
+        self.btnGetText.setObjectName("btnGetText")
+        self.horizontalLayout.addWidget(self.btnGetText)
+        self.btnPreview = QtWidgets.QPushButton(self.frame)
+        self.btnPreview.setMaximumSize(QtCore.QSize(32, 32))
+        self.btnPreview.setText("")
+        icon1 = QtGui.QIcon()
+        icon1.addPixmap(QtGui.QPixmap(":/icons/eye.svg"), QtGui.QIcon.Normal, QtGui.QIcon.Off)
+        self.btnPreview.setIcon(icon1)
+        self.btnPreview.setFlat(True)
+        self.btnPreview.setObjectName("btnPreview")
+        self.horizontalLayout.addWidget(self.btnPreview)
+        self.btnCancel = QtWidgets.QPushButton(self.frame)
+        self.btnCancel.setMaximumSize(QtCore.QSize(32, 32))
+        self.btnCancel.setText("")
+        icon2 = QtGui.QIcon()
+        icon2.addPixmap(QtGui.QPixmap(":/icons/android-close.svg"), QtGui.QIcon.Normal, QtGui.QIcon.Off)
+        self.btnCancel.setIcon(icon2)
+        self.btnCancel.setFlat(True)
+        self.btnCancel.setObjectName("btnCancel")
+        self.horizontalLayout.addWidget(self.btnCancel)
+        self.btnAccept = QtWidgets.QPushButton(self.frame)
+        self.btnAccept.setMaximumSize(QtCore.QSize(32, 32))
+        self.btnAccept.setText("")
+        icon3 = QtGui.QIcon()
+        icon3.addPixmap(QtGui.QPixmap(":/icons/android-done.svg"), QtGui.QIcon.Normal, QtGui.QIcon.Off)
+        self.btnAccept.setIcon(icon3)
+        self.btnAccept.setFlat(True)
+        self.btnAccept.setObjectName("btnAccept")
+        self.horizontalLayout.addWidget(self.btnAccept)
+        self.verticalLayout_3.addLayout(self.horizontalLayout)
+        self.verticalLayout.addWidget(self.frame)
+
+        self.retranslateUi(Dialog)
+        QtCore.QMetaObject.connectSlotsByName(Dialog)
+
+    def retranslateUi(self, Dialog):
+        _translate = QtCore.QCoreApplication.translate
+        Dialog.setWindowTitle(_translate("Dialog", "Dialog"))
+        self.chkMathMode.setText(_translate("Dialog", "Math Mode"))
+        self.cmbMathStyle.setItemText(0, _translate("Dialog", "Inline Style"))
+        self.cmbMathStyle.setItemText(1, _translate("Dialog", "Display Style"))
+        self.cmbMathStyle.setItemText(2, _translate("Dialog", "Script Style"))
+        self.label.setText(_translate("Dialog", "Preview"))
+from xasyicons import icons_rc


Property changes on: trunk/Master/texmf-dist/asymptote/GUI/xasyqtui/labelTextEditor.py
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: trunk/Master/texmf-dist/asymptote/GUI/xasyqtui/setCustomAnchor.py
===================================================================
--- trunk/Master/texmf-dist/asymptote/GUI/xasyqtui/setCustomAnchor.py	                        (rev 0)
+++ trunk/Master/texmf-dist/asymptote/GUI/xasyqtui/setCustomAnchor.py	2025-02-10 16:49:00 UTC (rev 73847)
@@ -0,0 +1,57 @@
+# -*- coding: utf-8 -*-
+
+# Form implementation generated from reading ui file 'windows/setCustomAnchor.ui'
+#
+# Created by: PyQt5 UI code generator 5.15.10
+#
+# WARNING: Any manual changes made to this file will be lost when pyuic5 is
+# run again.  Do not edit this file unless you know what you are doing.
+
+
+from PyQt5 import QtCore, QtGui, QtWidgets
+
+
+class Ui_Dialog(object):
+    def setupUi(self, Dialog):
+        Dialog.setObjectName("Dialog")
+        Dialog.resize(245, 161)
+        self.verticalLayoutWidget = QtWidgets.QWidget(Dialog)
+        self.verticalLayoutWidget.setGeometry(QtCore.QRect(20, 20, 201, 121))
+        self.verticalLayoutWidget.setObjectName("verticalLayoutWidget")
+        self.verticalLayout = QtWidgets.QVBoxLayout(self.verticalLayoutWidget)
+        self.verticalLayout.setContentsMargins(0, 0, 0, 0)
+        self.verticalLayout.setObjectName("verticalLayout")
+        self.formLayout = QtWidgets.QFormLayout()
+        self.formLayout.setFieldGrowthPolicy(QtWidgets.QFormLayout.AllNonFixedFieldsGrow)
+        self.formLayout.setObjectName("formLayout")
+        self.label = QtWidgets.QLabel(self.verticalLayoutWidget)
+        self.label.setObjectName("label")
+        self.formLayout.setWidget(1, QtWidgets.QFormLayout.LabelRole, self.label)
+        self.lineEditX = QtWidgets.QLineEdit(self.verticalLayoutWidget)
+        self.lineEditX.setObjectName("lineEditX")
+        self.formLayout.setWidget(1, QtWidgets.QFormLayout.FieldRole, self.lineEditX)
+        self.label_2 = QtWidgets.QLabel(self.verticalLayoutWidget)
+        self.label_2.setObjectName("label_2")
+        self.formLayout.setWidget(2, QtWidgets.QFormLayout.LabelRole, self.label_2)
+        self.lineEditY = QtWidgets.QLineEdit(self.verticalLayoutWidget)
+        self.lineEditY.setObjectName("lineEditY")
+        self.formLayout.setWidget(2, QtWidgets.QFormLayout.FieldRole, self.lineEditY)
+        self.verticalLayout.addLayout(self.formLayout)
+        self.buttonBox = QtWidgets.QDialogButtonBox(self.verticalLayoutWidget)
+        self.buttonBox.setOrientation(QtCore.Qt.Horizontal)
+        self.buttonBox.setStandardButtons(QtWidgets.QDialogButtonBox.Cancel|QtWidgets.QDialogButtonBox.Ok|QtWidgets.QDialogButtonBox.Reset)
+        self.buttonBox.setObjectName("buttonBox")
+        self.verticalLayout.addWidget(self.buttonBox)
+
+        self.retranslateUi(Dialog)
+        self.buttonBox.accepted.connect(Dialog.accept) # type: ignore
+        self.buttonBox.rejected.connect(Dialog.reject) # type: ignore
+        QtCore.QMetaObject.connectSlotsByName(Dialog)
+
+    def retranslateUi(self, Dialog):
+        _translate = QtCore.QCoreApplication.translate
+        Dialog.setWindowTitle(_translate("Dialog", "Set Custom Anchor"))
+        self.label.setText(_translate("Dialog", "X:"))
+        self.lineEditX.setText(_translate("Dialog", "0"))
+        self.label_2.setText(_translate("Dialog", "Y:"))
+        self.lineEditY.setText(_translate("Dialog", "0"))


Property changes on: trunk/Master/texmf-dist/asymptote/GUI/xasyqtui/setCustomAnchor.py
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: trunk/Master/texmf-dist/asymptote/GUI/xasyqtui/widg_addLabel.py
===================================================================
--- trunk/Master/texmf-dist/asymptote/GUI/xasyqtui/widg_addLabel.py	                        (rev 0)
+++ trunk/Master/texmf-dist/asymptote/GUI/xasyqtui/widg_addLabel.py	2025-02-10 16:49:00 UTC (rev 73847)
@@ -0,0 +1,142 @@
+# -*- coding: utf-8 -*-
+
+# Form implementation generated from reading ui file 'windows/widg_addLabel.ui'
+#
+# Created by: PyQt5 UI code generator 5.15.10
+#
+# WARNING: Any manual changes made to this file will be lost when pyuic5 is
+# run again.  Do not edit this file unless you know what you are doing.
+
+
+from PyQt5 import QtCore, QtGui, QtWidgets
+
+
+class Ui_Form(object):
+    def setupUi(self, Form):
+        Form.setObjectName("Form")
+        Form.setWindowModality(QtCore.Qt.NonModal)
+        Form.resize(599, 35)
+        sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Fixed, QtWidgets.QSizePolicy.Fixed)
+        sizePolicy.setHorizontalStretch(0)
+        sizePolicy.setVerticalStretch(0)
+        sizePolicy.setHeightForWidth(Form.sizePolicy().hasHeightForWidth())
+        Form.setSizePolicy(sizePolicy)
+        Form.setMinimumSize(QtCore.QSize(0, 35))
+        Form.setMaximumSize(QtCore.QSize(16777215, 35))
+        self.horizontalLayout_2 = QtWidgets.QHBoxLayout(Form)
+        self.horizontalLayout_2.setContentsMargins(0, 0, 0, 0)
+        self.horizontalLayout_2.setSpacing(0)
+        self.horizontalLayout_2.setObjectName("horizontalLayout_2")
+        self.horizontalLayout = QtWidgets.QHBoxLayout()
+        self.horizontalLayout.setObjectName("horizontalLayout")
+        self.txtLabelText = QtWidgets.QLineEdit(Form)
+        self.txtLabelText.setObjectName("txtLabelText")
+        self.horizontalLayout.addWidget(self.txtLabelText)
+        self.btnAdvancedEdit = QtWidgets.QPushButton(Form)
+        self.btnAdvancedEdit.setMaximumSize(QtCore.QSize(25, 25))
+        self.btnAdvancedEdit.setText("")
+        icon = QtGui.QIcon()
+        icon.addPixmap(QtGui.QPixmap(":/icons/edit.svg"), QtGui.QIcon.Normal, QtGui.QIcon.Off)
+        self.btnAdvancedEdit.setIcon(icon)
+        self.btnAdvancedEdit.setFlat(True)
+        self.btnAdvancedEdit.setObjectName("btnAdvancedEdit")
+        self.horizontalLayout.addWidget(self.btnAdvancedEdit)
+        self.label = QtWidgets.QLabel(Form)
+        self.label.setObjectName("label")
+        self.horizontalLayout.addWidget(self.label)
+        self.cmbAlign = QtWidgets.QComboBox(Form)
+        self.cmbAlign.setObjectName("cmbAlign")
+        self.cmbAlign.addItem("")
+        self.cmbAlign.addItem("")
+        self.cmbAlign.addItem("")
+        self.cmbAlign.addItem("")
+        self.cmbAlign.addItem("")
+        self.cmbAlign.addItem("")
+        self.cmbAlign.addItem("")
+        self.cmbAlign.addItem("")
+        self.cmbAlign.addItem("")
+        self.cmbAlign.addItem("")
+        self.horizontalLayout.addWidget(self.cmbAlign)
+        self.label_3 = QtWidgets.QLabel(Form)
+        self.label_3.setObjectName("label_3")
+        self.horizontalLayout.addWidget(self.label_3)
+        self.cmbFontSize = QtWidgets.QComboBox(Form)
+        sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Minimum, QtWidgets.QSizePolicy.Fixed)
+        sizePolicy.setHorizontalStretch(0)
+        sizePolicy.setVerticalStretch(0)
+        sizePolicy.setHeightForWidth(self.cmbFontSize.sizePolicy().hasHeightForWidth())
+        self.cmbFontSize.setSizePolicy(sizePolicy)
+        self.cmbFontSize.setEditable(True)
+        self.cmbFontSize.setObjectName("cmbFontSize")
+        self.cmbFontSize.addItem("")
+        self.cmbFontSize.addItem("")
+        self.cmbFontSize.addItem("")
+        self.cmbFontSize.addItem("")
+        self.cmbFontSize.addItem("")
+        self.cmbFontSize.addItem("")
+        self.cmbFontSize.addItem("")
+        self.cmbFontSize.addItem("")
+        self.cmbFontSize.addItem("")
+        self.cmbFontSize.addItem("")
+        self.cmbFontSize.addItem("")
+        self.horizontalLayout.addWidget(self.cmbFontSize)
+        self.label_2 = QtWidgets.QLabel(Form)
+        self.label_2.setObjectName("label_2")
+        self.horizontalLayout.addWidget(self.label_2)
+        self.txtShiftX = QtWidgets.QLineEdit(Form)
+        sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Maximum, QtWidgets.QSizePolicy.Fixed)
+        sizePolicy.setHorizontalStretch(0)
+        sizePolicy.setVerticalStretch(0)
+        sizePolicy.setHeightForWidth(self.txtShiftX.sizePolicy().hasHeightForWidth())
+        self.txtShiftX.setSizePolicy(sizePolicy)
+        self.txtShiftX.setMaximumSize(QtCore.QSize(50, 16777215))
+        self.txtShiftX.setObjectName("txtShiftX")
+        self.horizontalLayout.addWidget(self.txtShiftX)
+        self.txtShiftY = QtWidgets.QLineEdit(Form)
+        sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Maximum, QtWidgets.QSizePolicy.Fixed)
+        sizePolicy.setHorizontalStretch(0)
+        sizePolicy.setVerticalStretch(0)
+        sizePolicy.setHeightForWidth(self.txtShiftY.sizePolicy().hasHeightForWidth())
+        self.txtShiftY.setSizePolicy(sizePolicy)
+        self.txtShiftY.setMaximumSize(QtCore.QSize(50, 16777215))
+        self.txtShiftY.setObjectName("txtShiftY")
+        self.horizontalLayout.addWidget(self.txtShiftY)
+        spacerItem = QtWidgets.QSpacerItem(40, 20, QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Minimum)
+        self.horizontalLayout.addItem(spacerItem)
+        self.horizontalLayout_2.addLayout(self.horizontalLayout)
+
+        self.retranslateUi(Form)
+        QtCore.QMetaObject.connectSlotsByName(Form)
+
+    def retranslateUi(self, Form):
+        _translate = QtCore.QCoreApplication.translate
+        Form.setWindowTitle(_translate("Form", "Form"))
+        self.txtLabelText.setToolTip(_translate("Form", "Number of Sides"))
+        self.txtLabelText.setPlaceholderText(_translate("Form", "Text"))
+        self.label.setText(_translate("Form", "Align"))
+        self.cmbAlign.setItemText(0, _translate("Form", "Center"))
+        self.cmbAlign.setItemText(1, _translate("Form", "N"))
+        self.cmbAlign.setItemText(2, _translate("Form", "E"))
+        self.cmbAlign.setItemText(3, _translate("Form", "W"))
+        self.cmbAlign.setItemText(4, _translate("Form", "S"))
+        self.cmbAlign.setItemText(5, _translate("Form", "NW"))
+        self.cmbAlign.setItemText(6, _translate("Form", "NE"))
+        self.cmbAlign.setItemText(7, _translate("Form", "SW"))
+        self.cmbAlign.setItemText(8, _translate("Form", "SE"))
+        self.cmbAlign.setItemText(9, _translate("Form", "Custom"))
+        self.label_3.setText(_translate("Form", "Font Size"))
+        self.cmbFontSize.setItemText(0, _translate("Form", "-"))
+        self.cmbFontSize.setItemText(1, _translate("Form", "8"))
+        self.cmbFontSize.setItemText(2, _translate("Form", "9"))
+        self.cmbFontSize.setItemText(3, _translate("Form", "10"))
+        self.cmbFontSize.setItemText(4, _translate("Form", "11"))
+        self.cmbFontSize.setItemText(5, _translate("Form", "12"))
+        self.cmbFontSize.setItemText(6, _translate("Form", "14"))
+        self.cmbFontSize.setItemText(7, _translate("Form", "18"))
+        self.cmbFontSize.setItemText(8, _translate("Form", "24"))
+        self.cmbFontSize.setItemText(9, _translate("Form", "48"))
+        self.cmbFontSize.setItemText(10, _translate("Form", "72"))
+        self.label_2.setText(_translate("Form", "Custom Align"))
+        self.txtShiftX.setPlaceholderText(_translate("Form", "Shift X"))
+        self.txtShiftY.setPlaceholderText(_translate("Form", "Shift Y"))
+from xasyicons import icons_rc


Property changes on: trunk/Master/texmf-dist/asymptote/GUI/xasyqtui/widg_addLabel.py
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: trunk/Master/texmf-dist/asymptote/GUI/xasyqtui/widg_addPolyOpt.py
===================================================================
--- trunk/Master/texmf-dist/asymptote/GUI/xasyqtui/widg_addPolyOpt.py	                        (rev 0)
+++ trunk/Master/texmf-dist/asymptote/GUI/xasyqtui/widg_addPolyOpt.py	2025-02-10 16:49:00 UTC (rev 73847)
@@ -0,0 +1,61 @@
+# -*- coding: utf-8 -*-
+
+# Form implementation generated from reading ui file 'windows/widg_addPolyOpt.ui'
+#
+# Created by: PyQt5 UI code generator 5.15.10
+#
+# WARNING: Any manual changes made to this file will be lost when pyuic5 is
+# run again.  Do not edit this file unless you know what you are doing.
+
+
+from PyQt5 import QtCore, QtGui, QtWidgets
+
+
+class Ui_Form(object):
+    def setupUi(self, Form):
+        Form.setObjectName("Form")
+        Form.setWindowModality(QtCore.Qt.NonModal)
+        Form.resize(326, 35)
+        sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Fixed, QtWidgets.QSizePolicy.Fixed)
+        sizePolicy.setHorizontalStretch(0)
+        sizePolicy.setVerticalStretch(0)
+        sizePolicy.setHeightForWidth(Form.sizePolicy().hasHeightForWidth())
+        Form.setSizePolicy(sizePolicy)
+        Form.setMinimumSize(QtCore.QSize(0, 35))
+        Form.setMaximumSize(QtCore.QSize(16777215, 35))
+        self.horizontalLayout_2 = QtWidgets.QHBoxLayout(Form)
+        self.horizontalLayout_2.setContentsMargins(0, 0, 0, 0)
+        self.horizontalLayout_2.setSpacing(0)
+        self.horizontalLayout_2.setObjectName("horizontalLayout_2")
+        self.horizontalLayout = QtWidgets.QHBoxLayout()
+        self.horizontalLayout.setObjectName("horizontalLayout")
+        self.chkInscribed = QtWidgets.QCheckBox(Form)
+        self.chkInscribed.setObjectName("chkInscribed")
+        self.horizontalLayout.addWidget(self.chkInscribed)
+        spacerItem = QtWidgets.QSpacerItem(19, 20, QtWidgets.QSizePolicy.Fixed, QtWidgets.QSizePolicy.Minimum)
+        self.horizontalLayout.addItem(spacerItem)
+        self.label = QtWidgets.QLabel(Form)
+        sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Minimum, QtWidgets.QSizePolicy.Fixed)
+        sizePolicy.setHorizontalStretch(0)
+        sizePolicy.setVerticalStretch(0)
+        sizePolicy.setHeightForWidth(self.label.sizePolicy().hasHeightForWidth())
+        self.label.setSizePolicy(sizePolicy)
+        self.label.setObjectName("label")
+        self.horizontalLayout.addWidget(self.label)
+        self.txtSides = QtWidgets.QLineEdit(Form)
+        self.txtSides.setObjectName("txtSides")
+        self.horizontalLayout.addWidget(self.txtSides)
+        spacerItem1 = QtWidgets.QSpacerItem(40, 20, QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Minimum)
+        self.horizontalLayout.addItem(spacerItem1)
+        self.horizontalLayout_2.addLayout(self.horizontalLayout)
+
+        self.retranslateUi(Form)
+        QtCore.QMetaObject.connectSlotsByName(Form)
+
+    def retranslateUi(self, Form):
+        _translate = QtCore.QCoreApplication.translate
+        Form.setWindowTitle(_translate("Form", "Form"))
+        self.chkInscribed.setText(_translate("Form", "Start at Vertex"))
+        self.label.setText(_translate("Form", "Sides:  "))
+        self.txtSides.setToolTip(_translate("Form", "Number of Sides"))
+        self.txtSides.setPlaceholderText(_translate("Form", "Sides"))


Property changes on: trunk/Master/texmf-dist/asymptote/GUI/xasyqtui/widg_addPolyOpt.py
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: trunk/Master/texmf-dist/asymptote/GUI/xasyqtui/widg_editBezier.py
===================================================================
--- trunk/Master/texmf-dist/asymptote/GUI/xasyqtui/widg_editBezier.py	                        (rev 0)
+++ trunk/Master/texmf-dist/asymptote/GUI/xasyqtui/widg_editBezier.py	2025-02-10 16:49:00 UTC (rev 73847)
@@ -0,0 +1,96 @@
+# -*- coding: utf-8 -*-
+
+# Form implementation generated from reading ui file 'windows/widg_editBezier.ui'
+#
+# Created by: PyQt5 UI code generator 5.15.10
+#
+# WARNING: Any manual changes made to this file will be lost when pyuic5 is
+# run again.  Do not edit this file unless you know what you are doing.
+
+
+from PyQt5 import QtCore, QtGui, QtWidgets
+
+
+class Ui_Form(object):
+    def setupUi(self, Form):
+        Form.setObjectName("Form")
+        Form.setWindowModality(QtCore.Qt.NonModal)
+        Form.resize(692, 35)
+        sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Fixed, QtWidgets.QSizePolicy.Fixed)
+        sizePolicy.setHorizontalStretch(0)
+        sizePolicy.setVerticalStretch(0)
+        sizePolicy.setHeightForWidth(Form.sizePolicy().hasHeightForWidth())
+        Form.setSizePolicy(sizePolicy)
+        Form.setMinimumSize(QtCore.QSize(0, 35))
+        Form.setMaximumSize(QtCore.QSize(16777215, 35))
+        self.horizontalLayout_2 = QtWidgets.QHBoxLayout(Form)
+        self.horizontalLayout_2.setContentsMargins(0, 0, 0, 0)
+        self.horizontalLayout_2.setSpacing(0)
+        self.horizontalLayout_2.setObjectName("horizontalLayout_2")
+        self.horizontalLayout = QtWidgets.QHBoxLayout()
+        self.horizontalLayout.setObjectName("horizontalLayout")
+        self.cmbLockMode = QtWidgets.QComboBox(Form)
+        sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.MinimumExpanding, QtWidgets.QSizePolicy.Fixed)
+        sizePolicy.setHorizontalStretch(0)
+        sizePolicy.setVerticalStretch(0)
+        sizePolicy.setHeightForWidth(self.cmbLockMode.sizePolicy().hasHeightForWidth())
+        self.cmbLockMode.setSizePolicy(sizePolicy)
+        self.cmbLockMode.setObjectName("cmbLockMode")
+        self.cmbLockMode.addItem("")
+        self.cmbLockMode.addItem("")
+        self.cmbLockMode.addItem("")
+        self.horizontalLayout.addWidget(self.cmbLockMode)
+        spacerItem = QtWidgets.QSpacerItem(40, 20, QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Minimum)
+        self.horizontalLayout.addItem(spacerItem)
+        self.chkRecompute = QtWidgets.QCheckBox(Form)
+        sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.MinimumExpanding, QtWidgets.QSizePolicy.Fixed)
+        sizePolicy.setHorizontalStretch(0)
+        sizePolicy.setVerticalStretch(0)
+        sizePolicy.setHeightForWidth(self.chkRecompute.sizePolicy().hasHeightForWidth())
+        self.chkRecompute.setSizePolicy(sizePolicy)
+        self.chkRecompute.setObjectName("chkRecompute")
+        self.horizontalLayout.addWidget(self.chkRecompute)
+        self.btnForceRecompute = QtWidgets.QPushButton(Form)
+        self.btnForceRecompute.setObjectName("btnForceRecompute")
+        self.horizontalLayout.addWidget(self.btnForceRecompute)
+        self.btnOk = QtWidgets.QPushButton(Form)
+        sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Fixed, QtWidgets.QSizePolicy.Fixed)
+        sizePolicy.setHorizontalStretch(0)
+        sizePolicy.setVerticalStretch(0)
+        sizePolicy.setHeightForWidth(self.btnOk.sizePolicy().hasHeightForWidth())
+        self.btnOk.setSizePolicy(sizePolicy)
+        self.btnOk.setMaximumSize(QtCore.QSize(25, 25))
+        icon = QtGui.QIcon()
+        icon.addPixmap(QtGui.QPixmap(":/icons/check.svg"), QtGui.QIcon.Normal, QtGui.QIcon.Off)
+        self.btnOk.setIcon(icon)
+        self.btnOk.setFlat(True)
+        self.btnOk.setObjectName("btnOk")
+        self.horizontalLayout.addWidget(self.btnOk)
+        self.btnCancel = QtWidgets.QPushButton(Form)
+        sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Fixed, QtWidgets.QSizePolicy.Fixed)
+        sizePolicy.setHorizontalStretch(0)
+        sizePolicy.setVerticalStretch(0)
+        sizePolicy.setHeightForWidth(self.btnCancel.sizePolicy().hasHeightForWidth())
+        self.btnCancel.setSizePolicy(sizePolicy)
+        self.btnCancel.setMaximumSize(QtCore.QSize(25, 25))
+        icon1 = QtGui.QIcon()
+        icon1.addPixmap(QtGui.QPixmap(":/icons/close-round.svg"), QtGui.QIcon.Normal, QtGui.QIcon.Off)
+        self.btnCancel.setIcon(icon1)
+        self.btnCancel.setFlat(True)
+        self.btnCancel.setObjectName("btnCancel")
+        self.horizontalLayout.addWidget(self.btnCancel)
+        self.horizontalLayout_2.addLayout(self.horizontalLayout)
+
+        self.retranslateUi(Form)
+        self.cmbLockMode.setCurrentIndex(1)
+        QtCore.QMetaObject.connectSlotsByName(Form)
+
+    def retranslateUi(self, Form):
+        _translate = QtCore.QCoreApplication.translate
+        Form.setWindowTitle(_translate("Form", "Form"))
+        self.cmbLockMode.setItemText(0, _translate("Form", "No Lock"))
+        self.cmbLockMode.setItemText(1, _translate("Form", "Lock Angle"))
+        self.cmbLockMode.setItemText(2, _translate("Form", "Lock Angle & Scale"))
+        self.chkRecompute.setText(_translate("Form", "Recompute Path"))
+        self.btnForceRecompute.setText(_translate("Form", "Recompute Once"))
+from xasyicons import icons_rc


Property changes on: trunk/Master/texmf-dist/asymptote/GUI/xasyqtui/widg_editBezier.py
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: trunk/Master/texmf-dist/asymptote/GUI/xasyqtui/widgetPointEditor.py
===================================================================
--- trunk/Master/texmf-dist/asymptote/GUI/xasyqtui/widgetPointEditor.py	                        (rev 0)
+++ trunk/Master/texmf-dist/asymptote/GUI/xasyqtui/widgetPointEditor.py	2025-02-10 16:49:00 UTC (rev 73847)
@@ -0,0 +1,98 @@
+# -*- coding: utf-8 -*-
+
+# Form implementation generated from reading ui file 'windows/widgetPointEditor.ui'
+#
+# Created by: PyQt5 UI code generator 5.15.10
+#
+# WARNING: Any manual changes made to this file will be lost when pyuic5 is
+# run again.  Do not edit this file unless you know what you are doing.
+
+
+from PyQt5 import QtCore, QtGui, QtWidgets
+
+
+class Ui_Form(object):
+    def setupUi(self, Form):
+        Form.setObjectName("Form")
+        Form.resize(324, 67)
+        self.verticalLayout = QtWidgets.QVBoxLayout(Form)
+        self.verticalLayout.setObjectName("verticalLayout")
+        self.nameLabel = QtWidgets.QLabel(Form)
+        sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Preferred, QtWidgets.QSizePolicy.Fixed)
+        sizePolicy.setHorizontalStretch(0)
+        sizePolicy.setVerticalStretch(0)
+        sizePolicy.setHeightForWidth(self.nameLabel.sizePolicy().hasHeightForWidth())
+        self.nameLabel.setSizePolicy(sizePolicy)
+        self.nameLabel.setObjectName("nameLabel")
+        self.verticalLayout.addWidget(self.nameLabel)
+        self.horizontalLayout = QtWidgets.QHBoxLayout()
+        self.horizontalLayout.setObjectName("horizontalLayout")
+        self.lineXorA = QtWidgets.QLineEdit(Form)
+        self.lineXorA.setEnabled(False)
+        self.lineXorA.setReadOnly(False)
+        self.lineXorA.setObjectName("lineXorA")
+        self.horizontalLayout.addWidget(self.lineXorA)
+        self.lineYorM = QtWidgets.QLineEdit(Form)
+        self.lineYorM.setEnabled(False)
+        self.lineYorM.setAutoFillBackground(False)
+        self.lineYorM.setReadOnly(False)
+        self.lineYorM.setObjectName("lineYorM")
+        self.horizontalLayout.addWidget(self.lineYorM)
+        self.btnRelative = QtWidgets.QPushButton(Form)
+        self.btnRelative.setEnabled(False)
+        sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Fixed, QtWidgets.QSizePolicy.Fixed)
+        sizePolicy.setHorizontalStretch(0)
+        sizePolicy.setVerticalStretch(0)
+        sizePolicy.setHeightForWidth(self.btnRelative.sizePolicy().hasHeightForWidth())
+        self.btnRelative.setSizePolicy(sizePolicy)
+        self.btnRelative.setText("")
+        icon = QtGui.QIcon()
+        icon.addPixmap(QtGui.QPixmap(":/icons/android-locate.svg"), QtGui.QIcon.Normal, QtGui.QIcon.Off)
+        self.btnRelative.setIcon(icon)
+        self.btnRelative.setCheckable(True)
+        self.btnRelative.setFlat(False)
+        self.btnRelative.setObjectName("btnRelative")
+        self.horizontalLayout.addWidget(self.btnRelative)
+        self.btnPolar = QtWidgets.QPushButton(Form)
+        self.btnPolar.setEnabled(False)
+        sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Fixed, QtWidgets.QSizePolicy.Fixed)
+        sizePolicy.setHorizontalStretch(0)
+        sizePolicy.setVerticalStretch(0)
+        sizePolicy.setHeightForWidth(self.btnPolar.sizePolicy().hasHeightForWidth())
+        self.btnPolar.setSizePolicy(sizePolicy)
+        self.btnPolar.setText("")
+        icon1 = QtGui.QIcon()
+        icon1.addPixmap(QtGui.QPixmap(":/icons/android-radio-button-off.svg"), QtGui.QIcon.Normal, QtGui.QIcon.Off)
+        self.btnPolar.setIcon(icon1)
+        self.btnPolar.setCheckable(True)
+        self.btnPolar.setFlat(False)
+        self.btnPolar.setObjectName("btnPolar")
+        self.horizontalLayout.addWidget(self.btnPolar)
+        self.btnManualAdj = QtWidgets.QPushButton(Form)
+        sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Fixed, QtWidgets.QSizePolicy.Fixed)
+        sizePolicy.setHorizontalStretch(0)
+        sizePolicy.setVerticalStretch(0)
+        sizePolicy.setHeightForWidth(self.btnManualAdj.sizePolicy().hasHeightForWidth())
+        self.btnManualAdj.setSizePolicy(sizePolicy)
+        self.btnManualAdj.setText("")
+        icon2 = QtGui.QIcon()
+        icon2.addPixmap(QtGui.QPixmap(":/icons/edit.svg"), QtGui.QIcon.Normal, QtGui.QIcon.Off)
+        self.btnManualAdj.setIcon(icon2)
+        self.btnManualAdj.setCheckable(True)
+        self.btnManualAdj.setFlat(False)
+        self.btnManualAdj.setObjectName("btnManualAdj")
+        self.horizontalLayout.addWidget(self.btnManualAdj)
+        self.verticalLayout.addLayout(self.horizontalLayout)
+
+        self.retranslateUi(Form)
+        QtCore.QMetaObject.connectSlotsByName(Form)
+
+    def retranslateUi(self, Form):
+        _translate = QtCore.QCoreApplication.translate
+        Form.setWindowTitle(_translate("Form", "Form"))
+        self.nameLabel.setText(_translate("Form", "Left Control Point"))
+        self.lineXorA.setToolTip(_translate("Form", "X"))
+        self.lineXorA.setPlaceholderText(_translate("Form", "X"))
+        self.lineYorM.setToolTip(_translate("Form", "X"))
+        self.lineYorM.setPlaceholderText(_translate("Form", "Y"))
+from xasyicons import icons_rc


Property changes on: trunk/Master/texmf-dist/asymptote/GUI/xasyqtui/widgetPointEditor.py
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: trunk/Master/texmf-dist/asymptote/GUI/xasyqtui/window1.py
===================================================================
--- trunk/Master/texmf-dist/asymptote/GUI/xasyqtui/window1.py	                        (rev 0)
+++ trunk/Master/texmf-dist/asymptote/GUI/xasyqtui/window1.py	2025-02-10 16:49:00 UTC (rev 73847)
@@ -0,0 +1,1013 @@
+# -*- coding: utf-8 -*-
+
+# Form implementation generated from reading ui file 'windows/window1.ui'
+#
+# Created by: PyQt5 UI code generator 5.15.10
+#
+# WARNING: Any manual changes made to this file will be lost when pyuic5 is
+# run again.  Do not edit this file unless you know what you are doing.
+
+
+from PyQt5 import QtCore, QtGui, QtWidgets
+
+
+class Ui_MainWindow(object):
+    def setupUi(self, MainWindow):
+        MainWindow.setObjectName("MainWindow")
+        MainWindow.resize(1000, 600)
+        self.centralwidget = QtWidgets.QWidget(MainWindow)
+        sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Preferred, QtWidgets.QSizePolicy.Preferred)
+        sizePolicy.setHorizontalStretch(0)
+        sizePolicy.setVerticalStretch(0)
+        sizePolicy.setHeightForWidth(self.centralwidget.sizePolicy().hasHeightForWidth())
+        self.centralwidget.setSizePolicy(sizePolicy)
+        self.centralwidget.setMouseTracking(True)
+        self.centralwidget.setObjectName("centralwidget")
+        self.horizontalLayout_4 = QtWidgets.QHBoxLayout(self.centralwidget)
+        self.horizontalLayout_4.setContentsMargins(0, 0, 0, 0)
+        self.horizontalLayout_4.setSpacing(0)
+        self.horizontalLayout_4.setObjectName("horizontalLayout_4")
+        self.mainWidget = QtWidgets.QWidget(self.centralwidget)
+        sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Expanding)
+        sizePolicy.setHorizontalStretch(0)
+        sizePolicy.setVerticalStretch(0)
+        sizePolicy.setHeightForWidth(self.mainWidget.sizePolicy().hasHeightForWidth())
+        self.mainWidget.setSizePolicy(sizePolicy)
+        self.mainWidget.setMouseTracking(True)
+        self.mainWidget.setObjectName("mainWidget")
+        self.verticalLayout = QtWidgets.QVBoxLayout(self.mainWidget)
+        self.verticalLayout.setContentsMargins(2, 2, 2, 2)
+        self.verticalLayout.setSpacing(4)
+        self.verticalLayout.setObjectName("verticalLayout")
+        self.menuFrame = QtWidgets.QFrame(self.mainWidget)
+        sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Minimum)
+        sizePolicy.setHorizontalStretch(0)
+        sizePolicy.setVerticalStretch(0)
+        sizePolicy.setHeightForWidth(self.menuFrame.sizePolicy().hasHeightForWidth())
+        self.menuFrame.setSizePolicy(sizePolicy)
+        self.menuFrame.setFrameShape(QtWidgets.QFrame.NoFrame)
+        self.menuFrame.setObjectName("menuFrame")
+        self.horizontalLayout = QtWidgets.QHBoxLayout(self.menuFrame)
+        self.horizontalLayout.setSizeConstraint(QtWidgets.QLayout.SetMinimumSize)
+        self.horizontalLayout.setContentsMargins(0, 0, 0, 0)
+        self.horizontalLayout.setSpacing(4)
+        self.horizontalLayout.setObjectName("horizontalLayout")
+        self.btnUndo = QtWidgets.QPushButton(self.menuFrame)
+        self.btnUndo.setEnabled(False)
+        sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Minimum, QtWidgets.QSizePolicy.Minimum)
+        sizePolicy.setHorizontalStretch(0)
+        sizePolicy.setVerticalStretch(0)
+        sizePolicy.setHeightForWidth(self.btnUndo.sizePolicy().hasHeightForWidth())
+        self.btnUndo.setSizePolicy(sizePolicy)
+        self.btnUndo.setMaximumSize(QtCore.QSize(25, 25))
+        self.btnUndo.setBaseSize(QtCore.QSize(32, 32))
+        self.btnUndo.setText("")
+        icon = QtGui.QIcon()
+        icon.addPixmap(QtGui.QPixmap(":/icons/undo.svg"), QtGui.QIcon.Normal, QtGui.QIcon.Off)
+        self.btnUndo.setIcon(icon)
+        self.btnUndo.setIconSize(QtCore.QSize(16, 16))
+        self.btnUndo.setFlat(True)
+        self.btnUndo.setObjectName("btnUndo")
+        self.horizontalLayout.addWidget(self.btnUndo)
+        self.btnRedo = QtWidgets.QPushButton(self.menuFrame)
+        self.btnRedo.setEnabled(False)
+        sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Fixed, QtWidgets.QSizePolicy.Fixed)
+        sizePolicy.setHorizontalStretch(0)
+        sizePolicy.setVerticalStretch(0)
+        sizePolicy.setHeightForWidth(self.btnRedo.sizePolicy().hasHeightForWidth())
+        self.btnRedo.setSizePolicy(sizePolicy)
+        self.btnRedo.setMaximumSize(QtCore.QSize(25, 25))
+        self.btnRedo.setBaseSize(QtCore.QSize(32, 32))
+        self.btnRedo.setText("")
+        icon1 = QtGui.QIcon()
+        icon1.addPixmap(QtGui.QPixmap(":/icons/redo.svg"), QtGui.QIcon.Normal, QtGui.QIcon.Off)
+        self.btnRedo.setIcon(icon1)
+        self.btnRedo.setIconSize(QtCore.QSize(16, 16))
+        self.btnRedo.setFlat(True)
+        self.btnRedo.setObjectName("btnRedo")
+        self.horizontalLayout.addWidget(self.btnRedo)
+        self.btnLoadFile = QtWidgets.QPushButton(self.menuFrame)
+        sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Fixed)
+        sizePolicy.setHorizontalStretch(0)
+        sizePolicy.setVerticalStretch(0)
+        sizePolicy.setHeightForWidth(self.btnLoadFile.sizePolicy().hasHeightForWidth())
+        self.btnLoadFile.setSizePolicy(sizePolicy)
+        self.btnLoadFile.setMaximumSize(QtCore.QSize(25, 25))
+        self.btnLoadFile.setBaseSize(QtCore.QSize(32, 32))
+        self.btnLoadFile.setText("")
+        icon2 = QtGui.QIcon()
+        icon2.addPixmap(QtGui.QPixmap(":/icons/android-folder-open.svg"), QtGui.QIcon.Normal, QtGui.QIcon.Off)
+        self.btnLoadFile.setIcon(icon2)
+        self.btnLoadFile.setIconSize(QtCore.QSize(16, 16))
+        self.btnLoadFile.setFlat(True)
+        self.btnLoadFile.setObjectName("btnLoadFile")
+        self.horizontalLayout.addWidget(self.btnLoadFile)
+        self.btnSave = QtWidgets.QPushButton(self.menuFrame)
+        sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Fixed, QtWidgets.QSizePolicy.Fixed)
+        sizePolicy.setHorizontalStretch(0)
+        sizePolicy.setVerticalStretch(0)
+        sizePolicy.setHeightForWidth(self.btnSave.sizePolicy().hasHeightForWidth())
+        self.btnSave.setSizePolicy(sizePolicy)
+        self.btnSave.setMaximumSize(QtCore.QSize(25, 25))
+        self.btnSave.setBaseSize(QtCore.QSize(32, 32))
+        self.btnSave.setText("")
+        icon3 = QtGui.QIcon()
+        icon3.addPixmap(QtGui.QPixmap(":/icons/save.svg"), QtGui.QIcon.Normal, QtGui.QIcon.Off)
+        self.btnSave.setIcon(icon3)
+        self.btnSave.setIconSize(QtCore.QSize(16, 16))
+        self.btnSave.setFlat(True)
+        self.btnSave.setObjectName("btnSave")
+        self.horizontalLayout.addWidget(self.btnSave)
+        self.btnViewCode = QtWidgets.QPushButton(self.menuFrame)
+        sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Maximum, QtWidgets.QSizePolicy.Maximum)
+        sizePolicy.setHorizontalStretch(0)
+        sizePolicy.setVerticalStretch(0)
+        sizePolicy.setHeightForWidth(self.btnViewCode.sizePolicy().hasHeightForWidth())
+        self.btnViewCode.setSizePolicy(sizePolicy)
+        self.btnViewCode.setMaximumSize(QtCore.QSize(24, 24))
+        self.btnViewCode.setBaseSize(QtCore.QSize(20, 20))
+        self.btnViewCode.setText("")
+        icon4 = QtGui.QIcon()
+        icon4.addPixmap(QtGui.QPixmap(":/icons/code.svg"), QtGui.QIcon.Normal, QtGui.QIcon.Off)
+        self.btnViewCode.setIcon(icon4)
+        self.btnViewCode.setIconSize(QtCore.QSize(16, 16))
+        self.btnViewCode.setFlat(True)
+        self.btnViewCode.setObjectName("btnViewCode")
+        self.horizontalLayout.addWidget(self.btnViewCode)
+        self.btnQuickScreenshot = QtWidgets.QPushButton(self.menuFrame)
+        sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Fixed)
+        sizePolicy.setHorizontalStretch(0)
+        sizePolicy.setVerticalStretch(0)
+        sizePolicy.setHeightForWidth(self.btnQuickScreenshot.sizePolicy().hasHeightForWidth())
+        self.btnQuickScreenshot.setSizePolicy(sizePolicy)
+        self.btnQuickScreenshot.setMaximumSize(QtCore.QSize(25, 25))
+        self.btnQuickScreenshot.setBaseSize(QtCore.QSize(32, 32))
+        self.btnQuickScreenshot.setText("")
+        icon5 = QtGui.QIcon()
+        icon5.addPixmap(QtGui.QPixmap(":/icons/android-camera.svg"), QtGui.QIcon.Normal, QtGui.QIcon.Off)
+        self.btnQuickScreenshot.setIcon(icon5)
+        self.btnQuickScreenshot.setIconSize(QtCore.QSize(16, 16))
+        self.btnQuickScreenshot.setFlat(True)
+        self.btnQuickScreenshot.setObjectName("btnQuickScreenshot")
+        self.horizontalLayout.addWidget(self.btnQuickScreenshot)
+        spacerItem = QtWidgets.QSpacerItem(20, 20, QtWidgets.QSizePolicy.Minimum, QtWidgets.QSizePolicy.Minimum)
+        self.horizontalLayout.addItem(spacerItem)
+        self.btnDrawAxes = QtWidgets.QPushButton(self.menuFrame)
+        sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Maximum, QtWidgets.QSizePolicy.Maximum)
+        sizePolicy.setHorizontalStretch(0)
+        sizePolicy.setVerticalStretch(0)
+        sizePolicy.setHeightForWidth(self.btnDrawAxes.sizePolicy().hasHeightForWidth())
+        self.btnDrawAxes.setSizePolicy(sizePolicy)
+        self.btnDrawAxes.setMaximumSize(QtCore.QSize(25, 25))
+        self.btnDrawAxes.setBaseSize(QtCore.QSize(32, 32))
+        font = QtGui.QFont()
+        font.setFamily("Roboto")
+        font.setBold(True)
+        font.setWeight(75)
+        self.btnDrawAxes.setFont(font)
+        self.btnDrawAxes.setText("")
+        icon6 = QtGui.QIcon()
+        icon6.addPixmap(QtGui.QPixmap(":/icons/plus-round.svg"), QtGui.QIcon.Normal, QtGui.QIcon.Off)
+        self.btnDrawAxes.setIcon(icon6)
+        self.btnDrawAxes.setIconSize(QtCore.QSize(16, 16))
+        self.btnDrawAxes.setCheckable(True)
+        self.btnDrawAxes.setChecked(True)
+        self.btnDrawAxes.setFlat(True)
+        self.btnDrawAxes.setObjectName("btnDrawAxes")
+        self.horizontalLayout.addWidget(self.btnDrawAxes)
+        self.btnDrawGrid = QtWidgets.QPushButton(self.menuFrame)
+        sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Maximum, QtWidgets.QSizePolicy.Maximum)
+        sizePolicy.setHorizontalStretch(0)
+        sizePolicy.setVerticalStretch(0)
+        sizePolicy.setHeightForWidth(self.btnDrawGrid.sizePolicy().hasHeightForWidth())
+        self.btnDrawGrid.setSizePolicy(sizePolicy)
+        self.btnDrawGrid.setMaximumSize(QtCore.QSize(25, 25))
+        self.btnDrawGrid.setBaseSize(QtCore.QSize(32, 32))
+        font = QtGui.QFont()
+        font.setFamily("Roboto")
+        font.setBold(True)
+        font.setWeight(75)
+        self.btnDrawGrid.setFont(font)
+        self.btnDrawGrid.setText("")
+        icon7 = QtGui.QIcon()
+        icon7.addPixmap(QtGui.QPixmap(":/icons/grid.svg"), QtGui.QIcon.Normal, QtGui.QIcon.Off)
+        self.btnDrawGrid.setIcon(icon7)
+        self.btnDrawGrid.setIconSize(QtCore.QSize(16, 16))
+        self.btnDrawGrid.setCheckable(True)
+        self.btnDrawGrid.setChecked(False)
+        self.btnDrawGrid.setFlat(True)
+        self.btnDrawGrid.setObjectName("btnDrawGrid")
+        self.horizontalLayout.addWidget(self.btnDrawGrid)
+        self.btnSetZoom = QtWidgets.QPushButton(self.menuFrame)
+        sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Fixed)
+        sizePolicy.setHorizontalStretch(0)
+        sizePolicy.setVerticalStretch(0)
+        sizePolicy.setHeightForWidth(self.btnSetZoom.sizePolicy().hasHeightForWidth())
+        self.btnSetZoom.setSizePolicy(sizePolicy)
+        self.btnSetZoom.setMaximumSize(QtCore.QSize(25, 25))
+        self.btnSetZoom.setBaseSize(QtCore.QSize(32, 32))
+        self.btnSetZoom.setText("")
+        icon8 = QtGui.QIcon()
+        icon8.addPixmap(QtGui.QPixmap(":/icons/magnifying-glass.svg"), QtGui.QIcon.Normal, QtGui.QIcon.Off)
+        self.btnSetZoom.setIcon(icon8)
+        self.btnSetZoom.setIconSize(QtCore.QSize(16, 16))
+        self.btnSetZoom.setFlat(True)
+        self.btnSetZoom.setObjectName("btnSetZoom")
+        self.horizontalLayout.addWidget(self.btnSetZoom)
+        self.btnPanCenter = QtWidgets.QPushButton(self.menuFrame)
+        sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Fixed)
+        sizePolicy.setHorizontalStretch(0)
+        sizePolicy.setVerticalStretch(0)
+        sizePolicy.setHeightForWidth(self.btnPanCenter.sizePolicy().hasHeightForWidth())
+        self.btnPanCenter.setSizePolicy(sizePolicy)
+        self.btnPanCenter.setMaximumSize(QtCore.QSize(25, 25))
+        self.btnPanCenter.setBaseSize(QtCore.QSize(32, 32))
+        self.btnPanCenter.setText("")
+        icon9 = QtGui.QIcon()
+        icon9.addPixmap(QtGui.QPixmap(":/icons/center.svg"), QtGui.QIcon.Normal, QtGui.QIcon.Off)
+        self.btnPanCenter.setIcon(icon9)
+        self.btnPanCenter.setIconSize(QtCore.QSize(16, 16))
+        self.btnPanCenter.setFlat(True)
+        self.btnPanCenter.setObjectName("btnPanCenter")
+        self.horizontalLayout.addWidget(self.btnPanCenter)
+        self.btnResetPan = QtWidgets.QPushButton(self.menuFrame)
+        sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Fixed)
+        sizePolicy.setHorizontalStretch(0)
+        sizePolicy.setVerticalStretch(0)
+        sizePolicy.setHeightForWidth(self.btnResetPan.sizePolicy().hasHeightForWidth())
+        self.btnResetPan.setSizePolicy(sizePolicy)
+        self.btnResetPan.setMaximumSize(QtCore.QSize(25, 25))
+        self.btnResetPan.setBaseSize(QtCore.QSize(32, 32))
+        self.btnResetPan.setText("")
+        icon10 = QtGui.QIcon()
+        icon10.addPixmap(QtGui.QPixmap(":/icons/centerorigin.svg"), QtGui.QIcon.Normal, QtGui.QIcon.Off)
+        self.btnResetPan.setIcon(icon10)
+        self.btnResetPan.setIconSize(QtCore.QSize(16, 16))
+        self.btnResetPan.setFlat(True)
+        self.btnResetPan.setObjectName("btnResetPan")
+        self.horizontalLayout.addWidget(self.btnResetPan)
+        self.btnAlignX = QtWidgets.QPushButton(self.menuFrame)
+        sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Maximum, QtWidgets.QSizePolicy.Maximum)
+        sizePolicy.setHorizontalStretch(0)
+        sizePolicy.setVerticalStretch(0)
+        sizePolicy.setHeightForWidth(self.btnAlignX.sizePolicy().hasHeightForWidth())
+        self.btnAlignX.setSizePolicy(sizePolicy)
+        self.btnAlignX.setMaximumSize(QtCore.QSize(32, 25))
+        self.btnAlignX.setBaseSize(QtCore.QSize(32, 32))
+        font = QtGui.QFont()
+        font.setFamily("Roboto")
+        font.setBold(True)
+        font.setWeight(75)
+        self.btnAlignX.setFont(font)
+        self.btnAlignX.setIconSize(QtCore.QSize(16, 16))
+        self.btnAlignX.setCheckable(True)
+        self.btnAlignX.setFlat(True)
+        self.btnAlignX.setObjectName("btnAlignX")
+        self.horizontalLayout.addWidget(self.btnAlignX)
+        self.btnAlignY = QtWidgets.QPushButton(self.menuFrame)
+        sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Maximum, QtWidgets.QSizePolicy.Maximum)
+        sizePolicy.setHorizontalStretch(0)
+        sizePolicy.setVerticalStretch(0)
+        sizePolicy.setHeightForWidth(self.btnAlignY.sizePolicy().hasHeightForWidth())
+        self.btnAlignY.setSizePolicy(sizePolicy)
+        self.btnAlignY.setMaximumSize(QtCore.QSize(32, 25))
+        self.btnAlignY.setBaseSize(QtCore.QSize(32, 32))
+        font = QtGui.QFont()
+        font.setFamily("Roboto")
+        font.setBold(True)
+        font.setWeight(75)
+        self.btnAlignY.setFont(font)
+        self.btnAlignY.setIconSize(QtCore.QSize(16, 16))
+        self.btnAlignY.setCheckable(True)
+        self.btnAlignY.setFlat(True)
+        self.btnAlignY.setObjectName("btnAlignY")
+        self.horizontalLayout.addWidget(self.btnAlignY)
+        spacerItem1 = QtWidgets.QSpacerItem(20, 20, QtWidgets.QSizePolicy.Minimum, QtWidgets.QSizePolicy.Minimum)
+        self.horizontalLayout.addItem(spacerItem1)
+        self.btnSelectEdit = QtWidgets.QPushButton(self.menuFrame)
+        self.btnSelectEdit.setEnabled(True)
+        sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Maximum, QtWidgets.QSizePolicy.Maximum)
+        sizePolicy.setHorizontalStretch(0)
+        sizePolicy.setVerticalStretch(0)
+        sizePolicy.setHeightForWidth(self.btnSelectEdit.sizePolicy().hasHeightForWidth())
+        self.btnSelectEdit.setSizePolicy(sizePolicy)
+        self.btnSelectEdit.setMaximumSize(QtCore.QSize(25, 25))
+        self.btnSelectEdit.setText("")
+        icon11 = QtGui.QIcon()
+        icon11.addPixmap(QtGui.QPixmap(":/icons/edit.svg"), QtGui.QIcon.Normal, QtGui.QIcon.Off)
+        self.btnSelectEdit.setIcon(icon11)
+        self.btnSelectEdit.setIconSize(QtCore.QSize(16, 16))
+        self.btnSelectEdit.setCheckable(True)
+        self.btnSelectEdit.setFlat(True)
+        self.btnSelectEdit.setObjectName("btnSelectEdit")
+        self.horizontalLayout.addWidget(self.btnSelectEdit)
+        self.btnDeleteMode = QtWidgets.QPushButton(self.menuFrame)
+        self.btnDeleteMode.setEnabled(True)
+        sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Maximum, QtWidgets.QSizePolicy.Maximum)
+        sizePolicy.setHorizontalStretch(0)
+        sizePolicy.setVerticalStretch(0)
+        sizePolicy.setHeightForWidth(self.btnDeleteMode.sizePolicy().hasHeightForWidth())
+        self.btnDeleteMode.setSizePolicy(sizePolicy)
+        self.btnDeleteMode.setMaximumSize(QtCore.QSize(25, 25))
+        self.btnDeleteMode.setBaseSize(QtCore.QSize(32, 32))
+        self.btnDeleteMode.setText("")
+        icon12 = QtGui.QIcon()
+        icon12.addPixmap(QtGui.QPixmap(":/icons/android-delete.svg"), QtGui.QIcon.Normal, QtGui.QIcon.Off)
+        self.btnDeleteMode.setIcon(icon12)
+        self.btnDeleteMode.setIconSize(QtCore.QSize(16, 16))
+        self.btnDeleteMode.setCheckable(True)
+        self.btnDeleteMode.setFlat(True)
+        self.btnDeleteMode.setObjectName("btnDeleteMode")
+        self.horizontalLayout.addWidget(self.btnDeleteMode)
+        spacerItem2 = QtWidgets.QSpacerItem(20, 20, QtWidgets.QSizePolicy.Minimum, QtWidgets.QSizePolicy.Minimum)
+        self.horizontalLayout.addItem(spacerItem2)
+        self.btnPan = QtWidgets.QPushButton(self.menuFrame)
+        sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Fixed)
+        sizePolicy.setHorizontalStretch(0)
+        sizePolicy.setVerticalStretch(0)
+        sizePolicy.setHeightForWidth(self.btnPan.sizePolicy().hasHeightForWidth())
+        self.btnPan.setSizePolicy(sizePolicy)
+        self.btnPan.setMaximumSize(QtCore.QSize(25, 25))
+        self.btnPan.setBaseSize(QtCore.QSize(32, 32))
+        self.btnPan.setText("")
+        icon13 = QtGui.QIcon()
+        icon13.addPixmap(QtGui.QPixmap(":/icons/android-hand.svg"), QtGui.QIcon.Normal, QtGui.QIcon.Off)
+        self.btnPan.setIcon(icon13)
+        self.btnPan.setIconSize(QtCore.QSize(16, 16))
+        self.btnPan.setCheckable(True)
+        self.btnPan.setFlat(True)
+        self.btnPan.setObjectName("btnPan")
+        self.horizontalLayout.addWidget(self.btnPan)
+        self.btnTranslate = QtWidgets.QPushButton(self.menuFrame)
+        sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Fixed)
+        sizePolicy.setHorizontalStretch(0)
+        sizePolicy.setVerticalStretch(0)
+        sizePolicy.setHeightForWidth(self.btnTranslate.sizePolicy().hasHeightForWidth())
+        self.btnTranslate.setSizePolicy(sizePolicy)
+        self.btnTranslate.setMaximumSize(QtCore.QSize(25, 25))
+        self.btnTranslate.setBaseSize(QtCore.QSize(32, 32))
+        self.btnTranslate.setText("")
+        icon14 = QtGui.QIcon()
+        icon14.addPixmap(QtGui.QPixmap(":/icons/arrow-move.svg"), QtGui.QIcon.Normal, QtGui.QIcon.Off)
+        self.btnTranslate.setIcon(icon14)
+        self.btnTranslate.setIconSize(QtCore.QSize(16, 16))
+        self.btnTranslate.setCheckable(True)
+        self.btnTranslate.setChecked(True)
+        self.btnTranslate.setFlat(True)
+        self.btnTranslate.setObjectName("btnTranslate")
+        self.horizontalLayout.addWidget(self.btnTranslate)
+        self.btnScale = QtWidgets.QPushButton(self.menuFrame)
+        sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Maximum, QtWidgets.QSizePolicy.Maximum)
+        sizePolicy.setHorizontalStretch(0)
+        sizePolicy.setVerticalStretch(0)
+        sizePolicy.setHeightForWidth(self.btnScale.sizePolicy().hasHeightForWidth())
+        self.btnScale.setSizePolicy(sizePolicy)
+        self.btnScale.setMaximumSize(QtCore.QSize(25, 25))
+        self.btnScale.setBaseSize(QtCore.QSize(32, 32))
+        self.btnScale.setText("")
+        icon15 = QtGui.QIcon()
+        icon15.addPixmap(QtGui.QPixmap(":/icons/arrow-resize.svg"), QtGui.QIcon.Normal, QtGui.QIcon.Off)
+        self.btnScale.setIcon(icon15)
+        self.btnScale.setIconSize(QtCore.QSize(16, 16))
+        self.btnScale.setCheckable(True)
+        self.btnScale.setFlat(True)
+        self.btnScale.setObjectName("btnScale")
+        self.horizontalLayout.addWidget(self.btnScale)
+        self.btnRotate = QtWidgets.QPushButton(self.menuFrame)
+        sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Fixed)
+        sizePolicy.setHorizontalStretch(0)
+        sizePolicy.setVerticalStretch(0)
+        sizePolicy.setHeightForWidth(self.btnRotate.sizePolicy().hasHeightForWidth())
+        self.btnRotate.setSizePolicy(sizePolicy)
+        self.btnRotate.setMaximumSize(QtCore.QSize(25, 25))
+        self.btnRotate.setBaseSize(QtCore.QSize(32, 32))
+        self.btnRotate.setText("")
+        icon16 = QtGui.QIcon()
+        icon16.addPixmap(QtGui.QPixmap(":/icons/android-refresh.svg"), QtGui.QIcon.Normal, QtGui.QIcon.Off)
+        self.btnRotate.setIcon(icon16)
+        self.btnRotate.setIconSize(QtCore.QSize(16, 16))
+        self.btnRotate.setCheckable(True)
+        self.btnRotate.setFlat(True)
+        self.btnRotate.setObjectName("btnRotate")
+        self.horizontalLayout.addWidget(self.btnRotate)
+        spacerItem3 = QtWidgets.QSpacerItem(20, 20, QtWidgets.QSizePolicy.Minimum, QtWidgets.QSizePolicy.Minimum)
+        self.horizontalLayout.addItem(spacerItem3)
+        self.btnAnchor = QtWidgets.QPushButton(self.menuFrame)
+        sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Maximum, QtWidgets.QSizePolicy.Maximum)
+        sizePolicy.setHorizontalStretch(0)
+        sizePolicy.setVerticalStretch(0)
+        sizePolicy.setHeightForWidth(self.btnAnchor.sizePolicy().hasHeightForWidth())
+        self.btnAnchor.setSizePolicy(sizePolicy)
+        self.btnAnchor.setMaximumSize(QtCore.QSize(25, 25))
+        self.btnAnchor.setBaseSize(QtCore.QSize(32, 32))
+        self.btnAnchor.setText("")
+        icon17 = QtGui.QIcon()
+        icon17.addPixmap(QtGui.QPixmap(":/icons/anchor.svg"), QtGui.QIcon.Normal, QtGui.QIcon.Off)
+        self.btnAnchor.setIcon(icon17)
+        self.btnAnchor.setIconSize(QtCore.QSize(16, 16))
+        self.btnAnchor.setCheckable(True)
+        self.btnAnchor.setChecked(False)
+        self.btnAnchor.setFlat(True)
+        self.btnAnchor.setObjectName("btnAnchor")
+        self.horizontalLayout.addWidget(self.btnAnchor)
+        self.comboAnchor = QtWidgets.QComboBox(self.menuFrame)
+        sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Preferred, QtWidgets.QSizePolicy.Maximum)
+        sizePolicy.setHorizontalStretch(0)
+        sizePolicy.setVerticalStretch(0)
+        sizePolicy.setHeightForWidth(self.comboAnchor.sizePolicy().hasHeightForWidth())
+        self.comboAnchor.setSizePolicy(sizePolicy)
+        self.comboAnchor.setMinimumSize(QtCore.QSize(127, 0))
+        self.comboAnchor.setMaximumSize(QtCore.QSize(127, 25))
+        self.comboAnchor.setLayoutDirection(QtCore.Qt.LeftToRight)
+        self.comboAnchor.setEditable(False)
+        self.comboAnchor.setInsertPolicy(QtWidgets.QComboBox.InsertAtCurrent)
+        self.comboAnchor.setSizeAdjustPolicy(QtWidgets.QComboBox.AdjustToContentsOnFirstShow)
+        self.comboAnchor.setIconSize(QtCore.QSize(0, 0))
+        self.comboAnchor.setDuplicatesEnabled(False)
+        self.comboAnchor.setFrame(False)
+        self.comboAnchor.setModelColumn(0)
+        self.comboAnchor.setObjectName("comboAnchor")
+        self.comboAnchor.addItem("")
+        self.comboAnchor.addItem("")
+        self.comboAnchor.addItem("")
+        self.comboAnchor.addItem("")
+        self.comboAnchor.addItem("")
+        self.comboAnchor.addItem("")
+        self.comboAnchor.addItem("")
+        self.horizontalLayout.addWidget(self.comboAnchor)
+        self.btnToggleVisible = QtWidgets.QPushButton(self.menuFrame)
+        self.btnToggleVisible.setEnabled(False)
+        sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Maximum, QtWidgets.QSizePolicy.Maximum)
+        sizePolicy.setHorizontalStretch(0)
+        sizePolicy.setVerticalStretch(0)
+        sizePolicy.setHeightForWidth(self.btnToggleVisible.sizePolicy().hasHeightForWidth())
+        self.btnToggleVisible.setSizePolicy(sizePolicy)
+        self.btnToggleVisible.setMaximumSize(QtCore.QSize(25, 25))
+        self.btnToggleVisible.setBaseSize(QtCore.QSize(32, 32))
+        self.btnToggleVisible.setText("")
+        icon18 = QtGui.QIcon()
+        icon18.addPixmap(QtGui.QPixmap(":/icons/eye.svg"), QtGui.QIcon.Normal, QtGui.QIcon.Off)
+        self.btnToggleVisible.setIcon(icon18)
+        self.btnToggleVisible.setIconSize(QtCore.QSize(16, 16))
+        self.btnToggleVisible.setCheckable(False)
+        self.btnToggleVisible.setFlat(True)
+        self.btnToggleVisible.setObjectName("btnToggleVisible")
+        self.horizontalLayout.addWidget(self.btnToggleVisible)
+        self.btnCustTransform = QtWidgets.QPushButton(self.menuFrame)
+        sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Fixed)
+        sizePolicy.setHorizontalStretch(0)
+        sizePolicy.setVerticalStretch(0)
+        sizePolicy.setHeightForWidth(self.btnCustTransform.sizePolicy().hasHeightForWidth())
+        self.btnCustTransform.setSizePolicy(sizePolicy)
+        self.btnCustTransform.setMaximumSize(QtCore.QSize(25, 25))
+        self.btnCustTransform.setBaseSize(QtCore.QSize(32, 32))
+        self.btnCustTransform.setText("")
+        icon19 = QtGui.QIcon()
+        icon19.addPixmap(QtGui.QPixmap(":/icons/android-expand.svg"), QtGui.QIcon.Normal, QtGui.QIcon.Off)
+        self.btnCustTransform.setIcon(icon19)
+        self.btnCustTransform.setIconSize(QtCore.QSize(16, 16))
+        self.btnCustTransform.setFlat(True)
+        self.btnCustTransform.setObjectName("btnCustTransform")
+        self.horizontalLayout.addWidget(self.btnCustTransform)
+        self.btnSendBackwards = QtWidgets.QPushButton(self.menuFrame)
+        self.btnSendBackwards.setEnabled(False)
+        sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Fixed)
+        sizePolicy.setHorizontalStretch(0)
+        sizePolicy.setVerticalStretch(0)
+        sizePolicy.setHeightForWidth(self.btnSendBackwards.sizePolicy().hasHeightForWidth())
+        self.btnSendBackwards.setSizePolicy(sizePolicy)
+        self.btnSendBackwards.setMaximumSize(QtCore.QSize(25, 25))
+        self.btnSendBackwards.setBaseSize(QtCore.QSize(32, 32))
+        self.btnSendBackwards.setText("")
+        icon20 = QtGui.QIcon()
+        icon20.addPixmap(QtGui.QPixmap(":/icons/chevron-with-circle-left.svg"), QtGui.QIcon.Normal, QtGui.QIcon.Off)
+        self.btnSendBackwards.setIcon(icon20)
+        self.btnSendBackwards.setIconSize(QtCore.QSize(16, 16))
+        self.btnSendBackwards.setFlat(True)
+        self.btnSendBackwards.setObjectName("btnSendBackwards")
+        self.horizontalLayout.addWidget(self.btnSendBackwards)
+        self.btnSendForwards = QtWidgets.QPushButton(self.menuFrame)
+        self.btnSendForwards.setEnabled(False)
+        sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Fixed)
+        sizePolicy.setHorizontalStretch(0)
+        sizePolicy.setVerticalStretch(0)
+        sizePolicy.setHeightForWidth(self.btnSendForwards.sizePolicy().hasHeightForWidth())
+        self.btnSendForwards.setSizePolicy(sizePolicy)
+        self.btnSendForwards.setMaximumSize(QtCore.QSize(25, 25))
+        self.btnSendForwards.setBaseSize(QtCore.QSize(32, 32))
+        self.btnSendForwards.setText("")
+        icon21 = QtGui.QIcon()
+        icon21.addPixmap(QtGui.QPixmap(":/icons/chevron-with-circle-right.svg"), QtGui.QIcon.Normal, QtGui.QIcon.Off)
+        self.btnSendForwards.setIcon(icon21)
+        self.btnSendForwards.setIconSize(QtCore.QSize(16, 16))
+        self.btnSendForwards.setFlat(True)
+        self.btnSendForwards.setObjectName("btnSendForwards")
+        self.horizontalLayout.addWidget(self.btnSendForwards)
+        spacerItem4 = QtWidgets.QSpacerItem(40, 25, QtWidgets.QSizePolicy.Fixed, QtWidgets.QSizePolicy.Minimum)
+        self.horizontalLayout.addItem(spacerItem4)
+        self.btnUndo.raise_()
+        self.btnRedo.raise_()
+        self.btnLoadFile.raise_()
+        self.btnSave.raise_()
+        self.btnViewCode.raise_()
+        self.btnQuickScreenshot.raise_()
+        self.btnDrawAxes.raise_()
+        self.btnDrawGrid.raise_()
+        self.btnSetZoom.raise_()
+        self.btnPanCenter.raise_()
+        self.btnResetPan.raise_()
+        self.btnAlignX.raise_()
+        self.btnAlignY.raise_()
+        self.btnPan.raise_()
+        self.btnTranslate.raise_()
+        self.btnScale.raise_()
+        self.btnCustTransform.raise_()
+        self.btnSendBackwards.raise_()
+        self.btnSendForwards.raise_()
+        self.comboAnchor.raise_()
+        self.btnToggleVisible.raise_()
+        self.btnAnchor.raise_()
+        self.btnRotate.raise_()
+        self.btnSelectEdit.raise_()
+        self.btnDeleteMode.raise_()
+        self.verticalLayout.addWidget(self.menuFrame)
+        self.horizontalLayout_2 = QtWidgets.QHBoxLayout()
+        self.horizontalLayout_2.setSpacing(4)
+        self.horizontalLayout_2.setObjectName("horizontalLayout_2")
+        self.verticalLayout_2 = QtWidgets.QVBoxLayout()
+        self.verticalLayout_2.setSpacing(3)
+        self.verticalLayout_2.setObjectName("verticalLayout_2")
+        self.addOption = QtWidgets.QHBoxLayout()
+        self.addOption.setSizeConstraint(QtWidgets.QLayout.SetDefaultConstraint)
+        self.addOption.setContentsMargins(6, -1, -1, 0)
+        self.addOption.setSpacing(6)
+        self.addOption.setObjectName("addOption")
+        self.btnFill = QtWidgets.QPushButton(self.mainWidget)
+        sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Fixed)
+        sizePolicy.setHorizontalStretch(0)
+        sizePolicy.setVerticalStretch(0)
+        sizePolicy.setHeightForWidth(self.btnFill.sizePolicy().hasHeightForWidth())
+        self.btnFill.setSizePolicy(sizePolicy)
+        self.btnFill.setMaximumSize(QtCore.QSize(32, 32))
+        self.btnFill.setBaseSize(QtCore.QSize(32, 32))
+        self.btnFill.setAutoFillBackground(False)
+        self.btnFill.setStyleSheet("")
+        self.btnFill.setText("")
+        icon22 = QtGui.QIcon()
+        icon22.addPixmap(QtGui.QPixmap(":/icons/bucket.svg"), QtGui.QIcon.Normal, QtGui.QIcon.Off)
+        icon22.addPixmap(QtGui.QPixmap(":/icons/filledbucket.svg"), QtGui.QIcon.Normal, QtGui.QIcon.On)
+        self.btnFill.setIcon(icon22)
+        self.btnFill.setIconSize(QtCore.QSize(16, 16))
+        self.btnFill.setCheckable(True)
+        self.btnFill.setDefault(False)
+        self.btnFill.setFlat(True)
+        self.btnFill.setObjectName("btnFill")
+        self.addOption.addWidget(self.btnFill)
+        self.addOptionLayout = QtWidgets.QGridLayout()
+        self.addOptionLayout.setSpacing(6)
+        self.addOptionLayout.setObjectName("addOptionLayout")
+        self.addOption.addLayout(self.addOptionLayout)
+        spacerItem5 = QtWidgets.QSpacerItem(40, 35, QtWidgets.QSizePolicy.MinimumExpanding, QtWidgets.QSizePolicy.Minimum)
+        self.addOption.addItem(spacerItem5)
+        self.label = QtWidgets.QLabel(self.mainWidget)
+        self.label.setObjectName("label")
+        self.addOption.addWidget(self.label)
+        self.txtLineWidth = QtWidgets.QLineEdit(self.mainWidget)
+        sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Fixed, QtWidgets.QSizePolicy.Fixed)
+        sizePolicy.setHorizontalStretch(0)
+        sizePolicy.setVerticalStretch(0)
+        sizePolicy.setHeightForWidth(self.txtLineWidth.sizePolicy().hasHeightForWidth())
+        self.txtLineWidth.setSizePolicy(sizePolicy)
+        self.txtLineWidth.setMaximumSize(QtCore.QSize(75, 16777215))
+        self.txtLineWidth.setObjectName("txtLineWidth")
+        self.addOption.addWidget(self.txtLineWidth)
+        self.frameCurrColor = QtWidgets.QFrame(self.mainWidget)
+        sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Fixed, QtWidgets.QSizePolicy.Fixed)
+        sizePolicy.setHorizontalStretch(0)
+        sizePolicy.setVerticalStretch(0)
+        sizePolicy.setHeightForWidth(self.frameCurrColor.sizePolicy().hasHeightForWidth())
+        self.frameCurrColor.setSizePolicy(sizePolicy)
+        self.frameCurrColor.setMinimumSize(QtCore.QSize(15, 15))
+        self.frameCurrColor.setAutoFillBackground(False)
+        self.frameCurrColor.setStyleSheet("QFrame{ \n"
+"padding: 4.0;\n"
+"border-radius: 3.0; \n"
+"background: rgb(0, 0, 0)\n"
+"}")
+        self.frameCurrColor.setFrameShape(QtWidgets.QFrame.StyledPanel)
+        self.frameCurrColor.setFrameShadow(QtWidgets.QFrame.Sunken)
+        self.frameCurrColor.setObjectName("frameCurrColor")
+        self.addOption.addWidget(self.frameCurrColor)
+        self.btnSelectColor = QtWidgets.QPushButton(self.mainWidget)
+        sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Fixed)
+        sizePolicy.setHorizontalStretch(0)
+        sizePolicy.setVerticalStretch(0)
+        sizePolicy.setHeightForWidth(self.btnSelectColor.sizePolicy().hasHeightForWidth())
+        self.btnSelectColor.setSizePolicy(sizePolicy)
+        self.btnSelectColor.setMaximumSize(QtCore.QSize(25, 25))
+        self.btnSelectColor.setBaseSize(QtCore.QSize(32, 32))
+        self.btnSelectColor.setAutoFillBackground(False)
+        self.btnSelectColor.setStyleSheet("")
+        self.btnSelectColor.setText("")
+        icon23 = QtGui.QIcon()
+        icon23.addPixmap(QtGui.QPixmap(":/icons/android-color-palette.svg"), QtGui.QIcon.Normal, QtGui.QIcon.Off)
+        self.btnSelectColor.setIcon(icon23)
+        self.btnSelectColor.setIconSize(QtCore.QSize(16, 16))
+        self.btnSelectColor.setDefault(False)
+        self.btnSelectColor.setFlat(True)
+        self.btnSelectColor.setObjectName("btnSelectColor")
+        self.addOption.addWidget(self.btnSelectColor)
+        self.verticalLayout_2.addLayout(self.addOption)
+        self.horizontalLayout_7 = QtWidgets.QHBoxLayout()
+        self.horizontalLayout_7.setContentsMargins(-1, 6, -1, -1)
+        self.horizontalLayout_7.setSpacing(6)
+        self.horizontalLayout_7.setObjectName("horizontalLayout_7")
+        self.formFrame = QtWidgets.QFrame(self.mainWidget)
+        sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Maximum, QtWidgets.QSizePolicy.Preferred)
+        sizePolicy.setHorizontalStretch(0)
+        sizePolicy.setVerticalStretch(0)
+        sizePolicy.setHeightForWidth(self.formFrame.sizePolicy().hasHeightForWidth())
+        self.formFrame.setSizePolicy(sizePolicy)
+        self.formFrame.setFrameShape(QtWidgets.QFrame.NoFrame)
+        self.formFrame.setFrameShadow(QtWidgets.QFrame.Plain)
+        self.formFrame.setLineWidth(0)
+        self.formFrame.setObjectName("formFrame")
+        self.formLayout = QtWidgets.QFormLayout(self.formFrame)
+        self.formLayout.setContentsMargins(0, 0, 0, 0)
+        self.formLayout.setSpacing(0)
+        self.formLayout.setObjectName("formLayout")
+        self.btnOpenPoly = QtWidgets.QPushButton(self.formFrame)
+        self.btnOpenPoly.setEnabled(True)
+        sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Maximum, QtWidgets.QSizePolicy.Maximum)
+        sizePolicy.setHorizontalStretch(0)
+        sizePolicy.setVerticalStretch(0)
+        sizePolicy.setHeightForWidth(self.btnOpenPoly.sizePolicy().hasHeightForWidth())
+        self.btnOpenPoly.setSizePolicy(sizePolicy)
+        self.btnOpenPoly.setMaximumSize(QtCore.QSize(32, 32))
+        self.btnOpenPoly.setText("")
+        icon24 = QtGui.QIcon()
+        icon24.addPixmap(QtGui.QPixmap(":/icons/openpolygon.svg"), QtGui.QIcon.Normal, QtGui.QIcon.Off)
+        self.btnOpenPoly.setIcon(icon24)
+        self.btnOpenPoly.setIconSize(QtCore.QSize(16, 16))
+        self.btnOpenPoly.setCheckable(True)
+        self.btnOpenPoly.setFlat(True)
+        self.btnOpenPoly.setObjectName("btnOpenPoly")
+        self.formLayout.setWidget(4, QtWidgets.QFormLayout.LabelRole, self.btnOpenPoly)
+        self.btnClosedPoly = QtWidgets.QPushButton(self.formFrame)
+        self.btnClosedPoly.setEnabled(True)
+        sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Maximum, QtWidgets.QSizePolicy.Maximum)
+        sizePolicy.setHorizontalStretch(0)
+        sizePolicy.setVerticalStretch(0)
+        sizePolicy.setHeightForWidth(self.btnClosedPoly.sizePolicy().hasHeightForWidth())
+        self.btnClosedPoly.setSizePolicy(sizePolicy)
+        self.btnClosedPoly.setMaximumSize(QtCore.QSize(32, 32))
+        self.btnClosedPoly.setText("")
+        icon25 = QtGui.QIcon()
+        icon25.addPixmap(QtGui.QPixmap(":/icons/closedpolygon.svg"), QtGui.QIcon.Normal, QtGui.QIcon.Off)
+        self.btnClosedPoly.setIcon(icon25)
+        self.btnClosedPoly.setIconSize(QtCore.QSize(16, 16))
+        self.btnClosedPoly.setCheckable(True)
+        self.btnClosedPoly.setFlat(True)
+        self.btnClosedPoly.setObjectName("btnClosedPoly")
+        self.formLayout.setWidget(5, QtWidgets.QFormLayout.LabelRole, self.btnClosedPoly)
+        self.btnOpenCurve = QtWidgets.QPushButton(self.formFrame)
+        self.btnOpenCurve.setEnabled(True)
+        sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Maximum, QtWidgets.QSizePolicy.Maximum)
+        sizePolicy.setHorizontalStretch(0)
+        sizePolicy.setVerticalStretch(0)
+        sizePolicy.setHeightForWidth(self.btnOpenCurve.sizePolicy().hasHeightForWidth())
+        self.btnOpenCurve.setSizePolicy(sizePolicy)
+        self.btnOpenCurve.setMaximumSize(QtCore.QSize(32, 32))
+        self.btnOpenCurve.setText("")
+        icon26 = QtGui.QIcon()
+        icon26.addPixmap(QtGui.QPixmap(":/icons/opencurve.svg"), QtGui.QIcon.Normal, QtGui.QIcon.Off)
+        self.btnOpenCurve.setIcon(icon26)
+        self.btnOpenCurve.setIconSize(QtCore.QSize(16, 16))
+        self.btnOpenCurve.setCheckable(True)
+        self.btnOpenCurve.setFlat(True)
+        self.btnOpenCurve.setObjectName("btnOpenCurve")
+        self.formLayout.setWidget(6, QtWidgets.QFormLayout.LabelRole, self.btnOpenCurve)
+        self.btnClosedCurve = QtWidgets.QPushButton(self.formFrame)
+        self.btnClosedCurve.setEnabled(True)
+        sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Maximum, QtWidgets.QSizePolicy.Maximum)
+        sizePolicy.setHorizontalStretch(0)
+        sizePolicy.setVerticalStretch(0)
+        sizePolicy.setHeightForWidth(self.btnClosedCurve.sizePolicy().hasHeightForWidth())
+        self.btnClosedCurve.setSizePolicy(sizePolicy)
+        self.btnClosedCurve.setMaximumSize(QtCore.QSize(32, 32))
+        self.btnClosedCurve.setText("")
+        icon27 = QtGui.QIcon()
+        icon27.addPixmap(QtGui.QPixmap(":/icons/closedcurve.svg"), QtGui.QIcon.Normal, QtGui.QIcon.Off)
+        self.btnClosedCurve.setIcon(icon27)
+        self.btnClosedCurve.setIconSize(QtCore.QSize(16, 16))
+        self.btnClosedCurve.setCheckable(True)
+        self.btnClosedCurve.setFlat(True)
+        self.btnClosedCurve.setObjectName("btnClosedCurve")
+        self.formLayout.setWidget(7, QtWidgets.QFormLayout.LabelRole, self.btnClosedCurve)
+        self.btnAddPoly = QtWidgets.QPushButton(self.formFrame)
+        self.btnAddPoly.setEnabled(True)
+        sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Maximum, QtWidgets.QSizePolicy.Maximum)
+        sizePolicy.setHorizontalStretch(0)
+        sizePolicy.setVerticalStretch(0)
+        sizePolicy.setHeightForWidth(self.btnAddPoly.sizePolicy().hasHeightForWidth())
+        self.btnAddPoly.setSizePolicy(sizePolicy)
+        self.btnAddPoly.setMaximumSize(QtCore.QSize(32, 32))
+        self.btnAddPoly.setText("")
+        icon28 = QtGui.QIcon()
+        icon28.addPixmap(QtGui.QPixmap(":/icons/triangle-stroked-15.svg"), QtGui.QIcon.Normal, QtGui.QIcon.Off)
+        self.btnAddPoly.setIcon(icon28)
+        self.btnAddPoly.setIconSize(QtCore.QSize(16, 16))
+        self.btnAddPoly.setCheckable(True)
+        self.btnAddPoly.setFlat(True)
+        self.btnAddPoly.setObjectName("btnAddPoly")
+        self.formLayout.setWidget(8, QtWidgets.QFormLayout.LabelRole, self.btnAddPoly)
+        self.btnAddCircle = QtWidgets.QPushButton(self.formFrame)
+        self.btnAddCircle.setEnabled(True)
+        sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Maximum, QtWidgets.QSizePolicy.Maximum)
+        sizePolicy.setHorizontalStretch(0)
+        sizePolicy.setVerticalStretch(0)
+        sizePolicy.setHeightForWidth(self.btnAddCircle.sizePolicy().hasHeightForWidth())
+        self.btnAddCircle.setSizePolicy(sizePolicy)
+        self.btnAddCircle.setMaximumSize(QtCore.QSize(32, 32))
+        self.btnAddCircle.setText("")
+        icon29 = QtGui.QIcon()
+        icon29.addPixmap(QtGui.QPixmap(":/icons/circle.svg"), QtGui.QIcon.Normal, QtGui.QIcon.Off)
+        self.btnAddCircle.setIcon(icon29)
+        self.btnAddCircle.setIconSize(QtCore.QSize(16, 16))
+        self.btnAddCircle.setCheckable(True)
+        self.btnAddCircle.setFlat(True)
+        self.btnAddCircle.setObjectName("btnAddCircle")
+        self.formLayout.setWidget(10, QtWidgets.QFormLayout.LabelRole, self.btnAddCircle)
+        self.btnAddLabel = QtWidgets.QPushButton(self.formFrame)
+        self.btnAddLabel.setEnabled(True)
+        sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Maximum, QtWidgets.QSizePolicy.Maximum)
+        sizePolicy.setHorizontalStretch(0)
+        sizePolicy.setVerticalStretch(0)
+        sizePolicy.setHeightForWidth(self.btnAddLabel.sizePolicy().hasHeightForWidth())
+        self.btnAddLabel.setSizePolicy(sizePolicy)
+        self.btnAddLabel.setMaximumSize(QtCore.QSize(32, 32))
+        self.btnAddLabel.setText("")
+        icon30 = QtGui.QIcon()
+        icon30.addPixmap(QtGui.QPixmap(":/icons/text.svg"), QtGui.QIcon.Normal, QtGui.QIcon.Off)
+        self.btnAddLabel.setIcon(icon30)
+        self.btnAddLabel.setIconSize(QtCore.QSize(16, 16))
+        self.btnAddLabel.setCheckable(True)
+        self.btnAddLabel.setFlat(True)
+        self.btnAddLabel.setObjectName("btnAddLabel")
+        self.formLayout.setWidget(11, QtWidgets.QFormLayout.LabelRole, self.btnAddLabel)
+        self.btnAddFreehand = QtWidgets.QPushButton(self.formFrame)
+        self.btnAddFreehand.setEnabled(True)
+        sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Maximum, QtWidgets.QSizePolicy.Maximum)
+        sizePolicy.setHorizontalStretch(0)
+        sizePolicy.setVerticalStretch(0)
+        sizePolicy.setHeightForWidth(self.btnAddFreehand.sizePolicy().hasHeightForWidth())
+        self.btnAddFreehand.setSizePolicy(sizePolicy)
+        self.btnAddFreehand.setMaximumSize(QtCore.QSize(32, 32))
+        self.btnAddFreehand.setText("")
+        icon31 = QtGui.QIcon()
+        icon31.addPixmap(QtGui.QPixmap(":/icons/brush.svg"), QtGui.QIcon.Normal, QtGui.QIcon.Off)
+        self.btnAddFreehand.setIcon(icon31)
+        self.btnAddFreehand.setIconSize(QtCore.QSize(16, 16))
+        self.btnAddFreehand.setCheckable(True)
+        self.btnAddFreehand.setFlat(True)
+        self.btnAddFreehand.setObjectName("btnAddFreehand")
+        self.formLayout.setWidget(12, QtWidgets.QFormLayout.LabelRole, self.btnAddFreehand)
+        self.horizontalLayout_7.addWidget(self.formFrame)
+        self.imgFrame = QtWidgets.QFrame(self.mainWidget)
+        self.imgFrame.setMinimumSize(QtCore.QSize(0, 6))
+        self.imgFrame.setMouseTracking(True)
+        self.imgFrame.setFrameShape(QtWidgets.QFrame.NoFrame)
+        self.imgFrame.setFrameShadow(QtWidgets.QFrame.Raised)
+        self.imgFrame.setObjectName("imgFrame")
+        self.gridLayout = QtWidgets.QGridLayout(self.imgFrame)
+        self.gridLayout.setContentsMargins(0, 0, 0, 0)
+        self.gridLayout.setSpacing(0)
+        self.gridLayout.setObjectName("gridLayout")
+        self.imgLabel = QtWidgets.QLabel(self.imgFrame)
+        sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Expanding)
+        sizePolicy.setHorizontalStretch(0)
+        sizePolicy.setVerticalStretch(0)
+        sizePolicy.setHeightForWidth(self.imgLabel.sizePolicy().hasHeightForWidth())
+        self.imgLabel.setSizePolicy(sizePolicy)
+        self.imgLabel.setMouseTracking(True)
+        self.imgLabel.setFrameShape(QtWidgets.QFrame.Panel)
+        self.imgLabel.setText("")
+        self.imgLabel.setAlignment(QtCore.Qt.AlignLeading|QtCore.Qt.AlignLeft|QtCore.Qt.AlignTop)
+        self.imgLabel.setObjectName("imgLabel")
+        self.gridLayout.addWidget(self.imgLabel, 0, 1, 1, 1)
+        self.horizontalLayout_7.addWidget(self.imgFrame)
+        self.verticalLayout_2.addLayout(self.horizontalLayout_7)
+        self.horizontalLayout_3 = QtWidgets.QHBoxLayout()
+        self.horizontalLayout_3.setSizeConstraint(QtWidgets.QLayout.SetDefaultConstraint)
+        self.horizontalLayout_3.setContentsMargins(-1, 0, -1, -1)
+        self.horizontalLayout_3.setSpacing(0)
+        self.horizontalLayout_3.setObjectName("horizontalLayout_3")
+        self.btnTogglePython = QtWidgets.QPushButton(self.mainWidget)
+        self.btnTogglePython.setEnabled(True)
+        sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Minimum, QtWidgets.QSizePolicy.Minimum)
+        sizePolicy.setHorizontalStretch(0)
+        sizePolicy.setVerticalStretch(0)
+        sizePolicy.setHeightForWidth(self.btnTogglePython.sizePolicy().hasHeightForWidth())
+        self.btnTogglePython.setSizePolicy(sizePolicy)
+        self.btnTogglePython.setText("")
+        icon32 = QtGui.QIcon()
+        icon32.addPixmap(QtGui.QPixmap(":/icons/social-python.svg"), QtGui.QIcon.Normal, QtGui.QIcon.Off)
+        self.btnTogglePython.setIcon(icon32)
+        self.btnTogglePython.setIconSize(QtCore.QSize(16, 16))
+        self.btnTogglePython.setCheckable(True)
+        self.btnTogglePython.setFlat(True)
+        self.btnTogglePython.setObjectName("btnTogglePython")
+        self.horizontalLayout_3.addWidget(self.btnTogglePython)
+        self.txtTerminalPrompt = QtWidgets.QLineEdit(self.mainWidget)
+        sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Minimum)
+        sizePolicy.setHorizontalStretch(0)
+        sizePolicy.setVerticalStretch(0)
+        sizePolicy.setHeightForWidth(self.txtTerminalPrompt.sizePolicy().hasHeightForWidth())
+        self.txtTerminalPrompt.setSizePolicy(sizePolicy)
+        self.txtTerminalPrompt.setObjectName("txtTerminalPrompt")
+        self.horizontalLayout_3.addWidget(self.txtTerminalPrompt)
+        self.btnEnterCommand = QtWidgets.QPushButton(self.mainWidget)
+        self.btnEnterCommand.setEnabled(True)
+        sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Minimum, QtWidgets.QSizePolicy.Minimum)
+        sizePolicy.setHorizontalStretch(0)
+        sizePolicy.setVerticalStretch(0)
+        sizePolicy.setHeightForWidth(self.btnEnterCommand.sizePolicy().hasHeightForWidth())
+        self.btnEnterCommand.setSizePolicy(sizePolicy)
+        self.btnEnterCommand.setText("")
+        icon33 = QtGui.QIcon()
+        icon33.addPixmap(QtGui.QPixmap(":/icons/subdirectory-left.svg"), QtGui.QIcon.Normal, QtGui.QIcon.Off)
+        self.btnEnterCommand.setIcon(icon33)
+        self.btnEnterCommand.setIconSize(QtCore.QSize(16, 16))
+        self.btnEnterCommand.setFlat(True)
+        self.btnEnterCommand.setObjectName("btnEnterCommand")
+        self.horizontalLayout_3.addWidget(self.btnEnterCommand)
+        self.verticalLayout_2.addLayout(self.horizontalLayout_3)
+        self.horizontalLayout_2.addLayout(self.verticalLayout_2)
+        self.verticalLayout.addLayout(self.horizontalLayout_2)
+        self.horizontalLayout_4.addWidget(self.mainWidget)
+        MainWindow.setCentralWidget(self.centralwidget)
+        self.menubar = QtWidgets.QMenuBar(MainWindow)
+        self.menubar.setGeometry(QtCore.QRect(0, 0, 1000, 26))
+        self.menubar.setObjectName("menubar")
+        self.menuFIle = QtWidgets.QMenu(self.menubar)
+        self.menuFIle.setObjectName("menuFIle")
+        self.menuOpenRecent = QtWidgets.QMenu(self.menuFIle)
+        self.menuOpenRecent.setObjectName("menuOpenRecent")
+        self.menuEdit = QtWidgets.QMenu(self.menubar)
+        self.menuEdit.setObjectName("menuEdit")
+        self.menuOptions = QtWidgets.QMenu(self.menubar)
+        self.menuOptions.setObjectName("menuOptions")
+        self.menuHelp = QtWidgets.QMenu(self.menubar)
+        self.menuHelp.setObjectName("menuHelp")
+        self.menuTools = QtWidgets.QMenu(self.menubar)
+        self.menuTools.setObjectName("menuTools")
+        MainWindow.setMenuBar(self.menubar)
+        self.statusbar = QtWidgets.QStatusBar(MainWindow)
+        self.statusbar.setSizeGripEnabled(False)
+        self.statusbar.setObjectName("statusbar")
+        MainWindow.setStatusBar(self.statusbar)
+        self.actionAbout = QtWidgets.QAction(MainWindow)
+        self.actionAbout.setObjectName("actionAbout")
+        self.actionManual = QtWidgets.QAction(MainWindow)
+        self.actionManual.setObjectName("actionManual")
+        self.actionSettings = QtWidgets.QAction(MainWindow)
+        self.actionSettings.setObjectName("actionSettings")
+        self.actionPause = QtWidgets.QAction(MainWindow)
+        self.actionPause.setObjectName("actionPause")
+        self.actionSaveAs = QtWidgets.QAction(MainWindow)
+        self.actionSaveAs.setObjectName("actionSaveAs")
+        self.actionEnterCommand = QtWidgets.QAction(MainWindow)
+        self.actionEnterCommand.setObjectName("actionEnterCommand")
+        self.actionQuit = QtWidgets.QAction(MainWindow)
+        self.actionQuit.setObjectName("actionQuit")
+        self.actionUndo = QtWidgets.QAction(MainWindow)
+        self.actionUndo.setEnabled(False)
+        self.actionUndo.setObjectName("actionUndo")
+        self.actionRedo = QtWidgets.QAction(MainWindow)
+        self.actionRedo.setEnabled(False)
+        self.actionRedo.setObjectName("actionRedo")
+        self.actionShow_Grid = QtWidgets.QAction(MainWindow)
+        self.actionShow_Grid.setObjectName("actionShow_Grid")
+        self.actionShow_Local_Grid = QtWidgets.QAction(MainWindow)
+        self.actionShow_Local_Grid.setObjectName("actionShow_Local_Grid")
+        self.actionTransform = QtWidgets.QAction(MainWindow)
+        self.actionTransform.setObjectName("actionTransform")
+        self.actionExportAsymptote = QtWidgets.QAction(MainWindow)
+        self.actionExportAsymptote.setObjectName("actionExportAsymptote")
+        self.actionSave = QtWidgets.QAction(MainWindow)
+        self.actionSave.setObjectName("actionSave")
+        self.actionOpen = QtWidgets.QAction(MainWindow)
+        self.actionOpen.setObjectName("actionOpen")
+        self.actionClearRecent = QtWidgets.QAction(MainWindow)
+        self.actionClearRecent.setObjectName("actionClearRecent")
+        self.actionNewFile = QtWidgets.QAction(MainWindow)
+        self.actionNewFile.setObjectName("actionNewFile")
+        self.actionExportToAsy = QtWidgets.QAction(MainWindow)
+        self.actionExportToAsy.setObjectName("actionExportToAsy")
+        self.actionKeymaps = QtWidgets.QAction(MainWindow)
+        self.actionKeymaps.setObjectName("actionKeymaps")
+        self.menuOpenRecent.addSeparator()
+        self.menuOpenRecent.addAction(self.actionClearRecent)
+        self.menuFIle.addAction(self.actionNewFile)
+        self.menuFIle.addAction(self.actionOpen)
+        self.menuFIle.addAction(self.menuOpenRecent.menuAction())
+        self.menuFIle.addAction(self.actionSave)
+        self.menuFIle.addAction(self.actionSaveAs)
+        self.menuFIle.addAction(self.actionExportToAsy)
+        self.menuFIle.addAction(self.actionExportAsymptote)
+        self.menuFIle.addSeparator()
+        self.menuFIle.addAction(self.actionQuit)
+        self.menuEdit.addAction(self.actionUndo)
+        self.menuEdit.addAction(self.actionRedo)
+        self.menuEdit.addSeparator()
+        self.menuOptions.addAction(self.actionSettings)
+        self.menuOptions.addAction(self.actionKeymaps)
+        self.menuHelp.addAction(self.actionManual)
+        self.menuHelp.addAction(self.actionAbout)
+        self.menuTools.addAction(self.actionEnterCommand)
+        self.menubar.addAction(self.menuFIle.menuAction())
+        self.menubar.addAction(self.menuEdit.menuAction())
+        self.menubar.addAction(self.menuOptions.menuAction())
+        self.menubar.addAction(self.menuTools.menuAction())
+        self.menubar.addAction(self.menuHelp.menuAction())
+
+        self.retranslateUi(MainWindow)
+        self.comboAnchor.setCurrentIndex(0)
+        QtCore.QMetaObject.connectSlotsByName(MainWindow)
+
+    def retranslateUi(self, MainWindow):
+        _translate = QtCore.QCoreApplication.translate
+        MainWindow.setWindowTitle(_translate("MainWindow", "xasy"))
+        self.btnUndo.setToolTip(_translate("MainWindow", "Undo"))
+        self.btnRedo.setToolTip(_translate("MainWindow", "Redo"))
+        self.btnLoadFile.setToolTip(_translate("MainWindow", "<html><head/><body><p>Open file</p></body></html>"))
+        self.btnSave.setToolTip(_translate("MainWindow", "<html><head/><body><p>Save file</p></body></html>"))
+        self.btnViewCode.setToolTip(_translate("MainWindow", "<html><head/><body><p>Edit code</p></body></html>"))
+        self.btnQuickScreenshot.setToolTip(_translate("MainWindow", "<html><head/><body><p>Screenshot</p></body></html>"))
+        self.btnDrawAxes.setToolTip(_translate("MainWindow", "<html><head/><body><p>Toggle display axes</p></body></html>"))
+        self.btnDrawGrid.setToolTip(_translate("MainWindow", "<html><head/><body><p>Toggle grid</p></body></html>"))
+        self.btnSetZoom.setToolTip(_translate("MainWindow", "Zoom"))
+        self.btnPanCenter.setToolTip(_translate("MainWindow", "<html><head/><body><p>Center</p></body></html>"))
+        self.btnResetPan.setToolTip(_translate("MainWindow", "<html><head/><body><p>Center about origin</p></body></html>"))
+        self.btnAlignX.setToolTip(_translate("MainWindow", "<html><head/><body><p>Lock transform to X axis</p></body></html>"))
+        self.btnAlignX.setText(_translate("MainWindow", "X"))
+        self.btnAlignY.setToolTip(_translate("MainWindow", "<html><head/><body><p>Lock transform to Y axis</p></body></html>"))
+        self.btnAlignY.setText(_translate("MainWindow", "Y"))
+        self.btnSelectEdit.setToolTip(_translate("MainWindow", "<html><head/><body><p>Bézier editor</p></body></html>"))
+        self.btnDeleteMode.setToolTip(_translate("MainWindow", "<html><head/><body><p>Delete</p></body></html>"))
+        self.btnPan.setToolTip(_translate("MainWindow", "Pan"))
+        self.btnTranslate.setToolTip(_translate("MainWindow", "Translate"))
+        self.btnScale.setToolTip(_translate("MainWindow", "Scale"))
+        self.btnRotate.setToolTip(_translate("MainWindow", "Rotate"))
+        self.btnAnchor.setToolTip(_translate("MainWindow", "<html><head/><body><p>Set custom anchor</p></body></html>"))
+        self.comboAnchor.setToolTip(_translate("MainWindow", "<html><head/><body><p>Anchor</p></body></html>"))
+        self.comboAnchor.setCurrentText(_translate("MainWindow", "Center"))
+        self.comboAnchor.setItemText(0, _translate("MainWindow", "Center"))
+        self.comboAnchor.setItemText(1, _translate("MainWindow", "Origin"))
+        self.comboAnchor.setItemText(2, _translate("MainWindow", "Top Left"))
+        self.comboAnchor.setItemText(3, _translate("MainWindow", "Top Right"))
+        self.comboAnchor.setItemText(4, _translate("MainWindow", "Bottom Right"))
+        self.comboAnchor.setItemText(5, _translate("MainWindow", "Bottom Left"))
+        self.comboAnchor.setItemText(6, _translate("MainWindow", "Custom"))
+        self.btnCustTransform.setToolTip(_translate("MainWindow", "<html><head/><body><p><br/></p></body></html>"))
+        self.btnSendBackwards.setToolTip(_translate("MainWindow", "<html><head/><body><p><br/></p></body></html>"))
+        self.btnSendForwards.setToolTip(_translate("MainWindow", "Translate"))
+        self.btnFill.setToolTip(_translate("MainWindow", "<html><head/><body><p>Toggle fill/outline</p></body></html>"))
+        self.label.setText(_translate("MainWindow", "Line Width:"))
+        self.txtLineWidth.setToolTip(_translate("MainWindow", "<html><head/><body><p>Current pen width</p></body></html>"))
+        self.frameCurrColor.setToolTip(_translate("MainWindow", "<html><head/><body><p>Current pen color</p></body></html>"))
+        self.btnSelectColor.setToolTip(_translate("MainWindow", "<html><head/><body><p>Set color</p></body></html>"))
+        self.btnOpenPoly.setToolTip(_translate("MainWindow", "<html><head/><body><p>Open polygon</p></body></html>"))
+        self.btnClosedPoly.setToolTip(_translate("MainWindow", "<html><head/><body><p>Closed polygon</p></body></html>"))
+        self.btnOpenCurve.setToolTip(_translate("MainWindow", "<html><head/><body><p>Open Bézier curve</p></body></html>"))
+        self.btnClosedCurve.setToolTip(_translate("MainWindow", "<html><head/><body><p>Closed Bézier curve</p></body></html>"))
+        self.btnAddPoly.setToolTip(_translate("MainWindow", "<html><head/><body><p>Regular polygon</p></body></html>"))
+        self.btnAddCircle.setToolTip(_translate("MainWindow", "<html><head/><body><p>Circle</p></body></html>"))
+        self.btnAddLabel.setToolTip(_translate("MainWindow", "<html><head/><body><p>Text</p></body></html>"))
+        self.btnAddFreehand.setToolTip(_translate("MainWindow", "<html><head/><body><p>Freehand</p></body></html>"))
+        self.menuFIle.setTitle(_translate("MainWindow", "&File"))
+        self.menuOpenRecent.setTitle(_translate("MainWindow", "Open Recent"))
+        self.menuEdit.setTitle(_translate("MainWindow", "&Edit"))
+        self.menuOptions.setTitle(_translate("MainWindow", "Optio&ns"))
+        self.menuHelp.setTitle(_translate("MainWindow", "&Help"))
+        self.menuTools.setTitle(_translate("MainWindow", "&Tools"))
+        self.actionAbout.setText(_translate("MainWindow", "&About"))
+        self.actionManual.setText(_translate("MainWindow", "&Manual"))
+        self.actionSettings.setText(_translate("MainWindow", "&Settings"))
+        self.actionPause.setText(_translate("MainWindow", "Pause "))
+        self.actionSaveAs.setText(_translate("MainWindow", "&Save as"))
+        self.actionEnterCommand.setText(_translate("MainWindow", "&Enter Command"))
+        self.actionQuit.setText(_translate("MainWindow", "&Quit"))
+        self.actionUndo.setText(_translate("MainWindow", "&Undo"))
+        self.actionRedo.setText(_translate("MainWindow", "&Redo"))
+        self.actionShow_Grid.setText(_translate("MainWindow", "&Show Grid"))
+        self.actionShow_Local_Grid.setText(_translate("MainWindow", "Show &Local Grid"))
+        self.actionTransform.setText(_translate("MainWindow", "&Transform"))
+        self.actionExportAsymptote.setText(_translate("MainWindow", "Export as..."))
+        self.actionSave.setText(_translate("MainWindow", "Save"))
+        self.actionOpen.setText(_translate("MainWindow", "Open"))
+        self.actionClearRecent.setText(_translate("MainWindow", "Clear Menu"))
+        self.actionNewFile.setText(_translate("MainWindow", "New File"))
+        self.actionExportToAsy.setText(_translate("MainWindow", "Export as Asy"))
+        self.actionKeymaps.setText(_translate("MainWindow", "&Keymaps"))
+from xasyicons import icons_rc


Property changes on: trunk/Master/texmf-dist/asymptote/GUI/xasyqtui/window1.py
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: trunk/Master/texmf-dist/asymptote/GUI/xasyversion/version.py
===================================================================
--- trunk/Master/texmf-dist/asymptote/GUI/xasyversion/version.py	                        (rev 0)
+++ trunk/Master/texmf-dist/asymptote/GUI/xasyversion/version.py	2025-02-10 16:49:00 UTC (rev 73847)
@@ -0,0 +1 @@
+VERSION="2.98"


Property changes on: trunk/Master/texmf-dist/asymptote/GUI/xasyversion/version.py
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Modified: trunk/Master/texmf-dist/asymptote/animation.asy
===================================================================
--- trunk/Master/texmf-dist/asymptote/animation.asy	2025-02-10 15:30:00 UTC (rev 73846)
+++ trunk/Master/texmf-dist/asymptote/animation.asy	2025-02-10 16:49:00 UTC (rev 73847)
@@ -74,10 +74,10 @@
 
   int merge(int loops=0, real delay=animationdelay, string format="gif",
             string options="", bool keep=settings.keep) {
-    string args="-loop " +(string) loops+" -delay "+(string)(delay/10)+
-      " -alpha Off -dispose Background "+options;
+    string args="-loop " +(string) loops+" -delay "+(string)(delay/10);
     for(int i=0; i < files.length; ++i)
-      args += " " +files[i];
+      args += " "+files[i];
+    args += " -alpha Off -dispose Background "+options;
     int rc=convert(args,prefix+"."+format,format=format);
     this.purge(keep);
     if(rc == 0) animate(file=prefix+"."+format,format=format);

Modified: trunk/Master/texmf-dist/asymptote/asy-keywords.el
===================================================================
--- trunk/Master/texmf-dist/asymptote/asy-keywords.el	2025-02-10 15:30:00 UTC (rev 73846)
+++ trunk/Master/texmf-dist/asymptote/asy-keywords.el	2025-02-10 16:49:00 UTC (rev 73847)
@@ -1,17 +1,17 @@
 ;;
-;; This file is automatically generated by asy-list.pl.
+;; This file is automatically generated by asy-list.py.
 ;; Changes will be overwritten.
 ;;
-(defvar asy-keywords-version "2.88")
+(defvar asy-keywords-version "2.98")
 
 (defvar asy-keyword-name '(
-and controls tension atleast curl if else while for do return break continue struct typedef new access import unravel from include quote static public private restricted this explicit true false null cycle newframe operator ))
+and controls tension atleast curl if else while for do return break continue struct typedef using new access import unravel from include quote static autounravel public private restricted this explicit true false null cycle newframe operator ))
 
 (defvar asy-type-name '(
-Braid FitResult Label Legend Solution TreeNode abscissa arc arrowhead binarytree binarytreeNode block bool bool3 bounds bqe circle conic coord coordsys cputime ellipse evaluatedpoint file filltype frame grid3 guide horner hsv hyperbola int inversion key light line linefit marginT marker mass node object pair parabola patch path path3 pen picture point position positionedvector projection rational real realschur revolution scaleT schur scientific segment side simplex slice solution splitface string surface tensionSpecifier ticklocate ticksgridT tickvalues transform transformation tree triangle trilinear triple vector vertex void ))
+Braid FitResult Label Legend Solution TreeNode abscissa arc arrowhead arrowhead3 binarytree binarytreeNode block bool bool3 bounds bqe circle conic coord coordsys cputime ellipse evaluatedpoint file filltype frame grid3 guide horner hsv hyperbola int interaction inversion key light line linefit marginT marginT3 marker mass material node object pair parabola patch path path3 pen picture point position positionedvector projection rational real realschur revolution rmf scaleT schur scientific segment side slice solution splitface string surface tensionSpecifier ticklocate ticksgridT tickvalues transform transformation tree triangle trilinear triple vector vertex void ))
 
 (defvar asy-function-name '(
-AND Align Arc ArcArrow ArcArrows Arrow Arrows AtA Automatic AvantGarde B03 B13 B23 B33 BBox BWRainbow BWRainbow2 Bar Bars BeginArcArrow BeginArrow BeginBar BeginDotMargin BeginMargin BeginPenMargin Blank Bookman Bottom BottomTop Bounds Break Broken BrokenLog CLZ CTZ Ceil Circle CircleBarIntervalMarker Cos Courier CrossIntervalMarker DOSendl DOSnewl DefaultFormat DefaultLogFormat Degrees Dir DotMargin DotMargins Dotted Draw Drawline Embed EndArcArrow EndArrow EndBar EndDotMargin EndMargin EndPenMargin Fill FillDraw Finite Floor Format Full Gaussian Gaussrand Gaussrandpair Gradient Grayscale Helvetica Hermite HookHead InOutTicks InTicks Jn Label Landscape Left LeftRight LeftTicks Legend Linear Log LogFormat Margin Margins Mark MidArcArrow MidArrow NOT NewCenturySchoolBook NoBox NoMargin NoModifier NoTicks NoTicks3 NoZero NoZeroFormat None OR OmitFormat OmitTick OmitTickInterval OmitTickIntervals OutTicks Ox Oy Palatino PaletteTicks Pen PenMargin PenMargins Pentype Portrait RGB RadialShade RadialShadeDraw Rainbow Range Relative Right RightTicks Rotate Round SQR Scale ScaleX ScaleY ScaleZ Seascape Shift Sin Slant Spline StickIntervalMarker Straight Symbol Tan TeXify Ticks Ticks3 TildeIntervalMarker TimesRoman Top TrueMargin UnFill UpsideDown Wheel X XEquals XOR XY XYEquals XYZero XYgrid XZEquals XZZero XZero XZgrid Y YEquals YXgrid YZ YZEquals YZZero YZero YZgrid Yn Z ZX ZXgrid ZYgrid ZapfChancery ZapfDingbats _begingroup3 _cputime _draw _eval _findroot _image _labelpath _projection _schur _shipout _strokepath _texpath aCos aSin aTan abort abs abs2 accel acos acosh acot acsc activatequote add addArrow addMargins addSaveFunction addpenarc addpenline addseg adjust alias align all altitude angabscissa angle angledegrees angpoint animate annotate anticomplementary antipedal apply approximate arc arcarrowsize arccircle arcdir arcfromcenter arcfromfocus arclength arcnodesnumber arcpoint arcsubtended arcsubtendedcenter arctime arctopath array arrow arrow2 arrowbase arrowbasepoints arrowsize ascii asec asin asinh a!
 sk assert asy asycode asydir asyfigure asyfilecode asyinclude asywrite atan atan2 atanh atbreakpoint atexit attach attract atupdate autoformat autoscale autoscale3 axes axes3 axialshade axis axiscoverage azimuth babel background bangles bar barmarksize barsize basealign baseline bbox beep begin beginclip begingroup beginpoint between bevel bezier bezierP bezierPP bezierPPP bezulate bibliography bibliographystyle binarytree binarytreeNode binomial bins bisector bisectorpoint bispline bispline0 bitreverse blend blockconnector box bqe brace breakpoint breakpoints brick buildRestoreDefaults buildRestoreThunk buildcycle bulletcolor byte byteinv calculateScaling canonical canonicalcartesiansystem cartesiansystem case1 case2 case3 cbrt cd ceil center centerToFocus centroid cevian change2 changecoordsys checkSegment check_fpt_zero checkconditionlength checker checkincreasing checklengths checkposition checkpt checkptincube checktriangle choose circle circlebarframe circlemarkradius circlenodesnumber circumcenter circumcircle clamped clear clip clipdraw close cmyk code colatitude collect collinear color colorless colors colorspace comma compassmark complement complementary concat concurrent cone conic conicnodesnumber conictype conj connect containmentTree contains contour contour3 controlSpecifier convert coordinates coordsys copy copyPairOrTriple cos cosh cot countIntersections cputime crop cropcode cross crossframe crosshatch crossmarksize csc cubicroots curabscissa curlSpecifier curpoint currentarrow currentexitfunction currentmomarrow currentpolarconicroutine curve cut cutafter cutbefore cyclic cylinder deactivatequote debugger deconstruct defaultdir defaultformat defaultpen defined degenerate degrees delete deletepreamble determinant diagonal diamond diffdiv dir dirSpecifier dirtime display distance divisors do_overpaint dot dotframe dotsize downcase draw drawAll drawCylinder drawDisk drawDoubleLine drawFermion drawGhost drawGluon drawMomArrow drawPhoton drawScalar drawSphere drawTube drawVertex drawVertexBox drawV!
 ertexBoxO drawVertexBoxX drawVertexO drawVertexOX drawVertexTriangle drawVertexTriangleO drawVertexX drawarrow drawarrow2 drawbeziertriangle drawline drawpixel drawstrokepath drawtick duplicate elle ellipse ellipsenodesnumber embed embed3 embedplayer empty enclose end endclip endgroup endgroup3 endl endpoint endpoints eof eol equation equations erase erasestep erf erfc error errorbar errorbars eval excenter excircle exit exitfunction exp expfactors expi expm1 exradius extend extension extouch fabs factorial fermat fft fhorner figure file filecode fill filldraw filloutside fillrule filltype find findall findroot finite finiteDifferenceJacobian firstcut firstframe fit fit2 fixedscaling floor flush fmdefaults fmod focusToCenter font fontcommand fontsize foot format frac frequency fromCenter fromFocus fspline functionshade gamma gcd generate_random_backtrace generateticks gergonne getc getint getpair getreal getstring gettriple gluon gouraudshade graph graphic graphicscale graphwithderiv gray grestore grid grid3 gsave halfbox hatch hdiffdiv hermite hex histogram history hline hprojection hsv hyperbola hyperbolanodesnumber hyperlink hypot identity image implicitsurface importv3d incenter incentral incircle increasing incrementposition indexedfigure initdefaults initialized input inradius insert inside insphere integrate interactive interior interp interpolate intersect intersection intersectionpoint intersectionpoints intersections intouch inverse inversion invisible is3D isDuplicate isnan isogonal isogonalconjugate isometry isotomic isotomicconjugate isparabola italic item jobname key kurtosis kurtosisexcess label labelaxis labelmargin labelpath labels labeltick labelx labelx3 labely labely3 labelz labelz3 lastcut latex latitude latticeshade layer layout lcm ldexp leastsquares legend legenditem length lexorder lift light limits line linear linecap lineinversion linejoin linemargin lineskip linetype linewidth link list lm_enorm lm_evaluate_default lm_lmdif lm_lmpar lm_minimize lm_print_default lm_print_quiet lm_qrfac!
  lm_qrsolv locale locate locatefile location log log10 log1p logaxiscoverage longitude lookup make3dgrid makeNode makecircle makedraw makepen maketriangle map mapArray mapArrayString margin markangle markangleradius markanglespace markarc marker markinterval marknodes markrightangle markthin markuniform mass masscenter massformat math max max3 maxAfterTransform maxbezier maxbound maxcoords maxlength maxratio maxtimes mean medial median midpoint min min3 minAfterTransform minbezier minbound minipage minratio mintimes miterlimit mktemp momArrowPath momarrowsize monotonic multifigure nGrad nativeformat natural newl newpage newslide newton newtree nextframe nextnormal nextpage nib nodabscissa node none norm normalout normalvideo notaknot nowarn numberpage nurb object offset onpath opacity opposite orient orientation origin orthic orthocenter orthocentercenter outdirectory outformat outline outname outprefix output overloadedMessage overwrite pack pad pairs palette parabola parabolanodesnumber parallel parallelogram partialsum patchwithnormals path path3 pathbetween pathinface pattern pause pdf pedal periodic perp perpendicular perpendicularmark phantom phi1 phi2 phi3 phi4 photon piecewisestraight point polar polarconicroutine polargraph polygon popcount postcontrol postscript pow10 ppoint prc prc0 prconly precision precontrol prepend primitive printBytecode print_random_addresses progress project projection projecttospan projecttospan_findcoeffs purge pwhermite quadpatches quadrant quadraticroots quantize quarticroots quotient radialshade radians radicalcenter radicalline radius rand randompath rationalidentity rd readline realmult realquarticroots rectangle rectangular rectify reflect relabscissa relative relativedistance reldir relpoint reltime remainder remark removeDuplicates rename render replace report resetdefaultpen restore restoredefaults reverse reversevideo rf rfind rgb rgba rgbint rms rotate rotateO rotation round roundbox roundedpath roundrectangle samecoordsys sameside sample save savedefaults saveline!
  scale scale3 scaleO scaleT scaleless schur scientific search searchtree sec secondaryX secondaryY seconds section sector seek seekeof segment segmentlimits sequence setpens sgn sgnd sharpangle sharpdegrees shift shiftless shipout shipout3 show simeq simplex simplexInit simplexPhase1 simplexPhase2 simplexTableau simplexWrite simpson sin sinh size size3 skewness skip slant sleep slice slope slopefield solve solveBVP sort sourceline sphere split sqrt square srand standardizecoordsys stdev step stickframe stickmarksize stickmarkspace stop straight straightness string stripdirectory stripextension stripfile stripsuffix strokepath subdivide subitem subpath substr sum surface symmedial symmedian system tab tableau tan tangent tangential tangents tanh tell tensionSpecifier tensorshade tex texcolor texify texpath texpreamble texreset texshipout texsize texstring textpath thick thin tick tickMax tickMax3 tickMin tickMin3 ticklabelshift ticklocate tildeframe tildemarksize tile tiling time times title titlepage topbox transform transformation transpose trembleFuzz triangle triangleAbc triangleabc triangletoquads trianglewithnormals triangulate tricoef tridiagonal trilinear trim truepoint tube uncycle unfill uniform unique unit unitrand unitsize unityroot unstraighten upcase updatefunction uperiodic upscale uptodate usepackage usersetting usetypescript usleep value variance variancebiased vbox vector vectorfield verbatim view vline vperiodic vprojection warn warning windingnumber write xasyKEY xaxis xaxis3 xaxis3At xaxisAt xequals xlimits xmap xpart xscale xscaleO xtick xtick3 xtrans yaxis yaxis3 yaxis3At yaxisAt yequals ylimits ypart yscale yscaleO ytick ytick3 ytrans zaxis3 zaxis3At zero zlimits zpart ztick ztick3 ztrans ))
+AND Align Arc ArcArrow ArcArrow3 ArcArrows ArcArrows3 Arrow Arrow3 Arrows Arrows3 AtA Automatic AvantGarde B03 B13 B23 B33 BBox BWRainbow BWRainbow2 Bar Bar3 Bars Bars3 BeginArcArrow BeginArcArrow3 BeginArrow BeginArrow3 BeginBar BeginBar3 BeginDotMargin BeginDotMargin3 BeginMargin BeginMargin3 BeginPenMargin BeginPenMargin2 BeginPenMargin3 Blank Bookman Bottom BottomTop Bounds Break Broken BrokenLog CLZ CTZ Ceil Circle CircleBarIntervalMarker Cos Courier CrossIntervalMarker DOSendl DOSnewl DefaultFormat DefaultHead2 DefaultLogFormat Degrees Dir DotMargin DotMargin3 DotMargins DotMargins3 Dotted DoubleLineMidArrow Draw Drawline Embed EndArcArrow EndArcArrow3 EndArrow EndArrow3 EndBar EndBar3 EndDotMargin EndDotMargin3 EndMargin EndMargin3 EndPenMargin EndPenMargin2 EndPenMargin3 Fill FillDraw Finite Floor Format Full Gaussian Gaussrand Gaussrandpair Gradient Grayscale Helvetica Hermite HookHead HookHead2 HookHead3 InOutTicks InTicks Jn Label LabelInteraction Landscape Left LeftRight LeftTicks Legend Linear Log LogFormat Margin Margin3 Margins Margins3 Mark MidArcArrow MidArcArrow3 MidArrow MidArrow3 NOT NewCenturySchoolBook NoBox NoMargin NoMargin3 NoModifier NoTicks NoTicks3 NoZero NoZeroFormat None OR OmitFormat OmitTick OmitTickInterval OmitTickIntervals OutTicks Ox Oy Palatino PaletteTicks Pen PenMargin PenMargin2 PenMargin3 PenMargins PenMargins2 PenMargins3 Pentype Portrait RGB RadialShade RadialShadeDraw Rainbow Range Relative Right RightTicks Rotate Round SQR Scale ScaleX ScaleY ScaleZ Seascape Shift Sin Slant Spline StickIntervalMarker Straight Symbol Tan TeXHead2 TeXify Ticks Ticks3 TildeIntervalMarker TimesRoman Top TrueMargin TrueMargin3 UnFill UpsideDown Wheel X XEquals XOR XY XYEquals XYZero XYgrid XYplane XZ XZEquals XZZero XZero XZgrid Y YEquals YX YXgrid YZ YZEquals YZZero YZero YZgrid YZplane Yn Z ZX ZXgrid ZXplane ZY ZYgrid ZapfChancery ZapfDingbats _begingroup3 _cputime _draw _eval _findroot _image _labelpath _projection _schur _shipout _strokepath _texpath aCos aSin aTan abort abs a!
 bs2 absorthographic absperspective accel acos acos1 acosh acot acsc activatequote add add2 addArrow addMargins addPath addSaveFunction addStereoViews addViews addpenarc addpenline addseg adjust adjustedIndex aim alias align alignshift aligntransform all altitude angabscissa angle angledegrees angpoint animate annotate anticomplementary antipedal apply approach approximate arc arcarrowsize arccircle arcdir arcfromcenter arcfromfocus arclength arcnodesnumber arcpoint arcsubtended arcsubtendedcenter arctime arctopath array arrow arrow2 arrowbase arrowbasepoints arrowsize ascii asec asin asin1 asinh ask assert asy asycode asydir asyfigure asyfilecode asyinclude asywrite atan atan2 atanh atbreakpoint atexit attach attract atupdate autoformat autoscale autoscale3 axes axes3 axialshade axis axiscoverage azimuth babel background bangles bar barmarksize barsize basealign baseline bbox beep begin beginclip begingroup begingroup3 beginpoint bend between bevel bezier bezierP bezierPP bezierPPP bezulate bibliography bibliographystyle binarytree binarytreeNode binomial bins bisector bisectorpoint bispline bispline0 bitreverse blend blockconnector box bqe brace breakpoint breakpoints brick buildRestoreDefaults buildRestoreThunk buildcycle bulletcolor byte byteinv calculateScaling camera canonical canonicalcartesiansystem cartesiansystem case1 case2 case3 cbrt cd ceil center centerToFocus centered centroid cevian change2 changecoordsys checkEmpty checkSegment check_fpt_zero checkconditionlength checker checkincreasing checklengths checkposition checkpt checkptincube checktriangle choose circle circlebarframe circlemarkradius circlenodesnumber circumcenter circumcircle clamped clear clip clipdraw close cmyk code colatitude collect collinear color colorless colors colorspace comma compassmark complement complementary computeNormals concat concurrent cone conic conicnodesnumber conictype conj connect containmentTree contains contour contour3 controlSpecifier convert coons coons3 coordinates coordsys copy copyPairOrTriple cos cosh !
 cot countIntersections cputime crop cropcode cross crossframe crosshatch crossmarksize csc cubicroots curabscissa curlSpecifier curpoint currentarrow currentexitfunction currentmomarrow currentpolarconicroutine curve cut cutafter cutbefore cyclic cylinder deactivatequote debugger deconstruct defaultdir defaultformat defaultpen defined degenerate degrees delete deletepreamble determinant diagonal diamond diffdiv dir dirSpecifier dirtime display distance distort divisors do_overpaint dot dotframe dotsize downcase draw draw3D drawAll drawCylinder drawDisk drawDoubleLine drawFermion drawGhost drawGluon drawMomArrow drawPhoton drawScalar drawSphere drawTessellation drawTube drawVertex drawVertexBox drawVertexBoxO drawVertexBoxX drawVertexO drawVertexOX drawVertexTriangle drawVertexTriangleO drawVertexX drawarrow drawarrow2 drawbeziertriangle drawline drawpixel drawstrokepath drawtick duplicate elle ellipse ellipsenodesnumber embed embed3 embed3D embedder embedplayer emissive empty enclose end endclip endgroup endgroup3 endl endpoint endpoints eof eol equation equations erase erasestep erf erfc error errorbar errorbars eval excenter excircle exit exitfunction exp expfactors expi expm1 exradius extend extension extouch extrude fabs factorial fermat fft fhorner figure file filecode fill fillbox filldraw filloutside fillrule filltype find findall findroot finite finiteDifferenceJacobian firstcut firstframe fit fit2 fit3 fixedscaling flip floor flush fmdefaults fmod focusToCenter font fontcommand fontsize foot format frac frequency fromCenter fromFocus fspline functionshade gamma gcd generate_random_backtrace generateticks gergonne getc getint getpair getreal getstring gettriple gluon gouraudshade graph graphic graphicscale graphwithderiv gray grestore grid grid3 gsave halfbox hatch hdiffdiv hermite hex histogram history hline hprojection hsplit hsv hyperbola hyperbolanodesnumber hyperlink hypot identity image implicitsurface importv3d incenter incentral incircle increasing incrementposition indexedfigure initdefaults ini!
 tialized input inradius insert inside insphere integrate interactive interior interp interpolate intersect intersection intersectionpoint intersectionpoints intersections intouch inverse inversion invert invisible is3D isDuplicate isnan isogonal isogonalconjugate isometry isotomic isotomicconjugate isparabola italic item jobname join3 key kurtosis kurtosisexcess label labelaxis labelmargin labelpath labels labeltick labelx labelx3 labely labely3 labelz labelz3 lastcut latex latitude latticeshade layer layout lcm ldexp leastsquares legend legenditem length lexorder lift light limits line linear linecap lineinversion linejoin linemargin lineskip linetype linewidth link list lm_enorm lm_evaluate_default lm_lmdif lm_lmpar lm_minimize lm_print_default lm_print_quiet lm_qrfac lm_qrsolv locale locate locatefile location log log10 log1p logaxiscoverage longitude look lookup make3dgrid makeMappingArray makeNode makecircle makedraw makepen maketriangle map mapArray mapArrayString margin markangle markangleradius markanglespace markarc marker markinterval marknodes markrightangle markthin markuniform mass masscenter massformat material math max max3 maxAfterTransform maxbezier maxbound maxcoords maxlength maxratio maxtimes mean medial median meshname midpoint min min3 minAfterTransform minbezier minbound minipage minratio mintimes miterlimit mktemp momArrowPath momarrowsize monotonic multifigure nGrad nativeformat natural newl newpage newslide newton newtree nextframe nextnormal nextpage nib nodabscissa node none norm normal normalout normalvideo notaknot nowarn nullpath3 numberpage nurb object oblique obliqueX obliqueY obliqueZ octant1 offset onpath opacity opposite orient orientation origin orthic orthocenter orthocentercenter orthographic outdirectory outformat outline outname outprefix output overlap overloadedMessage overwrite pack pad pairs palette parabola parabolanodesnumber parallel parallelogram partialsum partname patchwithnormals path path3 pathbetween pathinface pattern pause pdf pedal periodic perp perpendicu!
 lar perpendicularmark perspective phantom phi1 phi2 phi3 phi4 photon piecewisestraight pixel plane planeproject point polar polarconicroutine polargraph polygon popcount position postcontrol postscript pow10 ppoint prc prc0 prconly precision precontrol prepend primitive printBytecode print_random_addresses progress project projection projecttospan projecttospan_findcoeffs purge pwhermite quadpatches quadrant quadraticroots quantize quarticroots quotient radialshade radians radicalcenter radicalline radius rand randompath randompath3 rationalidentity rd readline realmult realquarticroots rectangle rectangular rectify reference reflect regularize relabscissa relative relativedistance reldir relpoint reltime remainder remark removeDuplicates rename render replace report resetdefaultpen restore restoredefaults reverse reversevideo rf rfind rgb rgba rgbint rmf rms rotate rotateO rotation round roundbox roundedpath roundrectangle samecoordsys sameside sample save savedefaults saveline scale scale3 scaleO scaleT scaleless schur scientific search searchtree sec secondaryX secondaryY seconds section sector seek seekeof segment segmentlimits sequence setpens sgn sgnd sharpangle sharpdegrees shift shiftless shipout shipout3 show simeq simplexInit simplexPhase1 simplexPhase2 simplexTableau simplexWrite simpson sin sinh size size3 skewness skip slant sleep slice slope slopefield solve solveBVP sort sourceline sphere split sqrt square srand standardizecoordsys stdev step stickframe stickmarksize stickmarkspace stop straight straightness string stripdirectory stripextension stripfile stripsuffix strokepath subdivide subitem subpatch subpatchbegin subpatchend subpath substr sum surface symmedial symmedian system tab tableau tan tangent tangential tangents tanh tell tensionSpecifier tensor tensorshade tex texcolor texify texpath texpreamble texreset texshipout texsize texstring textpath theta thick thin tick tickMax tickMax3 tickMin tickMin3 ticklabelshift ticklocate tildeframe tildemarksize tile tiling time times title titlepag!
 e topbox transform transform3 transformation transpose trembleFuzz triangle triangleAbc triangleabc triangletoquads trianglewithnormals triangulate tricoef tridiagonal trilinear trim triples truepoint tube uncycle unfill uniform unique unit unitcylinderDraw unitfrustum unitfrustum1 unitrand unitsize unityroot unscaled unstraighten upcase updatefunction uperiodic upscale uptodate usepackage usersetting usetypescript usleep value variance variancebiased vbox vector vectorfield verbatim view viewportmargin vline vperiodic vprojection vsplit warn warning windingnumber write xasyKEY xaxis xaxis3 xaxis3At xaxisAt xequals xlimits xmap xpart xscale xscale3 xscaleO xtick xtick3 xtrans xypart yaxis yaxis3 yaxis3At yaxisAt yequals ylimits ypart yscale yscale3 yscaleO ytick ytick3 ytrans zaxis3 zaxis3At zero zlimits zpart zscale3 ztick ztick3 ztrans ))
 
 (defvar asy-variable-name '(
-AliceBlue Align Allow AntiqueWhite Apricot Aqua Aquamarine Aspect Azure BeginPoint Beige Bisque Bittersweet Black BlanchedAlmond Blue BlueGreen BlueViolet Both Break BrickRed Brown BurlyWood BurntOrange CCW CW CadetBlue CarnationPink Center Centered Cerulean Chartreuse Chocolate Coeff Coral CornflowerBlue Cornsilk Crimson Crop Cyan Dandelion DarkBlue DarkCyan DarkGoldenrod DarkGray DarkGreen DarkKhaki DarkMagenta DarkOliveGreen DarkOrange DarkOrchid DarkRed DarkSalmon DarkSeaGreen DarkSlateBlue DarkSlateGray DarkTurquoise DarkViolet DeepPink DeepSkyBlue DefaultHead DimGray DodgerBlue Dotted Down Draw E ENE EPS ESE E_Euler E_PC E_RK2 E_RK3BS Emerald EndPoint Euler Fill FillDraw FireBrick FloralWhite ForestGreen Fuchsia Gainsboro GhostWhite Gold Goldenrod Gray Green GreenYellow Honeydew HookHead Horizontal HotPink I IgnoreAspect IndianRed Indigo Infinity Ivory JOIN_IN JOIN_OUT JungleGreen Khaki LM_DWARF LM_MACHEP LM_SQRT_DWARF LM_SQRT_GIANT LM_USERTOL Label Lavender LavenderBlush LawnGreen Left LeftJustified LeftSide LemonChiffon LightBlue LightCoral LightCyan LightGoldenrodYellow LightGreen LightGrey LightPink LightSalmon LightSeaGreen LightSkyBlue LightSlateGray LightSteelBlue LightYellow Lime LimeGreen Linear Linen Log Logarithmic Magenta Mahogany Mark MarkFill MarkFillable MarkPath Maroon Max MediumAquamarine MediumBlue MediumOrchid MediumPurple MediumSeaGreen MediumSlateBlue MediumSpringGreen MediumTurquoise MediumVioletRed Melon MidPoint MidnightBlue Min MintCream MistyRose Moccasin Move MoveQuiet Mulberry N NE NNE NNW NULL_VERTEX NW NavajoWhite Navy NavyBlue NoAlign NoCrop NoFill NoSide OldLace Olive OliveDrab OliveGreen Orange OrangeRed Orchid Ox Oy PC PaleGoldenrod PaleGreen PaleTurquoise PaleVioletRed PapayaWhip Peach PeachPuff Periwinkle Peru PineGreen Pink Plum PowderBlue ProcessBlue Purple RELEASE RK2 RK3 RK3BS RK4 RK5 RK5DP RK5F RawSienna Red RedOrange RedViolet Rhodamine Right RightJustified RightSide RosyBrown RoyalBlue RoyalPurple RubineRed S SE SSE SSW SW SaddleBrown Salmon SandyBrown Se!
 aGreen Seashell Sepia Sienna Silver SimpleHead SkyBlue SlateBlue SlateGray Snow SpringGreen SteelBlue Suppress SuppressQuiet Tan TeXHead Teal TealBlue Thistle Ticksize Tomato Turquoise UnFill Up VERSION Value Vertical Violet VioletRed W WNW WSW Wheat White WhiteSmoke WildStrawberry XHIGH XLOW XYAlign YAlign YHIGH YLOW Yellow YellowGreen YellowOrange ZHIGH ZLOW _outpipe aboveequationskip addpenarc addpenline align allowstepping angularsystem animationdelay appendsuffix arcarrowangle arcarrowfactor arrow2sizelimit arrowangle arrowbarb arrowdir arrowfactor arrowhookfactor arrowlength arrowsizelimit arrowtexfactor artificialColumn authorpen axis axiscoverage axislabelfactor background backgroundcolor backgroundpen barfactor barmarksizefactor basealign baselinetemplate bernstein beveljoin bigvertexpen bigvertexsize black blue bm bottom bp bracedefaultratio braceinnerangle bracemidangle braceouterangle brown bullet byfoci byvertices camerafactor chartreuse circlemarkradiusfactor circlenodesnumberfactor circleprecision circlescale cm codefile codepen codeskip colorPen coloredNodes coloredSegments conditionlength conicnodesfactor count cputimeformat crossmarksizefactor currentcoordsys currentlight currentpatterns currentpen currentpicture currentposition currentprojection curvilinearsystem cuttings cyan darkblue darkbrown darkcyan darkgray darkgreen darkgrey darkmagenta darkolive darkred dashdotted dashed datepen dateskip debuggerlines debugging deepblue deepcyan deepgray deepgreen deepgrey deepmagenta deepred deepyellow default defaultControl defaultS defaultbackpen defaultcoordsys defaultexcursion defaultfilename defaultformat defaultmassformat defaultpen defaultseparator diamond differentlengths dot dotfactor dotfilltype dotframe dotted doublelinepen doublelinespacing down duplicateFuzz ellipsenodesnumberfactor eps epsgeo epsilon evenodd expansionfactor extendcap fermionpen figureborder figuremattpen file3 firstnode firststep foregroundcolor fuchsia fuzz gapfactor ghostpen gluonamplitude gluonpen gluonratio gray gree!
 n grey hatchepsilon havepagenumber heavyblue heavycyan heavygray heavygreen heavygrey heavymagenta heavyred hline hwratio hyperbolanodesnumberfactor identity identity4 ignore implicitshipout inch inches includegraphicscommand inf infinity institutionpen intMax intMin invert invisible itempen itemskip itemstep labelmargin landscape lastnode left legendhskip legendlinelength legendmargin legendmarkersize legendmaxrelativewidth legendvskip lightblue lightcyan lightgray lightgreen lightgrey lightmagenta lightolive lightred lightyellow linemargin lm_infmsg lm_shortmsg longdashdotted longdashed magenta magneticRadius mantissaBits markangleradius markangleradiusfactor markanglespace markanglespacefactor maxDenominator maxrefinements mediumblue mediumcyan mediumgray mediumgreen mediumgrey mediummagenta mediumred mediumyellow middle minDistDefault minblockheight minblockwidth mincirclediameter minipagemargin minipagewidth minvertexangle miterjoin mm momarrowfactor momarrowlength momarrowmargin momarrowoffset momarrowpen monoPen morepoints nCircle nan newbulletcolor ngraph nil nmesh nobasealign nodeMarginDefault nodesystem nomarker nopoint noprimary nullpath nullpen numarray ocgindex oldbulletcolor olive optimizeTableau orange origin overpaint page pageheight pagemargin pagenumberalign pagenumberpen pagenumberposition pagewidth paleblue palecyan palegray palegreen palegrey palemagenta palered paleyellow parabolanodesnumberfactor perpfactor phi photonamplitude photonpen photonratio pi pink plain plain_bounds plain_scaling plus preamblenodes pt purple r3 r4a r4b randMax realDigits realEpsilon realMax realMin red relativesystem reverse right roundcap roundjoin royalblue salmon saveFunctions scalarpen sequencereal settings signedtrailingzero simplex solid spinner springgreen sqrtEpsilon squarecap squarepen startposition stdin stdout stepfactor stepfraction steppagenumberpen stepping stickframe stickmarksizefactor stickmarkspacefactor swap textpen ticksize tildeframe tildemarksizefactor tinv titlealign titlepagepen titlepagepo!
 sition titlepen titleskip top trailingzero treeLevelStep treeMinNodeWidth treeNodeStep trembleAngle trembleFrequency trembleRandom tubegranularity undefined unitcircle unitsquare up urlpen urlskip v3dheadertypes v3dtypes version vertexpen vertexsize viewportmargin viewportsize vline white wye yellow ylabelwidth zeroTransform zerotickfuzz zerowinding ))
+Accent AliceBlue Align Allow AntiqueWhite Apricot Aqua Aquamarine Aspect Azure BackView BeginPoint Beige Billboard Bisque Bittersweet Black BlanchedAlmond Blue BlueGreen BlueViolet Blues Both BottomView BrBG Break BrickRed Brown BuGn BuPu BurlyWood BurntOrange CCW CMRmap CW CadetBlue CarnationPink Center Centered Cerulean Chartreuse Chocolate Coeff Coral CornflowerBlue Cornsilk Crimson Crop Cyan Dandelion Dark2 DarkBlue DarkCyan DarkGoldenrod DarkGray DarkGreen DarkKhaki DarkMagenta DarkOliveGreen DarkOrange DarkOrchid DarkRed DarkSalmon DarkSeaGreen DarkSlateBlue DarkSlateGray DarkTurquoise DarkViolet DeepPink DeepSkyBlue DefaultHead DefaultHead2 DefaultHead3 DimGray DodgerBlue Dotted Down Draw E ENE EPS ESE E_Euler E_PC E_RK2 E_RK3BS Embedded Emerald EndPoint Euler Fill FillDraw FireBrick FloralWhite ForestGreen FrontView Fuchsia Fuzz Gainsboro GhostWhite GnBu Gold Goldenrod Gray Green GreenYellow Greens Greys Headlamp High Honeydew HookHead HookHead2 HookHead3 Horizontal HotPink I IgnoreAspect IndianRed Indigo Infinity Ivory JOIN_IN JOIN_OUT JungleGreen Khaki LM_DWARF LM_MACHEP LM_SQRT_DWARF LM_SQRT_GIANT LM_USERTOL Label Lavender LavenderBlush LawnGreen Left LeftJustified LeftSide LeftView LemonChiffon LightBlue LightCoral LightCyan LightGoldenrodYellow LightGreen LightGrey LightPink LightSalmon LightSeaGreen LightSkyBlue LightSlateGray LightSteelBlue LightYellow Lime LimeGreen Linear Linen Log Logarithmic Low Magenta Mahogany Mark MarkFill MarkFillable MarkPath Maroon Max Medium MediumAquamarine MediumBlue MediumOrchid MediumPurple MediumSeaGreen MediumSlateBlue MediumSpringGreen MediumTurquoise MediumVioletRed Melon MidPoint MidnightBlue Min MintCream MistyRose Moccasin Move MoveQuiet Mulberry N NE NNE NNW NULL_VERTEX NURBSsphere NW NavajoWhite Navy NavyBlue NoAlign NoCrop NoFill NoSide O OldLace Olive OliveDrab OliveGreen OrRd Orange OrangeRed Oranges Orchid Ox Oy PC PRCsphere PRGn Paired PaleGoldenrod PaleGreen PaleTurquoise PaleVioletRed PapayaWhip Pastel1 Pastel2 Peach PeachPuff Periwinkle Per!
 u PiYG PineGreen Pink Plum PowderBlue ProcessBlue PuBu PuBuGn PuOr PuRd Purple Purples RELEASE RK2 RK3 RK3BS RK4 RK5 RK5DP RK5F RawSienna RdBu RdGy RdPu RdYlBu RdYlGn Red RedOrange RedViolet Reds Rhodamine Right RightJustified RightSide RightView RosyBrown RoyalBlue RoyalPurple RubineRed S SE SSE SSW SW SaddleBrown Salmon SandyBrown SeaGreen Seashell Sepia Set1 Set2 Set3 Sienna Silver SimpleHead Single SixViews SixViewsFR SixViewsUS SkyBlue SlateBlue SlateGray Snow Spectral SpringGreen SteelBlue Suppress SuppressQuiet Tan TeXHead TeXHead2 TeXHead3 Teal TealBlue Thistle ThreeViews ThreeViewsFR ThreeViewsUS Ticksize Tomato TopView Turquoise UnFill Up VERSION Value Vertical Viewport Violet VioletRed W WNW WSW Wheat White WhiteSmoke WildStrawberry X XHIGH XLOW XY XYAlign XZ Y YAlign YHIGH YLOW YX YZ Yellow YellowGreen YellowOrange YlGn YlGnBu YlOrBr YlOrRd Z ZHIGH ZLOW ZX ZY Zero _outpipe a aboveequationskip addpenarc addpenline align allowstepping angleprecision angularsystem animationdelay appendsuffix arcarrowangle arcarrowfactor arrow2sizelimit arrowangle arrowbarb arrowdir arrowfactor arrowhookfactor arrowlength arrowsizelimit arrowtexfactor artificialColumn authorpen autumn axis axiscoverage axislabelfactor background backgroundcolor backgroundpen barfactor barmarksizefactor basealign baselinetemplate bernstein beveljoin bigvertexpen bigvertexsize binary black blue bm bone bottom bp bracedefaultratio braceinnerangle bracemidangle braceouterangle brg brown bullet bwr byfoci byvertices camerafactor chartreuse circlemarkradiusfactor circlenodesnumberfactor circleprecision circlescale cividis cm codefile codepen codeskip colorPen coloredNodes coloredSegments conditionlength conicnodesfactor cool coolwarm copper count cputimeformat crossmarksizefactor currentcoordsys currentlight currentpatterns currentpen currentpicture currentposition currentprojection curvilinearsystem cuttings cyan darkblue darkbrown darkcyan darkgray darkgreen darkgrey darkmagenta darkolive darkred dashdotted dashed datepen dateskip debuggerli!
 nes debugging deepblue deepcyan deepgray deepgreen deepgrey deepmagenta deepred deepyellow default defaultControl defaultS defaultbackpen defaultcoordsys defaultembed3Doptions defaultembed3Dscript defaultexcursion defaulteyetoview defaultfilename defaultformat defaultfresnel0 defaultmassformat defaultmetallic defaultpen defaultrender defaultseparator defaultshininess diamond differentlengths dot dotfactor dotfilltype dotframe dotted doublelinepen doublelinespacing down duplicateFuzz ellipsenodesnumberfactor eps epsgeo epsilon evenodd expansionfactor extendcap fermionpen figureborder figuremattpen file3 firstnode firststep foregroundcolor fuchsia fuzz gapfactor ghostpen gist_earth gist_ncar gist_stern gluonamplitude gluonpen gluonratio gray green grey hatchepsilon havepagenumber heavyblue heavycyan heavygray heavygreen heavygrey heavymagenta heavyred hline hot hsv hwratio hyperbolanodesnumberfactor i identity identity4 ignore implicitshipout inch inches includegraphicscommand inf inferno infinity institutionpen intMax intMin invert invisible itempen itemskip itemstep jet labelmargin landscape lastnode left legendhskip legendlinelength legendmargin legendmarkersize legendmaxrelativewidth legendvskip lightblue lightcyan lightgray lightgreen lightgrey lightmagenta lightolive lightred lightyellow linemargin lm_infmsg lm_shortmsg longdashdotted longdashed magenta magma magneticRadius mantissaBits markangleradius markangleradiusfactor markanglespace markanglespacefactor maxDenominator maxangleiterations maxrefinements mediumblue mediumcyan mediumgray mediumgreen mediumgrey mediummagenta mediumred mediumyellow middle minDistDefault minblockheight minblockwidth mincirclediameter minipagemargin minipagewidth minvertexangle miterjoin mm momarrowfactor momarrowlength momarrowmargin momarrowoffset momarrowpen monoPen morepoints nCircle nan newbulletcolor ngraph nil nineth nipy_spectral nmesh noTension nobasealign nocontrol nodeMarginDefault nodesystem nolight nomarker nopoint noprimary nslice nullpath nullpen nullpens nullsu!
 rface numarray oblique obliqueX obliqueY obliqueZ ocgindex octant1 octant1x oldbulletcolor olive optimizeTableau orange origin overpaint page pageheight pagemargin pagenumberalign pagenumberpen pagenumberposition pagewidth paleblue palecyan palegray palegreen palegrey palemagenta palered paleyellow parabolanodesnumberfactor perpfactor phi photonamplitude photonpen photonratio pi pink plain plain_bounds plasma plus preamblenodes pt purple r3 r4a r4b randMax realDigits realEpsilon realMax realMin red relativesystem reverse right roundcap roundjoin royalblue salmon saveFunctions scalarpen seismic sequencereal settings signedtrailingzero solid spinner spring springgreen sqrtEpsilon squarecap squarepen startposition stdin stdout stepfactor stepfraction steppagenumberpen stepping stickframe stickmarksizefactor stickmarkspacefactor summer swap t1 t2 t3 tab10 tab20 tab20b tab20c textpen ticksize tildeframe tildemarksizefactor tinv titlealign titlepagepen titlepageposition titlepen titleskip top trailingzero treeLevelStep treeMinNodeWidth treeNodeStep trembleAngle trembleFrequency trembleRandom tubegranularity tubethreshold twilight twilight_shifted undefined unitbox unitcircle unitcircle3 unitcone unitcube unitcylinder unitcylinder1 unitdisk unithemisphere unitplane unitsolidcone unitsphere unitsquare unitsquare3 up urlpen urlskip v3dheadertypes v3dtypes version vertexpen vertexsize viewportmargin viewportsize viridis vline white winter wistia wye yellow ylabelwidth zeroTransform zerotickfuzz zerowinding ))

Modified: trunk/Master/texmf-dist/asymptote/asy-mode.el
===================================================================
--- trunk/Master/texmf-dist/asymptote/asy-mode.el	2025-02-10 15:30:00 UTC (rev 73846)
+++ trunk/Master/texmf-dist/asymptote/asy-mode.el	2025-02-10 16:49:00 UTC (rev 73847)
@@ -1600,5 +1600,20 @@
   (asy-master-tex-view 'lasy-view-pdf-via-ps2pdf t t))
 (define-key asy-mode-map (kbd "<C-M-S-return>") 'asy-master-tex-view-ps2pdf-f)
 
+;; Integrate with flycheck
+(with-eval-after-load 'flycheck
+  (flycheck-define-command-checker 'asy
+    "Syntax checking of asymptote files."
+    :command (append
+              (split-string (concat asy-command-location asy-command))
+              '("-noV" "-o" temporary-file-name source))
+    :error-patterns
+    ;; filename.asy: 123.45: warning: message
+    ;; filename.asy: 123.45: error message
+    '((warning line-start (file-name) ":" (* space) line (? ?\. column) ": warning: " (message) line-end)
+      (error line-start (file-name) ":" (* space) line (? ?\. column) ": " (message) line-end))
+    :modes '(asy-mode))
+  (add-to-list 'flycheck-checkers 'asy))
+
 (provide `asy-mode)
 ;;; asy-mode.el ends here

Modified: trunk/Master/texmf-dist/asymptote/feynman.asy
===================================================================
--- trunk/Master/texmf-dist/asymptote/feynman.asy	2025-02-10 15:30:00 UTC (rev 73846)
+++ trunk/Master/texmf-dist/asymptote/feynman.asy	2025-02-10 16:49:00 UTC (rev 73847)
@@ -342,10 +342,13 @@
   draw(pic, p, fgpen, arrow);
 }
 
-// draw a double line on picture pic, along path p with pen fgpen, an inner
-// spacing of dlspacint and an arrowhead arrow. If erasebg is true, bgpen is
-// used to erase the background at a margin margin around the line. The
-// background is not erased at a certain distance to the endpoints, which is
+arrowbar DoubleLineMidArrow=MidArrow(Fill(doublelinepen));
+
+// draw a double line on picture pic, along path p with pen fgpen and
+// an inner spacing of dlspacint. An optional arrowhead DoubleLineMidArrow
+// can be specified. If erasebg is true, bgpen is used to erase the
+// background at a margin margin around the line. The background is
+// not erased at a certain distance to the endpoints, which is
 // determined by vertexangle (see comments to the default parameter
 // minvertexangle).
 void drawDoubleLine(picture pic = currentpicture,
@@ -352,7 +355,7 @@
                     path p,
                     pen fgpen = doublelinepen,
                     real dlspacing = doublelinespacing,
-                    arrowbar arrow = currentarrow,
+                    arrowbar arrow = None,
                     bool erasebg = overpaint,
                     pen bgpen = backgroundpen,
                     real vertexangle = minvertexangle,
@@ -618,5 +621,3 @@
   close(tf);
   shipout(stem+suffix, pic);
 }
-
-

Modified: trunk/Master/texmf-dist/asymptote/graph3.asy
===================================================================
--- trunk/Master/texmf-dist/asymptote/graph3.asy	2025-02-10 15:30:00 UTC (rev 73846)
+++ trunk/Master/texmf-dist/asymptote/graph3.asy	2025-02-10 16:49:00 UTC (rev 73847)
@@ -68,7 +68,7 @@
 // Signature of routines that draw labelled paths with ticks and tick labels.
 typedef void ticks3(picture, transform3, Label, path3, path3, pen,
                     arrowbar3, margin3, ticklocate, int[], bool opposite=false,
-                    bool primary=true);
+                    bool primary=true, projection P);
 
 // Label a tick on a frame.
 void labeltick(picture pic, transform3 T, path3 g,
@@ -164,7 +164,8 @@
 {
   return new void(picture pic, transform3 t, Label L, path3 g, path3 g2, pen p,
                   arrowbar3 arrow, margin3 margin, ticklocate locate,
-                  int[] divisor, bool opposite, bool primary) {
+                  int[] divisor, bool opposite, bool primary,
+                  projection P=currentprojection) {
     // Use local copy of context variables:
     int Sign=opposite ? -1 : 1;
     int sign=Sign*sign;
@@ -261,17 +262,18 @@
   return new void(picture pic, transform3 T, Label L,
                   path3 g, path3 g2, pen p,
                   arrowbar3 arrow, margin3 margin=NoMargin3, ticklocate locate,
-                  int[] divisor, bool opposite, bool primary) {
+                  int[] divisor, bool opposite, bool primary,
+                  projection P=currentprojection) {
     path3 G=T*g;
     real limit=Step == 0 ? axiscoverage*arclength(G) : 0;
     tickvalues values=modify(generateticks(sign,F,ticklabel,N,n,Step,step,
                                            Size,size,identity(),1,
-                                           project(G,currentprojection),
+                                           project(G,P),
                                            limit,p,locate,divisor,
                                            opposite));
     Ticks3(sign,F,ticklabel,beginlabel,endlabel,values.major,values.minor,
            values.N,begin,end,Size,size,extend,pTick,ptick)
-      (pic,T,L,g,g2,p,arrow,margin,locate,divisor,opposite,primary);
+      (pic,T,L,g,g2,p,arrow,margin,locate,divisor,opposite,primary,P);
   };
 }
 
@@ -279,7 +281,8 @@
 {
   return new void(picture pic, transform3 T, Label L, path3 g,
                   path3, pen p, arrowbar3 arrow, margin3 margin,
-                  ticklocate, int[], bool opposite, bool primary) {
+                  ticklocate, int[], bool opposite, bool primary,
+                  projection P=currentprojection) {
     path3 G=T*g;
     if(primary) draw(pic,margin(G,p).g,p,arrow,margin);
     else draw(pic,G,p);
@@ -478,9 +481,10 @@
   divisor=copy(divisor);
   locate=locate.copy();
 
-  pic.add(new void (picture f, transform3 t, transform3 T, triple, triple) {
+  pic.add(new void (picture f, transform3 t, transform3 T,
+                    projection P, triple, triple) {
       picture d;
-      ticks(d,t,L,g,g2,p,arrow,margin,locate,divisor,opposite,true);
+      ticks(d,t,L,g,g2,p,arrow,margin,locate,divisor,opposite,true,P);
       add(f,t*T*inverse(t)*d);
     },above=above);
 
@@ -522,12 +526,13 @@
               real xmin=-infinity, real xmax=infinity, pen p=currentpen,
               ticks3 ticks=NoTicks3,
               arrowbar3 arrow=None, margin3 margin=NoMargin3, bool above=true,
-              bool opposite=false, bool opposite2=false, bool primary=true)
+              bool opposite=false, bool opposite2=false, bool primary=true,
+              projection P=currentprojection)
 {
   int type=axis.type;
   int type2=axis.type2;
   triple dir=axis.align.dir3 == O ?
-    defaultdir(Y,Z,X,opposite^opposite2,currentprojection) : axis.align.dir3;
+    defaultdir(Y,Z,X,opposite^opposite2,P) : axis.align.dir3;
   Label L=L.copy();
   if(L.align.dir3 == O && L.align.dir == 0) L.align(opposite ? -dir : dir);
 
@@ -536,8 +541,8 @@
   real y2,z2;
   int[] divisor=copy(axis.xdivisor);
 
-  pic.add(new void(picture f, transform3 t, transform3 T, triple lb,
-                   triple rt) {
+  pic.add(new void(picture f, transform3 t, transform3 T, projection P,
+                   triple lb, triple rt) {
             transform3 tinv=inverse(t);
             triple a=xmin == -infinity ? tinv*(lb.x-min3(p).x,ytrans(t,y),
                                                ztrans(t,z)) : (xmin,y,z);
@@ -573,7 +578,7 @@
             ticks(d,t,L,a--b,finite(y0) && finite(z0) ? a2--b2 : nullpath3,
                   p,arrow,margin,
                   ticklocate(a.x,b.x,pic.scale.x,Dir(dir)),divisor,
-                  opposite,primary);
+                  opposite,primary,P);
             add(f,t*T*tinv*d);
           },above=above);
 
@@ -621,7 +626,7 @@
       ticks(d,pic.scaling3(warn=false),L,
             (a.x,0,0)--(b.x,0,0),(a2.x,0,0)--(b2.x,0,0),p,arrow,margin,
             ticklocate(a.x,b.x,pic.scale.x,Dir(dir)),divisor,
-            opposite,primary);
+            opposite,primary,P);
       frame f;
       if(L.s != "") {
         Label L0=L.copy();
@@ -655,12 +660,13 @@
               real ymin=-infinity, real ymax=infinity, pen p=currentpen,
               ticks3 ticks=NoTicks3,
               arrowbar3 arrow=None, margin3 margin=NoMargin3, bool above=true,
-              bool opposite=false, bool opposite2=false, bool primary=true)
+              bool opposite=false, bool opposite2=false, bool primary=true,
+              projection P=currentprojection)
 {
   int type=axis.type;
   int type2=axis.type2;
   triple dir=axis.align.dir3 == O ?
-    defaultdir(X,Z,Y,opposite^opposite2,currentprojection) : axis.align.dir3;
+    defaultdir(X,Z,Y,opposite^opposite2,P) : axis.align.dir3;
   Label L=L.copy();
   if(L.align.dir3 == O && L.align.dir == 0) L.align(opposite ? -dir : dir);
 
@@ -669,8 +675,8 @@
   real x2,z2;
   int[] divisor=copy(axis.ydivisor);
 
-  pic.add(new void(picture f, transform3 t, transform3 T, triple lb,
-                   triple rt) {
+  pic.add(new void(picture f, transform3 t, transform3 T, projection P,
+                   triple lb, triple rt) {
             transform3 tinv=inverse(t);
             triple a=ymin == -infinity ? tinv*(xtrans(t,x),lb.y-min3(p).y,
                                                ztrans(t,z)) : (x,ymin,z);
@@ -706,7 +712,7 @@
             ticks(d,t,L,a--b,finite(x0) && finite(z0) ? a2--b2 : nullpath3,
                   p,arrow,margin,
                   ticklocate(a.y,b.y,pic.scale.y,Dir(dir)),divisor,
-                  opposite,primary);
+                  opposite,primary,P);
             add(f,t*T*tinv*d);
           },above=above);
 
@@ -754,7 +760,7 @@
       ticks(d,pic.scaling3(warn=false),L,
             (0,a.y,0)--(0,b.y,0),(0,a2.y,0)--(0,a2.y,0),p,arrow,margin,
             ticklocate(a.y,b.y,pic.scale.y,Dir(dir)),divisor,
-            opposite,primary);
+            opposite,primary,P);
       frame f;
       if(L.s != "") {
         Label L0=L.copy();
@@ -788,12 +794,13 @@
               real zmin=-infinity, real zmax=infinity, pen p=currentpen,
               ticks3 ticks=NoTicks3,
               arrowbar3 arrow=None, margin3 margin=NoMargin3, bool above=true,
-              bool opposite=false, bool opposite2=false, bool primary=true)
+              bool opposite=false, bool opposite2=false, bool primary=true,
+              projection P=currentprojection)
 {
   int type=axis.type;
   int type2=axis.type2;
   triple dir=axis.align.dir3 == O ?
-    defaultdir(X,Y,Z,opposite^opposite2,currentprojection) : axis.align.dir3;
+    defaultdir(X,Y,Z,opposite^opposite2,P) : axis.align.dir3;
   Label L=L.copy();
   if(L.align.dir3 == O && L.align.dir == 0) L.align(opposite ? -dir : dir);
 
@@ -802,8 +809,8 @@
   real x2,y2;
   int[] divisor=copy(axis.zdivisor);
 
-  pic.add(new void(picture f, transform3 t, transform3 T, triple lb,
-                   triple rt) {
+  pic.add(new void(picture f, transform3 t, transform3 T, projection P,
+                   triple lb, triple rt) {
             transform3 tinv=inverse(t);
             triple a=zmin == -infinity ? tinv*(xtrans(t,x),ytrans(t,y),
                                                lb.z-min3(p).z) : (x,y,zmin);
@@ -839,7 +846,7 @@
             ticks(d,t,L,a--b,finite(x0) && finite(y0) ? a2--b2 : nullpath3,
                   p,arrow,margin,
                   ticklocate(a.z,b.z,pic.scale.z,Dir(dir)),divisor,
-                  opposite,primary);
+                  opposite,primary,P);
             add(f,t*T*tinv*d);
           },above=above);
 
@@ -887,7 +894,7 @@
       ticks(d,pic.scaling3(warn=false),L,
             (0,0,a.z)--(0,0,b.z),(0,0,a2.z)--(0,0,a2.z),p,arrow,margin,
             ticklocate(a.z,b.z,pic.scale.z,Dir(dir)),divisor,
-            opposite,primary);
+            opposite,primary,P);
       frame f;
       if(L.s != "") {
         Label L0=L.copy();
@@ -945,7 +952,8 @@
 void xaxis3(picture pic=currentpicture, Label L="", axis axis=YZZero,
             real xmin=-infinity, real xmax=infinity, pen p=currentpen,
             ticks3 ticks=NoTicks3,
-            arrowbar3 arrow=None, margin3 margin=NoMargin3, bool above=false)
+            arrowbar3 arrow=None, margin3 margin=NoMargin3, bool above=false,
+            projection P=currentprojection)
 {
   if(xmin > xmax) return;
 
@@ -1001,7 +1009,8 @@
 
   bool back=false;
   if(axis.type == Both) {
-    triple v=currentprojection.normal;
+    projection P=centered(P,pic);
+    triple v=P.normal;
     back=dot((0,pic.userMax().y-pic.userMin().y,0),v)*sgn(v.z) > 0;
   }
 
@@ -1019,7 +1028,8 @@
 void yaxis3(picture pic=currentpicture, Label L="", axis axis=XZZero,
             real ymin=-infinity, real ymax=infinity, pen p=currentpen,
             ticks3 ticks=NoTicks3,
-            arrowbar3 arrow=None, margin3 margin=NoMargin3, bool above=false)
+            arrowbar3 arrow=None, margin3 margin=NoMargin3, bool above=false,
+            projection P=currentprojection)
 {
   if(ymin > ymax) return;
 
@@ -1076,7 +1086,8 @@
 
   bool back=false;
   if(axis.type == Both) {
-    triple v=currentprojection.normal;
+    projection P=centered(P,pic);
+    triple v=P.normal;
     back=dot((pic.userMax().x-pic.userMin().x,0,0),v)*sgn(v.z) > 0;
   }
 
@@ -1094,7 +1105,8 @@
 void zaxis3(picture pic=currentpicture, Label L="", axis axis=XYZero,
             real zmin=-infinity, real zmax=infinity, pen p=currentpen,
             ticks3 ticks=NoTicks3,
-            arrowbar3 arrow=None, margin3 margin=NoMargin3, bool above=false)
+            arrowbar3 arrow=None, margin3 margin=NoMargin3, bool above=false,
+            projection P=currentprojection)
 {
   if(zmin > zmax) return;
 
@@ -1150,7 +1162,8 @@
 
   bool back=false;
   if(axis.type == Both) {
-    triple v=currentprojection.vector();
+    projection P=centered(P,pic);
+    triple v=P.vector();
     back=dot((pic.userMax().x-pic.userMin().x,0,0),v)*sgn(v.y) > 0;
   }
 
@@ -1200,11 +1213,12 @@
            bool extend=false,
            triple min=(-infinity,-infinity,-infinity),
            triple max=(infinity,infinity,infinity),
-           pen p=currentpen, arrowbar3 arrow=None, margin3 margin=NoMargin3)
+           pen p=currentpen, arrowbar3 arrow=None, margin3 margin=NoMargin3,
+           projection P=currentprojection)
 {
-  xaxis3(pic,xlabel,YZZero(extend),min.x,max.x,p,arrow,margin);
-  yaxis3(pic,ylabel,XZZero(extend),min.y,max.y,p,arrow,margin);
-  zaxis3(pic,zlabel,XYZero(extend),min.z,max.z,p,arrow,margin);
+  xaxis3(pic,xlabel,YZZero(extend),min.x,max.x,p,arrow,margin,P);
+  yaxis3(pic,ylabel,XZZero(extend),min.y,max.y,p,arrow,margin,P);
+  zaxis3(pic,zlabel,XYZero(extend),min.z,max.z,p,arrow,margin,P);
 }
 
 triple Scale(picture pic=currentpicture, triple v)
@@ -1659,7 +1673,7 @@
 
   surface s=surface(count);
   s.index=new int[nx][ny];
-  int k=-1;
+  int k=0;
   for(int i=0; i < nx; ++i) {
     bool[] condi,condp;
     if(!all) {
@@ -1670,13 +1684,15 @@
     triple[] fp=f[i+1];
     int[] indexi=s.index[i];
     for(int j=0; j < ny; ++j) {
-      if(all || (condi[j] && condi[j+1] && condp[j] && condp[j+1]))
-        s.s[++k]=patch(new triple[] {
+      if(all || (condi[j] && condi[j+1] && condp[j] && condp[j+1])) {
+        s.s[k]=patch(new triple[] {
             Scale(pic,fi[j]),
               Scale(pic,fp[j]),
               Scale(pic,fp[j+1]),
               Scale(pic,fi[j+1])});
-      indexi[j]=k;
+        indexi[j]=k;
+        ++k;
+      }
     }
   }
 
@@ -2062,11 +2078,13 @@
 
   surface s=surface(sx.length);
   s.index=new int[nu][nv];
-  int k=-1;
+  int k=0;
   for(int i=0; i < nu; ++i) {
     int[] indexi=s.index[i];
-    for(int j=0; j < nv; ++j)
-      indexi[j]=++k;
+    for(int j=0; j < nv; ++j) {
+      indexi[j]=k;
+      ++k;
+    }
   }
 
   for(int k=0; k < sx.length; ++k) {

Modified: trunk/Master/texmf-dist/asymptote/grid3.asy
===================================================================
--- trunk/Master/texmf-dist/asymptote/grid3.asy	2025-02-10 15:30:00 UTC (rev 73846)
+++ trunk/Master/texmf-dist/asymptote/grid3.asy	2025-02-10 16:49:00 UTC (rev 73847)
@@ -193,7 +193,8 @@
     grid3routines gridroutinej=gridroutine[j];
     for(int i=0; i < gridroutinej.length; ++i) {
       grid3 gt=gridroutinej[i](pic);
-      pic.add(new void(picture f, transform3 t, transform3 T, triple, triple) {
+      pic.add(new void(picture f, transform3 t, transform3 T,
+                       projection P, triple, triple) {
           picture d;
           ticks3 ticks=Ticks3(1,F="%",ticklabel=null,
                               beginlabel=false,endlabel=false,
@@ -202,7 +203,7 @@
                               Size=0,size=0,extend=true,
                               pTick=pGrid,ptick=pgrid);
           ticks(d,t,"",gt.axea,gt.axeb,nullpen,None,NoMargin3,gt.locate,
-                gt.bds.divisor,opposite=true,primary=false);
+                gt.bds.divisor,opposite=true,primary=false,P);
           add(f,t*T*inverse(t)*d);
         },above=above);
       addPath(pic,gt.axea,pGrid);

Modified: trunk/Master/texmf-dist/asymptote/map.asy
===================================================================
--- trunk/Master/texmf-dist/asymptote/map.asy	2025-02-10 15:30:00 UTC (rev 73846)
+++ trunk/Master/texmf-dist/asymptote/map.asy	2025-02-10 16:49:00 UTC (rev 73847)
@@ -1,40 +1,36 @@
-// Create a struct <name> parameterized by types <key> and <value>,
-// that maps keys to values, defaulting to the value in <default>.
-void mapTemplate(string name, string key, string value, string default)
-{
-  type(key,"Key");
-  type(value,"Value");
-  eval("Value default="+default,true);
+typedef import(Key, Value);
 
-  eval("
-  struct keyValue {
-    Key key;
-    Value T;
-    void operator init(Key key) {
-      this.key=key;
-    }
-    void operator init(Key key, Value T) {
-      this.key=key;
-      this.T=T;
-    }
+struct keyValue {
+  Key key;
+  Value value;
+  void operator init(Key key) {
+    this.key=key;
   }
+  void operator init(Key key, Value value) {
+    this.key=key;
+    this.value=value;
+  }
+}
 
-  struct map {
-    keyValue[] M;
-    bool operator < (keyValue a, keyValue b) {return a.key < b.key;}
+// Map keys to values, defaulting to the value default.
 
-    void add(Key key, Value T) {
-      keyValue m=keyValue(key,T);
-      M.insert(search(M,m,operator <)+1,m);
-    }
-    Value lookup(Key key) {
-      int i=search(M,keyValue(key),operator <);
-      if(i >= 0 && M[i].key == key) return M[i].T;
-      return default;
-    }
+struct map {
+  keyValue[] M;
+  Value Default;
+
+  void operator init(Value Default) {
+    this.Default=Default;
   }
-",true);
 
-  type("map",name);
+  bool operator < (keyValue a, keyValue b) {return a.key < b.key;}
+
+  void add(Key key, Value value) {
+    keyValue m=keyValue(key,value);
+    M.insert(search(M,m,operator <)+1,m);
+  }
+  Value lookup(Key key) {
+    int i=search(M,keyValue(key),operator <);
+    if(i >= 0 && M[i].key == key) return M[i].value;
+    return Default;
+  }
 }
-

Modified: trunk/Master/texmf-dist/asymptote/mapArray.asy
===================================================================
--- trunk/Master/texmf-dist/asymptote/mapArray.asy	2025-02-10 15:30:00 UTC (rev 73846)
+++ trunk/Master/texmf-dist/asymptote/mapArray.asy	2025-02-10 16:49:00 UTC (rev 73847)
@@ -6,4 +6,4 @@
   return sequence(
       new Dst(int i) {return f(a[i]);},
       a.length);
-}
\ No newline at end of file
+}

Modified: trunk/Master/texmf-dist/asymptote/plain.asy
===================================================================
--- trunk/Master/texmf-dist/asymptote/plain.asy	2025-02-10 15:30:00 UTC (rev 73846)
+++ trunk/Master/texmf-dist/asymptote/plain.asy	2025-02-10 16:49:00 UTC (rev 73847)
@@ -1,8 +1,8 @@
 /*****
- * plain.asy
- * Andy Hammerlindl and John Bowman 2004/08/19
+ *plain.asy
+ *Andy Hammerlindl and John Bowman 2004/08/19
  *
- * A package for general purpose drawing, with automatic sizing of pictures.
+ *A package for general purpose drawing, with automatic sizing of pictures.
  *
  *****/
 
@@ -41,7 +41,7 @@
 
 real RELEASE=(real) split(VERSION,"-")[0];
 
-typedef void exitfcn();
+using exitfcn=void();
 
 void updatefunction()
 {
@@ -63,8 +63,8 @@
 
 // A restore thunk is a function, that when called, restores the graphics state
 // to what it was when the restore thunk was created.
-typedef void restoreThunk();
-typedef restoreThunk saveFunction();
+using restoreThunk=void();
+using saveFunction=restoreThunk();
 saveFunction[] saveFunctions={};
 
 // When save is called, this will be redefined to do the corresponding restore.
@@ -82,18 +82,18 @@
 {
   // Call the save functions in reverse order, storing their restore thunks.
   restoreThunk[] thunks={};
-  for (int i=saveFunctions.length-1; i >= 0; --i)
+  for(int i=saveFunctions.length-1; i >= 0; --i)
     thunks.push(saveFunctions[i]());
 
   return new void() {
     // Call the restore thunks in an order matching the saves.
-    for (int i=thunks.length-1; i >= 0; --i)
+    for(int i=thunks.length-1; i >= 0; --i)
       thunks[i]();
   };
 }
 
 // Add the default save function.
-addSaveFunction(new restoreThunk () {
+addSaveFunction(new restoreThunk() {
     pen defaultpen=defaultpen();
     pen p=currentpen;
     picture pic=currentpicture.copy();
@@ -243,8 +243,8 @@
       settings.outformat=outformat;
       settings.interactiveView=interactiveView;
       settings.batchView=batchView;
-    }
-  }
+   }
+ }
 }
 
 void beep()

Modified: trunk/Master/texmf-dist/asymptote/plain_Label.asy
===================================================================
--- trunk/Master/texmf-dist/asymptote/plain_Label.asy	2025-02-10 15:30:00 UTC (rev 73846)
+++ trunk/Master/texmf-dist/asymptote/plain_Label.asy	2025-02-10 16:49:00 UTC (rev 73847)
@@ -201,7 +201,7 @@
 
 pair operator cast(position P) {return P.position;}
 
-typedef transform embed(transform);
+using embed=transform(transform);
 transform Shift(transform t) {return identity();}
 transform Rotate(transform t) {return rotation(t);}
 transform Slant(transform t) {return scaleless(t);}

Modified: trunk/Master/texmf-dist/asymptote/plain_arrows.asy
===================================================================
--- trunk/Master/texmf-dist/asymptote/plain_arrows.asy	2025-02-10 15:30:00 UTC (rev 73846)
+++ trunk/Master/texmf-dist/asymptote/plain_arrows.asy	2025-02-10 16:49:00 UTC (rev 73847)
@@ -299,7 +299,7 @@
   return pic;
 }
 
-typedef bool arrowbar(picture, path, pen, margin);
+using arrowbar=bool(picture, path, pen, margin);
 
 bool Blank(picture, path, pen, margin)
 {

Modified: trunk/Master/texmf-dist/asymptote/plain_bounds.asy
===================================================================
--- trunk/Master/texmf-dist/asymptote/plain_bounds.asy	2025-02-10 15:30:00 UTC (rev 73846)
+++ trunk/Master/texmf-dist/asymptote/plain_bounds.asy	2025-02-10 16:49:00 UTC (rev 73847)
@@ -28,9 +28,9 @@
 
   // The coordinate is not dominated by any existing extreme, so it is
   // maximal and will be added, but first remove any coords it now dominates.
-  int i = 0;
+  int i=0;
   while (i < coords.length) {
-    coord c = coords[i];
+    coord c=coords[i];
     if (c.user <= user && c.truesize <= truesize)
       coords.delete(i);
     else
@@ -54,9 +54,9 @@
     if (user >= c.user && truesize >= c.truesize)
       return;
 
-  int i = 0;
+  int i=0;
   while (i < coords.length) {
-    coord c = coords[i];
+    coord c=coords[i];
     if (c.user >= user && c.truesize >= truesize)
       coords.delete(i);
     else
@@ -76,9 +76,9 @@
 // frozen, then it cannot be modified further, and therefore can be safely
 // passed by reference and stored in the sizing data for multiple pictures.
 private struct freezableBounds {
-  restricted bool frozen = false;
+  restricted bool frozen=false;
   void freeze() {
-    frozen = true;
+    frozen=true;
   }
 
   // Optional links to further (frozen) sizing data.
@@ -105,7 +105,7 @@
 
     void operator init(path g, pen p) {
       this.g.push(g);
-      this.p = p;
+      this.p=p;
     }
   }
   private static pathpen operator *(transform t, pathpen pp) {
@@ -113,7 +113,7 @@
     pathpen newpp;
     for (path g : pp.g)
       newpp.g.push(t*g);
-    newpp.p = pp.p;
+    newpp.p=pp.p;
     return newpp;
   }
 
@@ -129,10 +129,10 @@
 
     void operator init(coord[] left, coord[] bottom,
                        coord[] right, coord[] top) {
-      this.left = left;
-      this.bottom = bottom;
-      this.right = right;
-      this.top = top;
+      this.left=left;
+      this.bottom=bottom;
+      this.right=right;
+      this.top=top;
     }
 
   }
@@ -153,13 +153,13 @@
     addIfMinimal(e.bottom, coords.y);
   }
 
-  private extremes cachedExtremes = null;
+  private extremes cachedExtremes=null;
 
   // Once frozen, getMutable returns a new object based on this one, which can
   // be modified.
   freezableBounds getMutable() {
     assert(frozen);
-    var f = new freezableBounds;
+    var f=new freezableBounds;
     f.links.push(this);
     return f;
   }
@@ -168,11 +168,11 @@
     // Freeze these bounds, as we are storing a reference to them.
     freeze();
 
-    var tlink = new transformedBounds;
-    tlink.t = t;
-    tlink.link = this;
+    var tlink=new transformedBounds;
+    tlink.t=t;
+    tlink.link=this;
 
-    var b = new freezableBounds;
+    var b=new freezableBounds;
     b.tlinks.push(tlink);
 
     return b;
@@ -220,7 +220,7 @@
   private void addPathToNonEmptyArray(path g, pen p) {
     //assert(!frozen);
     //assert(!pathpenBounds.empty());
-    var pp = pathpenBounds[0];
+    var pp=pathpenBounds[0];
 
     // Test if the pens are equal or have the same bounds.
     if (pp.p == p || (min(pp.p) == min(p) && max(pp.p) == max(p))) {
@@ -231,7 +231,7 @@
     else {
       // A different pen.  Start a new bound and put it on the front.  Put
       // the old bound at the end of the array.
-      pathpenBounds[0] = pathpen(g,p);
+      pathpenBounds[0]=pathpen(g,p);
       pathpenBounds.push(pp);
     }
   }
@@ -240,11 +240,11 @@
     //assert(pathpenBounds.empty());
 
     pathpenBounds.push(pathpen(g,p));
-    addPath = addPathToNonEmptyArray;
+    addPath=addPathToNonEmptyArray;
   }
 
   // Initial setting for addPath.
-  addPath = addPathToEmptyArray;
+  addPath=addPathToEmptyArray;
 
   // Transform the sizing info by t then add the result to the coords
   // structure.
@@ -258,15 +258,15 @@
     addTransformedCoords(coords, t, this.point, this.min, this.max);
 
     for (var g : pathBounds) {
-      g = t*g;
+      g=t*g;
       coords.push(min(g), (0,0));
       coords.push(max(g), (0,0));
     }
 
     for (var pp: pathpenBounds) {
-      pair pm = min(pp.p), pM = max(pp.p);
+      pair pm=min(pp.p), pM=max(pp.p);
       for (var g : pp.g) {
-        g = t*g;
+        g=t*g;
         coords.push(min(g), pm);
         coords.push(max(g), pM);
       }
@@ -291,7 +291,7 @@
     }
 
     for (var pp: pathpenBounds) {
-      pair pm = min(pp.p), pM = max(pp.p);
+      pair pm=min(pp.p), pM=max(pp.p);
       for (var g : pp.g) {
         coords.push(min(g), pm);
         coords.push(max(g), pM);
@@ -390,7 +390,7 @@
 
       extremes e;
       addToExtremes(e);
-      cachedExtremes = e;
+      cachedExtremes=e;
     }
 
     return cachedExtremes;
@@ -421,7 +421,7 @@
 
     void push(transform t, userbounds b) {
       if (b.areSet) {
-        pair[] box = { t*(b.min.x,b.max.y), t*b.max,
+        pair[] box={ t*(b.min.x,b.max.y), t*b.max,
                        t*b.min,             t*(b.max.x,b.min.y) };
         for (var z : box)
           push(z,z);
@@ -429,12 +429,12 @@
     }
 
     void pushUserCoords(coords2 min, coords2 max) {
-      int n = min.x.length;
+      int n=min.x.length;
       assert(min.y.length == n);
       assert(max.x.length == n);
       assert(max.y.length == n);
 
-      for (int i = 0; i < n; ++i)
+      for (int i=0; i < n; ++i)
         push((min.x[i].user, min.y[i].user),
              (max.x[i].user, max.y[i].user));
     }
@@ -442,12 +442,12 @@
     userbounds collapse() {
       userbounds b;
       if (mins.length > 0) {
-        b.areSet = true;
-        b.min = minbound(mins);
-        b.max = maxbound(maxs);
+        b.areSet=true;
+        b.min=minbound(mins);
+        b.max=maxbound(maxs);
       }
       else {
-        b.areSet = false;
+        b.areSet=false;
       }
       return b;
     }
@@ -454,7 +454,7 @@
   }
 
   // The user bounds already calculated for this data.
-  private userbounds storedUserBounds = null;
+  private userbounds storedUserBounds=null;
 
   private void accumulateUserBounds(boundsAccumulator acc)
   {
@@ -485,7 +485,7 @@
     freeze();
     boundsAccumulator acc;
     accumulateUserBounds(acc);
-    storedUserBounds = acc.collapse();
+    storedUserBounds=acc.collapse();
   }
 
   private userbounds userBounds() {
@@ -523,16 +523,16 @@
     computeUserBounds();
     assert(frozen);
 
-    var b = storedUserBounds;
+    var b=storedUserBounds;
     if (which == "minx")
-      b.min = (val, b.min.y);
+      b.min=(val, b.min.y);
     else if (which == "miny")
-      b.min = (b.min.x, val);
+      b.min=(b.min.x, val);
     else if (which == "maxx")
-      b.max = (val, b.max.y);
+      b.max=(val, b.max.y);
     else {
       assert(which == "maxy");
-      b.max = (b.max.x, val);
+      b.max=(b.max.x, val);
     }
   }
 
@@ -546,7 +546,7 @@
     computeUserBounds();
 
     // Calculate all coordinates.
-    coords2 coords = allCoords();
+    coords2 coords=allCoords();
 
     // Erase all the old data.
     point.erase();
@@ -554,12 +554,12 @@
     max.erase();
     pathBounds.delete();
     pathpenBounds.delete();
-    addPath = addPathToEmptyArray;
+    addPath=addPathToEmptyArray;
     links.delete();
     tlinks.delete();
 
     // Put all of the coordinates into point.
-    point = coords;
+    point=coords;
   }
 
   void xclip(real Min, real Max) {
@@ -570,9 +570,9 @@
     max.xclip(Min,Max);
 
     // Cap the userBounds.
-    userbounds b = storedUserBounds;
-    b.min = (max(Min, b.min.x), b.min.y);
-    b.max = (min(Max, b.max.x), b.max.y);
+    userbounds b=storedUserBounds;
+    b.min=(max(Min, b.min.x), b.min.y);
+    b.max=(min(Max, b.max.x), b.max.y);
   }
 
   void yclip(real Min, real Max) {
@@ -583,14 +583,14 @@
     max.yclip(Min,Max);
 
     // Cap the userBounds.
-    userbounds b = storedUserBounds;
-    b.min = (b.min.x, max(Min, b.min.y));
-    b.max = (b.max.x, min(Max, b.max.y));
+    userbounds b=storedUserBounds;
+    b.min=(b.min.x, max(Min, b.min.y));
+    b.max=(b.max.x, min(Max, b.max.y));
   }
 
   // Calculate the min for the final frame, given the coordinate transform.
   pair min(transform t) {
-    extremes e = extremes();
+    extremes e=extremes();
     if (e.left.length == 0)
       return 0;
 
@@ -603,7 +603,7 @@
 
   // Calculate the max for the final frame, given the coordinate transform.
   pair max(transform t) {
-    extremes e = extremes();
+    extremes e=extremes();
     if (e.right.length == 0)
       return 0;
 
@@ -622,7 +622,7 @@
       return identity();
 
     // Get the extremal coordinates.
-    extremes e = extremes();
+    extremes e=extremes();
 
     real sx;
     if(xunitsize == 0) {
@@ -630,7 +630,7 @@
     } else sx=xunitsize;
 
     /* Possible alternative code :
-       real sx = xunitsize != 0 ? xunitsize :
+       real sx=xunitsize != 0 ? xunitsize :
        xsize != 0     ? calculateScaling("x", Coords.x, xsize, warn) :
        0; */
 
@@ -654,10 +654,10 @@
 }
 
 struct bounds {
-  private var base = new freezableBounds;
+  private var base=new freezableBounds;
 
   // We should probably put this back into picture.
-  bool exact = true;
+  bool exact=true;
 
   // Called just before modifying the sizing data.  It ensures base is
   // non-frozen.
@@ -665,13 +665,13 @@
   // called methods below.
   private void makeMutable() {
     if (base.frozen)
-      base = base.getMutable();
+      base=base.getMutable();
     //assert(!base.frozen); // Disabled for speed reasons.
   }
 
   void erase() {
     // Just discard the old bounds.
-    base = new freezableBounds;
+    base=new freezableBounds;
 
     // We don't reset the 'exact' field, for backward compatibility.
   }
@@ -680,16 +680,16 @@
     // Freeze the underlying bounds and make a shallow copy.
     base.freeze();
 
-    var b = new bounds;
-    b.base = this.base;
-    b.exact = this.exact;
+    var b=new bounds;
+    b.base=this.base;
+    b.exact=this.exact;
     return b;
   }
 
   bounds transformed(transform t) {
-    var b = new bounds;
-    b.base = base.transformed(t);
-    b.exact = this.exact;
+    var b=new bounds;
+    b.base=base.transformed(t);
+    b.exact=this.exact;
     return b;
   }
 
@@ -719,7 +719,7 @@
   void addPath(path g) {
     //makeMutable(); // Manually inlined here for speed reasons.
     if (base.frozen)
-      base = base.getMutable();
+      base=base.getMutable();
     base.addPath(g);
   }
 
@@ -726,7 +726,7 @@
   void addPath(path[] g) {
     //makeMutable(); // Manually inlined here for speed reasons.
     if (base.frozen)
-      base = base.getMutable();
+      base=base.getMutable();
     base.addPath(g);
   }
 
@@ -733,7 +733,7 @@
   void addPath(path g, pen p) {
     //makeMutable(); // Manually inlined here for speed reasons.
     if (base.frozen)
-      base = base.getMutable();
+      base=base.getMutable();
     base.addPath(g, p);
   }
 

Modified: trunk/Master/texmf-dist/asymptote/plain_boxes.asy
===================================================================
--- trunk/Master/texmf-dist/asymptote/plain_boxes.asy	2025-02-10 15:30:00 UTC (rev 73846)
+++ trunk/Master/texmf-dist/asymptote/plain_boxes.asy	2025-02-10 16:49:00 UTC (rev 73847)
@@ -1,3 +1,12 @@
+void fillbox(frame dest, path g, pen p=currentpen, filltype filltype=NoFill, bool above=true)
+{
+  if(above == false) {
+    frame F;
+    filltype.fill(F,g,p);
+    prepend(dest,F);
+  } else filltype.fill(dest,g,p);
+}
+
 // Draw and/or fill a box on frame dest using the dimensions of frame src.
 path box(frame dest, frame src=dest, real xmargin=0, real ymargin=xmargin,
          pen p=currentpen, filltype filltype=NoFill, bool above=true)
@@ -6,11 +15,7 @@
   int sign=filltype == NoFill ? 1 : -1;
   pair h=0.5*sign*(max(p)-min(p));
   path g=box(min(src)-h-z,max(src)+h+z);
-  frame F;
-  if(above == false) {
-    filltype.fill(F,g,p);
-    prepend(dest,F);
-  } else filltype.fill(dest,g,p);
+  fillbox(dest,g,p,filltype,above);
   return g;
 }
 
@@ -28,12 +33,7 @@
   (dw,b)--(a-dw,b){right}..{down}
   (a,b-dw)--(a,dw){down}..{left}
   (a-dw,0)--(dw,0){left}..{up}cycle);
-
-  frame F;
-  if(above == false) {
-    filltype.fill(F,g,p);
-    prepend(dest,F);
-  } else filltype.fill(dest,g,p);
+  fillbox(dest,g,p,filltype,above);
   return g;
 }
 
@@ -47,11 +47,7 @@
   int sign=filltype == NoFill ? 1 : -1;
   pair h=0.5*sign*(max(p)-min(p));
   path g=ellipse(0.5*(M+m),factor*D.x+h.x+xmargin,factor*D.y+h.y+ymargin);
-  frame F;
-  if(above == false) {
-    filltype.fill(F,g,p);
-    prepend(dest,F);
-  } else filltype.fill(dest,g,p);
+  fillbox(dest,g,p,filltype,above);
   return g;
 }
 
@@ -76,7 +72,7 @@
   return ellipse(f,xmargin,ymargin,p,filltype,above);
 }
 
-typedef path envelope(frame dest, frame src=dest, real xmargin=0,
+using envelope=path(frame dest, frame src=dest, real xmargin=0,
                       real ymargin=xmargin, pen p=currentpen,
                       filltype filltype=NoFill, bool above=true);
 

Modified: trunk/Master/texmf-dist/asymptote/plain_constants.asy
===================================================================
--- trunk/Master/texmf-dist/asymptote/plain_constants.asy	2025-02-10 15:30:00 UTC (rev 73846)
+++ trunk/Master/texmf-dist/asymptote/plain_constants.asy	2025-02-10 16:49:00 UTC (rev 73847)
@@ -70,7 +70,7 @@
 void DOSnewl(file file) {write(file,'\r\n');}
 void tab(file file) {write(file,'\t');}
 void comma(file file) {write(file,',');}
-typedef void suffix(file);
+using suffix=void(file);
 
 // Used by interactive write to warn that the outputted type is the resolution
 // of an overloaded name.

Modified: trunk/Master/texmf-dist/asymptote/plain_filldraw.asy
===================================================================
--- trunk/Master/texmf-dist/asymptote/plain_filldraw.asy	2025-02-10 15:30:00 UTC (rev 73846)
+++ trunk/Master/texmf-dist/asymptote/plain_filldraw.asy	2025-02-10 16:49:00 UTC (rev 73847)
@@ -90,7 +90,7 @@
 
 struct filltype
 {
-  typedef void fill2(frame f, path[] g, pen fillpen);
+  using fill2=void(frame f, path[] g, pen fillpen);
   fill2 fill2;
   pen fillpen;
   pen drawpen;

Modified: trunk/Master/texmf-dist/asymptote/plain_margins.asy
===================================================================
--- trunk/Master/texmf-dist/asymptote/plain_margins.asy	2025-02-10 15:30:00 UTC (rev 73846)
+++ trunk/Master/texmf-dist/asymptote/plain_margins.asy	2025-02-10 16:49:00 UTC (rev 73847)
@@ -3,7 +3,7 @@
   real begin,end;
 };
 
-typedef marginT margin(path, pen);
+using margin=marginT(path, pen);
 
 path trim(path g, real begin, real end=begin) {
   real a=arctime(g,begin);

Modified: trunk/Master/texmf-dist/asymptote/plain_markers.asy
===================================================================
--- trunk/Master/texmf-dist/asymptote/plain_markers.asy	2025-02-10 15:30:00 UTC (rev 73846)
+++ trunk/Master/texmf-dist/asymptote/plain_markers.asy	2025-02-10 16:49:00 UTC (rev 73847)
@@ -44,7 +44,7 @@
 path plus=rotate(45)*cross(4);
 path diamond=rotate(45)*polygon(4);
 
-typedef void markroutine(picture pic=currentpicture, frame f, path g);
+using markroutine=void(picture pic=currentpicture, frame f, path g);
 
 // On picture pic, add frame f about every node of path g.
 void marknodes(picture pic=currentpicture, frame f, path g) {
@@ -309,7 +309,7 @@
   return sequence(new pair(int i) {return (x[i],y[i]);},x.length);
 }
 
-filltype dotfilltype = Fill;
+filltype dotfilltype=Fill;
 
 void dot(frame f, pair z, pen p=currentpen, filltype filltype=dotfilltype)
 {

Modified: trunk/Master/texmf-dist/asymptote/plain_paths.asy
===================================================================
--- trunk/Master/texmf-dist/asymptote/plain_paths.asy	2025-02-10 15:30:00 UTC (rev 73846)
+++ trunk/Master/texmf-dist/asymptote/plain_paths.asy	2025-02-10 16:49:00 UTC (rev 73847)
@@ -1,6 +1,6 @@
 path nullpath;
 
-typedef guide interpolate(... guide[]);
+using interpolate=guide(... guide[]);
 
 // These numbers identify the side of a specifier in an operator spec or
 // operator curl expression:

Modified: trunk/Master/texmf-dist/asymptote/plain_picture.asy
===================================================================
--- trunk/Master/texmf-dist/asymptote/plain_picture.asy	2025-02-10 15:30:00 UTC (rev 73846)
+++ trunk/Master/texmf-dist/asymptote/plain_picture.asy	2025-02-10 16:49:00 UTC (rev 73847)
@@ -1,5 +1,4 @@
 // Pre picture <<<1
-import plain_scaling;
 import plain_bounds;
 
 include plain_prethree;
@@ -61,7 +60,7 @@
 }
 
 // scaleT and Legend <<<
-typedef real scalefcn(real x);
+using scalefcn=real(real);
 
 struct scaleT {
   scalefcn T,Tinv;
@@ -87,7 +86,7 @@
   return S;
 }
 
-typedef void boundRoutine();
+using boundRoutine=void();
 
 struct autoscaleT {
   scaleT scale;
@@ -163,11 +162,11 @@
 
 // A function that draws an object to frame pic, given that the transform
 // from user coordinates to true-size coordinates is t.
-typedef void drawer(frame f, transform t);
+using drawer=void(frame f, transform t);
 
 // A generalization of drawer that includes the final frame's bounds.
 // TODO: Add documentation as to what T is.
-typedef void drawerBound(frame f, transform t, transform T, pair lb, pair rt);
+using drawerBound=void(frame f, transform t, transform T, pair lb, pair rt);
 
 struct node {
   drawerBound d;
@@ -183,13 +182,13 @@
 // pair and a triple depending on the context.
 struct pairOrTriple {
   real x,y,z;
-  void init() { x = y = z = 0; }
+  void init() { x=y=z=0; }
 };
 void copyPairOrTriple(pairOrTriple dest, pairOrTriple src)
 {
-  dest.x = src.x;
-  dest.y = src.y;
-  dest.z = src.z;
+  dest.x=src.x;
+  dest.y=src.y;
+  dest.z=src.z;
 }
 pair operator cast (pairOrTriple a) {
   return (a.x, a.y);
@@ -204,8 +203,8 @@
 struct picture { // <<<1
   // Nodes <<<2
   // Three-dimensional version of drawer and drawerBound:
-  typedef void drawer3(frame f, transform3 t, picture pic, projection P);
-  typedef void drawerBound3(frame f, transform3 t, transform3 T,
+  using drawer3=void(frame f, transform3 t, picture pic, projection P);
+  using drawerBound3=void(frame f, transform3 t, transform3 T,
                             picture pic, projection P, triple lb, triple rt);
 
   struct node3 {
@@ -222,6 +221,8 @@
   node3[] nodes3;
 
   bool uptodate=true;
+  bool queueErase=false;
+  bool queueErase3=false;
 
   struct bounds3 {
     coords3 point,min,max;
@@ -286,6 +287,9 @@
 
   // Erase the current picture, retaining bounds.
   void clear() {
+    queueErase=nodes.length > 0;
+    if(settings.render != 0)
+      queueErase3=nodes3.length > 0;
     nodes.delete();
     nodes3.delete();
     legend.delete();
@@ -328,7 +332,7 @@
   bool userSety3() { return usety; }
   bool userSetz3() { return usetz; }
 
-  private typedef real binop(real, real);
+  private using binop=real(real, real);
 
   // Helper functions for finding the minimum/maximum of two data, one of
   // which may not be defined.
@@ -338,20 +342,20 @@
   }
   private pairOrTriple userExtreme(pair u2(), triple u3(), binop m)
   {
-    bool setx2 = userSetx2();
-    bool sety2 = userSety2();
-    bool setx3 = userSetx3();
-    bool sety3 = userSety3();
+    bool setx2=userSetx2();
+    bool sety2=userSety2();
+    bool setx3=userSetx3();
+    bool sety3=userSety3();
 
     pair p;
     if (setx2 || sety2)
-      p = u2();
-    triple t = u3();
+      p=u2();
+    triple t=u3();
 
     pairOrTriple r;
-    r.x = merge(p.x, setx2, t.x, setx3, m);
-    r.y = merge(p.y, sety2, t.y, sety3, m);
-    r.z = t.z;
+    r.x=merge(p.x, setx2, t.x, setx3, m);
+    r.y=merge(p.y, sety2, t.y, sety3, m);
+    r.z=t.z;
 
     return r;
   }
@@ -366,7 +370,7 @@
 
   bool userSetx() { return userSetx2() || userSetx3(); }
   bool userSety() { return userSety2() || userSety3(); }
-  bool userSetz() = userSetz3;
+  bool userSetz()=userSetz3;
 
   // Functions for setting the user bounds.
   void userMinx3(real x) {
@@ -407,17 +411,17 @@
   void userMaxx(real x) { userMaxx2(x); userMaxx3(x); }
   void userMaxy2(real y) { bounds.alterUserBound("maxy", y); }
   void userMaxy(real y) { userMaxy2(y); userMaxy3(y); }
-  void userMinz(real z) = userMinz3;
-  void userMaxz(real z) = userMaxz3;
+  void userMinz(real z)=userMinz3;
+  void userMaxz(real z)=userMaxz3;
 
   void userCorners3(triple c000, triple c001, triple c010, triple c011,
                     triple c100, triple c101, triple c110, triple c111) {
-    umin.x = min(c000.x,c001.x,c010.x,c011.x,c100.x,c101.x,c110.x,c111.x);
-    umin.y = min(c000.y,c001.y,c010.y,c011.y,c100.y,c101.y,c110.y,c111.y);
-    umin.z = min(c000.z,c001.z,c010.z,c011.z,c100.z,c101.z,c110.z,c111.z);
-    umax.x = max(c000.x,c001.x,c010.x,c011.x,c100.x,c101.x,c110.x,c111.x);
-    umax.y = max(c000.y,c001.y,c010.y,c011.y,c100.y,c101.y,c110.y,c111.y);
-    umax.z = max(c000.z,c001.z,c010.z,c011.z,c100.z,c101.z,c110.z,c111.z);
+    umin.x=min(c000.x,c001.x,c010.x,c011.x,c100.x,c101.x,c110.x,c111.x);
+    umin.y=min(c000.y,c001.y,c010.y,c011.y,c100.y,c101.y,c110.y,c111.y);
+    umin.z=min(c000.z,c001.z,c010.z,c011.z,c100.z,c101.z,c110.z,c111.z);
+    umax.x=max(c000.x,c001.x,c010.x,c011.x,c100.x,c101.x,c110.x,c111.x);
+    umax.y=max(c000.y,c001.y,c010.y,c011.y,c100.y,c101.y,c110.y,c111.y);
+    umax.z=max(c000.z,c001.z,c010.z,c011.z,c100.z,c101.z,c110.z,c111.z);
   }
 
   // Cache the current user-space bounding box x coodinates
@@ -643,7 +647,7 @@
   // Returns the transform for turning user-space pairs into true-space pairs.
   transform scaling(real xsize, real ysize, bool keepAspect=true,
                     bool warn=true) {
-    bounds b = (T == identity()) ? this.bounds : T * this.bounds;
+    bounds b=(T == identity()) ? this.bounds : T * this.bounds;
 
     return b.scaling(xsize, ysize, xunitsize, yunitsize, keepAspect, warn);
   }
@@ -730,7 +734,7 @@
     add(new void(frame f, transform t) {
         picture opic=new picture;
         d(opic,t);
-        add(f,opic.fit(identity()));
+        add(f,opic.fit(identity));
       },exact);
   }
 
@@ -742,12 +746,12 @@
       },exact,above);
   }
 
-  void add(void d(picture, transform3, transform3, triple, triple),
+  void add(void d(picture, transform3, transform3, projection, triple, triple),
            bool exact=false, bool above=true) {
     add(new void(frame f, transform3 t, transform3 T, picture pic2,
                  projection P, triple lb, triple rt) {
           picture opic=new picture;
-          d(opic,t,T,lb,rt);
+          d(opic,t,T,P,lb,rt);
           add(f,opic.fit3(identity4,pic2,P));
         },exact,above);
   }
@@ -971,15 +975,15 @@
     picture dest=drawcopy();
 
     // Replace nodes with a single drawer that realizes the transform.
-    node[] oldnodes = dest.nodes;
+    node[] oldnodes=dest.nodes;
     void drawAll(frame f, transform tt, transform T, pair lb, pair rt) {
-      transform Tt = T*t;
+      transform Tt=T*t;
       for (node n : oldnodes) {
         xasyKEY(n.key);
         n.d(f,tt,Tt,lb,rt);
       }
     }
-    dest.nodes = new node[] {node(drawAll)};
+    dest.nodes=new node[] {node(drawAll)};
 
     dest.uptodate=uptodate;
     dest.bounds=bounds.transformed(t);
@@ -1131,6 +1135,26 @@
   return t*M-t*m;
 }
 
+// Return a projection adjusted to view center of pic from specified direction.
+projection centered(projection P, picture pic=currentpicture) {
+  projection P=P.copy();
+  if(P.autoadjust && P.center) {
+    triple min=pic.userMin3();
+    triple max=pic.userMax3();
+    if(min != max) {
+      triple target=0.5*(max+min);
+      if(pic.keepAspect)
+        P.camera=target+P.vector();
+      else
+        P.camera=target+realmult(unit(P.vector()),max-min);
+      P.target=target;
+      P.normal=P.vector();
+      P.calculate();
+    }
+  }
+  return P;
+}
+
 // Frame Alignment <<<
 pair rectify(pair dir)
 {
@@ -1175,8 +1199,8 @@
 
 pair point(picture pic=currentpicture, pair dir, bool user=true)
 {
-  pair umin = pic.userMin2();
-  pair umax = pic.userMax2();
+  pair umin=pic.userMin2();
+  pair umax=pic.userMax2();
 
   pair z=umin+realmult(rectify(dir),umax-umin);
   return user ? z : pic.calculateTransform()*z;
@@ -1202,7 +1226,7 @@
   pic.add(d,exact);
 }
 
-typedef void drawer3(frame f, transform3 t, picture pic, projection P);
+using drawer3=void(frame f, transform3 t, picture pic, projection P);
 void add(picture pic=currentpicture, drawer3 d, bool exact=false)
 {
   pic.add(d,exact);
@@ -1466,8 +1490,8 @@
   pair min,max;
   if (pic.clipmin.length > 0 && pic.clipmax.length > 0)
     {
-      min = pic.clipmin.pop();
-      max = pic.clipmax.pop();
+      min=pic.clipmin.pop();
+      max=pic.clipmax.pop();
     }
   else
     {
@@ -1474,8 +1498,8 @@
       // We should probably abort here, since the PostScript output will be
       // garbage.
       warning("endclip", "endclip without beginclip");
-      min = pic.userMin2();
-      max = pic.userMax2();
+      min=pic.userMin2();
+      max=pic.userMax2();
     }
 
   pic.clip(min, max,
@@ -1587,13 +1611,11 @@
   currentpicture.add(src,group,filltype,above);
 }
 
-// Fit the picture src using the identity transformation (so user
-// coordinates and truesize coordinates agree) and add it about the point
-// position to picture dest.
+// Fit the picture src and add it about the point position to picture dest.
 void add(picture dest, picture src, pair position, bool group=true,
          filltype filltype=NoFill, bool above=true)
 {
-  add(dest,src.fit(identity()),position,group,filltype,above);
+  add(dest,src.fit(),position,group,filltype,true);
 }
 
 void add(picture src, pair position, bool group=true, filltype filltype=NoFill,
@@ -1607,7 +1629,7 @@
 {
   picture opic;
   fill(opic,g,p);
-  add(pic,opic,origin);
+  add(pic,opic.fit(identity),origin);
 }
 
 void postscript(picture pic=currentpicture, string s)

Modified: trunk/Master/texmf-dist/asymptote/plain_prethree.asy
===================================================================
--- trunk/Master/texmf-dist/asymptote/plain_prethree.asy	2025-02-10 15:30:00 UTC (rev 73846)
+++ trunk/Master/texmf-dist/asymptote/plain_prethree.asy	2025-02-10 16:49:00 UTC (rev 73847)
@@ -2,7 +2,7 @@
 
 pair viewportmargin=settings.viewportmargin;
 
-typedef real[][] transform3;
+using transform3=real[][];
 restricted transform3 identity4=identity(4);
 
 // A uniform 3D scaling.
@@ -70,7 +70,7 @@
   real zoom=1;          // Zoom factor.
   real angle;           // Lens angle (for perspective projection).
   bool showtarget=true; // Expand bounding volume to include target?
-  typedef transformation projector(triple camera, triple up, triple target);
+  using projector=transformation(triple camera, triple up, triple target);
   projector projector;
   bool autoadjust=true; // Adjust camera to lie outside bounding volume?
   bool center=false;    // Center target within bounding volume?
@@ -140,10 +140,10 @@
 
 
   // This is redefined here to make projection as self-contained as possible.
-  static private real sqrtEpsilon = sqrt(realEpsilon);
+  static private real sqrtEpsilon=sqrt(realEpsilon);
 
   // Move the camera so that the box(m,M) rotated about target will always
-  // lie in front of the clipping plane.
+  // lie in front of the far clipping plane.
   bool adjust(triple m, triple M) {
     triple v=camera-target;
     real d=distance(m,M);
@@ -161,7 +161,7 @@
 
 struct light {
   real[][] diffuse;
-  real[][] specular; // For PRC only
+  real[][] specular;
   pen background=nullpen; // Background color of the 3D canvas.
   real specularfactor;
   triple[] position; // Only directional lights are currently implemented.

Modified: trunk/Master/texmf-dist/asymptote/plain_scaling.asy
===================================================================
--- trunk/Master/texmf-dist/asymptote/plain_scaling.asy	2025-02-10 15:30:00 UTC (rev 73846)
+++ trunk/Master/texmf-dist/asymptote/plain_scaling.asy	2025-02-10 16:49:00 UTC (rev 73847)
@@ -192,8 +192,6 @@
   return M;
 }
 
-import simplex;
-
 /*
  Calculate the sizing constants for the given array and maximum size.
  Solve the two-variable linear programming problem using the simplex method.
@@ -203,19 +201,16 @@
 */
 real calculateScaling(string dir, coord[] m, coord[] M, real size,
                       bool warn=true) {
-  real[][] A;
-  real[] b;
-  real[] c=new real[] {-1,0,0};
+  from simplex2 access problem;
+  problem p=new problem;
 
   void addMinCoord(coord c) {
     // (a*user + b) + truesize >= 0:
-    A.push(new real[] {c.user,1,-1});
-    b.push(-c.truesize);
+    p.addRestriction(c.user,1,c.truesize);
   }
   void addMaxCoord(coord c) {
     // (a*user + b) + truesize <= size:
-    A.push(new real[] {-c.user,-1,1});
-    b.push(c.truesize-size);
+    p.addRestriction(-c.user,-1,size-c.truesize);
   }
 
   for (int i=0; i < m.length; ++i)
@@ -223,17 +218,16 @@
   for (int i=0; i < M.length; ++i)
     addMaxCoord(M[i]);
 
-  int[] s=array(A.length,1);
-  simplex S=simplex(c,A,s,b);
-
-  if(S.case == S.OPTIMAL) {
-    return S.x[0];
-  } else if(S.case == S.UNBOUNDED) {
+  if(p.rows.length == 2) return 1; // Don't warn if there are no constraints
+  int status=p.optimize();
+  if(status == problem.OPTIMAL) {
+    // TODO: Could just be return a;
+    return scaling.build(p.a(),p.b()).a;
+  } else if(status == problem.UNBOUNDED) {
     if(warn) warning("unbounded",dir+" scaling in picture unbounded");
     return 0;
   } else {
     if(!warn) return 1;
-
     bool userzero(coord[] coords) {
       for(var coord : coords)
         if(coord.user != 0) return false;

Modified: trunk/Master/texmf-dist/asymptote/plain_shipout.asy
===================================================================
--- trunk/Master/texmf-dist/asymptote/plain_shipout.asy	2025-02-10 15:30:00 UTC (rev 73846)
+++ trunk/Master/texmf-dist/asymptote/plain_shipout.asy	2025-02-10 16:49:00 UTC (rev 73847)
@@ -24,7 +24,7 @@
 frame Landscape(frame f) {return rotate(90)*f;};
 frame UpsideDown(frame f) {return rotate(180)*f;};
 frame Seascape(frame f) {return rotate(-90)*f;};
-typedef frame orientation(frame);
+using orientation=frame(frame);
 orientation orientation=Portrait;
 
 // Forward references to functions defined in module three.
@@ -98,7 +98,8 @@
     }
   }
 
-  bool defaultprefix=prefix==defaultfilename;
+  bool defaultprefix=prefix == defaultfilename &&
+    outformat(format) == outformat("");
 
   if(settings.xasy || (!implicitshipout && defaultprefix)) {
     if(defaultprefix) {
@@ -122,7 +123,8 @@
 	     string options="", string script="",
 	     light light=currentlight, projection P=currentprojection)
 {
-  pic.uptodate=true;
+  projection P=centered(P,pic);
+
   if(!uptodate()) {
     bool inlinetex=settings.inlinetex;
     bool prc=prc(format) || settings.v3d;
@@ -139,7 +141,7 @@
       settings.inlinetex=settings.inlineimage;
     }
     frame f;
-    transform t=pic.calculateTransform();
+    transform t=empty3 ? pic.calculateTransform() : identity;
     if(currentpicture.fitter == null) {
       pen background=currentlight.background;
       if(settings.outformat == "html" && background == nullpen)
@@ -152,10 +154,14 @@
     else
       f=pic.fit(prefix,format,view=view,options,script,light,P);
 
-    if(!prconly() && (!pic.empty2() || settings.render == 0 || prc || empty3))
+     if(!prconly() && (!pic.empty2() || settings.render == 0 || prc ||
+                       pic.queueErase)) {
       shipout(prefix,orientation(f),format,wait,view,t);
+      pic.queueErase=false;
+    }
     settings.inlinetex=inlinetex;
   }
+  pic.uptodate=true;
 }
 
 void newpage(picture pic=currentpicture)

Modified: trunk/Master/texmf-dist/asymptote/rational.asy
===================================================================
--- trunk/Master/texmf-dist/asymptote/rational.asy	2025-02-10 15:30:00 UTC (rev 73846)
+++ trunk/Master/texmf-dist/asymptote/rational.asy	2025-02-10 16:49:00 UTC (rev 73847)
@@ -41,107 +41,108 @@
     this.q=q;
     if(reduce) reduce();
   }
-}
 
-rational operator cast(int p)
-{
-  return rational(p,false);
-}
+  autounravel rational operator cast(int p)
+  {
+    return rational(p,false);
+  }
 
-rational[] operator cast(int[] a)
-{
-  return sequence(new rational(int i) {return a[i];},a.length);
-}
+  autounravel rational[] operator cast(int[] a)
+  {
+    return sequence(new rational(int i) {return a[i];},a.length);
+  }
 
-rational[][] operator cast(int[][] a)
-{
-  return sequence(new rational[](int i) {return a[i];},a.length);
-}
+  autounravel rational[][] operator cast(int[][] a)
+  {
+    return sequence(new rational[](int i) {return a[i];},a.length);
+  }
 
-real operator ecast(rational r)
-{
-  return r.p/r.q;
-}
+  real operator ecast(rational r)
+  {
+    return r.p/r.q;
+  }
 
-rational operator ecast(real x)
-{
-  int sign=x >= 0.0 ? 1 : -1;
-  x=abs(x);
-  int a=floor(x); int b=1;
-  int c=a+1; int d=1;
+  autounravel rational operator ecast(real x)
+  {
+    int sign=x >= 0.0 ? 1 : -1;
+    x=abs(x);
+    int a=floor(x); int b=1;
+    int c=a+1; int d=1;
 
-  while(true) {
-    int e=a+c;
-    int f=b+d;
-    if(f > maxDenominator) break;
-    if(e/f == x)
-      return rational(sign*e,f);
-    else {
-      if(e/f < x) {
-        a=e;
-        b=f;
-      } else {
-        c=e;
-        d=f;
+    while(true) {
+      int e=a+c;
+      int f=b+d;
+      if(f > maxDenominator) break;
+      if(e/f == x)
+        return rational(sign*e,f);
+      else {
+        if(e/f < x) {
+          a=e;
+          b=f;
+        } else {
+          c=e;
+          d=f;
+        }
       }
     }
+    return abs(a/b-x) < abs(c/d-x) ? rational(sign*a,b) : rational(sign*c,d);
   }
-  return abs(a/b-x) < abs(c/d-x) ? rational(sign*a,b) : rational(sign*c,d);
-}
 
-rational operator -(rational r)
-{
-  return rational(-r.p,r.q,false);
-}
+  autounravel rational operator -(rational r)
+  {
+    return rational(-r.p,r.q,false);
+  }
 
-rational operator +(rational r, rational s)
-{
-  return rational(r.p*s.q+s.p*r.q,r.q*s.q);
-}
+  autounravel rational operator +(rational r, rational s)
+  {
+    return rational(r.p*s.q+s.p*r.q,r.q*s.q);
+  }
 
-rational operator -(rational r, rational s)
-{
-  return rational(r.p*s.q-s.p*r.q,r.q*s.q);
-}
+  autounravel rational operator -(rational r, rational s)
+  {
+    return rational(r.p*s.q-s.p*r.q,r.q*s.q);
+  }
 
-rational operator *(rational r, rational s)
-{
-  return rational(r.p*s.p,r.q*s.q);
-}
+  autounravel rational operator *(rational r, rational s)
+  {
+    return rational(r.p*s.p,r.q*s.q);
+  }
 
-rational operator /(rational r, rational s)
-{
-  return rational(r.p*s.q,r.q*s.p);
-}
+  autounravel rational operator /(rational r, rational s)
+  {
+    return rational(r.p*s.q,r.q*s.p);
+  }
 
-bool operator ==(rational r, rational s)
-{
-  return r.p == s.p && r.q == s.q;
-}
+  autounravel bool operator ==(rational r, rational s)
+  {
+    return r.p == s.p && r.q == s.q;
+  }
 
-bool operator !=(rational r, rational s)
-{
-  return r.p != s.p || r.q != s.q;
-}
+  autounravel bool operator !=(rational r, rational s)
+  {
+    return r.p != s.p || r.q != s.q;
+  }
 
-bool operator <(rational r, rational s)
-{
-  return r.p*s.q-s.p*r.q < 0;
-}
+  autounravel bool operator <(rational r, rational s)
+  {
+    return r.p*s.q-s.p*r.q < 0;
+  }
 
-bool operator >(rational r, rational s)
-{
-  return r.p*s.q-s.p*r.q > 0;
-}
+  autounravel bool operator >(rational r, rational s)
+  {
+    return r.p*s.q-s.p*r.q > 0;
+  }
 
-bool operator <=(rational r, rational s)
-{
-  return r.p*s.q-s.p*r.q <= 0;
-}
+  autounravel bool operator <=(rational r, rational s)
+  {
+    return r.p*s.q-s.p*r.q <= 0;
+  }
 
-bool operator >=(rational r, rational s)
-{
-  return r.p*s.q-s.p*r.q >= 0;
+  autounravel bool operator >=(rational r, rational s)
+  {
+    return r.p*s.q-s.p*r.q >= 0;
+  }
+
 }
 
 bool[] operator ==(rational[] r, rational s)
@@ -165,6 +166,30 @@
   return all(sequence(new bool(int i) {return r[i] == s[i];},r.length));
 }
 
+rational[] operator +(rational[] r, rational[] s)
+{
+  assert(r.length == s.length);
+  return sequence(new rational(int i) {return r[i]+s[i];},r.length);
+}
+
+rational[] operator -(rational[] r, rational[] s)
+{
+  assert(r.length == s.length);
+  return sequence(new rational(int i) {return r[i]-s[i];},r.length);
+}
+
+rational[] operator *(rational[] r, rational[] s)
+{
+  assert(r.length == s.length);
+  return sequence(new rational(int i) {return r[i]*s[i];},r.length);
+}
+
+rational[] operator /(rational[] r, rational[] s)
+{
+  assert(r.length == s.length);
+  return sequence(new rational(int i) {return r[i]/s[i];},r.length);
+}
+
 bool[] operator <(rational[] r, rational s)
 {
   return sequence(new bool(int i) {return r[i] < s;},r.length);

Modified: trunk/Master/texmf-dist/asymptote/rationalSimplex.asy
===================================================================
--- trunk/Master/texmf-dist/asymptote/rationalSimplex.asy	2025-02-10 15:30:00 UTC (rev 73846)
+++ trunk/Master/texmf-dist/asymptote/rationalSimplex.asy	2025-02-10 16:49:00 UTC (rev 73847)
@@ -272,8 +272,6 @@
     rational[] cB=phase1 ? new rational[m] : c[n-m:n];
     rational[][] D=phase1 ? new rational[m+1][n+1] : E;
     if(phase1) {
-      write("n=",n);
-      write(Bindices);
       // Drive artificial variables out of basis.
       for(int i=0; i < m; ++i) {
         if(Bindices[i] > n) {

Added: trunk/Master/texmf-dist/asymptote/simplex2.asy
===================================================================
--- trunk/Master/texmf-dist/asymptote/simplex2.asy	                        (rev 0)
+++ trunk/Master/texmf-dist/asymptote/simplex2.asy	2025-02-10 16:49:00 UTC (rev 73847)
@@ -0,0 +1,310 @@
+/*****
+ * simplex.asy
+ * Andy Hammerlindl 2004/07/27
+ *
+ * Solves the two-variable linear programming problem using the simplex method.
+ * This problem is specialized in that the second variable, "b", does not have
+ * a non-negativity condition, and the first variable, "a", is the quantity
+ * being maximized.
+ * Correct execution of the algorithm also assumes that the coefficient of "b"
+ * will be +1 or -1 in every added restriction, and that the problem can be
+ * initialized to a valid state by pivoting b with one of the slack
+ * variables.  This assumption may in fact be incorrect.
+ *****/
+
+struct problem {
+  typedef int var;
+  static var VAR_A = 0;
+  static var VAR_B = 1;
+
+  static int OPTIMAL = -1;
+  static var UNBOUNDED = -2;
+  static int INVALID = -3;
+
+  struct row {
+    real c, t[];
+  }
+
+  // The variables of the rows.
+  // Initialized for the two variable problem.
+  var[] v = {VAR_A, VAR_B};
+
+  // The rows of equalities.
+  row rowA() {
+    row r = new row;
+    r.c = 0;
+    r.t = new real[] {1, 0};
+    return r;
+  }
+  row rowB() {
+    row r = new row;
+    r.c = 0;
+    r.t = new real[] {0, 1};
+    return r;
+  }
+  row[] rows = {rowA(), rowB()};
+
+  // The number of original variables.
+  int n = rows.length;
+
+  // Pivot the variable v[col] with vp.
+  void pivot(int col, var vp)
+  {
+    var vc=v[col];
+
+    // Recalculate rows v[col] and vp for the pivot-swap.
+    row rvc = rows[vc], rvp = rows[vp];
+    real factor=1/rvp.t[col]; // NOTE: Handle rvp.t[col] == 0 case.
+    rvc.c=-rvp.c*factor;
+    rvp.c=0;
+    rvc.t=-rvp.t*factor;
+    rvp.t *= 0;
+    rvc.t[col]=factor;
+    rvp.t[col]=1;
+
+    var a=min(vc,vp);
+    var b=max(vc,vp);
+
+    // Recalculate the rows other than the two used for the above pivot.
+    for (var i = 0; i < a; ++i) {
+      row r=rows[i];
+      real m = r.t[col];
+      r.c += m*rvc.c;
+      r.t += m*rvc.t;
+      r.t[col]=m*factor;
+    }
+    for (var i = a+1; i < b; ++i) {
+      row r=rows[i];
+      real m = r.t[col];
+      r.c += m*rvc.c;
+      r.t += m*rvc.t;
+      r.t[col]=m*factor;
+    }
+    for (var i = b+1; i < rows.length; ++i) {
+      row r=rows[i];
+      real m = r.t[col];
+      r.c += m*rvc.c;
+      r.t += m*rvc.t;
+      r.t[col]=m*factor;
+    }
+
+    // Relabel the vars.
+    v[col] = vp;
+  }
+
+  // As b does not have a non-negativity condition, it must initially be
+  // pivoted out for a variable that does.  This selects the initial
+  // variable to pivot with b.  It also assumes that there is a valid
+  // solution with a == 0 to the linear programming problem, and if so, it
+  // picks a pivot to get to that state.  In our case, a == 0 corresponds to
+  // a picture with the user coordinates shrunk down to zero, and if that
+  // doesn't fit, nothing will.
+  //
+  // If b has a minimal value, choose a pivot that will give b its minimal
+  // value.  Otherwise, if b has maximal value, choose a pivot to give b its
+  // maximal value.
+  var initVar()
+  {
+    real min;
+    var argmin;
+    var i=2;
+    for (; i < rows.length; ++i) {
+      row r=rows[i];
+      if (r.t[VAR_B] > 0) {
+        min=r.c/r.t[VAR_B];
+        argmin=i;
+        break;
+      }
+    }
+    for (; i < rows.length; ++i) {
+      row r=rows[i];
+      if (r.t[VAR_B] > 0) {
+        real val=r.c/r.t[VAR_B];
+        if (val < min) {
+          min=val;
+          argmin=i;
+        }
+      }
+    }
+
+    if(argmin != 0) return argmin;
+
+    real max;
+    var argmax;
+    var i=2;
+    for (; i < rows.length; ++i) {
+      row r=rows[i];
+      if (r.t[VAR_B] < 0) {
+        max=r.c/r.t[VAR_B];
+        argmax=i;
+        break;
+      }
+    }
+
+    for (; i < rows.length; ++i) {
+      row r=rows[i];
+      if (r.t[VAR_B] < 0) {
+        real val=r.c/r.t[VAR_B];
+        if (val > max) {
+          max=val;
+          argmax=i;
+        }
+      }
+    }
+
+    if(argmax != 0) return argmax;
+
+    return UNBOUNDED;
+  }
+
+  // Initialize the linear program problem by moving into an acceptable state
+  // this assumes that b is unrestrained and is the second variable.
+  // NOTE: Works in limited cases, may be bug-ridden.
+  void init()
+  {
+    // Find the lowest constant term in the equations.
+    var lowest = 0;
+    for (var i = 2; i < rows.length; ++i) {
+      if (rows[i].c < rows[lowest].c)
+        lowest = i;
+    }
+
+    // Pivot if necessary.
+    if (lowest != 0)
+      pivot(VAR_B, lowest);
+  }
+
+  // Selects a column to pivot on.  Returns OPTIMAL if the current state is
+  // optimal.  Assumes we are optimizing the first row.
+  int selectColumn()
+  {
+    int i=find(rows[0].t > 0,1);
+    return (i >= 0) ? i : OPTIMAL;
+  }
+
+  // Select the new variable associated with a pivot on the column given.
+  // Returns UNBOUNDED if the space is unbounded.
+  var selectVar(int col)
+  {
+    // We assume that the first two vars (a and b) once swapped out, won't be
+    // swapped back in.  This finds the variable which gives the tightest
+    // non-negativity condition restricting our optimization.  This turns
+    // out to be the max of c/t[col].  Note that as c is positive, and
+    // t[col] is negative, all c/t[col] will be negative, so we are finding
+    // the smallest in magnitude.
+    var vp=UNBOUNDED;
+    real max=0;
+    int i=2;
+    for (; i < rows.length; ++i) {
+      row r=rows[i];
+      if(r.c < 0) r.c=0; // Fix any numerical precision error
+      if(r.t[col] < 0) {
+        max=r.c/r.t[col]; vp=i;
+        break;
+      }
+    }
+    for (; i < rows.length; ++i) {
+      row r=rows[i];
+      if(r.c < 0) r.c=0; // Fix any numerical precision error
+      if(r.c < max*r.t[col]) {
+        max=r.c/r.t[col]; vp=i;
+      }
+    }
+
+    return vp;
+  }
+
+  // Checks that the rows are in a valid state.
+  bool valid()
+  {
+    // Checks that constants are valid.
+    bool validConstants() {
+      for (int i = 0; i < rows.length; ++i)
+        // Do not test the row for b, as it does not have a non-negativity
+        // condition.
+        if (i != VAR_B && rows[i].c < 0)
+           return false;
+      return true;
+    }
+
+    // Check a variable to see if its row is simple.
+    // NOTE: Simple rows could be optimized out, since they are not really
+    // used.
+    bool validVar(int col) {
+
+      var vc = v[col];
+      row rvc = rows[vc];
+
+      if (rvc.c != 0)
+        return false;
+      for (int i = 0; i < n; ++i)
+        if (rvc.t[i] != (i == col ? 1 : 0))
+          return false;
+
+      return true;
+    }
+
+    if (!validConstants()) {
+      return false;
+    }
+    for (int i = 0; i < n; ++i)
+      if (!validVar(i)) {
+        return false;
+      }
+
+    return true;
+  }
+
+
+  // Perform the algorithm to find the optimal solution.  Returns OPTIMAL,
+  // UNBOUNDED, or INVALID (if no solution is possible).
+  int optimize()
+  {
+    // Put into a valid state to begin and pivot b out.
+    var iv=initVar();
+    if (iv == UNBOUNDED)
+      return iv;
+    pivot(VAR_B, iv);
+
+    if (!valid())
+      return INVALID;
+
+    while(true) {
+      int col = selectColumn();
+
+      if (col == OPTIMAL)
+        return col;
+      var vp = selectVar(col);
+
+      if (vp == UNBOUNDED)
+        return vp;
+
+      pivot(col, vp);
+    }
+
+    // Shouldn't reach here.
+    return INVALID;
+  }
+
+  // Add a restriction to the problem:
+  // t1*a + t2*b + c >= 0
+  void addRestriction(real t1, real t2, real c)
+  {
+    row r = new row;
+    r.c = c;
+    r.t = new real[] {t1, t2};
+    rows.push(r);
+  }
+
+  // Return the value of a computed.
+  real a()
+  {
+    return rows[VAR_A].c;
+  }
+
+  // Return the value of b computed.
+  real b()
+  {
+    return rows[VAR_B].c;
+  }
+}

Modified: trunk/Master/texmf-dist/asymptote/slide.asy
===================================================================
--- trunk/Master/texmf-dist/asymptote/slide.asy	2025-02-10 15:30:00 UTC (rev 73846)
+++ trunk/Master/texmf-dist/asymptote/slide.asy	2025-02-10 16:49:00 UTC (rev 73847)
@@ -25,6 +25,9 @@
   pageheight += settings.paperheight;
 }
 
+texpreamble("\paperwidth="+string(pagewidth)+"bp");
+texpreamble("\paperheight"+string(pageheight)+"bp");
+
 size(pagewidth,pageheight,IgnoreAspect);
 picture background;
 
@@ -401,6 +404,7 @@
 
 void figure(string[] s, string options="", real margin=0,
             string[] captions=new string[], string caption="",
+            string[] url=new string[],
             pair align=S, pen p=itempen, pen figuremattpen=figuremattpen,
             bool final=true)
 {
@@ -407,15 +411,19 @@
   string[] S;
   for(int i=0; i < s.length; ++i) {
     S[i]=graphic(s[i],options);
+    if(i < url.length && url[i] != "")
+      S[i]="\href{"+url[i]+"/"+s[i]+".html}{"+S[i]+"}";
   }
 
   display(S,margin,captions,caption,align,itempen,figuremattpen,final);
 }
 
-void figure(string s, string options="", string caption="", pair align=S,
+void figure(string s, string options="", string caption="",
+            string url="", pair align=S,
             pen p=itempen, pen figuremattpen=figuremattpen, bool final=true)
 {
-  figure(new string[] {s},options,caption,align,p,figuremattpen,final);
+  figure(new string[] {s},options,caption,new string[] {url},align,p,
+         figuremattpen,final);
 }
 
 void multifigure(string[] slist, string options="", string caption="",
@@ -581,7 +589,7 @@
   real hmargin,vmargin;
   if(pdf()) {
     hmargin=1;
-    vmargin=0;
+    vmargin=0.5;
   } else {
     hmargin=1.5;
     vmargin=1;

Modified: trunk/Master/texmf-dist/asymptote/three.asy
===================================================================
--- trunk/Master/texmf-dist/asymptote/three.asy	2025-02-10 15:30:00 UTC (rev 73846)
+++ trunk/Master/texmf-dist/asymptote/three.asy	2025-02-10 16:49:00 UTC (rev 73847)
@@ -46,21 +46,21 @@
 
 struct render
 {
-  // PRC parameters:
-  real compression;     // lossy compression parameter (0=no compression)
+  real compression;     // lossy PRC compression parameter (0=no compression)
   real granularity;     // PRC rendering granularity
 
-  bool closed;          // use one-sided rendering?
-  bool tessellate;      // use tessellated mesh to store straight patches?
+  bool closed;          // use one-sided PRC rendering?
 
-  bool3 merge;          // merge nodes before rendering, for faster but
-                        // lower quality PRC rendering (the value default means
+  bool tessellate;      // use tessellated mesh to store straight patches
+
+  bool3 merge;          // merge PRC nodes before rendering, for faster but
+                        // lower quality rendering (the value default means
                         // merge opaque patches only).
 
   int sphere;           // PRC sphere type (PRCsphere or NURBSsphere).
 
   // General parameters:
-  real margin;          // shrink amount for rendered openGL viewport, in bp.
+  real margin;          // shrink amount for rendered OpenGL viewport, in bp.
   bool partnames;       // assign part name indices to compound objects
   bool defaultnames;    // assign default names to unnamed objects
   interaction interaction; // billboard interaction mode
@@ -346,7 +346,7 @@
 
 projection orthographic(triple camera, triple up=Z, triple target=O,
                         real zoom=1, pair viewportshift=0,
-                        bool showtarget=true, bool center=false)
+                        bool showtarget=true, bool center=true)
 {
   return projection(camera,up,target,zoom,viewportshift,showtarget,
                     center=center,new transformation(triple camera, triple up,
@@ -356,7 +356,7 @@
 
 projection orthographic(real x, real y, real z, triple up=Z,
                         triple target=O, real zoom=1, pair viewportshift=0,
-                        bool showtarget=true, bool center=false)
+                        bool showtarget=true, bool center=true)
 {
   return orthographic((x,y,z),up,target,zoom,viewportshift,showtarget,
                       center=center);
@@ -2679,11 +2679,11 @@
       warn=false;
     }
 
-    if(P.absolute)
-      this.P=P.copy();
-    else if(P.showtarget)
-      draw(pic,P.target,nullpen);
+    this.P=P.copy();
 
+    if(!P.absolute && P.showtarget && !pic.empty3())
+      draw(pic,this.P.target,nullpen);
+
     t=pic.scaling(xsize3,ysize3,zsize3,keepAspect,warn);
     adjusted=false;
     triple m=pic.min(t);
@@ -2690,14 +2690,9 @@
     triple M=pic.max(t);
 
     if(!P.absolute) {
-      this.P=t*P;
+      this.P=t*this.P;
       if(this.P.autoadjust || this.P.infinity)
         adjusted=adjusted | this.P.adjust(m,M);
-      if(this.P.center && settings.render != 0) {
-        triple target=0.5*(m+M);
-        this.P.target=target;
-        this.P.calculate();
-      }
     }
 
     bool scale=xsize != 0 || ysize != 0;
@@ -2893,16 +2888,18 @@
       triple margin=(S.viewportmargin.x,S.viewportmargin.y,0);
       M += margin;
       m -= margin;
-    } else if(M.z >= 0) abort("camera too close");
+    } else if(M.z >= 0 && !S.pic2.empty()) abort("camera too close");
 
     if(primitive())
       format=settings.v3d ? "v3d" : settings.outformat;
 
+    transform3 s=inv*shift(0,0,zcenter);
+
     shipout3(prefix,f,preview ? nativeformat() : format,
              S.width-defaultrender.margin,S.height-defaultrender.margin,
              P.infinity ? 0 : 2aTan(Tan(0.5*P.angle)*P.zoom),
              P.zoom,m,M,P.viewportshift,S.viewportmargin,
-             tinv*inv*shift(0,0,zcenter),Light.background(),Light.position,
+             tinv*s,s,Light.background(),Light.position,
              Light.diffuse,Light.specular,
              view && !preview);
     if(settings.v3d) {
@@ -3038,12 +3035,15 @@
                                 light light, projection P) {
   frame f;
   bool empty3=pic.empty3();
-  if(!empty3) f=embedder(new object(string prefix, string format) {
-      return embed(prefix=prefix,pic,format,xsize,ysize,keepAspect,view,
-                   options,script,light,P);
-    },prefix,format,view,light);
+  if(!empty3 || pic.queueErase3) {
+    f=embedder(new object(string prefix, string format) {
+        return embed(prefix=prefix,pic,format,xsize,ysize,keepAspect,view,
+                     options,script,light,P);
+      },prefix,format,view,light);
+    pic.queueErase3=false;
+  }
 
-  if(is3D(format) || empty3)
+  if(is3D(format) || pic.queueErase || settings.render == 0)
     add(f,pic.fit2(xsize,ysize,keepAspect));
   return f;
 };

Modified: trunk/Master/texmf-dist/asymptote/three_surface.asy
===================================================================
--- trunk/Master/texmf-dist/asymptote/three_surface.asy	2025-02-10 15:30:00 UTC (rev 73846)
+++ trunk/Master/texmf-dist/asymptote/three_surface.asy	2025-02-10 16:49:00 UTC (rev 73847)
@@ -409,8 +409,6 @@
   // A constructor for a triangle or convex quadrilateral.
   void operator init(triple[] external, triple[] internal=new triple[],
                      pen[] colors=new pen[], bool3 planar=default) {
-    init();
-
     straight=true;
 
     if(colors.length != 0)
@@ -417,6 +415,9 @@
       this.colors=copy(colors);
 
     if(external.length == 3) {
+      triangular=true;
+      this.planar=true;
+      init();
       P=new triple[][] {
         {external[0]},
         {interp(external[0],external[1],1/3),
@@ -426,9 +427,8 @@
         {external[1],interp(external[1],external[2],1/3),
          interp(external[1],external[2],2/3),external[2]}
       };
-      planar=true;
-      triangular=true;
     } else {
+      init();
       if(internal.length == 0 && planar == default)
         this.planar=normal(external) != O;
       else this.planar=planar;
@@ -788,10 +788,11 @@
   }
 
   void operator init(triple[][][] P, pen[][] colors=new pen[][],
+                     bool3 straight=false,
                      bool3 planar=default, bool triangular=false) {
     s=sequence(new patch(int i) {
-        return patch(P[i],colors.length == 0 ? new pen[] : colors[i],planar,
-                     triangular);
+        return patch(P[i],colors.length == 0 ? new pen[] : colors[i],
+                     straight,planar,triangular);
       },P.length);
   }
 
@@ -1420,6 +1421,7 @@
 int computeNormals(triple[] v, int[][] vi, triple[] n, int[][] ni)
 {
   triple lastnormal=O;
+  n.delete();
   for(int i=0; i < vi.length; ++i) {
     int[] vii=vi[i];
     int[] nii=ni[i];
@@ -1433,7 +1435,7 @@
   return ni.length;
 }
 
-// Draw triangles on a frame.
+// Draw a triangle group on a frame.
 void draw(frame f, triple[] v, int[][] vi,
           triple[] n={}, int[][] ni={}, material m=currentpen, pen[] p={},
           int[][] pi={}, light light=currentlight, render render=defaultrender)
@@ -1480,21 +1482,25 @@
        render.interaction.type);
 }
 
-// Draw triangles on a picture.
+// Draw a triangle group on a picture.
 void draw(picture pic=currentpicture, triple[] v, int[][] vi,
           triple[] n={}, int[][] ni={}, material m=currentpen, pen[] p={},
           int[][] pi={}, light light=currentlight, render render=defaultrender)
 {
-  bool normals=ni.length > 0;
-  if(!normals) {
-    ni=new int[vi.length][3];
-    normals=computeNormals(v,vi,n,ni) > 0;
-  }
   bool colors=pi.length > 0;
 
+  // TODO: copy inputs
+
   pic.add(new void(frame f, transform3 t, picture pic, projection P) {
       triple[] v=t*v;
-      triple[] n=t*n;
+      bool normals=ni.length > 0;
+      if(normals) {
+        transform3 T=transpose(inverse(shiftless(t)));
+        n=sequence(new triple(int i) {return unit(T*n[i]);},n.length) ;
+      } else {
+        ni=new int[vi.length][3];
+        normals=computeNormals(v,vi,n,ni) > 0;
+      }
 
       if(is3D()) {
         render Render=render(render,interaction(render.interaction,
@@ -1539,9 +1545,11 @@
       }
     },true);
 
-  for(int[] vii : vi)
-    for(int viij : vii)
-      pic.addPoint(v[viij]);
+  for(int[] vii : vi) {
+    pic.addPoint(v[vii[0]]);
+    pic.addPoint(v[vii[1]]);
+    pic.addPoint(v[vii[2]]);
+  }
 }
 
 void tensorshade(transform t=identity(), frame f, patch s,
@@ -1684,6 +1692,112 @@
   draw(t,f,s,nu,nv,surfacepen,meshpen,light,meshlight,name,render,P);
 }
 
+// draw a triangle group on a frame for the tessellation of a surface
+// containing indexed patches.
+void drawTessellation(frame f, surface s,
+                      material surfacepen=currentpen, pen meshpen=nullpen,
+                      light light=currentlight, light meshlight=nolight,
+                      string name="", render render=defaultrender)
+{
+  int nU=s.index.length;
+  if(nU == 0) return;
+  int nV=s.index[0].length;
+  if(nV == 0) return;
+
+  int N=(nU+1)*(nV+1);
+  triple[] v=new triple[N];
+  triple[] n=new triple[N];
+
+  bool colors=s.s[0].colors.length > 0;
+  pen[] p;
+  if(colors)
+    p=new pen[N];
+
+  int index(int i,int j) {return (nV+1)*i+j;}
+
+  int k=0;
+  for(int U=0; U < nU; ++U) {
+    for(int V=0; V < nV; ++V) {
+      patch q=s.s[s.index[U][V]];
+      v[k]=q.P[0][0];
+      n[k]=unit(q.normal00());
+      if(colors)
+        p[k]=q.colors[0];
+      ++k;
+    }
+    patch q=s.s[s.index[U][nV-1]];
+    v[k]=q.P[0][3];
+    n[k]=unit(q.normal01());
+    if(colors)
+      p[k]=q.colors[3];
+    ++k;
+  }
+
+  for(int V=0; V < nV; ++V) {
+    patch q=s.s[s.index[nU-1][V]];
+    v[k]=q.P[3][0];
+    n[k]=unit(q.normal10());
+    if(colors)
+      p[k]=q.colors[1];
+    ++k;
+  }
+  patch q=s.s[s.index[nU-1][nV-1]];
+  v[k]=q.P[3][3];
+  n[k]=unit(q.normal11());
+  if(colors)
+    p[k]=q.colors[2];
+  ++k;
+
+  int[][] vi=new int[nU*nV][];
+  int k=0;
+  for(int i=0; i < nU; ++i) {
+    for(int j=0; j < nV; ++j) {
+      vi[k]=new int[] {index(i,j),index(i+1,j),index(i+1,j+1)};
+      ++k;
+      vi[k]=new int[] {index(i,j),index(i+1,j+1),index(i,j+1)};
+      ++k;
+    }
+  }
+
+  draw(f,v,vi,n,vi,surfacepen,p,colors ? vi : new int[][],light);
+
+  if(!invisible(meshpen)) {
+    if(is3D()) meshpen=thin()+squarecap+meshpen;
+    bool group=name != "" || render.defaultnames;
+    for(int k=0; k < s.s.length; ++k) {
+      patch q=s.s[k];
+      if(group)
+        begingroup3(f,meshname(name),render);
+      draw(f,q.P[0][0]--q.P[3][0]--q.P[3][3]--q.P[0][3]--cycle,
+           meshpen,meshlight,partname(k,render),render);
+      if(group)
+        endgroup3(f);
+    }
+  }
+}
+
+// draw a triangle group on a picture for the tessellation of a surface
+// containing indexed patches.
+void drawTessellation(picture pic=currentpicture, surface s,
+                      material surfacepen=currentpen, pen meshpen=nullpen,
+                      light light=currentlight, light meshlight=nolight,
+                      string name="", render render=defaultrender)
+{
+  pic.add(new void(frame f, transform3 t, picture, projection) {
+      drawTessellation(f,t*s,surfacepen,meshpen,light,meshlight,name,render);
+    },true);
+
+  pic.addPoint(min(s));
+  pic.addPoint(max(s));
+
+  if(!invisible(meshpen)) {
+    for(int k=0; k < s.s.length; ++k) {
+      patch q=s.s[k];
+      addPath(pic,q.P[0][0]--q.P[3][0]--q.P[3][3]--q.P[0][3]--cycle,meshpen);
+    }
+  }
+}
+
 void draw(picture pic=currentpicture, surface s, int nu=1, int nv=1,
           material[] surfacepen, pen[] meshpen=nullpens,
           light light=currentlight, light meshlight=nolight, string name="",
@@ -1691,12 +1805,8 @@
 {
   if(s.empty()) return;
 
-  bool cyclic=surfacepen.cyclic;
   surfacepen=copy(surfacepen);
-  surfacepen.cyclic=cyclic;
-  cyclic=meshpen.cyclic;
   meshpen=copy(meshpen);
-  meshpen.cyclic=cyclic;
 
   pic.add(new void(frame f, transform3 t, picture pic, projection P) {
       surface S=t*s;
@@ -1738,11 +1848,15 @@
           light light=currentlight, light meshlight=nolight, string name="",
           render render=defaultrender)
 {
-  material[] surfacepen={surfacepen};
-  pen[] meshpen={meshpen};
-  surfacepen.cyclic=true;
-  meshpen.cyclic=true;
-  draw(pic,s,nu,nv,surfacepen,meshpen,light,meshlight,name,render);
+  if(render.tessellate && s.index.length > 0 && settings.render != 0) {
+    drawTessellation(pic,s,surfacepen,meshpen,light,meshlight,name,render);
+  } else {
+    material[] surfacepen={surfacepen};
+    surfacepen.cyclic=true;
+    pen[] meshpen={meshpen};
+    meshpen.cyclic=true;
+    draw(pic,s,nu,nv,surfacepen,meshpen,light,meshlight,name,render);
+  }
 }
 
 void draw(picture pic=currentpicture, surface s, int nu=1, int nv=1,

Modified: trunk/Master/texmf-dist/asymptote/v3dheadertypes.asy
===================================================================
--- trunk/Master/texmf-dist/asymptote/v3dheadertypes.asy	2025-02-10 15:30:00 UTC (rev 73846)
+++ trunk/Master/texmf-dist/asymptote/v3dheadertypes.asy	2025-02-10 16:49:00 UTC (rev 73847)
@@ -1,7 +1,5 @@
 // Enum class for v3dheadertypes
 // AUTO-GENERATED from v3dheadertypes.csv
-// Generated at 2024-03-08 08:14:52
-
 struct v3dheadertypes
 {
   int canvasWidth=1;

Modified: trunk/Master/texmf-dist/asymptote/v3dtypes.asy
===================================================================
--- trunk/Master/texmf-dist/asymptote/v3dtypes.asy	2025-02-10 15:30:00 UTC (rev 73846)
+++ trunk/Master/texmf-dist/asymptote/v3dtypes.asy	2025-02-10 16:49:00 UTC (rev 73847)
@@ -1,7 +1,5 @@
 // Enum class for v3dtypes
 // AUTO-GENERATED from v3dtypes.csv
-// Generated at 2024-03-08 08:14:52
-
 struct v3dtypes
 {
   int material=1;

Modified: trunk/Master/texmf-dist/asymptote/version.asy
===================================================================
--- trunk/Master/texmf-dist/asymptote/version.asy	2025-02-10 15:30:00 UTC (rev 73846)
+++ trunk/Master/texmf-dist/asymptote/version.asy	2025-02-10 16:49:00 UTC (rev 73847)
@@ -1 +1 @@
-string VERSION="2.88";
+string VERSION="2.98";

Modified: trunk/Master/texmf-dist/asymptote/webgl/asygl.js
===================================================================
--- trunk/Master/texmf-dist/asymptote/webgl/asygl.js	2025-02-10 15:30:00 UTC (rev 73846)
+++ trunk/Master/texmf-dist/asymptote/webgl/asygl.js	2025-02-10 16:49:00 UTC (rev 73847)
@@ -1,6 +1,6 @@
 /*@license
  AsyGL: Render Bezier patches and triangles via subdivision with WebGL.
-  Copyright 2019-2022: John C. Bowman and Supakorn "Jamie" Rassameemasmuang
+  Copyright 2019-2024: John C. Bowman and Supakorn "Jamie" Rassameemasmuang
   University of Alberta
 
 This program is free software; you can redistribute it and/or modify
@@ -36,4 +36,4 @@
 LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
 OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
 THE SOFTWARE.*/
-let vertex="\n#ifdef WEBGL2\n#define IN in\n#define OUT out\n#else\n#define IN attribute\n#define OUT varying\n#endif\n\nIN vec3 position;\n#ifdef WIDTH\nIN float width;\n#endif\n#ifdef NORMAL\nIN vec3 normal;\n#endif\n\nIN float materialIndex;\n\n#ifdef WEBGL2\nflat out int MaterialIndex;\n#ifdef COLOR\nOUT vec4 Color;\n#endif\n\n#else\nOUT vec4 diffuse;\nOUT vec3 specular;\nOUT float roughness,metallic,fresnel0;\nOUT vec4 emissive;\n\nstruct Material {\n  vec4 diffuse,emissive,specular;\n  vec4 parameters;\n};\n\nuniform Material Materials[Nmaterials];\n#endif\n\n#ifdef COLOR\nIN vec4 color;\n#endif\n\nuniform mat3 normMat;\nuniform mat4 viewMat;\nuniform mat4 projViewMat;\n\n#ifdef NORMAL\n#ifndef ORTHOGRAPHIC\nOUT vec3 ViewPosition;\n#endif\nOUT vec3 Normal;\n#endif\n\nvoid main(void)\n{\n  vec4 v=vec4(position,1.0);\n  gl_Position=projViewMat*v;\n\n#ifdef NORMAL\n#ifndef ORTHOGRAPHIC\n  ViewPosition=(viewMat*v).xyz;\n#endif\n  Normal=normalize(normal*normMat);\n#endif\n\n#ifdef WEBGL2\n  MaterialIndex=int(materialIndex);\n#ifdef COLOR\n  Color=color;\n#endif\n#else\n#ifdef NORMAL\n  Material m;\n#ifdef TRANSPARENT\n  m=Materials[int(abs(materialIndex))-1];\n  emissive=m.emissive;\n  if(materialIndex >= 0.0)\n    diffuse=m.diffuse;\n  else {\n    diffuse=color;\n#if nlights == 0\n    emissive += color;\n#endif\n  }\n#else\n  m=Materials[int(materialIndex)];\n  emissive=m.emissive;\n#ifdef COLOR\n  diffuse=color;\n#if nlights == 0\n    emissive += color;\n#endif\n#else\n  diffuse=m.diffuse;\n#endif // COLOR\n#endif // TRANSPARENT\n  specular=m.specular.rgb;\n  vec4 parameters=m.parameters;\n  roughness=1.0-parameters[0];\n  metallic=parameters[1];\n  fresnel0=parameters[2];\n#else\n  emissive=Materials[int(materialIndex)].emissive;\n#endif // NORMAL\n#endif // WEBGL2\n\n#ifdef WIDTH\n  gl_PointSize=width;\n#endif\n}\n",fragment="\n#ifdef WEBGL2\n#define IN in\nout vec4 outValue;\n#define OUTVALUE outValue\n#else\n#define IN varying\n#define OUTVALUE gl_FragColor\n#endif\n\n#ifdef WEBGL2\nflat in int !
 MaterialIndex;\n\nstruct Material {\n  vec4 diffuse,emissive,specular;\n  vec4 parameters;\n};\n\nuniform Material Materials[Nmaterials];\n\nvec4 diffuse;\nvec3 specular;\nfloat roughness,metallic,fresnel0;\nvec4 emissive;\n\n#ifdef COLOR\nin vec4 Color;\n#endif\n\n#else\nIN vec4 diffuse;\nIN vec3 specular;\nIN float roughness,metallic,fresnel0;\nIN vec4 emissive;\n#endif\n\n#ifdef NORMAL\n\n#ifndef ORTHOGRAPHIC\nIN vec3 ViewPosition;\n#endif\nIN vec3 Normal;\n\nvec3 normal;\n\nstruct Light {\n  vec3 direction;\n  vec3 color;\n};\n\nuniform Light Lights[Nlights];\n\n#ifdef USE_IBL\nuniform sampler2D reflBRDFSampler;\nuniform sampler2D diffuseSampler;\nuniform sampler2D reflImgSampler;\n\nconst float pi=acos(-1.0);\nconst float piInv=1.0/pi;\nconst float twopi=2.0*pi;\nconst float twopiInv=1.0/twopi;\n\n// (x,y,z) -> (r,theta,phi);\n// theta -> [0,pi]: colatitude\n// phi -> [-pi,pi]: longitude\nvec3 cart2sphere(vec3 cart)\n{\n  float x=cart.x;\n  float y=cart.z;\n  float z=cart.y;\n\n  float r=length(cart);\n  float theta=r > 0.0 ? acos(z/r) : 0.0;\n  float phi=atan(y,x);\n\n  return vec3(r,theta,phi);\n}\n\nvec2 normalizedAngle(vec3 cartVec)\n{\n  vec3 sphericalVec=cart2sphere(cartVec);\n  sphericalVec.y=sphericalVec.y*piInv;\n  sphericalVec.z=0.75-sphericalVec.z*twopiInv;\n  return sphericalVec.zy;\n}\n\nvec3 IBLColor(vec3 viewDir)\n{\n  vec3 IBLDiffuse=diffuse.rgb*texture(diffuseSampler,normalizedAngle(normal)).rgb;\n  vec3 reflectVec=normalize(reflect(-viewDir,normal));\n  vec2 reflCoord=normalizedAngle(reflectVec);\n  vec3 IBLRefl=textureLod(reflImgSampler,reflCoord,roughness*ROUGHNESS_STEP_COUNT).rgb;\n  vec2 IBLbrdf=texture(reflBRDFSampler,vec2(dot(normal,viewDir),roughness)).rg;\n  float specularMultiplier=fresnel0*IBLbrdf.x+IBLbrdf.y;\n  vec3 dielectric=IBLDiffuse+specularMultiplier*IBLRefl;\n  vec3 metal=diffuse.rgb*IBLRefl;\n  return mix(dielectric,metal,metallic);\n}\n#else\nfloat Roughness2;\nfloat NDF_TRG(vec3 h)\n{\n  float ndoth=max(dot(normal,h),0.0);\n  float alpha2=Roughness2*Roughness2;\n  flo!
 at denom=ndoth*ndoth*(alpha2-1.0)+1.0;\n  return denom != 0.0 ? alpha2/(denom*denom) : 0.0;\n}\n\nfloat GGX_Geom(vec3 v)\n{\n  float ndotv=max(dot(v,normal),0.0);\n  float ap=1.0+Roughness2;\n  float k=0.125*ap*ap;\n  return ndotv/((ndotv*(1.0-k))+k);\n}\n\nfloat Geom(vec3 v, vec3 l)\n{\n  return GGX_Geom(v)*GGX_Geom(l);\n}\n\nfloat Fresnel(vec3 h, vec3 v, float fresnel0)\n{\n  float a=1.0-max(dot(h,v),0.0);\n  float b=a*a;\n  return fresnel0+(1.0-fresnel0)*b*b*a;\n}\n\n// physical based shading using UE4 model.\nvec3 BRDF(vec3 viewDirection, vec3 lightDirection)\n{\n  vec3 lambertian=diffuse.rgb;\n  vec3 h=normalize(lightDirection+viewDirection);\n\n  float omegain=max(dot(viewDirection,normal),0.0);\n  float omegaln=max(dot(lightDirection,normal),0.0);\n\n  float D=NDF_TRG(h);\n  float G=Geom(viewDirection,lightDirection);\n  float F=Fresnel(h,viewDirection,fresnel0);\n\n  float denom=4.0*omegain*omegaln;\n  float rawReflectance=denom > 0.0 ? (D*G)/denom : 0.0;\n\n  vec3 dielectric=mix(lambertian,rawReflectance*specular,F);\n  vec3 metal=rawReflectance*diffuse.rgb;\n\n  return mix(dielectric,metal,metallic);\n}\n#endif\n\n#endif\n\nvoid main(void)\n{\n#ifdef WEBGL2\n#ifdef NORMAL\n  Material m;\n#ifdef TRANSPARENT\n  m=Materials[abs(MaterialIndex)-1];\n  emissive=m.emissive;\n  if(MaterialIndex >= 0)\n    diffuse=m.diffuse;\n  else {\n    diffuse=Color;\n#if nlights == 0\n    emissive += Color;\n#endif\n  }\n#else\n  m=Materials[MaterialIndex];\n  emissive=m.emissive;\n#ifdef COLOR\n  diffuse=Color;\n#if nlights == 0\n    emissive += Color;\n#endif\n#else\n  diffuse=m.diffuse;\n#endif // COLOR\n#endif // TRANSPARENT\n  specular=m.specular.rgb;\n  vec4 parameters=m.parameters;\n  roughness=1.0-parameters[0];\n  metallic=parameters[1];\n  fresnel0=parameters[2];\n#else\n  emissive=Materials[MaterialIndex].emissive;\n#endif // NORMAL\n#endif // WEBGL2\n\n#if defined(NORMAL) && nlights > 0\n  normal=normalize(Normal);\n  normal=gl_FrontFacing ? normal : -normal;\n#ifdef ORTHOGRAPHIC\n  vec3 viewDir=vec3(0.0,0.0,1.!
 0);\n#else\n  vec3 viewDir=-normalize(ViewPosition);\n#endif\n\nvec3 color;\n#ifdef USE_IBL\n  color=IBLColor(viewDir);\n#else\n  Roughness2=roughness*roughness;\n  color=emissive.rgb;\n  for(int i=0; i < nlights; ++i) {\n    Light Li=Lights[i];\n    vec3 L=Li.direction;\n    float cosTheta=max(dot(normal,L),0.0);\n    vec3 radiance=cosTheta*Li.color;\n    color += BRDF(viewDir,L)*radiance;\n  }\n#endif\n  OUTVALUE=vec4(color,diffuse.a);\n#else\n  OUTVALUE=emissive;\n#endif\n}\n";!function(t,e){if("object"==typeof exports&&"object"==typeof module)module.exports=e();else if("function"==typeof define&&define.amd)define([],e);else{var i=e();for(var n in i)("object"==typeof exports?exports:t)[n]=i[n]}}("undefined"!=typeof self?self:this,(function(){return function(t){var e={};function i(n){if(e[n])return e[n].exports;var r=e[n]={i:n,l:!1,exports:{}};return t[n].call(r.exports,r,r.exports,i),r.l=!0,r.exports}return i.m=t,i.c=e,i.d=function(t,e,n){i.o(t,e)||Object.defineProperty(t,e,{configurable:!1,enumerable:!0,get:n})},i.n=function(t){var e=t&&t.__esModule?function(){return t.default}:function(){return t};return i.d(e,"a",e),e},i.o=function(t,e){return Object.prototype.hasOwnProperty.call(t,e)},i.p="",i(i.s=1)}([function(t,e,i){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.setMatrixArrayType=function(t){e.ARRAY_TYPE=t},e.toRadian=function(t){return t*r},e.equals=function(t,e){return Math.abs(t-e)<=n*Math.max(1,Math.abs(t),Math.abs(e))};var n=e.EPSILON=1e-6;e.ARRAY_TYPE="undefined"!=typeof Float32Array?Float32Array:Array,e.RANDOM=Math.random;var r=Math.PI/180},function(t,e,i){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.mat4=e.mat3=void 0;var n=s(i(2)),r=s(i(3));function s(t){if(t&&t.__esModule)return t;var e={};if(null!=t)for(var i in t)Object.prototype.hasOwnProperty.call(t,i)&&(e[i]=t[i]);return e.default=t,e}e.mat3=n,e.mat4=r},function(t,e,i){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.create=function(){var t=new n.ARRAY_TYPE(9);return t[0]=1,t[1]=0,t[2]=0!
 ,t[3]=0,t[4]=1,t[5]=0,t[6]=0,t[7]=0,t[8]=1,t},e.fromMat4=function(t,e){return t[0]=e[0],t[1]=e[1],t[2]=e[2],t[3]=e[4],t[4]=e[5],t[5]=e[6],t[6]=e[8],t[7]=e[9],t[8]=e[10],t},e.invert=function(t,e){var i=e[0],n=e[1],r=e[2],s=e[3],a=e[4],o=e[5],h=e[6],l=e[7],c=e[8],d=c*a-o*l,m=-c*s+o*h,f=l*s-a*h,u=i*d+n*m+r*f;if(!u)return null;return u=1/u,t[0]=d*u,t[1]=(-c*n+r*l)*u,t[2]=(o*n-r*a)*u,t[3]=m*u,t[4]=(c*i-r*h)*u,t[5]=(-o*i+r*s)*u,t[6]=f*u,t[7]=(-l*i+n*h)*u,t[8]=(a*i-n*s)*u,t};var n=function(t){if(t&&t.__esModule)return t;var e={};if(null!=t)for(var i in t)Object.prototype.hasOwnProperty.call(t,i)&&(e[i]=t[i]);return e.default=t,e}(i(0))},function(t,e,i){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.create=function(){var t=new n.ARRAY_TYPE(16);return t[0]=1,t[1]=0,t[2]=0,t[3]=0,t[4]=0,t[5]=1,t[6]=0,t[7]=0,t[8]=0,t[9]=0,t[10]=1,t[11]=0,t[12]=0,t[13]=0,t[14]=0,t[15]=1,t},e.identity=function(t){return t[0]=1,t[1]=0,t[2]=0,t[3]=0,t[4]=0,t[5]=1,t[6]=0,t[7]=0,t[8]=0,t[9]=0,t[10]=1,t[11]=0,t[12]=0,t[13]=0,t[14]=0,t[15]=1,t},e.invert=function(t,e){var i=e[0],n=e[1],r=e[2],s=e[3],a=e[4],o=e[5],h=e[6],l=e[7],c=e[8],d=e[9],m=e[10],f=e[11],u=e[12],p=e[13],v=e[14],x=e[15],g=i*o-n*a,w=i*h-r*a,M=i*l-s*a,b=n*h-r*o,R=n*l-s*o,T=r*l-s*h,y=c*p-d*u,A=c*v-m*u,E=c*x-f*u,I=d*v-m*p,L=d*x-f*p,N=m*x-f*v,O=g*N-w*L+M*I+b*E-R*A+T*y;if(!O)return null;return O=1/O,t[0]=(o*N-h*L+l*I)*O,t[1]=(r*L-n*N-s*I)*O,t[2]=(p*T-v*R+x*b)*O,t[3]=(m*R-d*T-f*b)*O,t[4]=(h*E-a*N-l*A)*O,t[5]=(i*N-r*E+s*A)*O,t[6]=(v*M-u*T-x*w)*O,t[7]=(c*T-m*M+f*w)*O,t[8]=(a*L-o*E+l*y)*O,t[9]=(n*E-i*L-s*y)*O,t[10]=(u*R-p*M+x*g)*O,t[11]=(d*M-c*R-f*g)*O,t[12]=(o*A-a*I-h*y)*O,t[13]=(i*I-n*A+r*y)*O,t[14]=(p*w-u*b-v*g)*O,t[15]=(c*b-d*w+m*g)*O,t},e.multiply=r,e.translate=function(t,e,i){var n=i[0],r=i[1],s=i[2],a=void 0,o=void 0,h=void 0,l=void 0,c=void 0,d=void 0,m=void 0,f=void 0,u=void 0,p=void 0,v=void 0,x=void 0;e===t?(t[12]=e[0]*n+e[4]*r+e[8]*s+e[12],t[13]=e[1]*n+e[5]*r+e[9]*s+e[13],t[14]=e[2]*n+e[6]*r+e[10]*s+e[14],t[15]=e[3]*n+e[7]*r+e[11]*s+e[15]):(a=e[0],o=e[1],h=e[2],!
 l=e[3],c=e[4],d=e[5],m=e[6],f=e[7],u=e[8],p=e[9],v=e[10],x=e[11],t[0]=a,t[1]=o,t[2]=h,t[3]=l,t[4]=c,t[5]=d,t[6]=m,t[7]=f,t[8]=u,t[9]=p,t[10]=v,t[11]=x,t[12]=a*n+c*r+u*s+e[12],t[13]=o*n+d*r+p*s+e[13],t[14]=h*n+m*r+v*s+e[14],t[15]=l*n+f*r+x*s+e[15]);return t},e.rotate=function(t,e,i,r){var s,a,o,h,l,c,d,m,f,u,p,v,x,g,w,M,b,R,T,y,A,E,I,L,N=r[0],O=r[1],_=r[2],P=Math.sqrt(N*N+O*O+_*_);if(Math.abs(P)<n.EPSILON)return null;N*=P=1/P,O*=P,_*=P,s=Math.sin(i),a=Math.cos(i),o=1-a,h=e[0],l=e[1],c=e[2],d=e[3],m=e[4],f=e[5],u=e[6],p=e[7],v=e[8],x=e[9],g=e[10],w=e[11],M=N*N*o+a,b=O*N*o+_*s,R=_*N*o-O*s,T=N*O*o-_*s,y=O*O*o+a,A=_*O*o+N*s,E=N*_*o+O*s,I=O*_*o-N*s,L=_*_*o+a,t[0]=h*M+m*b+v*R,t[1]=l*M+f*b+x*R,t[2]=c*M+u*b+g*R,t[3]=d*M+p*b+w*R,t[4]=h*T+m*y+v*A,t[5]=l*T+f*y+x*A,t[6]=c*T+u*y+g*A,t[7]=d*T+p*y+w*A,t[8]=h*E+m*I+v*L,t[9]=l*E+f*I+x*L,t[10]=c*E+u*I+g*L,t[11]=d*E+p*I+w*L,e!==t&&(t[12]=e[12],t[13]=e[13],t[14]=e[14],t[15]=e[15]);return t},e.fromTranslation=function(t,e){return t[0]=1,t[1]=0,t[2]=0,t[3]=0,t[4]=0,t[5]=1,t[6]=0,t[7]=0,t[8]=0,t[9]=0,t[10]=1,t[11]=0,t[12]=e[0],t[13]=e[1],t[14]=e[2],t[15]=1,t},e.fromRotation=function(t,e,i){var r,s,a,o=i[0],h=i[1],l=i[2],c=Math.sqrt(o*o+h*h+l*l);if(Math.abs(c)<n.EPSILON)return null;return o*=c=1/c,h*=c,l*=c,r=Math.sin(e),s=Math.cos(e),a=1-s,t[0]=o*o*a+s,t[1]=h*o*a+l*r,t[2]=l*o*a-h*r,t[3]=0,t[4]=o*h*a-l*r,t[5]=h*h*a+s,t[6]=l*h*a+o*r,t[7]=0,t[8]=o*l*a+h*r,t[9]=h*l*a-o*r,t[10]=l*l*a+s,t[11]=0,t[12]=0,t[13]=0,t[14]=0,t[15]=1,t},e.frustum=function(t,e,i,n,r,s,a){var o=1/(i-e),h=1/(r-n),l=1/(s-a);return t[0]=2*s*o,t[1]=0,t[2]=0,t[3]=0,t[4]=0,t[5]=2*s*h,t[6]=0,t[7]=0,t[8]=(i+e)*o,t[9]=(r+n)*h,t[10]=(a+s)*l,t[11]=-1,t[12]=0,t[13]=0,t[14]=a*s*2*l,t[15]=0,t},e.ortho=function(t,e,i,n,r,s,a){var o=1/(e-i),h=1/(n-r),l=1/(s-a);return t[0]=-2*o,t[1]=0,t[2]=0,t[3]=0,t[4]=0,t[5]=-2*h,t[6]=0,t[7]=0,t[8]=0,t[9]=0,t[10]=2*l,t[11]=0,t[12]=(e+i)*o,t[13]=(r+n)*h,t[14]=(a+s)*l,t[15]=1,t};var n=function(t){if(t&&t.__esModule)return t;var e={};if(null!=t)for(var i in t)Object.prototype.hasOwnProperty.call(t,i)&&!
 (e[i]=t[i]);return e.default=t,e}(i(0));function r(t,e,i){var n=e[0],r=e[1],s=e[2],a=e[3],o=e[4],h=e[5],l=e[6],c=e[7],d=e[8],m=e[9],f=e[10],u=e[11],p=e[12],v=e[13],x=e[14],g=e[15],w=i[0],M=i[1],b=i[2],R=i[3];return t[0]=w*n+M*o+b*d+R*p,t[1]=w*r+M*h+b*m+R*v,t[2]=w*s+M*l+b*f+R*x,t[3]=w*a+M*c+b*u+R*g,w=i[4],M=i[5],b=i[6],R=i[7],t[4]=w*n+M*o+b*d+R*p,t[5]=w*r+M*h+b*m+R*v,t[6]=w*s+M*l+b*f+R*x,t[7]=w*a+M*c+b*u+R*g,w=i[8],M=i[9],b=i[10],R=i[11],t[8]=w*n+M*o+b*d+R*p,t[9]=w*r+M*h+b*m+R*v,t[10]=w*s+M*l+b*f+R*x,t[11]=w*a+M*c+b*u+R*g,w=i[12],M=i[13],b=i[14],R=i[15],t[12]=w*n+M*o+b*d+R*p,t[13]=w*r+M*h+b*m+R*v,t[14]=w*s+M*l+b*f+R*x,t[15]=w*a+M*c+b*u+R*g,t}}])})),function(){document.asy={canvasWidth:0,canvasHeight:0,absolute:!1,minBound:[0,0,0],maxBound:[0,0,0],orthographic:!1,angleOfView:0,initialZoom:0,viewportShift:[0,0],viewportMargin:[0,0],background:[],zoomFactor:0,zoomPinchFactor:0,zoomPinchCap:0,zoomStep:0,shiftHoldDistance:0,shiftWaitTime:0,vibrateTime:0,ibl:!1,webgl2:!1,imageURL:"",image:"",Transform:[],Centers:[]};let t,e,i,n,r,s,a,o=document.asy,h=[],l=[],c=[],d=0,m=2;const f=Math.acos(-1),u=f/180,p=Math.ceil(1-Math.log2(Number.EPSILON));let v,x,g,w,M,b,R,T=mat4.create(),y=mat4.create(),A=mat4.create(),E=mat4.create(),I=mat3.create(),L=mat3.create(),N=mat4.create(),O=mat4.create(),_={x:0,y:0,z:0},P={x:0,y:0},S={xmin:0,xmax:0,ymin:0,ymax:0,zmin:0,zmax:0},U=!0,V=0,B=!1,D=null,C=null,F=[],z=[],H=[],X=[],G=null,W=null,j=null;function k(){o.embedded||st(),rt(o.ibl)}class Y{constructor(t,e,i,n,r,s){this.diffuse=t,this.emissive=e,this.specular=i,this.shininess=n,this.metallic=r,this.fresnel0=s}setUniform(e,i){let n=n=>t.getUniformLocation(e,"Materials["+i+"]."+n);t.uniform4fv(n("diffuse"),new Float32Array(this.diffuse)),t.uniform4fv(n("emissive"),new Float32Array(this.emissive)),t.uniform4fv(n("specular"),new Float32Array(this.specular)),t.uniform4f(n("parameters"),this.shininess,this.metallic,this.fresnel0,0)}}let $,q,K,Z,Q,J,tt,et,it;class nt{constructor(t,e){this.direction=t,this.color=e}setUniform(e,i){let n=n=>t.getUn!
 iformLocation(e,"Lights["+i+"]."+n);t.uniform3fv(n("direction"),new Float32Array(this.direction)),t.uniform3fv(n("color"),new Float32Array(this.color))}}function rt(e=!1){let i=t.getParameter(t.MAX_VERTEX_UNIFORM_VECTORS);r=Math.floor((i-14)/4),m=Math.min(Math.max(m,c.length),r),pixelOpt=["WIDTH"],materialOpt=["NORMAL"],colorOpt=["NORMAL","COLOR"],transparentOpt=["NORMAL","COLOR","TRANSPARENT"],e&&(materialOpt.push("USE_IBL"),transparentOpt.push("USE_IBL")),xe=Lt(pixelOpt),ge=Lt(materialOpt),we=Lt(colorOpt),Me=Lt(transparentOpt)}function st(){t.deleteProgram(Me),t.deleteProgram(we),t.deleteProgram(ge),t.deleteProgram(xe)}function at(){let i=o.webgl2?window.top.document.asygl2[e]:window.top.document.asygl[e];i.gl=t,i.nlights=l.length,i.Nmaterials=m,i.maxMaterials=r,i.pixelShader=xe,i.materialShader=ge,i.colorShader=we,i.transparentShader=Me}function ot(t,e){let i;return o.webgl2&&(i=t.getContext("webgl2",{alpha:e}),o.embedded&&!i)?(o.webgl2=!1,o.ibl=!1,ht(!1),null):(i||(o.webgl2=!1,o.ibl=!1,i=t.getContext("webgl",{alpha:e})),i||alert("Could not initialize WebGL"),i)}function ht(s=!0){if(o.ibl&&(o.webgl2=!0),e=o.background[3]<1,o.embedded){let a=window.top.document;if(s&&(n=o.canvas.getContext("2d")),i=o.webgl2?a.offscreen2:a.offscreen,i||(i=a.createElement("canvas"),o.webgl2?a.offscreen2=i:a.offscreen=i),o.webgl2?a.asygl2||(a.asygl2=Array(2)):a.asygl||(a.asygl=Array(2)),asygl=o.webgl2?a.asygl2:a.asygl,asygl[e]&&asygl[e].gl)!function(){let i=o.webgl2?window.top.document.asygl2[e]:window.top.document.asygl[e];t=i.gl,d=i.nlights,m=i.Nmaterials,r=i.maxMaterials,xe=i.pixelShader,ge=i.materialShader,we=i.colorShader,Me=i.transparentShader}(),(l.length!=d||Math.min(c.length,r)>m)&&(rt(),at());else{if(rc=ot(i,e),!rc)return;t=rc,rt(),o.webgl2?a.asygl2[e]={}:a.asygl[e]={},at()}}else t=ot(o.canvas,e),rt();$=t.getExtension("OES_element_index_uint"),q=t.TRIANGLES,K=new mt(t.POINTS),Z=new mt(t.LINES),Q=new mt,J=new mt,tt=new mt,et=new mt}function lt(t,e,i,n=[]){let r=o.webgl2?"300 es":"100",s=Array(...n),a=[["nlights",0==V?l.l!
 ength:0],["Nmaterials",m]],h=[["int","Nlights",Math.max(l.length,1)]];o.webgl2&&s.push("WEBGL2"),o.ibl&&a.push(["ROUGHNESS_STEP_COUNT",8..toFixed(2)]),o.orthographic&&s.push("ORTHOGRAPHIC"),macros_str=a.map(t=>`#define ${t[0]} ${t[1]}`).join("\n"),define_str=s.map(t=>"#define "+t).join("\n"),const_str=h.map(t=>`const ${t[0]} ${t[1]}=${t[2]};`).join("\n"),ext_str=[].map(t=>`#extension ${t}: enable`).join("\n"),shaderSrc=`#version ${r}\n${ext_str}\n${define_str}\n${const_str}\n${macros_str}\n\n\n#ifdef GL_FRAGMENT_PRECISION_HIGH\nprecision highp float;\n#else\nprecision mediump float;\n#endif\n  \n${e}\n  `;let c=t.createShader(i);return t.shaderSource(c,shaderSrc),t.compileShader(c),t.getShaderParameter(c,t.COMPILE_STATUS)?c:(alert(t.getShaderInfoLog(c)),null)}function ct(e,i,n,r=t.ARRAY_BUFFER){return e.length>0&&(0==i&&(i=t.createBuffer(),n=!0),t.bindBuffer(r,i),n&&t.bufferData(r,e,t.STATIC_DRAW)),i}function dt(e,i,n=e.indices){if(0==e.indices.length)return;let r=i!=xe;!function(e,i){let n=i==xe;t.useProgram(i),t.enableVertexAttribArray(Tt),n&&t.enableVertexAttribArray(It);let r=!n&&l.length>0;r&&t.enableVertexAttribArray(yt);t.enableVertexAttribArray(At),i.projViewMatUniform=t.getUniformLocation(i,"projViewMat"),i.viewMatUniform=t.getUniformLocation(i,"viewMat"),i.normMatUniform=t.getUniformLocation(i,"normMat"),(i==we||i==Me)&&t.enableVertexAttribArray(Et);if(r)for(let t=0;t<l.length;++t)l[t].setUniform(i,t);for(let t=0;t<e.materials.length;++t)e.materials[t].setUniform(i,t);t.uniformMatrix4fv(i.projViewMatUniform,!1,E),t.uniformMatrix4fv(i.viewMatUniform,!1,A),t.uniformMatrix3fv(i.normMatUniform,!1,I)}(e,i),null!=W&&(t.activeTexture(t.TEXTURE0),t.bindTexture(t.TEXTURE_2D,j),t.uniform1i(t.getUniformLocation(i,"reflBRDFSampler"),0),t.activeTexture(t.TEXTURE1),t.bindTexture(t.TEXTURE_2D,W),t.uniform1i(t.getUniformLocation(i,"diffuseSampler"),1),t.activeTexture(t.TEXTURE2),t.bindTexture(t.TEXTURE_2D,G),t.uniform1i(t.getUniformLocation(i,"reflImgSampler"),2));let s=U||e.partial||!e.rendered;e.verticesBuffer=ct(ne!
 w Float32Array(e.vertices),e.verticesBuffer,s),t.vertexAttribPointer(Tt,3,t.FLOAT,!1,r?24:16,0),r?l.length>0&&t.vertexAttribPointer(yt,3,t.FLOAT,!1,24,12):t.vertexAttribPointer(It,1,t.FLOAT,!1,16,12),e.materialsBuffer=ct(new Int16Array(e.materialIndices),e.materialsBuffer,s),t.vertexAttribPointer(At,1,t.SHORT,!1,2,0),i!=we&&i!=Me||(e.colorsBuffer=ct(new Float32Array(e.colors),e.colorsBuffer,s),t.vertexAttribPointer(Et,4,t.FLOAT,!0,0,0)),e.indicesBuffer=ct($?new Uint32Array(n):new Uint16Array(n),e.indicesBuffer,s,t.ELEMENT_ARRAY_BUFFER),e.rendered=!0,t.drawElements(r?V?t.LINES:e.type:t.POINTS,n.length,$?t.UNSIGNED_INT:t.UNSIGNED_SHORT,0)}class mt{constructor(t){this.type=t||q,this.verticesBuffer=0,this.materialsBuffer=0,this.colorsBuffer=0,this.indicesBuffer=0,this.rendered=!1,this.partial=!1,this.clear()}clear(){this.vertices=[],this.materialIndices=[],this.colors=[],this.indices=[],this.nvertices=0,this.materials=[],this.materialTable=[]}vertex(t,e){return this.vertices.push(t[0]),this.vertices.push(t[1]),this.vertices.push(t[2]),this.vertices.push(e[0]),this.vertices.push(e[1]),this.vertices.push(e[2]),this.materialIndices.push(it),this.nvertices++}Vertex(t,e,i=[0,0,0,0]){return this.vertices.push(t[0]),this.vertices.push(t[1]),this.vertices.push(t[2]),this.vertices.push(e[0]),this.vertices.push(e[1]),this.vertices.push(e[2]),this.materialIndices.push(it),this.colors.push(i[0]),this.colors.push(i[1]),this.colors.push(i[2]),this.colors.push(i[3]),this.nvertices++}vertex0(t,e){return this.vertices.push(t[0]),this.vertices.push(t[1]),this.vertices.push(t[2]),this.vertices.push(e),this.materialIndices.push(it),this.nvertices++}iVertex(t,e,i,n=[0,0,0,0]){let r=6*t;this.vertices[r]=e[0],this.vertices[r+1]=e[1],this.vertices[r+2]=e[2],this.vertices[r+3]=i[0],this.vertices[r+4]=i[1],this.vertices[r+5]=i[2],this.materialIndices[t]=it;let s=4*t;this.colors[s]=n[0],this.colors[s+1]=n[1],this.colors[s+2]=n[2],this.colors[s+3]=n[3],this.indices.push(t)}append(t){ft(this.vertices,t.vertices),ft(this.materialIndices,t.materi!
 alIndices),ft(this.colors,t.colors),function(t,e,i){let n=t.length,r=e.length;t.length+=e.length;for(let s=0;s<r;++s)t[n+s]=e[s]+i}(this.indices,t.indices,this.nvertices),this.nvertices+=t.nvertices}}function ft(t,e){let i=t.length,n=e.length;t.length+=n;for(let r=0;r<n;++r)t[i+r]=e[r]}class ut{constructor(){this.data=new mt,this.Onscreen=!1,this.m=[]}offscreen(t){let e=E,i=t[0],n=i[0],r=i[1],s=i[2],a=1/(e[3]*n+e[7]*r+e[11]*s+e[15]);this.x=this.X=(e[0]*n+e[4]*r+e[8]*s+e[12])*a,this.y=this.Y=(e[1]*n+e[5]*r+e[9]*s+e[13])*a;for(let i=1,n=t.length;i<n;++i){let n=t[i],r=n[0],s=n[1],a=n[2],o=1/(e[3]*r+e[7]*s+e[11]*a+e[15]),h=(e[0]*r+e[4]*s+e[8]*a+e[12])*o,l=(e[1]*r+e[5]*s+e[9]*a+e[13])*o;h<this.x?this.x=h:h>this.X&&(this.X=h),l<this.y?this.y=l:l>this.Y&&(this.Y=l)}return(this.X<-1.01||this.x>1.01||this.Y<-1.01||this.y>1.01)&&(this.Onscreen=!1,!0)}T(t){let e=this.c[0],i=this.c[1],n=this.c[2],r=t[0]-e,s=t[1]-i,a=t[2]-n;return[r*I[0]+s*I[3]+a*I[6]+e,r*I[1]+s*I[4]+a*I[7]+i,r*I[2]+s*I[5]+a*I[8]+n]}Tcorners(t,e){return[this.T(t),this.T([t[0],t[1],e[2]]),this.T([t[0],e[1],t[2]]),this.T([t[0],e[1],e[2]]),this.T([e[0],t[1],t[2]]),this.T([e[0],t[1],e[2]]),this.T([e[0],e[1],t[2]]),this.T(e)]}setMaterial(t,e){null==t.materialTable[this.MaterialIndex]&&(t.materials.length>=m&&(t.partial=!0,e()),t.materialTable[this.MaterialIndex]=t.materials.length,t.materials.push(c[this.MaterialIndex])),it=t.materialTable[this.MaterialIndex]}render(){let t;var e,i;if(this.setMaterialIndex(),0==this.CenterIndex?(e=this.Min,i=this.Max,t=[e,[e[0],e[1],i[2]],[e[0],i[1],e[2]],[e[0],i[1],i[2]],[i[0],e[1],e[2]],[i[0],e[1],i[2]],[i[0],i[1],e[2]],i]):(this.c=o.Centers[this.CenterIndex-1],t=this.Tcorners(this.Min,this.Max)),this.offscreen(t))return this.data.clear(),void this.notRendered();let n,r=this.controlpoints;if(0==this.CenterIndex){if(!U&&this.Onscreen)return void this.append();n=r}else{let t=r.length;n=Array(t);for(let e=0;e<t;++e)n[e]=this.T(r[e])}let s=o.orthographic?1:this.Min[2]/o.maxBound[2],a=.75*Math.hypot(s*(S.xmax-S.xmin),s*(S.ymax-S.ymi!
 n))/b;this.res2=a*a,this.Epsilon=.1*a,this.data.clear(),this.notRendered(),this.Onscreen=!0,this.process(n)}}function pt(t,e){let i=t[0],n=t.length;for(let r=1;r<n;++r)i=e(i,t[r]);return i}class vt extends ut{constructor(t,e,i,n,r,s){super(),this.controlpoints=t,this.CenterIndex=e,this.MaterialIndex=i,this.color=n;let a=t.length;if(n){let t=n[0][3]+n[1][3]+n[2][3];this.transparent=16==a||4==a?t+n[3][3]<1020:t<765}else this.transparent=c[i].diffuse[3]<1;this.vertex=this.transparent?this.data.Vertex.bind(this.data):this.data.vertex.bind(this.data);let o=this.L2norm2(this.controlpoints),h=Math.sqrt(1e3*Number.EPSILON*o);this.epsilon=o*Number.EPSILON,this.Min=r||this.Bounds(this.controlpoints,Math.min,h),this.Max=s||this.Bounds(this.controlpoints,Math.max,h)}setMaterialIndex(){this.transparent?this.setMaterial(tt,Ie):this.color?this.setMaterial(J,Ae):this.setMaterial(Q,ye)}cornerbound(t,e){let i=e(t[0],t[3]);return i=e(i,t[12]),e(i,t[15])}controlbound(t,e){let i=e(t[1],t[2]);return i=e(i,t[4]),i=e(i,t[5]),i=e(i,t[6]),i=e(i,t[7]),i=e(i,t[8]),i=e(i,t[9]),i=e(i,t[10]),i=e(i,t[11]),i=e(i,t[13]),e(i,t[14])}bound(t,e,i,n,r){if(i=e(i,this.cornerbound(t,e)),e(-1,1)*(i-this.controlbound(t,e))>=-n||0==r)return i;--r,n*=2;let s=new Nt(t[0],t[1],t[2],t[3]),a=new Nt(t[4],t[5],t[6],t[7]),o=new Nt(t[8],t[9],t[10],t[11]),h=new Nt(t[12],t[13],t[14],t[15]),l=new Nt(t[0],t[4],t[8],t[12]),c=new Nt(s.m0,a.m0,o.m0,h.m0),d=new Nt(s.m3,a.m3,o.m3,h.m3),m=new Nt(s.m5,a.m5,o.m5,h.m5),f=new Nt(s.m4,a.m4,o.m4,h.m4),u=new Nt(s.m2,a.m2,o.m2,h.m2),p=new Nt(t[3],t[7],t[11],t[15]),v=[t[0],s.m0,s.m3,s.m5,l.m0,c.m0,d.m0,m.m0,l.m3,c.m3,d.m3,m.m3,l.m5,c.m5,d.m5,m.m5];i=this.bound(v,e,i,n,r);let x=[l.m5,c.m5,d.m5,m.m5,l.m4,c.m4,d.m4,m.m4,l.m2,c.m2,d.m2,m.m2,t[12],h.m0,h.m3,h.m5];i=this.bound(x,e,i,n,r);let g=[m.m5,f.m5,u.m5,p.m5,m.m4,f.m4,u.m4,p.m4,m.m2,f.m2,u.m2,p.m2,h.m5,h.m4,h.m2,t[15]];i=this.bound(g,e,i,n,r);let w=[s.m5,s.m4,s.m2,t[3],m.m0,f.m0,u.m0,p.m0,m.m3,f.m3,u.m3,p.m3,m.m5,f.m5,u.m5,p.m5];return this.bound(w,e,i,n,r)}cornerboundtri(t,e){let i=!
 e(t[0],t[6]);return e(i,t[9])}controlboundtri(t,e){let i=e(t[1],t[2]);return i=e(i,t[3]),i=e(i,t[4]),i=e(i,t[5]),i=e(i,t[7]),e(i,t[8])}boundtri(t,e,i,n,r){if(i=e(i,this.cornerboundtri(t,e)),e(-1,1)*(i-this.controlboundtri(t,e))>=-n||0==r)return i;--r,n*=2;let s=new _t(t),a=[s.l003,s.l102,s.l012,s.l201,s.l111,s.l021,s.l300,s.l210,s.l120,s.l030];i=this.boundtri(a,e,i,n,r);let o=[s.l300,s.r102,s.r012,s.r201,s.r111,s.r021,s.r300,s.r210,s.r120,s.r030];i=this.boundtri(o,e,i,n,r);let h=[s.l030,s.u102,s.u012,s.u201,s.u111,s.u021,s.r030,s.u210,s.u120,s.u030];i=this.boundtri(h,e,i,n,r);let l=[s.r030,s.u201,s.r021,s.u102,s.c111,s.r012,s.l030,s.l120,s.l210,s.l300];return this.boundtri(l,e,i,n,r)}Bounds(t,e,i){let n=Array(3),r=t.length,s=Array(r);for(let a=0;a<3;++a){for(let e=0;e<r;++e)s[e]=t[e][a];n[a]=16==r?this.bound(s,e,s[0],i,p):10==r?this.boundtri(s,e,s[0],i,p):pt(s,e)}return[n[0],n[1],n[2]]}L2norm2(t){let e=t[0],i=0,n=t.length;for(let r=1;r<n;++r)i=Math.max(i,St([t[r][0]-e[0],t[r][1]-e[1],t[r][2]-e[2]]));return i}processTriangle(t){let e=t[0],i=t[1],n=t[2],r=Pt(Vt([i[0]-e[0],i[1]-e[1],i[2]-e[2]],[n[0]-e[0],n[1]-e[1],n[2]-e[2]]));if(!this.offscreen([e,i,n])){let t,s,a;this.color?(t=this.data.Vertex(e,r,this.color[0]),s=this.data.Vertex(i,r,this.color[1]),a=this.data.Vertex(n,r,this.color[2])):(t=this.vertex(e,r),s=this.vertex(i,r),a=this.vertex(n,r)),0==V?(this.data.indices.push(t),this.data.indices.push(s),this.data.indices.push(a)):(this.data.indices.push(t),this.data.indices.push(s),this.data.indices.push(s),this.data.indices.push(a),this.data.indices.push(a),this.data.indices.push(t)),this.append()}}processQuad(t){let e=t[0],i=t[1],n=t[2],r=t[3],s=Vt([i[0]-e[0],i[1]-e[1],i[2]-e[2]],[n[0]-i[0],n[1]-i[1],n[2]-i[2]]),a=Vt([n[0]-r[0],n[1]-r[1],n[2]-r[2]],[r[0]-e[0],r[1]-e[1],r[2]-e[2]]),o=Pt([s[0]+a[0],s[1]+a[1],s[2]+a[2]]);if(!this.offscreen([e,i,n,r])){let t,s,a,h;this.color?(t=this.data.Vertex(e,o,this.color[0]),s=this.data.Vertex(i,o,this.color[1]),a=this.data.Vertex(n,o,this.color[2]),h=this.data.Vertex(r,o,this.!
 color[3])):(t=this.vertex(e,o),s=this.vertex(i,o),a=this.vertex(n,o),h=this.vertex(r,o)),0==V?(this.data.indices.push(t),this.data.indices.push(s),this.data.indices.push(a),this.data.indices.push(t),this.data.indices.push(a),this.data.indices.push(h)):(this.data.indices.push(t),this.data.indices.push(s),this.data.indices.push(s),this.data.indices.push(a),this.data.indices.push(a),this.data.indices.push(h),this.data.indices.push(h),this.data.indices.push(t)),this.append()}}curve(t,e,i,n,r){new wt([t[e],t[i],t[n],t[r]],0,it,this.Min,this.Max).render()}process(t){if(this.transparent&&1!=V&&(it=this.color?-1-it:1+it),10==t.length)return this.process3(t);if(3==t.length)return this.processTriangle(t);if(4==t.length)return this.processQuad(t);if(1==V)return this.curve(t,0,4,8,12),this.curve(t,12,13,14,15),this.curve(t,15,11,7,3),void this.curve(t,3,2,1,0);let e=t[0],i=t[3],n=t[12],r=t[15],s=this.normal(i,t[2],t[1],e,t[4],t[8],n);St(s)<this.epsilon&&(s=this.normal(i,t[2],t[1],e,t[13],t[14],r),St(s)<this.epsilon&&(s=this.normal(r,t[11],t[7],i,t[4],t[8],n)));let a=this.normal(e,t[4],t[8],n,t[13],t[14],r);St(a)<this.epsilon&&(a=this.normal(e,t[4],t[8],n,t[11],t[7],i),St(a)<this.epsilon&&(a=this.normal(i,t[2],t[1],e,t[13],t[14],r)));let o=this.normal(n,t[13],t[14],r,t[11],t[7],i);St(o)<this.epsilon&&(o=this.normal(n,t[13],t[14],r,t[2],t[1],e),St(o)<this.epsilon&&(o=this.normal(e,t[4],t[8],n,t[11],t[7],i)));let h=this.normal(r,t[11],t[7],i,t[2],t[1],e);if(St(h)<this.epsilon&&(h=this.normal(r,t[11],t[7],i,t[4],t[8],n),St(h)<this.epsilon&&(h=this.normal(n,t[13],t[14],r,t[2],t[1],e))),this.color){let l=this.color[0],c=this.color[1],d=this.color[2],m=this.color[3],f=this.data.Vertex(e,s,l),u=this.data.Vertex(n,a,c),p=this.data.Vertex(r,o,d),v=this.data.Vertex(i,h,m);this.Render(t,f,u,p,v,e,n,r,i,!1,!1,!1,!1,l,c,d,m)}else{let l=this.vertex(e,s),c=this.vertex(n,a),d=this.vertex(r,o),m=this.vertex(i,h);this.Render(t,l,c,d,m,e,n,r,i,!1,!1,!1,!1)}this.data.indices.length>0&&this.append()}append(){this.transparent?tt.append(this.data)!
 :this.color?J.append(this.data):Q.append(this.data)}notRendered(){this.transparent?tt.rendered=!1:this.color?J.rendered=!1:Q.rendered=!1}Render(t,e,i,n,r,s,a,o,h,l,c,d,m,f,u,p,v){let x=this.Distance(t);if(x[0]<this.res2&&x[1]<this.res2)this.offscreen([s,a,o])||(0==V?(this.data.indices.push(e),this.data.indices.push(i),this.data.indices.push(n)):(this.data.indices.push(e),this.data.indices.push(i),this.data.indices.push(i),this.data.indices.push(n))),this.offscreen([s,o,h])||(0==V?(this.data.indices.push(e),this.data.indices.push(n),this.data.indices.push(r)):(this.data.indices.push(n),this.data.indices.push(r),this.data.indices.push(r),this.data.indices.push(e)));else{if(this.offscreen(t))return;let g=t[0],w=t[3],M=t[12],b=t[15];if(x[0]<this.res2){let x=new Ot(g,t[1],t[2],w),R=new Ot(t[4],t[5],t[6],t[7]),T=new Ot(t[8],t[9],t[10],t[11]),y=new Ot(M,t[13],t[14],b),A=[g,x.m0,x.m3,x.m5,t[4],R.m0,R.m3,R.m5,t[8],T.m0,T.m3,T.m5,M,y.m0,y.m3,y.m5],E=[x.m5,x.m4,x.m2,w,R.m5,R.m4,R.m2,t[7],T.m5,T.m4,T.m2,t[11],y.m5,y.m4,y.m2,b],I=this.normal(A[12],A[13],A[14],A[15],A[11],A[7],A[3]);St(I)<=this.epsilon&&(I=this.normal(A[12],A[13],A[14],A[15],A[2],A[1],A[0]),St(I)<=this.epsilon&&(I=this.normal(A[0],A[4],A[8],A[12],A[11],A[7],A[3])));let L=this.normal(E[3],E[2],E[1],E[0],E[4],E[8],E[12]);St(L)<=this.epsilon&&(L=this.normal(E[3],E[2],E[1],E[0],E[13],E[14],E[15]),St(L)<=this.epsilon&&(L=this.normal(E[15],E[11],E[7],E[3],E[4],E[8],E[12])));let N=this.Epsilon,O=[.5*(a[0]+o[0]),.5*(a[1]+o[1]),.5*(a[2]+o[2])];if(!c)if(c=zt(M,t[13],t[14],b)<this.res2){let t=Pt(this.differential(E[12],E[8],E[4],E[0]));O=[O[0]-N*t[0],O[1]-N*t[1],O[2]-N*t[2]]}else O=A[15];let _=[.5*(h[0]+s[0]),.5*(h[1]+s[1]),.5*(h[2]+s[2])];if(!m)if(m=zt(g,t[1],t[2],w)<this.res2){let t=Pt(this.differential(A[3],A[7],A[11],A[15]));_=[_[0]-N*t[0],_[1]-N*t[1],_[2]-N*t[2]]}else _=E[0];if(f){let t=Array(4),x=Array(4);for(let e=0;e<4;++e)t[e]=.5*(u[e]+p[e]),x[e]=.5*(v[e]+f[e]);let g=this.data.Vertex(O,I,t),w=this.data.Vertex(_,L,x);this.Render(A,e,i,g,w,s,a,O,_,l,c,!1,m,f,u,t,!
 x),this.Render(E,w,g,n,r,_,O,o,h,!1,c,d,m,x,t,p,v)}else{let t=this.vertex(O,I),f=this.vertex(_,L);this.Render(A,e,i,t,f,s,a,O,_,l,c,!1,m),this.Render(E,f,t,n,r,_,O,o,h,!1,c,d,m)}return}if(x[1]<this.res2){let x=new Ot(g,t[4],t[8],M),R=new Ot(t[1],t[5],t[9],t[13]),T=new Ot(t[2],t[6],t[10],t[14]),y=new Ot(w,t[7],t[11],b),A=[g,t[1],t[2],w,x.m0,R.m0,T.m0,y.m0,x.m3,R.m3,T.m3,y.m3,x.m5,R.m5,T.m5,y.m5],E=[x.m5,R.m5,T.m5,y.m5,x.m4,R.m4,T.m4,y.m4,x.m2,R.m2,T.m2,y.m2,M,t[13],t[14],b],I=this.normal(A[0],A[4],A[8],A[12],A[13],A[14],A[15]);St(I)<=this.epsilon&&(I=this.normal(A[0],A[4],A[8],A[12],A[11],A[7],A[3]),St(I)<=this.epsilon&&(I=this.normal(A[3],A[2],A[1],A[0],A[13],A[14],A[15])));let L=this.normal(E[15],E[11],E[7],E[3],E[2],E[1],E[0]);St(L)<=this.epsilon&&(L=this.normal(E[15],E[11],E[7],E[3],E[4],E[8],E[12]),St(L)<=this.epsilon&&(L=this.normal(E[12],E[13],E[14],E[15],E[2],E[1],E[0])));let N=this.Epsilon,O=[.5*(s[0]+a[0]),.5*(s[1]+a[1]),.5*(s[2]+a[2])];if(!l)if(l=zt(g,t[4],t[8],M)<this.res2){let t=Pt(this.differential(E[0],E[1],E[2],E[3]));O=[O[0]-N*t[0],O[1]-N*t[1],O[2]-N*t[2]]}else O=A[12];let _=[.5*(o[0]+h[0]),.5*(o[1]+h[1]),.5*(o[2]+h[2])];if(!d)if(d=zt(b,t[11],t[7],w)<this.res2){let t=Pt(this.differential(A[15],A[14],A[13],A[12]));_=[_[0]-N*t[0],_[1]-N*t[1],_[2]-N*t[2]]}else _=E[3];if(f){let t=Array(4),x=Array(4);for(let e=0;e<4;++e)t[e]=.5*(f[e]+u[e]),x[e]=.5*(p[e]+v[e]);let g=this.data.Vertex(O,I,t),w=this.data.Vertex(_,L,x);this.Render(A,e,g,w,r,s,O,_,h,l,!1,d,m,f,t,x,v),this.Render(E,g,i,n,w,O,a,o,_,l,c,d,!1,t,u,p,x)}else{let t=this.vertex(O,I),f=this.vertex(_,L);this.Render(A,e,t,f,r,s,O,_,h,l,!1,d,m),this.Render(E,t,i,n,f,O,a,o,_,l,c,d,!1)}return}let R=new Ot(g,t[1],t[2],w),T=new Ot(t[4],t[5],t[6],t[7]),y=new Ot(t[8],t[9],t[10],t[11]),A=new Ot(M,t[13],t[14],b),E=new Ot(g,t[4],t[8],M),I=new Ot(R.m0,T.m0,y.m0,A.m0),L=new Ot(R.m3,T.m3,y.m3,A.m3),N=new Ot(R.m5,T.m5,y.m5,A.m5),O=new Ot(R.m4,T.m4,y.m4,A.m4),_=new Ot(R.m2,T.m2,y.m2,A.m2),P=new Ot(w,t[7],t[11],b),S=[g,R.m0,R.m3,R.m5,E.m0,I.m0,L.m0,N.m0,E.m3,I.m3,L.m!
 3,N.m3,E..m5,I.m5,L.m5,N.m5],U=[E.m5,I.m5,L.m5,N.m5,E.m4,I.m4,L.m4,N.m4,E.m2,I.m2,L.m2,N.m2,M,A.m0,A.m3,A.m5],V=[N.m5,O.m5,_.m5,P.m5,N.m4,O.m4,_.m4,P.m4,N.m2,O.m2,_.m2,P.m2,A.m5,A.m4,A.m2,b],B=[R.m5,R.m4,R.m2,w,N.m0,O.m0,_.m0,P.m0,N.m3,O.m3,_.m3,P.m3,N.m5,O.m5,_.m5,P.m5],D=S[15],C=this.normal(S[0],S[4],S[8],S[12],S[13],S[14],S[15]);St(C)<this.epsilon&&(C=this.normal(S[0],S[4],S[8],S[12],S[11],S[7],S[3]),St(C)<this.epsilon&&(C=this.normal(S[3],S[2],S[1],S[0],S[13],S[14],S[15])));let F=this.normal(U[12],U[13],U[14],U[15],U[11],U[7],U[3]);St(F)<this.epsilon&&(F=this.normal(U[12],U[13],U[14],U[15],U[2],U[1],U[0]),St(F)<this.epsilon&&(F=this.normal(U[0],U[4],U[8],U[12],U[11],U[7],U[3])));let z=this.normal(V[15],V[11],V[7],V[3],V[2],V[1],V[0]);St(z)<this.epsilon&&(z=this.normal(V[15],V[11],V[7],V[3],V[4],V[8],V[12]),St(z)<this.epsilon&&(z=this.normal(V[12],V[13],V[14],V[15],V[2],V[1],V[0])));let H=this.normal(B[3],B[2],B[1],B[0],B[4],B[8],B[12]);St(H)<this.epsilon&&(H=this.normal(B[3],B[2],B[1],B[0],B[13],B[14],B[15]),St(H)<this.epsilon&&(H=this.normal(B[15],B[11],B[7],B[3],B[4],B[8],B[12])));let X=this.normal(V[3],V[2],V[1],D,V[4],V[8],V[12]),G=this.Epsilon,W=[.5*(s[0]+a[0]),.5*(s[1]+a[1]),.5*(s[2]+a[2])];if(!l)if(l=zt(g,t[4],t[8],M)<this.res2){let t=Pt(this.differential(U[0],U[1],U[2],U[3]));W=[W[0]-G*t[0],W[1]-G*t[1],W[2]-G*t[2]]}else W=S[12];let j=[.5*(a[0]+o[0]),.5*(a[1]+o[1]),.5*(a[2]+o[2])];if(!c)if(c=zt(M,t[13],t[14],b)<this.res2){let t=Pt(this.differential(V[12],V[8],V[4],V[0]));j=[j[0]-G*t[0],j[1]-G*t[1],j[2]-G*t[2]]}else j=U[15];let k=[.5*(o[0]+h[0]),.5*(o[1]+h[1]),.5*(o[2]+h[2])];if(!d)if(d=zt(b,t[11],t[7],w)<this.res2){let t=Pt(this.differential(B[15],B[14],B[13],B[12]));k=[k[0]-G*t[0],k[1]-G*t[1],k[2]-G*t[2]]}else k=V[3];let Y=[.5*(h[0]+s[0]),.5*(h[1]+s[1]),.5*(h[2]+s[2])];if(!m)if(m=zt(g,t[1],t[2],w)<this.res2){let t=Pt(this.differential(S[3],S[7],S[11],S[15]));Y=[Y[0]-G*t[0],Y[1]-G*t[1],Y[2]-G*t[2]]}else Y=B[0];if(f){let t=Array(4),x=Array(4),g=Array(4),w=Array(4),M=Array(4);for(let e=0;e<4;++e)t[e]=.5*!
 (f[e]+u[e]),x[e]=.5*(u[e]+p[e]),g[e]=.5*(p[e]+v[e]),w[e]=.5*(v[e]+f[e]),M[e]=.5*(t[e]+g[e]);let b=this.data.Vertex(W,C,t),R=this.data.Vertex(j,F,x),T=this.data.Vertex(k,z,g),y=this.data.Vertex(Y,H,w),A=this.data.Vertex(D,X,M);this.Render(S,e,b,A,y,s,W,D,Y,l,!1,!1,m,f,t,M,w),this.Render(U,b,i,R,A,W,a,j,D,l,c,!1,!1,t,u,x,M),this.Render(V,A,R,n,T,D,j,o,k,!1,c,d,!1,M,x,p,g),this.Render(B,y,A,T,r,Y,D,k,h,!1,!1,d,m,w,M,g,v)}else{let t=this.vertex(W,C),f=this.vertex(j,F),u=this.vertex(k,z),p=this.vertex(Y,H),v=this.vertex(D,X);this.Render(S,e,t,v,p,s,W,D,Y,l,!1,!1,m),this.Render(U,t,i,f,v,W,a,j,D,l,c,!1,!1),this.Render(V,v,f,n,u,D,j,o,k,!1,c,d,!1),this.Render(B,p,v,u,r,Y,D,k,h,!1,!1,d,m)}}}process3(t){if(1==V)return this.curve(t,0,1,3,6),this.curve(t,6,7,8,9),void this.curve(t,9,5,2,0);let e=t[0],i=t[6],n=t[9],r=this.normal(n,t[5],t[2],e,t[1],t[3],i),s=this.normal(e,t[1],t[3],i,t[7],t[8],n),a=this.normal(i,t[7],t[8],n,t[5],t[2],e);if(this.color){let o=this.color[0],h=this.color[1],l=this.color[2],c=this.data.Vertex(e,r,o),d=this.data.Vertex(i,s,h),m=this.data.Vertex(n,a,l);this.Render3(t,c,d,m,e,i,n,!1,!1,!1,o,h,l)}else{let o=this.vertex(e,r),h=this.vertex(i,s),l=this.vertex(n,a);this.Render3(t,o,h,l,e,i,n,!1,!1,!1)}this.data.indices.length>0&&this.append()}Render3(t,e,i,n,r,s,a,o,h,l,c,d,m){if(this.Distance3(t)<this.res2)this.offscreen([r,s,a])||(0==V?(this.data.indices.push(e),this.data.indices.push(i),this.data.indices.push(n)):(this.data.indices.push(e),this.data.indices.push(i),this.data.indices.push(i),this.data.indices.push(n),this.data.indices.push(n),this.data.indices.push(e)));else{if(this.offscreen(t))return;let f=t[0],u=t[1],p=t[2],v=t[3],x=t[4],g=t[5],w=t[6],M=t[7],b=t[8],R=t[9],T=[.5*(R[0]+g[0]),.5*(R[1]+g[1]),.5*(R[2]+g[2])],y=[.5*(R[0]+b[0]),.5*(R[1]+b[1]),.5*(R[2]+b[2])],A=[.5*(g[0]+p[0]),.5*(g[1]+p[1]),.5*(g[2]+p[2])],E=[.5*(b[0]+x[0]),.5*(b[1]+x[1]),.5*(b[2]+x[2])],I=[.5*(b[0]+M[0]),.5*(b[1]+M[1]),.5*(b[2]+M[2])],L=[.5*(p[0]+x[0]),.5*(p[1]+x[1]),.5*(p[2]+x[2])],N=[.5*(p[0]+f[0]),.5*(p[1]+f[1]),.5*(p[!
 2]+f[2])],O=[.5*(x[0]+v[0]),.5*(x[1]+v[1]),.5*(x[2]+v[2])],_=[.5*(M[0]+w[0]),.5*(M[1]+w[1]),.5*(M[2]+w[2])],P=[.5*(f[0]+u[0]),.5*(f[1]+u[1]),.5*(f[2]+u[2])],S=[.5*(u[0]+v[0]),.5*(u[1]+v[1]),.5*(u[2]+v[2])],U=[.5*(v[0]+w[0]),.5*(v[1]+w[1]),.5*(v[2]+w[2])],V=[.5*(T[0]+A[0]),.5*(T[1]+A[1]),.5*(T[2]+A[2])],B=[.5*(y[0]+I[0]),.5*(y[1]+I[1]),.5*(y[2]+I[2])],D=[.5*(A[0]+N[0]),.5*(A[1]+N[1]),.5*(A[2]+N[2])],C=[.5*E[0]+.25*(x[0]+u[0]),.5*E[1]+.25*(x[1]+u[1]),.5*E[2]+.25*(x[2]+u[2])],F=[.5*(I[0]+_[0]),.5*(I[1]+_[1]),.5*(I[2]+_[2])],z=[.5*L[0]+.25*(x[0]+M[0]),.5*L[1]+.25*(x[1]+M[1]),.5*L[2]+.25*(x[2]+M[2])],H=[.25*(g[0]+x[0])+.5*O[0],.25*(g[1]+x[1])+.5*O[1],.25*(g[2]+x[2])+.5*O[2]],X=[.5*(P[0]+S[0]),.5*(P[1]+S[1]),.5*(P[2]+S[2])],G=[.5*(S[0]+U[0]),.5*(S[1]+U[1]),.5*(S[2]+U[2])],W=[.5*(z[0]+X[0]),.5*(z[1]+X[1]),.5*(z[2]+X[2])],j=[.5*(z[0]+G[0]),.5*(z[1]+G[1]),.5*(z[2]+G[2])],k=[.5*(X[0]+G[0]),.5*(X[1]+G[1]),.5*(X[2]+G[2])],Y=[.5*(H[0]+F[0]),.5*(H[1]+F[1]),.5*(H[2]+F[2])],$=[.5*(B[0]+H[0]),.5*(B[1]+H[1]),.5*(B[2]+H[2])],q=[.5*(B[0]+F[0]),.5*(B[1]+F[1]),.5*(B[2]+F[2])],K=[.5*(V[0]+C[0]),.5*(V[1]+C[1]),.5*(V[2]+C[2])],Z=[.5*(D[0]+C[0]),.5*(D[1]+C[1]),.5*(D[2]+C[2])],Q=[.5*(V[0]+D[0]),.5*(V[1]+D[1]),.5*(V[2]+D[2])],J=[f,P,N,X,[.5*(L[0]+P[0]),.5*(L[1]+P[1]),.5*(L[2]+P[2])],D,k,W,Z,Q],tt=[k,G,j,U,[.5*(O[0]+_[0]),.5*(O[1]+_[1]),.5*(O[2]+_[2])],Y,w,_,F,q],et=[Q,K,V,$,[.5*(T[0]+E[0]),.5*(T[1]+E[1]),.5*(T[2]+E[2])],T,q,B,y,R],it=[q,$,Y,K,[.25*(A[0]+I[0]+S[0]+x[0]),.25*(A[1]+I[1]+S[1]+x[1]),.25*(A[2]+I[2]+S[2]+x[2])],j,Q,Z,W,k],nt=this.normal(k,j,Y,q,$,K,Q),rt=this.normal(q,$,K,Q,Z,W,k),st=this.normal(Q,Z,W,k,j,Y,q),at=this.Epsilon,ot=[.5*(s[0]+a[0]),.5*(s[1]+a[1]),.5*(s[2]+a[2])];if(!o)if(o=zt(w,M,b,R)<this.res2){let t=Pt(this.sumdifferential(it[0],it[2],it[5],it[9],it[1],it[3],it[6]));ot=[ot[0]-at*t[0],ot[1]-at*t[1],ot[2]-at*t[2]]}else ot=q;let ht=[.5*(a[0]+r[0]),.5*(a[1]+r[1]),.5*(a[2]+r[2])];if(!h)if(h=zt(f,p,g,R)<this.res2){let t=Pt(this.sumdifferential(it[6],it[3],it[1],it[0],it[7],it[8],it[9]));ht=[ht[0]-at*t[0],ht[1]-at*t[1],ht!
 [2]-at*t[2]]}else ht=Q;let lt=[.5*(r[0]+s[0]),.5*(r[1]+s[1]),.5*(r[2]+s[2])];if(!l)if(l=zt(f,u,v,w)<this.res2){let t=Pt(this.sumdifferential(it[9],it[8],it[7],it[6],it[5],it[2],it[0]));lt=[lt[0]-at*t[0],lt[1]-at*t[1],lt[2]-at*t[2]]}else lt=k;if(c){let t=Array(4),f=Array(4),u=Array(4);for(let e=0;e<4;++e)t[e]=.5*(d[e]+m[e]),f[e]=.5*(m[e]+c[e]),u[e]=.5*(c[e]+d[e]);let p=this.data.Vertex(ot,nt,t),v=this.data.Vertex(ht,rt,f),x=this.data.Vertex(lt,st,u);this.Render3(J,e,x,v,r,lt,ht,!1,h,l,c,u,f),this.Render3(tt,x,i,p,lt,s,ot,o,!1,l,u,d,t),this.Render3(et,v,p,n,ht,ot,a,o,h,!1,f,t,m),this.Render3(it,p,v,x,ot,ht,lt,!1,!1,!1,t,f,u)}else{let t=this.vertex(ot,nt),c=this.vertex(ht,rt),d=this.vertex(lt,st);this.Render3(J,e,d,c,r,lt,ht,!1,h,l),this.Render3(tt,d,i,t,lt,s,ot,o,!1,l),this.Render3(et,c,t,n,ht,ot,a,o,h,!1),this.Render3(it,t,c,d,ot,ht,lt,!1,!1,!1)}}}Distance(t){let e=t[0],i=t[3],n=t[12],r=t[15],s=Ht(e,n,i,r);s=Math.max(zt(e,t[4],t[8],n)),s=Math.max(s,zt(t[1],t[5],t[9],t[13])),s=Math.max(s,zt(i,t[7],t[11],r)),s=Math.max(s,zt(t[2],t[6],t[10],t[14]));let a=Ht(e,i,n,r);return a=Math.max(a,zt(e,t[1],t[2],i)),a=Math.max(a,zt(t[4],t[5],t[6],t[7])),a=Math.max(a,zt(t[8],t[9],t[10],t[11])),a=Math.max(a,zt(n,t[13],t[14],r)),[s,a]}Distance3(t){let e=t[0],i=t[4],n=t[6],r=t[9],s=St([(e[0]+n[0]+r[0])*(1/3)-i[0],(e[1]+n[1]+r[1])*(1/3)-i[1],(e[2]+n[2]+r[2])*(1/3)-i[2]]);return s=Math.max(s,zt(e,t[1],t[3],n)),s=Math.max(s,zt(e,t[2],t[5],r)),Math.max(s,zt(n,t[7],t[8],r))}differential(t,e,i,n){let r=[3*(e[0]-t[0]),3*(e[1]-t[1]),3*(e[2]-t[2])];return St(r)>this.epsilon?r:(r=Ct(t,e,i),St(r)>this.epsilon?r:Ft(t,e,i,n))}sumdifferential(t,e,i,n,r,s,a){let o=this.differential(t,e,i,n),h=this.differential(t,r,s,a);return[o[0]+h[0],o[1]+h[1],o[2]+h[2]]}normal(t,e,i,n,r,s,a){let o=3*(r[0]-n[0]),h=3*(r[1]-n[1]),l=3*(r[2]-n[2]),c=3*(i[0]-n[0]),d=3*(i[1]-n[1]),m=3*(i[2]-n[2]),f=[h*m-l*d,l*c-o*m,o*d-h*c];if(St(f)>this.epsilon)return f;let u=[c,d,m],p=[o,h,l],v=Ct(n,i,e),x=Ct(n,r,s),g=Vt(x,u),w=Vt(p,v);if(f=[g[0]+w[0],g[1]+w[1],g[2]+w[2]],St(f)>thi!
 s.epsilon)return f;let M=Ft(n,i,e,t),b=Ft(n,r,s,a);g=Vt(p,M),w=Vt(b,u);let R=Vt(x,v);return f=[g[0]+w[0]+R[0],g[1]+w[1]+R[1],g[2]+w[2]+R[2]],St(f)>this.epsilon?f:(g=Vt(b,v),w=Vt(x,M),f=[g[0]+w[0],g[1]+w[1],g[2]+w[2]],St(f)>this.epsilon?f:Vt(b,M))}}function xt(t){return 0<=t&&t<=1}class gt{constructor(t,e,i){const n=1e3*Number.EPSILON,r=n*n;if(Math.abs(t)<=n*Math.abs(e)+r*Math.abs(i))Math.abs(e)>n*Math.abs(i)?(this.roots=1,this.t1=-i/e):0==i?(this.roots=1,this.t1=0):this.roots=0;else{let r=.5*e/t,s=e*r;if(Math.abs(s)<=n*Math.abs(i)){let e=-i/t;e>=0?(this.roots=2,this.t2=Math.sqrt(e),this.t1=-this.t2):this.roots=0}else{let t=-2*i/s;if(t>-1){this.roots=2;let e=r*function(t){return t/(Math.sqrt(1+t)+1)}(t),i=-e-2*r;i<=e?(this.t1=i,this.t2=e):(this.t1=e,this.t2=i)}else-1==t?(this.roots=1,this.t1=this.t2=-r):this.roots=0}}}}class wt extends ut{constructor(t,e,i,n,r){if(super(),this.controlpoints=t,this.CenterIndex=e,this.MaterialIndex=i,n&&r)this.Min=n,this.Max=r;else{let t=this.Bounds(this.controlpoints);this.Min=t[0],this.Max=t[1]}}Bounds(t){let e=Array(3),i=Array(3),n=t.length,r=Array(n);for(let h=0;h<3;++h){for(let e=0;e<n;++e)r[e]=t[e][h];let l,c;if(l=c=r[0],4==n){l=Math.min(l,r[3]),c=Math.max(c,r[3]);let t=(s=r[0],a=r[1],o=r[2],[r[3]-s+3*(a-o),2*(s+o)-4*a,a-s]),e=new gt(t[0],t[1],t[2]);if(0!=e.roots&&xt(e.t1)){let t=Bt(r[0],r[1],r[2],r[3],e.t1);l=Math.min(l,t),c=Math.max(c,t)}if(2==e.roots&&xt(e.t2)){let t=Bt(r[0],r[1],r[2],r[3],e.t2);l=Math.min(l,t),c=Math.max(c,t)}}else{let t=r[1];l=Math.min(l,t),c=Math.max(c,t)}e[h]=l,i[h]=c}var s,a,o;return[[e[0],e[1],e[2]],[i[0],i[1],i[2]]]}setMaterialIndex(){this.setMaterial(Z,Te)}processLine(t){let e=t[0],i=t[1];if(!this.offscreen([e,i])){let t=[0,0,1];this.data.indices.push(this.data.vertex(e,t)),this.data.indices.push(this.data.vertex(i,t)),this.append()}}process(t){if(2==t.length)return this.processLine(t);let e=t[0],i=t[1],n=t[2],r=t[3],s=this.normal(Dt(e,i),Ct(e,i,n)),a=this.normal(Dt(n,r),Ct(r,n,i)),o=this.data.vertex(e,s),h=this.data.vertex(r,a);this.Render(t,o,h),!
 this.data.indices.length>0&&this.append()}append(){Z.append(this.data)}notRendered(){Z.rendered=!1}Render(t,e,i){let n=t[0],r=t[1],s=t[2],a=t[3];if(zt(n,r,s,a)<this.res2)this.offscreen([n,a])||(this.data.indices.push(e),this.data.indices.push(i));else{if(this.offscreen(t))return;let o=[.5*(n[0]+r[0]),.5*(n[1]+r[1]),.5*(n[2]+r[2])],h=[.5*(r[0]+s[0]),.5*(r[1]+s[1]),.5*(r[2]+s[2])],l=[.5*(s[0]+a[0]),.5*(s[1]+a[1]),.5*(s[2]+a[2])],c=[.5*(o[0]+h[0]),.5*(o[1]+h[1]),.5*(o[2]+h[2])],d=[.5*(h[0]+l[0]),.5*(h[1]+l[1]),.5*(h[2]+l[2])],m=[.5*(c[0]+d[0]),.5*(c[1]+d[1]),.5*(c[2]+d[2])],f=[n,o,c,m],u=[m,d,l,a],p=this.normal(function(t,e,i,n){return[i[0]+n[0]-t[0]-e[0],i[1]+n[1]-t[1]-e[1],i[2]+n[2]-t[2]-e[2]]}(n,r,s,a),function(t,e,i,n){return[3*t[0]-5*e[0]+i[0]+n[0],3*t[1]-5*e[1]+i[1]+n[1],3*t[2]-5*e[2]+i[2]+n[2]]}(n,r,s,a)),v=this.data.vertex(m,p);this.Render(f,e,v),this.Render(u,v,i)}}normal(t,e){let i=Ut(t,t),n=Ut(t,e);return[i*e[0]-n*t[0],i*e[1]-n*t[1],i*e[2]-n*t[2]]}}class Mt extends ut{constructor(t,e,i){super(),this.controlpoint=t,this.width=e,this.CenterIndex=0,this.MaterialIndex=i,this.Min=t,this.Max=t}setMaterialIndex(){this.setMaterial(K,Re)}process(t){this.data.indices.push(this.data.vertex0(this.controlpoint,this.width)),this.append()}append(){K.append(this.data)}notRendered(){K.rendered=!1}}class bt extends ut{constructor(t,e){super(),this.CenterIndex=t,this.MaterialIndex=e,this.Min=this.Bounds(F,Math.min),this.Max=this.Bounds(F,Math.max),this.controlpoints=F,this.Normals=z,this.Colors=H,this.Indices=X,this.transparent=c[this.MaterialIndex].diffuse[3]<1}Bounds(t,e){let i=Array(3),n=t.length,r=Array(n);for(let s=0;s<3;++s){for(let e=0;e<n;++e)r[e]=t[e][s];i[s]=pt(r,e)}return[i[0],i[1],i[2]]}setMaterialIndex(){this.transparent?this.setMaterial(tt,Ie):this.setMaterial(et,Ee)}process(t){this.data.vertices=new Array(6*t.length),it=this.Colors.length>0?-1-it:1+it;for(let e=0,i=this.Indices.length;e<i;++e){let i=this.Indices[e],n=i[0],r=t[n[0]],s=t[n[1]],a=t[n[2]];if(!this.offscreen([r,s,a])){let t=i.length>1?i[1]:n;if(t!
 &&0!=t.length||(t=n),this.Colors.length>0){let e=i.length>2?i[2]:n;e&&0!=e.length||(e=n);let o=this.Colors[e[0]],h=this.Colors[e[1]],l=this.Colors[e[2]];this.transparent|=o[3]+h[3]+l[3]<765,0==V?(this.data.iVertex(n[0],r,this.Normals[t[0]],o),this.data.iVertex(n[1],s,this.Normals[t[1]],h),this.data.iVertex(n[2],a,this.Normals[t[2]],l)):(this.data.iVertex(n[0],r,this.Normals[t[0]],o),this.data.iVertex(n[1],s,this.Normals[t[1]],h),this.data.iVertex(n[1],s,this.Normals[t[1]],h),this.data.iVertex(n[2],a,this.Normals[t[2]],l),this.data.iVertex(n[2],a,this.Normals[t[2]],l),this.data.iVertex(n[0],r,this.Normals[t[0]],o))}else 0==V?(this.data.iVertex(n[0],r,this.Normals[t[0]]),this.data.iVertex(n[1],s,this.Normals[t[1]]),this.data.iVertex(n[2],a,this.Normals[t[2]])):(this.data.iVertex(n[0],r,this.Normals[t[0]]),this.data.iVertex(n[1],s,this.Normals[t[1]]),this.data.iVertex(n[1],s,this.Normals[t[1]]),this.data.iVertex(n[2],a,this.Normals[t[2]]),this.data.iVertex(n[2],a,this.Normals[t[2]]),this.data.iVertex(n[0],r,this.Normals[t[0]]))}}this.data.nvertices=t.length,this.data.indices.length>0&&this.append()}append(){this.transparent?tt.append(this.data):et.append(this.data)}notRendered(){this.transparent?tt.rendered=!1:et.rendered=!1}}function Rt(){M=-Math.tan(.5*o.angleOfView)*o.maxBound[2],_.x=_.y=0,_.z=.5*(o.minBound[2]+o.maxBound[2]),x=v=o.zoom0,S.zmin=o.minBound[2],S.zmax=o.maxBound[2],P.x=P.y=0,Oe(),U=!0,Ne()}let Tt=0,yt=1,At=2,Et=3,It=4;function Lt(e=[]){let i=lt(t,vertex,t.VERTEX_SHADER,e),n=lt(t,fragment,t.FRAGMENT_SHADER,e),r=t.createProgram();return t.attachShader(r,i),t.attachShader(r,n),t.bindAttribLocation(r,Tt,"position"),t.bindAttribLocation(r,yt,"normal"),t.bindAttribLocation(r,At,"materialIndex"),t.bindAttribLocation(r,Et,"color"),t.bindAttribLocation(r,It,"width"),t.linkProgram(r),t.getProgramParameter(r,t.LINK_STATUS)||alert("Could not initialize shaders"),r}class Nt{constructor(t,e,i,n){this.m0=.5*(t+e);let r=.5*(e+i);this.m2=.5*(i+n),this.m3=.5*(this.m0+r),this.m4=.5*(r+this.m2),this.m5=.5*(this.m3+thi!
 s.m4)}}class Ot{constructor(t,e,i,n){this.m0=[.5*(t[0]+e[0]),.5*(t[1]+e[1]),.5*(t[2]+e[2])];let r=.5*(e[0]+i[0]),s=.5*(e[1]+i[1]),a=.5*(e[2]+i[2]);this.m2=[.5*(i[0]+n[0]),.5*(i[1]+n[1]),.5*(i[2]+n[2])],this.m3=[.5*(this.m0[0]+r),.5*(this.m0[1]+s),.5*(this.m0[2]+a)],this.m4=[.5*(r+this.m2[0]),.5*(s+this.m2[1]),.5*(a+this.m2[2])],this.m5=[.5*(this.m3[0]+this.m4[0]),.5*(this.m3[1]+this.m4[1]),.5*(this.m3[2]+this.m4[2])]}}class _t{constructor(t){this.l003=t[0];let e=t[1],i=t[2],n=t[3],r=t[4],s=t[5];this.r300=t[6];let a=t[7],o=t[8];this.u030=t[9],this.u021=.5*(this.u030+s),this.u120=.5*(this.u030+o);let h=.5*(s+i),l=.5*(o+r),c=.5*(o+a),d=.5*(i+r);this.l012=.5*(i+this.l003);let m=.5*(r+n);this.r210=.5*(a+this.r300),this.l102=.5*(this.l003+e);let f=.5*(e+n);this.r201=.5*(n+this.r300),this.u012=.5*(this.u021+h),this.u210=.5*(this.u120+c),this.l021=.5*(h+this.l012);let u=.5*l+.25*(r+e);this.r120=.5*(c+this.r210);let p=.5*d+.25*(r+a),v=.25*(s+r)+.5*m;this.l201=.5*(this.l102+f),this.r102=.5*(f+this.r201),this.l210=.5*(p+this.l201),this.r012=.5*(p+this.r102),this.l300=.5*(this.l201+this.r102),this.r021=.5*(v+this.r120),this.u201=.5*(this.u210+v),this.r030=.5*(this.u210+this.r120),this.u102=.5*(this.u012+u),this.l120=.5*(this.l021+u),this.l030=.5*(this.u012+this.l021),this.l111=.5*(d+this.l102),this.r111=.5*(m+this.r210),this.u111=.5*(this.u021+l),this.c111=.25*(h+c+f+r)}}function Pt(t){let e=1/(Math.sqrt(t[0]*t[0]+t[1]*t[1]+t[2]*t[2])||1);return[t[0]*e,t[1]*e,t[2]*e]}function St(t){return t[0]*t[0]+t[1]*t[1]+t[2]*t[2]}function Ut(t,e){return t[0]*e[0]+t[1]*e[1]+t[2]*e[2]}function Vt(t,e){return[t[1]*e[2]-t[2]*e[1],t[2]*e[0]-t[0]*e[2],t[0]*e[1]-t[1]*e[0]]}function Bt(t,e,i,n,r){let s=1-r,a=s*s;return a*s*t+r*(3*(a*e+r*s*i)+r*r*n)}function Dt(t,e){return[e[0]-t[0],e[1]-t[1],e[2]-t[2]]}function Ct(t,e,i){return[3*(t[0]+i[0])-6*e[0],3*(t[1]+i[1])-6*e[1],3*(t[2]+i[2])-6*e[2]]}function Ft(t,e,i,n){return[n[0]-t[0]+3*(e[0]-i[0]),n[1]-t[1]+3*(e[1]-i[1]),n[2]-t[2]+3*(e[2]-i[2])]}function zt(t,e,i,n){let r=[1/3*(n[0]-t[0]),1/3*(n[1]-!
 t[1]),1/3*(n[2]-t[2])];return Math.max(St([e[0]-r[0]-t[0],e[1]-r[1]-t[1],e[2]-r[2]-t[2]]),St([n[0]-r[0]-i[0],n[1]-r[1]-i[1],n[2]-r[2]-i[2]]))}function Ht(t,e,i,n){let r=[e[0]-t[0],e[1]-t[1],e[2]-t[2]],s=[n[0]-i[0],n[1]-i[1],n[2]-i[2]];return Math.max(St(Vt(r,Pt(s))),St(Vt(s,Pt(r))))/9}function Xt(t){return[Math.min(t[0][0],t[1][0],t[2][0],t[3][0],t[4][0],t[5][0],t[6][0],t[7][0]),Math.min(t[0][1],t[1][1],t[2][1],t[3][1],t[4][1],t[5][1],t[6][1],t[7][1]),Math.min(t[0][2],t[1][2],t[2][2],t[3][2],t[4][2],t[5][2],t[6][2],t[7][2])]}function Gt(t){return[Math.max(t[0][0],t[1][0],t[2][0],t[3][0],t[4][0],t[5][0],t[6][0],t[7][0]),Math.max(t[0][1],t[1][1],t[2][1],t[3][1],t[4][1],t[5][1],t[6][1],t[7][1]),Math.max(t[0][2],t[1][2],t[2][2],t[3][2],t[4][2],t[5][2],t[6][2],t[7][2])]}function Wt(t){ae||oe(),B=!0,D=t.clientX,C=t.clientY}let jt,kt,Yt=!1;function $t(t){return Math.hypot(t[0].pageX-t[1].pageX,t[0].pageY-t[1].pageY)}function qt(t){t.preventDefault(),ae||oe();let e=t.targetTouches;ue=pe=Yt=!1,fe||(1!=e.length||B||(kt=(new Date).getTime(),touchId=e[0].identifier,D=e[0].pageX,C=e[0].pageY),2!=e.length||B||(touchId=e[0].identifier,jt=$t(e),Yt=!0))}function Kt(t){B=!1}function Zt(t,e,i,n,r){if(t==i&&e==n)return;let[s,a]=function(t,e){let i=ne(t),n=ne(e),r=Ut(i,n);return[r>1?0:r<-1?f:Math.acos(r),Pt(Vt(i,n))]}([t,-e],[i,-n]);mat4.fromRotation(O,2*r*R*s/v,a),mat4.multiply(T,O,T)}function Qt(t,e,i,n){let r=1/v;P.x+=(i-t)*r*s,P.y-=(n-e)*r*a}function Jt(t,e,i,n){o.orthographic?Qt(t,e,i,n):(_.x+=(i-t)*(S.xmax-S.xmin),_.y-=(n-e)*(S.ymax-S.ymin))}function te(){var t,e;t=A,e=T,mat4.fromTranslation(O,[_.x,_.y,_.z]),mat4.invert(N,O),mat4.multiply(t,e,N),mat4.multiply(t,O,t),mat4.translate(A,A,[_.x,_.y,0]),mat3.fromMat4(L,A),mat3.invert(I,L),mat4.multiply(E,y,A)}function ee(){let t=Math.sqrt(Number.MAX_VALUE),e=1/t;v<=e&&(v=e),v>=t&&(v=t),(1.5*v<x||v>1.5*x)&&(U=!0,x=v)}function ie(t){let e=o.zoomStep*a*t;const i=Math.log(.1*Number.MAX_VALUE)/Math.log(o.zoomFactor);Math.abs(e)<i&&(v*=o.zoomFactor**e,ee())}function ne(t){let e=t[0],i=t[1!
 ],n=Math..hypot(e,i);return n>1&&(denom=1/n,e*=denom,i*=denom),[e,i,Math.sqrt(Math.max(1-i*i-e*e,0))]}function re(t,e,i,n){ie(e-n)}function se(t,e,i,n=1){let r;switch(i){case 1:r=Zt;break;case 2:r=Qt;break;case 3:r=re;break;case 4:r=Jt;break;default:r=(t,e,i,n)=>{}}r((D-s)/s,(C-a)/a,(t-s)/s,(e-a)/a,n),D=t,C=e,Oe(),Ne()}let ae=0;function oe(){ae=1,o.canvas.addEventListener("wheel",de,!1)}function he(){let t,e,i;[t,e,i]=function(){let t=Array(3),e=Array(3),i=Array(3),n=_.x,r=_.y,s=.5*(S.zmin+S.zmax);for(let a=0;a<3;++a){let h=0,l=0,c=0,d=4*a;for(let t=0;t<4;++t){let e=4*t,i=T[e],a=T[e+1],m=T[e+2],f=T[e+3],u=o.Transform[d+t];h+=u*(f-n*i-r*a-s*m),c+=u*a,l+=u*(f-n*i-r*a)}t[a]=h,e[a]=c,i[a]=l}return[t,e,i]}();let n=o.orthographic?"  orthographic(":"  perspective(",r="".padStart(n.length),s="currentprojection=\n"+n+"camera=("+t+"),\n"+r+"up=("+e+"),\n"+r+"target=("+i+"),\n"+r+"zoom="+v*o.initialZoom/o.zoom0;return o.orthographic||(s+=",\n"+r+"angle="+2*Math.atan(Math.tan(.5*o.angleOfView)/v)/u),0==g&&0==w||(s+=",\n"+r+"viewportshift=("+g+","+w+")"),o.orthographic||(s+=",\n"+r+"autoadjust=false"),s+=");\n",window.parent.asyProjection=!0,s}function le(t){if(ae||oe(),o.embedded&&ae&&27==t.keyCode)return ae=0,void o.canvas.removeEventListener("wheel",de,!1);let e=[];switch(t.key){case"x":e=[1,0,0];break;case"y":e=[0,1,0];break;case"z":e=[0,0,1];break;case"h":mat4.identity(T),Rt(),window.top.asyWebApplication&&window.top.asyWebApplication.setProjection(""),window.parent.asyProjection=!1;break;case"m":++V,3==V&&(V=0),2!=V&&(o.embedded||st(),rt(o.ibl)),U=!0,Ne();break;case"+":case"=":case">":v*=o.zoomFactor,ce();break;case"-":case"_":case"<":v/=o.zoomFactor,ce();break;case"c":window.top.asyWebApplication||prompt("Ctrl+c Enter to copy currentprojection to clipboard; then append to asy file:",he())}e.length>0&&(mat4.rotate(T,T,.1,e),te(),Ne())}function ce(){ee(),Oe(),Ne()}function de(t){t.preventDefault(),t.deltaY<0?v*=o.zoomFactor:v/=o.zoomFactor,ce()}function me(t){if(!B)return;let e,i=t.clientX,n=t.clientY;e=t.getModifierStat!
 e("Control")?2:t.getModifierState("Shift")?3:t.getModifierState("Alt")?4:1,se(i,n,e)}let fe=!1,ue=!1,pe=!1;function ve(t){if(t.preventDefault(),fe)return;let e=t.targetTouches;if(!Yt&&1==e.length&&touchId==e[0].identifier){let t=e[0].pageX,i=e[0].pageY,n=t-D,r=i-C,s=n*n+r*r<=o.shiftHoldDistance*o.shiftHoldDistance;if(s&&!ue&&!pe&&(new Date).getTime()-kt>o.shiftWaitTime&&(navigator.vibrate&&window.navigator.vibrate(o.vibrateTime),ue=!0),ue)se(t,i,2);else if(!s){pe=!0,se(e[0].pageX,e[0].pageY,1,.5)}}if(Yt&&!ue&&2==e.length&&touchId==e[0].identifier){let t=$t(e),i=t-jt;fe=!0,i*=o.zoomPinchFactor,i>o.zoomPinchCap&&(i=o.zoomPinchCap),i<-o.zoomPinchCap&&(i=-o.zoomPinchCap),ie(i/b),jt=t,ue=pe=fe=!1,Oe(),Ne()}}let xe,ge,we,Me,be=[];function Re(){dt(K,xe),K.clear()}function Te(){dt(Z,ge),Z.clear()}function ye(){dt(Q,ge),Q.clear()}function Ae(){dt(J,we),J.clear()}function Ee(){dt(et,Me),et.rendered=!1,et.clear()}function Ie(){let e=tt.indices;if(V>0)return dt(tt,Me,e),void tt.clear();if(e.length>0){!function(t){let e=A[2],i=A[6],n=A[10];be.length=t.length;for(let r=0;r<t.length;++r){let s=6*r;be[r]=e*t[s]+i*t[s+1]+n*t[s+2]}}(tt.vertices);let i=e.length/3,n=Array(i).fill().map((t,e)=>e);n.sort((function(t,i){let n=3*t;Ia=e[n],Ib=e[n+1],Ic=e[n+2];let r=3*i;return IA=e[r],IB=e[r+1],IC=e[r+2],be[Ia]+be[Ib]+be[Ic]<be[IA]+be[IB]+be[IC]?-1:1}));let r=Array(e.length);for(let t=0;t<i;++t){let i=3*n[t];r[3*t]=e[i],r[3*t+1]=e[i+1],r[3*t+2]=e[i+2]}t.depthMask(!1),dt(tt,Me,r),tt.rendered=!1,t.depthMask(!0)}tt.clear()}function Le(){Re(),Te(),ye(),Ae(),Ee(),Ie(),requestAnimationFrame(Le)}function Ne(){o.embedded&&(i.width=o.canvasWidth,i.height=o.canvasHeight,_e()),t.clearColor(o.background[0],o.background[1],o.background[2],o.background[3]),t.clear(t.COLOR_BUFFER_BIT|t.DEPTH_BUFFER_BIT);for(const t of h)t.render();Le(),o.embedded&&(n.clearRect(0,0,o.canvasWidth,o.canvasHeight),n.drawImage(i,0,0)),0==V&&(U=!1)}function Oe(){!function(t,e,i,n){let r=t/e;g=(i/t+o.viewportShift[0])*v,w=(n/e+o.viewportShift[1])*v;let s=1/v;if(o.orthographic!
 ){let t=o.maxBound[0]-o.minBound[0],e=o.maxBound[1]-o.minBound[1];if(t<e*r){let t=.5*e*r*s,i=2*t*g,n=e*s*w;S.xmin=-t-i,S.xmax=t-i,S.ymin=o.minBound[1]*s-n,S.ymax=o.maxBound[1]*s-n}else{let e=.5*t*s/r,i=t*s*g,n=2*e*w;S.xmin=o.minBound[0]*s-i,S.xmax=o.maxBound[0]*s-i,S.ymin=-e-n,S.ymax=e-n}}else{let t=M*s,e=t*r,i=2*e*g,n=2*t*w;S.xmin=-e-i,S.xmax=e-i,S.ymin=-t-n,S.ymax=t-n}}(o.canvasWidth,o.canvasHeight,P.x,P.y),(o.orthographic?mat4.ortho:mat4.frustum)(y,S.xmin,S.xmax,S.ymin,S.ymax,-S.zmax,-S.zmin),te(),window.top.asyWebApplication&&window.top.asyWebApplication.setProjection(he())}function _e(){t.viewportWidth=o.canvasWidth,t.viewportHeight=o.canvasHeight,t.viewport(.5*(o.canvas.width-o.canvasWidth),.5*(o.canvas.height-o.canvasHeight),o.canvasWidth,o.canvasHeight),t.scissor(0,0,o.canvas.width,o.canvas.height)}function Pe(t,e){t>void 0&&(t=void 0),e>void 0&&(e=void 0),P.x*=t/o.canvasWidth,P.y*=e/o.canvasHeight,o.canvasWidth=t,o.canvasHeight=e,o.embedded&&(o.canvas.width=i.width=o.canvasWidth,o.canvas.height=i.height=o.canvasHeight),b=Math.hypot(o.canvasWidth,o.canvasHeight),s=.5*o.canvas.width,a=.5*o.canvas.height,R=1+8*Math.hypot(o.viewportMargin[0],o.viewportMargin[1])/b,_e(),Oe(),U=!0}function Se(){if(o.zoom0=o.initialZoom,window.top.asyWebApplication&&""==window.top.asyWebApplication.getProjection()&&(window.parent.asyProjection=!1),o.absolute&&!o.embedded)o.canvasWidth=o.canvasWith0*window.devicePixelRatio,o.canvasHeight=o.canvasHeight0*window.devicePixelRatio;else{let t=o.canvasWith0/o.canvasHeight0;o.canvasWidth=Math.max(window.innerWidth-10,10),o.canvasHeight=Math.max(window.innerHeight-10,10),!o.orthographic&&!window.parent.asyProjection&&o.canvasWidth<o.canvasHeight*t&&(o.zoom0*=o.canvasWidth/(o.canvasHeight*t))}o.canvas.width=o.canvasWidth,o.canvas.height=o.canvasHeight;window.innerWidth,window.innerHeight;let t=1/o.zoom0;o.viewportShift[0]*=t,o.viewportShift[1]*=t,Pe(o.canvasWidth,o.canvasHeight),Rt()}class Ue{constructor(t,e){if(this.center=t,e){let t=e[0],i=e[1];this.ct=Math.cos(t),this.st=Math.sin(t),!
 this.cp=Math.cos(i),this.sp=Math.sin(i)}}T0(t){return[t[0]+this.center[0],t[1]+this.center[1],t[2]+this.center[2]]}T(t){let e=t[0],i=t[1],n=t[2],r=e*this.ct+n*this.st;return[r*this.cp-i*this.sp+this.center[0],r*this.sp+i*this.cp+this.center[1],-e*this.st+n*this.ct+this.center[2]]}}function Ve(t,e,i){let n=[t(e),t([e[0],e[1],i[2]]),t([e[0],i[1],e[2]]),t([e[0],i[1],i[2]]),t([i[0],e[1],e[2]]),t([i[0],e[1],i[2]]),t([i[0],i[1],e[2]]),t(i)];return[Xt(n),Gt(n)]}let Be=4/3*(Math.sqrt(2)-1);async function De(t){return(await fetch(t)).arrayBuffer()}function Ce(t){return t.getBytes().filter((t,e)=>e%4!=3)}function Fe(e,i,n=t.RGB16F){let r=e.width(),s=e.height(),a=t.createTexture();return t.activeTexture(t.TEXTURE0+i),t.bindTexture(t.TEXTURE_2D,a),t.pixelStorei(t.UNPACK_ALIGNMENT,1),t.texParameteri(t.TEXTURE_2D,t.TEXTURE_MIN_FILTER,t.LINEAR),t.texParameteri(t.TEXTURE_2D,t.TEXTURE_MAG_FILTER,t.LINEAR),t.texImage2D(t.TEXTURE_2D,0,n,r,s,0,t.RGB,t.FLOAT,Ce(e)),a}window.webGLStart=function(){o.canvas=document.getElementById("Asymptote"),o.embedded=window.top.document!=document,ht(),t.enable(t.BLEND),t.blendFunc(t.SRC_ALPHA,t.ONE_MINUS_SRC_ALPHA),t.enable(t.DEPTH_TEST),t.enable(t.SCISSOR_TEST),o.canvas.onmousedown=Wt,document.onmouseup=Kt,document.onmousemove=me,o.canvas.onkeydown=le,o.embedded||oe(),o.canvas.addEventListener("touchstart",qt,!1),o.canvas.addEventListener("touchend",Kt,!1),o.canvas.addEventListener("touchcancel",Kt,!1),o.canvas.addEventListener("touchleave",Kt,!1),o.canvas.addEventListener("touchmove",ve,!1),document.addEventListener("keydown",le,!1),o.canvasWith0=o.canvasWidth,o.canvasHeight0=o.canvasHeight,mat4.identity(T),0!=window.innerWidth&&0!=window.innerHeight&&Se(),window.addEventListener("resize",Se,!1),o.ibl&&async function(){let e=o.imageURL+o.image+"/";function i(t){return new Promise(e=>setTimeout(e,t))}for(;!Module.EXRLoader;)await i(0);promises=[De(o.imageURL+"refl.exr").then(t=>{let e=new Module.EXRLoader(t);j=Fe(e,0)}),De(e+"diffuse.exr").then(t=>{let e=new Module.EXRLoader(t);W=Fe(e,1)})],refl_p!
 romise=[],refl_promise.push(De(e+"refl0.exr"));for(let t=1;t<=8;++t)refl_promise.push(De(e+"refl"+t+"w.exr"));finished_promise=Promise.all(refl_promise).then(e=>{let i=t.createTexture();t.activeTexture(t.TEXTURE0+2),t.pixelStorei(t.UNPACK_ALIGNMENT,1),t.bindTexture(t.TEXTURE_2D,i),t.texParameteri(t.TEXTURE_2D,t.TEXTURE_MAX_LEVEL,e.length-1),t.texParameteri(t.TEXTURE_2D,t.TEXTURE_MIN_FILTER,t.LINEAR_MIPMAP_LINEAR),t.texParameteri(t.TEXTURE_2D,t.TEXTURE_MAG_FILTER,t.LINEAR),t.texParameterf(t.TEXTURE_2D,t.TEXTURE_MIN_LOD,0),t.texParameterf(t.TEXTURE_2D,t.TEXTURE_MAX_LOD,8);for(let i=0;i<e.length;++i){let n=new Module.EXRLoader(e[i]);t.texImage2D(t.TEXTURE_2D,i,t.RGB16F,n.width(),n.height(),0,t.RGB,t.FLOAT,Ce(n))}G=i}),promises.push(finished_promise),await Promise.all(promises)}().then(k).then(Rt)},window.light=function(t,e){l.push(new nt(t,e))},window.material=function(t,e,i,n,r,s){c.push(new Y(t,e,i,n,r,s))},window.patch=function(t,e,i,n){h.push(new vt(t,e,i,n))},window.curve=function(t,e,i){h.push(new wt(t,e,i))},window.pixel=function(t,e,i){h.push(new Mt(t,e,i))},window.triangles=function(t,e){h.push(new bt(t,e)),window.Positions=F=[],window.Normals=z=[],window.Colors=H=[],window.Indices=X=[]},window.sphere=function(t,e,i,n,r){let s,a,o,l,c,d,m=.524670512339254,f=.595936986722291,u=.954967051233925,p=.0820155480083437,v=.996685028842544,x=.0549670512339254,g=.998880711874577,w=.0405017186586849,M=[[[1,0,0],[1,0,m],[f,0,u],[p,0,v],[1,Be,0],[1,Be,m],[f,Be*f,u],[p,Be*p,v],[Be,1,0],[Be,1,m],[Be*f,f,u],[Be*p,p,v],[0,1,0],[0,1,m],[0,f,u],[0,p,v]],[[p,0,v],[p,Be*p,v],[x,0,g],[Be*p,p,v],[w,w,1],[.05*Be,0,1],[0,p,v],[0,x,g],[0,.05*Be,1],[0,0,1]]],b=new Ue(t,r);function R(t){let e=Array(t.length);for(let i=0;i<t.length;++i){let n=t[i];e[i]=c([s*n[0],a*n[1],o*n[2]])}return e}r?(l=1,d=0,c=b.T.bind(b)):(l=-1,d=-e,c=b.T0.bind(b));let T=Ve(c,[-e,-e,d],[e,e,e]),y=T[0],A=T[1];for(let t=-1;t<=1;t+=2){s=t*e;for(let t=-1;t<=1;t+=2){a=t*e;for(let t=l;t<=1;t+=2){o=t*e;for(let t=0;t<2;++t)h.push(new vt(R(M[t]),i,n,null,y,A))}}}},windo!
 w.disk=function(t,e,i,n,r){let s=1-2*Be/3,a=[[1,0,0],[1,-Be,0],[Be,-1,0],[0,-1,0],[1,Be,0],[s,0,0],[0,-s,0],[-Be,-1,0],[Be,1,0],[0,s,0],[-s,0,0],[-1,-Be,0],[0,1,0],[-Be,1,0],[-1,Be,0],[-1,0,0]],o=new Ue(t,r),l=Ve(o.T.bind(o),[-e,-e,0],[e,e,0]);h.push(new vt(function(t){let i=Array(t.length);for(let n=0;n<t.length;++n){let r=t[n];i[n]=o.T([e*r[0],e*r[1],0])}return i}(a),i,n,null,l[0],l[1]))},window.cylinder=function(t,e,i,n,r,s,a){let o,l,c=[[1,0,0],[1,0,1/3],[1,0,2/3],[1,0,1],[1,Be,0],[1,Be,1/3],[1,Be,2/3],[1,Be,1],[Be,1,0],[Be,1,1/3],[Be,1,2/3],[Be,1,1],[0,1,0],[0,1,1/3],[0,1,2/3],[0,1,1]],d=new Ue(t,s);function m(t){let e=Array(t.length);for(let n=0;n<t.length;++n){let r=t[n];e[n]=d.T([o*r[0],l*r[1],i*r[2]])}return e}let f=Ve(d.T.bind(d),[-e,-e,0],[e,e,i]),u=f[0],p=f[1];for(let t=-1;t<=1;t+=2){o=t*e;for(let t=-1;t<=1;t+=2)l=t*e,h.push(new vt(m(c),n,r,null,u,p))}if(a){let e=d.T([0,0,i]);h.push(new wt([t,e],n,r,t,e))}},window.tube=function(t,e,i,n,r){let s=function(t,e,i,n,r){class s{constructor(t,e,i){this.p=t,this.r=e,this.t=i,this.s=Vt(i,e)}}let a=Number.EPSILON*Math.max(St(t),St(e),St(i),St(n));function o(r){if(1==r){let r=[n[0]-i[0],n[1]-i[1],n[2]-i[2]];return St(r)>a?Pt(r):(r=[2*i[0]-e[0]-n[0],2*i[1]-e[1]-n[1],2*i[2]-e[2]-n[2]],St(r)>a?Pt(r):[n[0]-t[0]+3*(e[0]-i[0]),n[1]-t[1]+3*(e[1]-i[1]),n[2]-t[2]+3*(e[2]-i[2])])}let s=[n[0]-t[0]+3*(e[0]-i[0]),n[1]-t[1]+3*(e[1]-i[1]),n[2]-t[2]+3*(e[2]-i[2])],o=[2*(t[0]+i[0])-4*e[0],2*(t[1]+i[1])-4*e[1],2*(t[2]+i[2])-4*e[2]],h=[e[0]-t[0],e[1]-t[1],e[2]-t[2]],l=r*r,c=[s[0]*l+o[0]*r+h[0],s[1]*l+o[1]*r+h[1],s[2]*l+o[2]*r+h[2]];return St(c)>a?Pt(c):(l=2*r,c=[s[0]*l+o[0],s[1]*l+o[1],s[2]*l+o[2]],St(c)>a?Pt(c):Pt(s))}let h=Array(r.length),l=[e[0]-t[0],e[1]-t[1],e[2]-t[2]];St(l)<a&&(l=[t[0]-2*e[0]+i[0],t[1]-2*e[1]+i[1],t[2]-2*e[2]+i[2]],St(l)<a&&(l=[n[0]-t[0]+3*(e[0]-i[0]),n[1]-t[1]+3*(e[1]-i[1]),n[2]-t[2]+3*(e[2]-i[2])])),l=Pt(l);let c=function(t){let e=Vt(t,[0,1,0]),i=Number.EPSILON*St(t);return St(e)>i?Pt(e):(e=Vt(t,[0,0,1]),St(e)>i?Pt(e):[1,0,0])}(l);h[0]=new s(t,c,l);for(le!
 t a=1;a<r.length;++a){let l=h[a-1],c=r[a],d=1-c,m=d*d,f=m*d,u=3*c;m*=u,d*=u*c;let p=c*c*c,v=[f*t[0]+m*e[0]+d*i[0]+p*n[0],f*t[1]+m*e[1]+d*i[1]+p*n[1],f*t[2]+m*e[2]+d*i[2]+p*n[2]],x=[v[0]-l.p[0],v[1]-l.p[1],v[2]-l.p[2]];if(0!=x[0]||0!=x[1]||0!=x[2]){let t=l.r,e=Pt(x),i=l.t,n=Ut(e,i),r=[i[0]-2*n*e[0],i[1]-2*n*e[1],i[2]-2*n*e[2]];i=o(c);let d=2*Ut(e,t),m=[t[0]-d*e[0],t[1]-d*e[1],t[2]-d*e[2]],f=Pt([i[0]-r[0],i[1]-r[1],i[2]-r[2]]),u=2*Ut(f,m);m=[m[0]-u*f[0],m[1]-u*f[1],m[2]-u*f[2]],h[a]=new s(v,Pt(m),Pt(i))}else h[a]=h[a-1]}return h}(t[0],t[1],t[2],t[3],[0,1/3,2/3,1]),a=Be*e,o=[[e,0],[e,a],[a,e],[0,e]];function l(e,r,a,l){let c=Array(16);for(let i=0;i<4;++i){let n=s[i],h=n.r[0],d=n.s[0],m=h*e+d*r,f=h*a+d*l;h=n.r[1],d=n.s[1];let u=h*e+d*r,p=h*a+d*l;h=n.r[2],d=n.s[2];let v=h*e+d*r,x=h*a+d*l,g=t[i],w=g[0];w1=g[1],w2=g[2];for(let t=0;t<4;++t){let e=o[t],n=e[0],r=e[1];c[4*i+t]=[m*n+f*r+w,u*n+p*r+w1,v*n+x*r+w2]}}h.push(new vt(c,i,n))}l(1,0,0,1),l(0,-1,1,0),l(-1,0,0,-1),l(0,1,-1,0),r&&h.push(new wt(t,i,n))},window.Positions=F,window.Normals=z,window.Colors=H,window.Indices=X}();
+let vertex="\n#ifdef WEBGL2\n#define IN in\n#define OUT out\n#else\n#define IN attribute\n#define OUT varying\n#endif\n\nIN vec3 position;\n#ifdef WIDTH\nIN float width;\n#endif\n#ifdef NORMAL\nIN vec3 normal;\n#endif\n\nIN float materialIndex;\n\n#ifdef WEBGL2\nflat out int MaterialIndex;\n#ifdef COLOR\nOUT vec4 Color;\n#endif\n\n#else\nOUT vec4 diffuse;\nOUT vec3 specular;\nOUT float roughness,metallic,fresnel0;\nOUT vec4 emissive;\n\nstruct Material {\n  vec4 diffuse,emissive,specular;\n  vec4 parameters;\n};\n\nuniform Material Materials[Nmaterials];\n#endif\n\n#ifdef COLOR\nIN vec4 color;\n#endif\n\nuniform mat3 normMat;\nuniform mat4 viewMat;\nuniform mat4 projViewMat;\n\n#ifdef NORMAL\n#ifndef ORTHOGRAPHIC\nOUT vec3 ViewPosition;\n#endif\nOUT vec3 Normal;\n#endif\n\nvoid main(void)\n{\n  vec4 v=vec4(position,1.0);\n  gl_Position=projViewMat*v;\n\n#ifdef NORMAL\n#ifndef ORTHOGRAPHIC\n  ViewPosition=(viewMat*v).xyz;\n#endif\n  Normal=normalize(normal*normMat);\n#endif\n\n#ifdef WEBGL2\n  MaterialIndex=int(materialIndex);\n#ifdef COLOR\n  Color=color;\n#endif\n#else\n#ifdef NORMAL\n  Material m;\n#ifdef TRANSPARENT\n  m=Materials[int(abs(materialIndex))-1];\n  emissive=m.emissive;\n  if(materialIndex >= 0.0)\n    diffuse=m.diffuse;\n  else {\n    diffuse=color;\n#if nlights == 0\n    emissive += color;\n#endif\n  }\n#else\n  m=Materials[int(materialIndex)];\n  emissive=m.emissive;\n#ifdef COLOR\n  diffuse=color;\n#if nlights == 0\n    emissive += color;\n#endif\n#else\n  diffuse=m.diffuse;\n#endif // COLOR\n#endif // TRANSPARENT\n  specular=m.specular.rgb;\n  vec4 parameters=m.parameters;\n  roughness=1.0-parameters[0];\n  metallic=parameters[1];\n  fresnel0=parameters[2];\n#else\n  emissive=Materials[int(materialIndex)].emissive;\n#endif // NORMAL\n#endif // WEBGL2\n\n#ifdef WIDTH\n  gl_PointSize=width;\n#endif\n}\n",fragment="\n#ifdef WEBGL2\n#define IN in\nout vec4 outValue;\n#define OUTVALUE outValue\n#else\n#define IN varying\n#define OUTVALUE gl_FragColor\n#endif\n\n#ifdef WEBGL2\nflat in int !
 MaterialIndex;\n\nstruct Material {\n  vec4 diffuse,emissive,specular;\n  vec4 parameters;\n};\n\nuniform Material Materials[Nmaterials];\n\nvec4 diffuse;\nvec3 specular;\nfloat roughness,metallic,fresnel0;\nvec4 emissive;\n\n#ifdef COLOR\nin vec4 Color;\n#endif\n\n#else\nIN vec4 diffuse;\nIN vec3 specular;\nIN float roughness,metallic,fresnel0;\nIN vec4 emissive;\n#endif\n\n#ifdef NORMAL\n\n#ifndef ORTHOGRAPHIC\nIN vec3 ViewPosition;\n#endif\nIN vec3 Normal;\n\nvec3 normal;\n\nstruct Light {\n  vec3 direction;\n  vec3 color;\n};\n\nuniform Light Lights[Nlights];\n\n#ifdef USE_IBL\nuniform sampler2D reflBRDFSampler;\nuniform sampler2D diffuseSampler;\nuniform sampler2D reflImgSampler;\n\nconst float pi=acos(-1.0);\nconst float piInv=1.0/pi;\nconst float twopi=2.0*pi;\nconst float twopiInv=1.0/twopi;\n\n// (x,y,z) -> (r,theta,phi);\n// theta -> [0,pi]: colatitude\n// phi -> [-pi,pi]: longitude\nvec3 cart2sphere(vec3 cart)\n{\n  float x=cart.x;\n  float y=cart.z;\n  float z=cart.y;\n\n  float r=length(cart);\n  float theta=r > 0.0 ? acos(z/r) : 0.0;\n  float phi=atan(y,x);\n\n  return vec3(r,theta,phi);\n}\n\nvec2 normalizedAngle(vec3 cartVec)\n{\n  vec3 sphericalVec=cart2sphere(cartVec);\n  sphericalVec.y=sphericalVec.y*piInv;\n  sphericalVec.z=0.75-sphericalVec.z*twopiInv;\n  return sphericalVec.zy;\n}\n\nvec3 IBLColor(vec3 viewDir)\n{\n  vec3 IBLDiffuse=diffuse.rgb*texture(diffuseSampler,normalizedAngle(normal)).rgb;\n  vec3 reflectVec=normalize(reflect(-viewDir,normal));\n  vec2 reflCoord=normalizedAngle(reflectVec);\n  vec3 IBLRefl=textureLod(reflImgSampler,reflCoord,roughness*ROUGHNESS_STEP_COUNT).rgb;\n  vec2 IBLbrdf=texture(reflBRDFSampler,vec2(dot(normal,viewDir),roughness)).rg;\n  float specularMultiplier=fresnel0*IBLbrdf.x+IBLbrdf.y;\n  vec3 dielectric=IBLDiffuse+specularMultiplier*IBLRefl;\n  vec3 metal=diffuse.rgb*IBLRefl;\n  return mix(dielectric,metal,metallic);\n}\n#else\nfloat Roughness2;\nfloat NDF_TRG(vec3 h)\n{\n  float ndoth=max(dot(normal,h),0.0);\n  float alpha2=Roughness2*Roughness2;\n  flo!
 at denom=ndoth*ndoth*(alpha2-1.0)+1.0;\n  return denom != 0.0 ? alpha2/(denom*denom) : 0.0;\n}\n\nfloat GGX_Geom(vec3 v)\n{\n  float ndotv=max(dot(v,normal),0.0);\n  float ap=1.0+Roughness2;\n  float k=0.125*ap*ap;\n  return ndotv/((ndotv*(1.0-k))+k);\n}\n\nfloat Geom(vec3 v, vec3 l)\n{\n  return GGX_Geom(v)*GGX_Geom(l);\n}\n\nfloat Fresnel(vec3 h, vec3 v, float fresnel0)\n{\n  float a=1.0-max(dot(h,v),0.0);\n  float b=a*a;\n  return fresnel0+(1.0-fresnel0)*b*b*a;\n}\n\n// physical based shading using UE4 model.\nvec3 BRDF(vec3 viewDirection, vec3 lightDirection)\n{\n  vec3 lambertian=diffuse.rgb;\n  vec3 h=normalize(lightDirection+viewDirection);\n\n  float omegain=max(dot(viewDirection,normal),0.0);\n  float omegaln=max(dot(lightDirection,normal),0.0);\n\n  float D=NDF_TRG(h);\n  float G=Geom(viewDirection,lightDirection);\n  float F=Fresnel(h,viewDirection,fresnel0);\n\n  float denom=4.0*omegain*omegaln;\n  float rawReflectance=denom > 0.0 ? (D*G)/denom : 0.0;\n\n  vec3 dielectric=mix(lambertian,rawReflectance*specular,F);\n  vec3 metal=rawReflectance*diffuse.rgb;\n\n  return mix(dielectric,metal,metallic);\n}\n#endif\n\n#endif\n\nvoid main(void)\n{\n#ifdef WEBGL2\n#ifdef NORMAL\n  Material m;\n#ifdef TRANSPARENT\n  m=Materials[abs(MaterialIndex)-1];\n  emissive=m.emissive;\n  if(MaterialIndex >= 0)\n    diffuse=m.diffuse;\n  else {\n    diffuse=Color;\n#if nlights == 0\n    emissive += Color;\n#endif\n  }\n#else\n  m=Materials[MaterialIndex];\n  emissive=m.emissive;\n#ifdef COLOR\n  diffuse=Color;\n#if nlights == 0\n    emissive += Color;\n#endif\n#else\n  diffuse=m.diffuse;\n#endif // COLOR\n#endif // TRANSPARENT\n  specular=m.specular.rgb;\n  vec4 parameters=m.parameters;\n  roughness=1.0-parameters[0];\n  metallic=parameters[1];\n  fresnel0=parameters[2];\n#else\n  emissive=Materials[MaterialIndex].emissive;\n#endif // NORMAL\n#endif // WEBGL2\n\n#if defined(NORMAL) && nlights > 0\n  normal=normalize(Normal);\n  normal=gl_FrontFacing ? normal : -normal;\n#ifdef ORTHOGRAPHIC\n  vec3 viewDir=vec3(0.0,0.0,1.!
 0);\n#else\n  vec3 viewDir=-normalize(ViewPosition);\n#endif\n\nvec3 color;\n#ifdef USE_IBL\n  color=IBLColor(viewDir);\n#else\n  Roughness2=roughness*roughness;\n  color=emissive.rgb;\n  for(int i=0; i < nlights; ++i) {\n    Light Li=Lights[i];\n    vec3 L=Li.direction;\n    float cosTheta=max(dot(normal,L),0.0);\n    vec3 radiance=cosTheta*Li.color;\n    color += BRDF(viewDir,L)*radiance;\n  }\n#endif\n  OUTVALUE=vec4(color,diffuse.a);\n#else\n  OUTVALUE=emissive;\n#endif\n}\n";!function(t,e){if("object"==typeof exports&&"object"==typeof module)module.exports=e();else if("function"==typeof define&&define.amd)define([],e);else{var i=e();for(var n in i)("object"==typeof exports?exports:t)[n]=i[n]}}("undefined"!=typeof self?self:this,(function(){return function(t){var e={};function i(n){if(e[n])return e[n].exports;var r=e[n]={i:n,l:!1,exports:{}};return t[n].call(r.exports,r,r.exports,i),r.l=!0,r.exports}return i.m=t,i.c=e,i.d=function(t,e,n){i.o(t,e)||Object.defineProperty(t,e,{configurable:!1,enumerable:!0,get:n})},i.n=function(t){var e=t&&t.__esModule?function(){return t.default}:function(){return t};return i.d(e,"a",e),e},i.o=function(t,e){return Object.prototype.hasOwnProperty.call(t,e)},i.p="",i(i.s=1)}([function(t,e,i){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.setMatrixArrayType=function(t){e.ARRAY_TYPE=t},e.toRadian=function(t){return t*r},e.equals=function(t,e){return Math.abs(t-e)<=n*Math.max(1,Math.abs(t),Math.abs(e))};var n=e.EPSILON=1e-6;e.ARRAY_TYPE="undefined"!=typeof Float32Array?Float32Array:Array,e.RANDOM=Math.random;var r=Math.PI/180},function(t,e,i){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.mat4=e.mat3=void 0;var n=s(i(2)),r=s(i(3));function s(t){if(t&&t.__esModule)return t;var e={};if(null!=t)for(var i in t)Object.prototype.hasOwnProperty.call(t,i)&&(e[i]=t[i]);return e.default=t,e}e.mat3=n,e.mat4=r},function(t,e,i){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.create=function(){var t=new n.ARRAY_TYPE(9);return t[0]=1,t[1]=0,t[2]=0!
 ,t[3]=0,t[4]=1,t[5]=0,t[6]=0,t[7]=0,t[8]=1,t},e.fromMat4=function(t,e){return t[0]=e[0],t[1]=e[1],t[2]=e[2],t[3]=e[4],t[4]=e[5],t[5]=e[6],t[6]=e[8],t[7]=e[9],t[8]=e[10],t},e.invert=function(t,e){var i=e[0],n=e[1],r=e[2],s=e[3],a=e[4],o=e[5],h=e[6],l=e[7],c=e[8],d=c*a-o*l,m=-c*s+o*h,f=l*s-a*h,u=i*d+n*m+r*f;if(!u)return null;return u=1/u,t[0]=d*u,t[1]=(-c*n+r*l)*u,t[2]=(o*n-r*a)*u,t[3]=m*u,t[4]=(c*i-r*h)*u,t[5]=(-o*i+r*s)*u,t[6]=f*u,t[7]=(-l*i+n*h)*u,t[8]=(a*i-n*s)*u,t};var n=function(t){if(t&&t.__esModule)return t;var e={};if(null!=t)for(var i in t)Object.prototype.hasOwnProperty.call(t,i)&&(e[i]=t[i]);return e.default=t,e}(i(0))},function(t,e,i){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.create=function(){var t=new n.ARRAY_TYPE(16);return t[0]=1,t[1]=0,t[2]=0,t[3]=0,t[4]=0,t[5]=1,t[6]=0,t[7]=0,t[8]=0,t[9]=0,t[10]=1,t[11]=0,t[12]=0,t[13]=0,t[14]=0,t[15]=1,t},e.identity=function(t){return t[0]=1,t[1]=0,t[2]=0,t[3]=0,t[4]=0,t[5]=1,t[6]=0,t[7]=0,t[8]=0,t[9]=0,t[10]=1,t[11]=0,t[12]=0,t[13]=0,t[14]=0,t[15]=1,t},e.invert=function(t,e){var i=e[0],n=e[1],r=e[2],s=e[3],a=e[4],o=e[5],h=e[6],l=e[7],c=e[8],d=e[9],m=e[10],f=e[11],u=e[12],p=e[13],v=e[14],x=e[15],g=i*o-n*a,w=i*h-r*a,M=i*l-s*a,b=n*h-r*o,R=n*l-s*o,T=r*l-s*h,y=c*p-d*u,A=c*v-m*u,E=c*x-f*u,I=d*v-m*p,L=d*x-f*p,N=m*x-f*v,O=g*N-w*L+M*I+b*E-R*A+T*y;if(!O)return null;return O=1/O,t[0]=(o*N-h*L+l*I)*O,t[1]=(r*L-n*N-s*I)*O,t[2]=(p*T-v*R+x*b)*O,t[3]=(m*R-d*T-f*b)*O,t[4]=(h*E-a*N-l*A)*O,t[5]=(i*N-r*E+s*A)*O,t[6]=(v*M-u*T-x*w)*O,t[7]=(c*T-m*M+f*w)*O,t[8]=(a*L-o*E+l*y)*O,t[9]=(n*E-i*L-s*y)*O,t[10]=(u*R-p*M+x*g)*O,t[11]=(d*M-c*R-f*g)*O,t[12]=(o*A-a*I-h*y)*O,t[13]=(i*I-n*A+r*y)*O,t[14]=(p*w-u*b-v*g)*O,t[15]=(c*b-d*w+m*g)*O,t},e.multiply=r,e.translate=function(t,e,i){var n=i[0],r=i[1],s=i[2],a=void 0,o=void 0,h=void 0,l=void 0,c=void 0,d=void 0,m=void 0,f=void 0,u=void 0,p=void 0,v=void 0,x=void 0;e===t?(t[12]=e[0]*n+e[4]*r+e[8]*s+e[12],t[13]=e[1]*n+e[5]*r+e[9]*s+e[13],t[14]=e[2]*n+e[6]*r+e[10]*s+e[14],t[15]=e[3]*n+e[7]*r+e[11]*s+e[15]):(a=e[0],o=e[1],h=e[2],!
 l=e[3],c=e[4],d=e[5],m=e[6],f=e[7],u=e[8],p=e[9],v=e[10],x=e[11],t[0]=a,t[1]=o,t[2]=h,t[3]=l,t[4]=c,t[5]=d,t[6]=m,t[7]=f,t[8]=u,t[9]=p,t[10]=v,t[11]=x,t[12]=a*n+c*r+u*s+e[12],t[13]=o*n+d*r+p*s+e[13],t[14]=h*n+m*r+v*s+e[14],t[15]=l*n+f*r+x*s+e[15]);return t},e.rotate=function(t,e,i,r){var s,a,o,h,l,c,d,m,f,u,p,v,x,g,w,M,b,R,T,y,A,E,I,L,N=r[0],O=r[1],_=r[2],P=Math.sqrt(N*N+O*O+_*_);if(Math.abs(P)<n.EPSILON)return null;N*=P=1/P,O*=P,_*=P,s=Math.sin(i),a=Math.cos(i),o=1-a,h=e[0],l=e[1],c=e[2],d=e[3],m=e[4],f=e[5],u=e[6],p=e[7],v=e[8],x=e[9],g=e[10],w=e[11],M=N*N*o+a,b=O*N*o+_*s,R=_*N*o-O*s,T=N*O*o-_*s,y=O*O*o+a,A=_*O*o+N*s,E=N*_*o+O*s,I=O*_*o-N*s,L=_*_*o+a,t[0]=h*M+m*b+v*R,t[1]=l*M+f*b+x*R,t[2]=c*M+u*b+g*R,t[3]=d*M+p*b+w*R,t[4]=h*T+m*y+v*A,t[5]=l*T+f*y+x*A,t[6]=c*T+u*y+g*A,t[7]=d*T+p*y+w*A,t[8]=h*E+m*I+v*L,t[9]=l*E+f*I+x*L,t[10]=c*E+u*I+g*L,t[11]=d*E+p*I+w*L,e!==t&&(t[12]=e[12],t[13]=e[13],t[14]=e[14],t[15]=e[15]);return t},e.fromTranslation=function(t,e){return t[0]=1,t[1]=0,t[2]=0,t[3]=0,t[4]=0,t[5]=1,t[6]=0,t[7]=0,t[8]=0,t[9]=0,t[10]=1,t[11]=0,t[12]=e[0],t[13]=e[1],t[14]=e[2],t[15]=1,t},e.fromRotation=function(t,e,i){var r,s,a,o=i[0],h=i[1],l=i[2],c=Math.sqrt(o*o+h*h+l*l);if(Math.abs(c)<n.EPSILON)return null;return o*=c=1/c,h*=c,l*=c,r=Math.sin(e),s=Math.cos(e),a=1-s,t[0]=o*o*a+s,t[1]=h*o*a+l*r,t[2]=l*o*a-h*r,t[3]=0,t[4]=o*h*a-l*r,t[5]=h*h*a+s,t[6]=l*h*a+o*r,t[7]=0,t[8]=o*l*a+h*r,t[9]=h*l*a-o*r,t[10]=l*l*a+s,t[11]=0,t[12]=0,t[13]=0,t[14]=0,t[15]=1,t},e.frustum=function(t,e,i,n,r,s,a){var o=1/(i-e),h=1/(r-n),l=1/(s-a);return t[0]=2*s*o,t[1]=0,t[2]=0,t[3]=0,t[4]=0,t[5]=2*s*h,t[6]=0,t[7]=0,t[8]=(i+e)*o,t[9]=(r+n)*h,t[10]=(a+s)*l,t[11]=-1,t[12]=0,t[13]=0,t[14]=a*s*2*l,t[15]=0,t},e.ortho=function(t,e,i,n,r,s,a){var o=1/(e-i),h=1/(n-r),l=1/(s-a);return t[0]=-2*o,t[1]=0,t[2]=0,t[3]=0,t[4]=0,t[5]=-2*h,t[6]=0,t[7]=0,t[8]=0,t[9]=0,t[10]=2*l,t[11]=0,t[12]=(e+i)*o,t[13]=(r+n)*h,t[14]=(a+s)*l,t[15]=1,t};var n=function(t){if(t&&t.__esModule)return t;var e={};if(null!=t)for(var i in t)Object.prototype.hasOwnProperty.call(t,i)&&!
 (e[i]=t[i]);return e.default=t,e}(i(0));function r(t,e,i){var n=e[0],r=e[1],s=e[2],a=e[3],o=e[4],h=e[5],l=e[6],c=e[7],d=e[8],m=e[9],f=e[10],u=e[11],p=e[12],v=e[13],x=e[14],g=e[15],w=i[0],M=i[1],b=i[2],R=i[3];return t[0]=w*n+M*o+b*d+R*p,t[1]=w*r+M*h+b*m+R*v,t[2]=w*s+M*l+b*f+R*x,t[3]=w*a+M*c+b*u+R*g,w=i[4],M=i[5],b=i[6],R=i[7],t[4]=w*n+M*o+b*d+R*p,t[5]=w*r+M*h+b*m+R*v,t[6]=w*s+M*l+b*f+R*x,t[7]=w*a+M*c+b*u+R*g,w=i[8],M=i[9],b=i[10],R=i[11],t[8]=w*n+M*o+b*d+R*p,t[9]=w*r+M*h+b*m+R*v,t[10]=w*s+M*l+b*f+R*x,t[11]=w*a+M*c+b*u+R*g,w=i[12],M=i[13],b=i[14],R=i[15],t[12]=w*n+M*o+b*d+R*p,t[13]=w*r+M*h+b*m+R*v,t[14]=w*s+M*l+b*f+R*x,t[15]=w*a+M*c+b*u+R*g,t}}])})),function(){document.asy={canvasWidth:0,canvasHeight:0,absolute:!1,minBound:[0,0,0],maxBound:[0,0,0],orthographic:!1,angleOfView:0,initialZoom:0,viewportShift:[0,0],viewportMargin:[0,0],background:[],zoomFactor:0,zoomPinchFactor:0,zoomPinchCap:0,zoomStep:0,shiftHoldDistance:0,shiftWaitTime:0,vibrateTime:0,ibl:!1,webgl2:!1,imageURL:"",image:"",Transform:[],Centers:[]};let t,e,i,n,r,s,a,o=document.asy,h=[],l=[],c=[],d=0,m=2;const f=Math.acos(-1),u=f/180,p=Math.ceil(1-Math.log2(Number.EPSILON));let v,x,g,w,M,b,R,T=mat4.create(),y=mat4.create(),A=mat4.create(),E=mat4.create(),I=mat3.create(),L=mat3.create(),N=mat4.create(),O=mat4.create(),_={x:0,y:0,z:0},P={x:0,y:0},S={xmin:0,xmax:0,ymin:0,ymax:0,zmin:0,zmax:0},U=!0,V=0,B=!1,C=null,D=null,F=[],z=[],H=[],X=[],G=null,W=null,j=null;function k(){o.embedded||st(),rt(o.ibl)}class Y{constructor(t,e,i,n,r,s){this.diffuse=t,this.emissive=e,this.specular=i,this.shininess=n,this.metallic=r,this.fresnel0=s}setUniform(e,i){let n=n=>t.getUniformLocation(e,"Materials["+i+"]."+n);t.uniform4fv(n("diffuse"),new Float32Array(this.diffuse)),t.uniform4fv(n("emissive"),new Float32Array(this.emissive)),t.uniform4fv(n("specular"),new Float32Array(this.specular)),t.uniform4f(n("parameters"),this.shininess,this.metallic,this.fresnel0,0)}}let $,q,K,Z,Q,J,tt,et,it;class nt{constructor(t,e){this.direction=t,this.color=e}setUniform(e,i){let n=n=>t.getUn!
 iformLocation(e,"Lights["+i+"]."+n);t.uniform3fv(n("direction"),new Float32Array(this.direction)),t.uniform3fv(n("color"),new Float32Array(this.color))}}function rt(e=!1){let i=t.getParameter(t.MAX_VERTEX_UNIFORM_VECTORS);r=Math.floor((i-14)/4),m=Math.min(Math.max(m,c.length),r),pixelOpt=["WIDTH"],materialOpt=["NORMAL"],colorOpt=["NORMAL","COLOR"],transparentOpt=["NORMAL","COLOR","TRANSPARENT"],e&&(materialOpt.push("USE_IBL"),transparentOpt.push("USE_IBL")),ge=Nt(pixelOpt),we=Nt(materialOpt),Me=Nt(colorOpt),be=Nt(transparentOpt)}function st(){t.deleteProgram(be),t.deleteProgram(Me),t.deleteProgram(we),t.deleteProgram(ge)}function at(){let i=o.webgl2?window.top.document.asygl2[e]:window.top.document.asygl[e];i.gl=t,i.nlights=l.length,i.Nmaterials=m,i.maxMaterials=r,i.pixelShader=ge,i.materialShader=we,i.colorShader=Me,i.transparentShader=be}function ot(t,e){let i;return o.webgl2&&(i=t.getContext("webgl2",{alpha:e}),o.embedded&&!i)?(o.webgl2=!1,o.ibl=!1,ht(!1),null):(i||(o.webgl2=!1,o.ibl=!1,i=t.getContext("webgl",{alpha:e})),i||alert("Could not initialize WebGL"),i)}function ht(s=!0){if(o.ibl&&(o.webgl2=!0),e=o.background[3]<1,o.embedded){let a=window.top.document;if(s&&(n=o.canvas.getContext("2d")),i=o.webgl2?a.offscreen2:a.offscreen,i||(i=a.createElement("canvas"),o.webgl2?a.offscreen2=i:a.offscreen=i),o.webgl2?a.asygl2||(a.asygl2=Array(2)):a.asygl||(a.asygl=Array(2)),asygl=o.webgl2?a.asygl2:a.asygl,asygl[e]&&asygl[e].gl)!function(){let i=o.webgl2?window.top.document.asygl2[e]:window.top.document.asygl[e];t=i.gl,d=i.nlights,m=i.Nmaterials,r=i.maxMaterials,ge=i.pixelShader,we=i.materialShader,Me=i.colorShader,be=i.transparentShader}(),(l.length!=d||Math.min(c.length,r)>m)&&(rt(),at());else{if(rc=ot(i,e),!rc)return;t=rc,rt(),o.webgl2?a.asygl2[e]={}:a.asygl[e]={},at()}}else t=ot(o.canvas,e),rt();$=t.getExtension("OES_element_index_uint"),q=t.TRIANGLES,K=new mt(t.POINTS),Z=new mt(t.LINES),Q=new mt,J=new mt,tt=new mt,et=new mt}function lt(t,e,i,n=[]){let r=o.webgl2?"300 es":"100",s=Array(...n),a=[["nlights",0==V?l.l!
 ength:0],["Nmaterials",m]],h=[["int","Nlights",Math.max(l.length,1)]];o.webgl2&&s.push("WEBGL2"),o.ibl&&a.push(["ROUGHNESS_STEP_COUNT",8..toFixed(2)]),o.orthographic&&s.push("ORTHOGRAPHIC"),macros_str=a.map(t=>`#define ${t[0]} ${t[1]}`).join("\n"),define_str=s.map(t=>"#define "+t).join("\n"),const_str=h.map(t=>`const ${t[0]} ${t[1]}=${t[2]};`).join("\n"),ext_str=[].map(t=>`#extension ${t}: enable`).join("\n"),shaderSrc=`#version ${r}\n${ext_str}\n${define_str}\n${const_str}\n${macros_str}\n\n\n#ifdef GL_FRAGMENT_PRECISION_HIGH\nprecision highp float;\n#else\nprecision mediump float;\n#endif\n  \n${e}\n  `;let c=t.createShader(i);return t.shaderSource(c,shaderSrc),t.compileShader(c),t.getShaderParameter(c,t.COMPILE_STATUS)?c:(alert(t.getShaderInfoLog(c)),null)}function ct(e,i,n,r=t.ARRAY_BUFFER){return e.length>0&&(0==i&&(i=t.createBuffer(),n=!0),t.bindBuffer(r,i),n&&t.bufferData(r,e,t.STATIC_DRAW)),i}function dt(e,i,n=e.indices){if(0==e.indices.length)return;let r=i!=ge;!function(e,i){let n=i==ge;t.useProgram(i),t.enableVertexAttribArray(yt),n&&t.enableVertexAttribArray(Lt);let r=!n&&l.length>0;r&&t.enableVertexAttribArray(At);t.enableVertexAttribArray(Et),i.projViewMatUniform=t.getUniformLocation(i,"projViewMat"),i.viewMatUniform=t.getUniformLocation(i,"viewMat"),i.normMatUniform=t.getUniformLocation(i,"normMat"),(i==Me||i==be)&&t.enableVertexAttribArray(It);if(r)for(let t=0;t<l.length;++t)l[t].setUniform(i,t);for(let t=0;t<e.materials.length;++t)e.materials[t].setUniform(i,t);t.uniformMatrix4fv(i.projViewMatUniform,!1,E),t.uniformMatrix4fv(i.viewMatUniform,!1,A),t.uniformMatrix3fv(i.normMatUniform,!1,I)}(e,i),null!=W&&(t.activeTexture(t.TEXTURE0),t.bindTexture(t.TEXTURE_2D,j),t.uniform1i(t.getUniformLocation(i,"reflBRDFSampler"),0),t.activeTexture(t.TEXTURE1),t.bindTexture(t.TEXTURE_2D,W),t.uniform1i(t.getUniformLocation(i,"diffuseSampler"),1),t.activeTexture(t.TEXTURE2),t.bindTexture(t.TEXTURE_2D,G),t.uniform1i(t.getUniformLocation(i,"reflImgSampler"),2));let s=U||e.partial||!e.rendered;e.verticesBuffer=ct(ne!
 w Float32Array(e.vertices),e.verticesBuffer,s),t.vertexAttribPointer(yt,3,t.FLOAT,!1,r?24:16,0),r?l.length>0&&t.vertexAttribPointer(At,3,t.FLOAT,!1,24,12):t.vertexAttribPointer(Lt,1,t.FLOAT,!1,16,12),e.materialsBuffer=ct(new Int16Array(e.materialIndices),e.materialsBuffer,s),t.vertexAttribPointer(Et,1,t.SHORT,!1,2,0),i!=Me&&i!=be||(e.colorsBuffer=ct(new Float32Array(e.colors),e.colorsBuffer,s),t.vertexAttribPointer(It,4,t.FLOAT,!0,0,0)),e.indicesBuffer=ct($?new Uint32Array(n):new Uint16Array(n),e.indicesBuffer,s,t.ELEMENT_ARRAY_BUFFER),e.rendered=!0,t.drawElements(r?V?t.LINES:e.type:t.POINTS,n.length,$?t.UNSIGNED_INT:t.UNSIGNED_SHORT,0)}class mt{constructor(t){this.type=t||q,this.verticesBuffer=0,this.materialsBuffer=0,this.colorsBuffer=0,this.indicesBuffer=0,this.rendered=!1,this.partial=!1,this.clear()}clear(){this.vertices=[],this.materialIndices=[],this.colors=[],this.indices=[],this.nvertices=0,this.materials=[],this.materialTable=[]}vertex(t,e){return this.vertices.push(t[0]),this.vertices.push(t[1]),this.vertices.push(t[2]),this.vertices.push(e[0]),this.vertices.push(e[1]),this.vertices.push(e[2]),this.materialIndices.push(it),this.nvertices++}Vertex(t,e,i=[0,0,0,0]){return this.vertices.push(t[0]),this.vertices.push(t[1]),this.vertices.push(t[2]),this.vertices.push(e[0]),this.vertices.push(e[1]),this.vertices.push(e[2]),this.materialIndices.push(it),this.colors.push(i[0]),this.colors.push(i[1]),this.colors.push(i[2]),this.colors.push(i[3]),this.nvertices++}vertex0(t,e){return this.vertices.push(t[0]),this.vertices.push(t[1]),this.vertices.push(t[2]),this.vertices.push(e),this.materialIndices.push(it),this.nvertices++}iVertex(t,e,i,n,r=[0,0,0,0]){let s=6*t;this.vertices[s]=e[0],this.vertices[s+1]=e[1],this.vertices[s+2]=e[2],this.vertices[s+3]=i[0],this.vertices[s+4]=i[1],this.vertices[s+5]=i[2],this.materialIndices[t]=it;let a=4*t;this.colors[a]=r[0],this.colors[a+1]=r[1],this.colors[a+2]=r[2],this.colors[a+3]=r[3],n&&this.indices.push(t)}append(t){ft(this.vertices,t.vertices),ft(this.materialIndices,t.m!
 aterialIndices),ft(this.colors,t.colors),function(t,e,i){let n=t.length,r=e.length;t.length+=e.length;for(let s=0;s<r;++s)t[n+s]=e[s]+i}(this.indices,t.indices,this.nvertices),this.nvertices+=t.nvertices}}function ft(t,e){let i=t.length,n=e.length;t.length+=n;for(let r=0;r<n;++r)t[i+r]=e[r]}class ut{constructor(){this.data=new mt,this.Onscreen=!1,this.m=[]}offscreen(t){let e=E,i=t[0],n=i[0],r=i[1],s=i[2],a=1/(e[3]*n+e[7]*r+e[11]*s+e[15]);this.x=this.X=(e[0]*n+e[4]*r+e[8]*s+e[12])*a,this.y=this.Y=(e[1]*n+e[5]*r+e[9]*s+e[13])*a;for(let i=1,n=t.length;i<n;++i){let n=t[i],r=n[0],s=n[1],a=n[2],o=1/(e[3]*r+e[7]*s+e[11]*a+e[15]),h=(e[0]*r+e[4]*s+e[8]*a+e[12])*o,l=(e[1]*r+e[5]*s+e[9]*a+e[13])*o;h<this.x?this.x=h:h>this.X&&(this.X=h),l<this.y?this.y=l:l>this.Y&&(this.Y=l)}return(this.X<-1.01||this.x>1.01||this.Y<-1.01||this.y>1.01)&&(this.Onscreen=!1,!0)}T(t){let e=this.c[0],i=this.c[1],n=this.c[2],r=t[0]-e,s=t[1]-i,a=t[2]-n;return[r*I[0]+s*I[3]+a*I[6]+e,r*I[1]+s*I[4]+a*I[7]+i,r*I[2]+s*I[5]+a*I[8]+n]}Tcorners(t,e){return[this.T(t),this.T([t[0],t[1],e[2]]),this.T([t[0],e[1],t[2]]),this.T([t[0],e[1],e[2]]),this.T([e[0],t[1],t[2]]),this.T([e[0],t[1],e[2]]),this.T([e[0],e[1],t[2]]),this.T(e)]}setMaterial(t,e){null==t.materialTable[this.MaterialIndex]&&(t.materials.length>=m&&(t.partial=!0,e()),t.materialTable[this.MaterialIndex]=t.materials.length,t.materials.push(c[this.MaterialIndex])),it=t.materialTable[this.MaterialIndex]}render(){let t;var e,i;if(this.setMaterialIndex(),0==this.CenterIndex?(e=this.Min,i=this.Max,t=[e,[e[0],e[1],i[2]],[e[0],i[1],e[2]],[e[0],i[1],i[2]],[i[0],e[1],e[2]],[i[0],e[1],i[2]],[i[0],i[1],e[2]],i]):(this.c=o.Centers[this.CenterIndex-1],t=this.Tcorners(this.Min,this.Max)),this.offscreen(t))return this.data.clear(),void this.notRendered();let n,r=this.controlpoints;if(0==this.CenterIndex){if(!U&&this.Onscreen)return void this.append();n=r}else{let t=r.length;n=Array(t);for(let e=0;e<t;++e)n[e]=this.T(r[e])}let s=o.orthographic?1:this.Min[2]/o.maxBound[2],a=.75*Math.hypot(s*(S.xmax-S.xmin),s*(S.ymax-!
 S.ymin))/b;this.res2=a*a,this.Epsilon=.1*a,this.data.clear(),this.notRendered(),this.Onscreen=!0,this.process(n)}}function pt(t,e){let i=t[0],n=t.length;for(let r=1;r<n;++r)i=e(i,t[r]);return i}class vt extends ut{constructor(t,e,i,n,r,s){super(),this.controlpoints=t,this.CenterIndex=e,this.MaterialIndex=i,this.color=n;let a=t.length;if(n){let t=n[0][3]+n[1][3]+n[2][3];this.transparent=16==a||4==a?t+n[3][3]<4:t<3}else this.transparent=c[i].diffuse[3]<1;this.vertex=this.transparent?this.data.Vertex.bind(this.data):this.data.vertex.bind(this.data);let o=this.L2norm2(this.controlpoints),h=Math.sqrt(1e3*Number.EPSILON*o);this.epsilon=o*Number.EPSILON,this.Min=r||this.Bounds(this.controlpoints,Math.min,h),this.Max=s||this.Bounds(this.controlpoints,Math.max,h)}setMaterialIndex(){this.transparent?this.setMaterial(tt,Le):this.color?this.setMaterial(J,Ee):this.setMaterial(Q,Ae)}cornerbound(t,e){let i=e(t[0],t[3]);return i=e(i,t[12]),e(i,t[15])}controlbound(t,e){let i=e(t[1],t[2]);return i=e(i,t[4]),i=e(i,t[5]),i=e(i,t[6]),i=e(i,t[7]),i=e(i,t[8]),i=e(i,t[9]),i=e(i,t[10]),i=e(i,t[11]),i=e(i,t[13]),e(i,t[14])}bound(t,e,i,n,r){if(i=e(i,this.cornerbound(t,e)),e(-1,1)*(i-this.controlbound(t,e))>=-n||0==r)return i;--r,n*=2;let s=new Ot(t[0],t[1],t[2],t[3]),a=new Ot(t[4],t[5],t[6],t[7]),o=new Ot(t[8],t[9],t[10],t[11]),h=new Ot(t[12],t[13],t[14],t[15]),l=new Ot(t[0],t[4],t[8],t[12]),c=new Ot(s.m0,a.m0,o.m0,h.m0),d=new Ot(s.m3,a.m3,o.m3,h.m3),m=new Ot(s.m5,a.m5,o.m5,h.m5),f=new Ot(s.m4,a.m4,o.m4,h.m4),u=new Ot(s.m2,a.m2,o.m2,h.m2),p=new Ot(t[3],t[7],t[11],t[15]),v=[t[0],s.m0,s.m3,s.m5,l.m0,c.m0,d.m0,m.m0,l.m3,c.m3,d.m3,m.m3,l.m5,c.m5,d.m5,m.m5];i=this.bound(v,e,i,n,r);let x=[l.m5,c.m5,d.m5,m.m5,l.m4,c.m4,d.m4,m.m4,l.m2,c.m2,d.m2,m.m2,t[12],h.m0,h.m3,h.m5];i=this.bound(x,e,i,n,r);let g=[m.m5,f.m5,u.m5,p.m5,m.m4,f.m4,u.m4,p.m4,m.m2,f.m2,u.m2,p.m2,h.m5,h.m4,h.m2,t[15]];i=this.bound(g,e,i,n,r);let w=[s.m5,s.m4,s.m2,t[3],m.m0,f.m0,u.m0,p.m0,m.m3,f.m3,u.m3,p.m3,m.m5,f.m5,u.m5,p.m5];return this.bound(w,e,i,n,r)}cornerboundtri(t,e){let i=!
 e(t[0],t[6]);return e(i,t[9])}controlboundtri(t,e){let i=e(t[1],t[2]);return i=e(i,t[3]),i=e(i,t[4]),i=e(i,t[5]),i=e(i,t[7]),e(i,t[8])}boundtri(t,e,i,n,r){if(i=e(i,this.cornerboundtri(t,e)),e(-1,1)*(i-this.controlboundtri(t,e))>=-n||0==r)return i;--r,n*=2;let s=new Pt(t),a=[s.l003,s.l102,s.l012,s.l201,s.l111,s.l021,s.l300,s.l210,s.l120,s.l030];i=this.boundtri(a,e,i,n,r);let o=[s.l300,s.r102,s.r012,s.r201,s.r111,s.r021,s.r300,s.r210,s.r120,s.r030];i=this.boundtri(o,e,i,n,r);let h=[s.l030,s.u102,s.u012,s.u201,s.u111,s.u021,s.r030,s.u210,s.u120,s.u030];i=this.boundtri(h,e,i,n,r);let l=[s.r030,s.u201,s.r021,s.u102,s.c111,s.r012,s.l030,s.l120,s.l210,s.l300];return this.boundtri(l,e,i,n,r)}Bounds(t,e,i){let n=Array(3),r=t.length,s=Array(r);for(let a=0;a<3;++a){for(let e=0;e<r;++e)s[e]=t[e][a];n[a]=16==r?this.bound(s,e,s[0],i,p):10==r?this.boundtri(s,e,s[0],i,p):pt(s,e)}return[n[0],n[1],n[2]]}L2norm2(t){let e=t[0],i=0,n=t.length;for(let r=1;r<n;++r)i=Math.max(i,Ut([t[r][0]-e[0],t[r][1]-e[1],t[r][2]-e[2]]));return i}processTriangle(t){let e=t[0],i=t[1],n=t[2],r=St(Bt([i[0]-e[0],i[1]-e[1],i[2]-e[2]],[n[0]-e[0],n[1]-e[1],n[2]-e[2]]));if(!this.offscreen([e,i,n])){let t,s,a;this.color?(t=this.data.Vertex(e,r,this.color[0]),s=this.data.Vertex(i,r,this.color[1]),a=this.data.Vertex(n,r,this.color[2])):(t=this.vertex(e,r),s=this.vertex(i,r),a=this.vertex(n,r)),0==V?(this.data.indices.push(t),this.data.indices.push(s),this.data.indices.push(a)):(this.data.indices.push(t),this.data.indices.push(s),this.data.indices.push(s),this.data.indices.push(a),this.data.indices.push(a),this.data.indices.push(t)),this.append()}}processQuad(t){let e=t[0],i=t[1],n=t[2],r=t[3],s=Bt([i[0]-e[0],i[1]-e[1],i[2]-e[2]],[n[0]-i[0],n[1]-i[1],n[2]-i[2]]),a=Bt([n[0]-r[0],n[1]-r[1],n[2]-r[2]],[r[0]-e[0],r[1]-e[1],r[2]-e[2]]),o=St([s[0]+a[0],s[1]+a[1],s[2]+a[2]]);if(!this.offscreen([e,i,n,r])){let t,s,a,h;this.color?(t=this.data.Vertex(e,o,this.color[0]),s=this.data.Vertex(i,o,this.color[1]),a=this.data.Vertex(n,o,this.color[2]),h=this.data.Vertex(r,o,this.!
 color[3])):(t=this.vertex(e,o),s=this.vertex(i,o),a=this.vertex(n,o),h=this.vertex(r,o)),0==V?(this.data.indices.push(t),this.data.indices.push(s),this.data.indices.push(a),this.data.indices.push(t),this.data.indices.push(a),this.data.indices.push(h)):(this.data.indices.push(t),this.data.indices.push(s),this.data.indices.push(s),this.data.indices.push(a),this.data.indices.push(a),this.data.indices.push(h),this.data.indices.push(h),this.data.indices.push(t)),this.append()}}curve(t,e,i,n,r){new wt([t[e],t[i],t[n],t[r]],0,it,this.Min,this.Max).render()}process(t){if(this.transparent&&1!=V&&(it=this.color?-1-it:1+it),10==t.length)return this.process3(t);if(3==t.length)return this.processTriangle(t);if(4==t.length)return this.processQuad(t);if(1==V)return this.curve(t,0,4,8,12),this.curve(t,12,13,14,15),this.curve(t,15,11,7,3),void this.curve(t,3,2,1,0);let e=t[0],i=t[3],n=t[12],r=t[15],s=this.normal(i,t[2],t[1],e,t[4],t[8],n);Ut(s)<this.epsilon&&(s=this.normal(i,t[2],t[1],e,t[13],t[14],r),Ut(s)<this.epsilon&&(s=this.normal(r,t[11],t[7],i,t[4],t[8],n)));let a=this.normal(e,t[4],t[8],n,t[13],t[14],r);Ut(a)<this.epsilon&&(a=this.normal(e,t[4],t[8],n,t[11],t[7],i),Ut(a)<this.epsilon&&(a=this.normal(i,t[2],t[1],e,t[13],t[14],r)));let o=this.normal(n,t[13],t[14],r,t[11],t[7],i);Ut(o)<this.epsilon&&(o=this.normal(n,t[13],t[14],r,t[2],t[1],e),Ut(o)<this.epsilon&&(o=this.normal(e,t[4],t[8],n,t[11],t[7],i)));let h=this.normal(r,t[11],t[7],i,t[2],t[1],e);if(Ut(h)<this.epsilon&&(h=this.normal(r,t[11],t[7],i,t[4],t[8],n),Ut(h)<this.epsilon&&(h=this.normal(n,t[13],t[14],r,t[2],t[1],e))),this.color){let l=this.color[0],c=this.color[1],d=this.color[2],m=this.color[3],f=this.data.Vertex(e,s,l),u=this.data.Vertex(n,a,c),p=this.data.Vertex(r,o,d),v=this.data.Vertex(i,h,m);this.Render(t,f,u,p,v,e,n,r,i,!1,!1,!1,!1,l,c,d,m)}else{let l=this.vertex(e,s),c=this.vertex(n,a),d=this.vertex(r,o),m=this.vertex(i,h);this.Render(t,l,c,d,m,e,n,r,i,!1,!1,!1,!1)}this.data.indices.length>0&&this.append()}append(){this.transparent?tt.append(this.data)!
 :this.color?J.append(this.data):Q.append(this.data)}notRendered(){this.transparent?tt.rendered=!1:this.color?J.rendered=!1:Q.rendered=!1}Render(t,e,i,n,r,s,a,o,h,l,c,d,m,f,u,p,v){let x=this.Distance(t);if(x[0]<this.res2&&x[1]<this.res2)this.offscreen([s,a,o])||(0==V?(this.data.indices.push(e),this.data.indices.push(i),this.data.indices.push(n)):(this.data.indices.push(e),this.data.indices.push(i),this.data.indices.push(i),this.data.indices.push(n))),this.offscreen([s,o,h])||(0==V?(this.data.indices.push(e),this.data.indices.push(n),this.data.indices.push(r)):(this.data.indices.push(n),this.data.indices.push(r),this.data.indices.push(r),this.data.indices.push(e)));else{if(this.offscreen(t))return;let g=t[0],w=t[3],M=t[12],b=t[15];if(x[0]<this.res2){let x=new _t(g,t[1],t[2],w),R=new _t(t[4],t[5],t[6],t[7]),T=new _t(t[8],t[9],t[10],t[11]),y=new _t(M,t[13],t[14],b),A=[g,x.m0,x.m3,x.m5,t[4],R.m0,R.m3,R.m5,t[8],T.m0,T.m3,T.m5,M,y.m0,y.m3,y.m5],E=[x.m5,x.m4,x.m2,w,R.m5,R.m4,R.m2,t[7],T.m5,T.m4,T.m2,t[11],y.m5,y.m4,y.m2,b],I=this.normal(A[12],A[13],A[14],A[15],A[11],A[7],A[3]);Ut(I)<=this.epsilon&&(I=this.normal(A[12],A[13],A[14],A[15],A[2],A[1],A[0]),Ut(I)<=this.epsilon&&(I=this.normal(A[0],A[4],A[8],A[12],A[11],A[7],A[3])));let L=this.normal(E[3],E[2],E[1],E[0],E[4],E[8],E[12]);Ut(L)<=this.epsilon&&(L=this.normal(E[3],E[2],E[1],E[0],E[13],E[14],E[15]),Ut(L)<=this.epsilon&&(L=this.normal(E[15],E[11],E[7],E[3],E[4],E[8],E[12])));let N=this.Epsilon,O=[.5*(a[0]+o[0]),.5*(a[1]+o[1]),.5*(a[2]+o[2])];if(!c)if(c=Ht(M,t[13],t[14],b)<this.res2){let t=St(this.differential(E[12],E[8],E[4],E[0]));O=[O[0]-N*t[0],O[1]-N*t[1],O[2]-N*t[2]]}else O=A[15];let _=[.5*(h[0]+s[0]),.5*(h[1]+s[1]),.5*(h[2]+s[2])];if(!m)if(m=Ht(g,t[1],t[2],w)<this.res2){let t=St(this.differential(A[3],A[7],A[11],A[15]));_=[_[0]-N*t[0],_[1]-N*t[1],_[2]-N*t[2]]}else _=E[0];if(f){let t=Array(4),x=Array(4);for(let e=0;e<4;++e)t[e]=.5*(u[e]+p[e]),x[e]=.5*(v[e]+f[e]);let g=this.data.Vertex(O,I,t),w=this.data.Vertex(_,L,x);this.Render(A,e,i,g,w,s,a,O,_,l,c,!1,m,f,u,t,!
 x),this.Render(E,w,g,n,r,_,O,o,h,!1,c,d,m,x,t,p,v)}else{let t=this.vertex(O,I),f=this.vertex(_,L);this.Render(A,e,i,t,f,s,a,O,_,l,c,!1,m),this.Render(E,f,t,n,r,_,O,o,h,!1,c,d,m)}return}if(x[1]<this.res2){let x=new _t(g,t[4],t[8],M),R=new _t(t[1],t[5],t[9],t[13]),T=new _t(t[2],t[6],t[10],t[14]),y=new _t(w,t[7],t[11],b),A=[g,t[1],t[2],w,x.m0,R.m0,T.m0,y.m0,x.m3,R.m3,T.m3,y.m3,x.m5,R.m5,T.m5,y.m5],E=[x.m5,R.m5,T.m5,y.m5,x.m4,R.m4,T.m4,y.m4,x.m2,R.m2,T.m2,y.m2,M,t[13],t[14],b],I=this.normal(A[0],A[4],A[8],A[12],A[13],A[14],A[15]);Ut(I)<=this.epsilon&&(I=this.normal(A[0],A[4],A[8],A[12],A[11],A[7],A[3]),Ut(I)<=this.epsilon&&(I=this.normal(A[3],A[2],A[1],A[0],A[13],A[14],A[15])));let L=this.normal(E[15],E[11],E[7],E[3],E[2],E[1],E[0]);Ut(L)<=this.epsilon&&(L=this.normal(E[15],E[11],E[7],E[3],E[4],E[8],E[12]),Ut(L)<=this.epsilon&&(L=this.normal(E[12],E[13],E[14],E[15],E[2],E[1],E[0])));let N=this.Epsilon,O=[.5*(s[0]+a[0]),.5*(s[1]+a[1]),.5*(s[2]+a[2])];if(!l)if(l=Ht(g,t[4],t[8],M)<this.res2){let t=St(this.differential(E[0],E[1],E[2],E[3]));O=[O[0]-N*t[0],O[1]-N*t[1],O[2]-N*t[2]]}else O=A[12];let _=[.5*(o[0]+h[0]),.5*(o[1]+h[1]),.5*(o[2]+h[2])];if(!d)if(d=Ht(b,t[11],t[7],w)<this.res2){let t=St(this.differential(A[15],A[14],A[13],A[12]));_=[_[0]-N*t[0],_[1]-N*t[1],_[2]-N*t[2]]}else _=E[3];if(f){let t=Array(4),x=Array(4);for(let e=0;e<4;++e)t[e]=.5*(f[e]+u[e]),x[e]=.5*(p[e]+v[e]);let g=this.data.Vertex(O,I,t),w=this.data.Vertex(_,L,x);this.Render(A,e,g,w,r,s,O,_,h,l,!1,d,m,f,t,x,v),this.Render(E,g,i,n,w,O,a,o,_,l,c,d,!1,t,u,p,x)}else{let t=this.vertex(O,I),f=this.vertex(_,L);this.Render(A,e,t,f,r,s,O,_,h,l,!1,d,m),this.Render(E,t,i,n,f,O,a,o,_,l,c,d,!1)}return}let R=new _t(g,t[1],t[2],w),T=new _t(t[4],t[5],t[6],t[7]),y=new _t(t[8],t[9],t[10],t[11]),A=new _t(M,t[13],t[14],b),E=new _t(g,t[4],t[8],M),I=new _t(R.m0,T.m0,y.m0,A.m0),L=new _t(R.m3,T.m3,y.m3,A.m3),N=new _t(R.m5,T.m5,y.m5,A.m5),O=new _t(R.m4,T.m4,y.m4,A.m4),_=new _t(R.m2,T.m2,y.m2,A.m2),P=new _t(w,t[7],t[11],b),S=[g,R.m0,R.m3,R.m5,E.m0,I.m0,L.m0,N.m0,E.m3,I.m3,L.m!
 3,N.m3,E..m5,I.m5,L.m5,N.m5],U=[E.m5,I.m5,L.m5,N.m5,E.m4,I.m4,L.m4,N.m4,E.m2,I.m2,L.m2,N.m2,M,A.m0,A.m3,A.m5],V=[N.m5,O.m5,_.m5,P.m5,N.m4,O.m4,_.m4,P.m4,N.m2,O.m2,_.m2,P.m2,A.m5,A.m4,A.m2,b],B=[R.m5,R.m4,R.m2,w,N.m0,O.m0,_.m0,P.m0,N.m3,O.m3,_.m3,P.m3,N.m5,O.m5,_.m5,P.m5],C=S[15],D=this.normal(S[0],S[4],S[8],S[12],S[13],S[14],S[15]);Ut(D)<this.epsilon&&(D=this.normal(S[0],S[4],S[8],S[12],S[11],S[7],S[3]),Ut(D)<this.epsilon&&(D=this.normal(S[3],S[2],S[1],S[0],S[13],S[14],S[15])));let F=this.normal(U[12],U[13],U[14],U[15],U[11],U[7],U[3]);Ut(F)<this.epsilon&&(F=this.normal(U[12],U[13],U[14],U[15],U[2],U[1],U[0]),Ut(F)<this.epsilon&&(F=this.normal(U[0],U[4],U[8],U[12],U[11],U[7],U[3])));let z=this.normal(V[15],V[11],V[7],V[3],V[2],V[1],V[0]);Ut(z)<this.epsilon&&(z=this.normal(V[15],V[11],V[7],V[3],V[4],V[8],V[12]),Ut(z)<this.epsilon&&(z=this.normal(V[12],V[13],V[14],V[15],V[2],V[1],V[0])));let H=this.normal(B[3],B[2],B[1],B[0],B[4],B[8],B[12]);Ut(H)<this.epsilon&&(H=this.normal(B[3],B[2],B[1],B[0],B[13],B[14],B[15]),Ut(H)<this.epsilon&&(H=this.normal(B[15],B[11],B[7],B[3],B[4],B[8],B[12])));let X=this.normal(V[3],V[2],V[1],C,V[4],V[8],V[12]),G=this.Epsilon,W=[.5*(s[0]+a[0]),.5*(s[1]+a[1]),.5*(s[2]+a[2])];if(!l)if(l=Ht(g,t[4],t[8],M)<this.res2){let t=St(this.differential(U[0],U[1],U[2],U[3]));W=[W[0]-G*t[0],W[1]-G*t[1],W[2]-G*t[2]]}else W=S[12];let j=[.5*(a[0]+o[0]),.5*(a[1]+o[1]),.5*(a[2]+o[2])];if(!c)if(c=Ht(M,t[13],t[14],b)<this.res2){let t=St(this.differential(V[12],V[8],V[4],V[0]));j=[j[0]-G*t[0],j[1]-G*t[1],j[2]-G*t[2]]}else j=U[15];let k=[.5*(o[0]+h[0]),.5*(o[1]+h[1]),.5*(o[2]+h[2])];if(!d)if(d=Ht(b,t[11],t[7],w)<this.res2){let t=St(this.differential(B[15],B[14],B[13],B[12]));k=[k[0]-G*t[0],k[1]-G*t[1],k[2]-G*t[2]]}else k=V[3];let Y=[.5*(h[0]+s[0]),.5*(h[1]+s[1]),.5*(h[2]+s[2])];if(!m)if(m=Ht(g,t[1],t[2],w)<this.res2){let t=St(this.differential(S[3],S[7],S[11],S[15]));Y=[Y[0]-G*t[0],Y[1]-G*t[1],Y[2]-G*t[2]]}else Y=B[0];if(f){let t=Array(4),x=Array(4),g=Array(4),w=Array(4),M=Array(4);for(let e=0;e<4;++e)t[e]=.5*!
 (f[e]+u[e]),x[e]=.5*(u[e]+p[e]),g[e]=.5*(p[e]+v[e]),w[e]=.5*(v[e]+f[e]),M[e]=.5*(t[e]+g[e]);let b=this.data.Vertex(W,D,t),R=this.data.Vertex(j,F,x),T=this.data.Vertex(k,z,g),y=this.data.Vertex(Y,H,w),A=this.data.Vertex(C,X,M);this.Render(S,e,b,A,y,s,W,C,Y,l,!1,!1,m,f,t,M,w),this.Render(U,b,i,R,A,W,a,j,C,l,c,!1,!1,t,u,x,M),this.Render(V,A,R,n,T,C,j,o,k,!1,c,d,!1,M,x,p,g),this.Render(B,y,A,T,r,Y,C,k,h,!1,!1,d,m,w,M,g,v)}else{let t=this.vertex(W,D),f=this.vertex(j,F),u=this.vertex(k,z),p=this.vertex(Y,H),v=this.vertex(C,X);this.Render(S,e,t,v,p,s,W,C,Y,l,!1,!1,m),this.Render(U,t,i,f,v,W,a,j,C,l,c,!1,!1),this.Render(V,v,f,n,u,C,j,o,k,!1,c,d,!1),this.Render(B,p,v,u,r,Y,C,k,h,!1,!1,d,m)}}}process3(t){if(1==V)return this.curve(t,0,1,3,6),this.curve(t,6,7,8,9),void this.curve(t,9,5,2,0);let e=t[0],i=t[6],n=t[9],r=this.normal(n,t[5],t[2],e,t[1],t[3],i),s=this.normal(e,t[1],t[3],i,t[7],t[8],n),a=this.normal(i,t[7],t[8],n,t[5],t[2],e);if(this.color){let o=this.color[0],h=this.color[1],l=this.color[2],c=this.data.Vertex(e,r,o),d=this.data.Vertex(i,s,h),m=this.data.Vertex(n,a,l);this.Render3(t,c,d,m,e,i,n,!1,!1,!1,o,h,l)}else{let o=this.vertex(e,r),h=this.vertex(i,s),l=this.vertex(n,a);this.Render3(t,o,h,l,e,i,n,!1,!1,!1)}this.data.indices.length>0&&this.append()}Render3(t,e,i,n,r,s,a,o,h,l,c,d,m){if(this.Distance3(t)<this.res2)this.offscreen([r,s,a])||(0==V?(this.data.indices.push(e),this.data.indices.push(i),this.data.indices.push(n)):(this.data.indices.push(e),this.data.indices.push(i),this.data.indices.push(i),this.data.indices.push(n),this.data.indices.push(n),this.data.indices.push(e)));else{if(this.offscreen(t))return;let f=t[0],u=t[1],p=t[2],v=t[3],x=t[4],g=t[5],w=t[6],M=t[7],b=t[8],R=t[9],T=[.5*(R[0]+g[0]),.5*(R[1]+g[1]),.5*(R[2]+g[2])],y=[.5*(R[0]+b[0]),.5*(R[1]+b[1]),.5*(R[2]+b[2])],A=[.5*(g[0]+p[0]),.5*(g[1]+p[1]),.5*(g[2]+p[2])],E=[.5*(b[0]+x[0]),.5*(b[1]+x[1]),.5*(b[2]+x[2])],I=[.5*(b[0]+M[0]),.5*(b[1]+M[1]),.5*(b[2]+M[2])],L=[.5*(p[0]+x[0]),.5*(p[1]+x[1]),.5*(p[2]+x[2])],N=[.5*(p[0]+f[0]),.5*(p[1]+f[1]),.5*(p[!
 2]+f[2])],O=[.5*(x[0]+v[0]),.5*(x[1]+v[1]),.5*(x[2]+v[2])],_=[.5*(M[0]+w[0]),.5*(M[1]+w[1]),.5*(M[2]+w[2])],P=[.5*(f[0]+u[0]),.5*(f[1]+u[1]),.5*(f[2]+u[2])],S=[.5*(u[0]+v[0]),.5*(u[1]+v[1]),.5*(u[2]+v[2])],U=[.5*(v[0]+w[0]),.5*(v[1]+w[1]),.5*(v[2]+w[2])],V=[.5*(T[0]+A[0]),.5*(T[1]+A[1]),.5*(T[2]+A[2])],B=[.5*(y[0]+I[0]),.5*(y[1]+I[1]),.5*(y[2]+I[2])],C=[.5*(A[0]+N[0]),.5*(A[1]+N[1]),.5*(A[2]+N[2])],D=[.5*E[0]+.25*(x[0]+u[0]),.5*E[1]+.25*(x[1]+u[1]),.5*E[2]+.25*(x[2]+u[2])],F=[.5*(I[0]+_[0]),.5*(I[1]+_[1]),.5*(I[2]+_[2])],z=[.5*L[0]+.25*(x[0]+M[0]),.5*L[1]+.25*(x[1]+M[1]),.5*L[2]+.25*(x[2]+M[2])],H=[.25*(g[0]+x[0])+.5*O[0],.25*(g[1]+x[1])+.5*O[1],.25*(g[2]+x[2])+.5*O[2]],X=[.5*(P[0]+S[0]),.5*(P[1]+S[1]),.5*(P[2]+S[2])],G=[.5*(S[0]+U[0]),.5*(S[1]+U[1]),.5*(S[2]+U[2])],W=[.5*(z[0]+X[0]),.5*(z[1]+X[1]),.5*(z[2]+X[2])],j=[.5*(z[0]+G[0]),.5*(z[1]+G[1]),.5*(z[2]+G[2])],k=[.5*(X[0]+G[0]),.5*(X[1]+G[1]),.5*(X[2]+G[2])],Y=[.5*(H[0]+F[0]),.5*(H[1]+F[1]),.5*(H[2]+F[2])],$=[.5*(B[0]+H[0]),.5*(B[1]+H[1]),.5*(B[2]+H[2])],q=[.5*(B[0]+F[0]),.5*(B[1]+F[1]),.5*(B[2]+F[2])],K=[.5*(V[0]+D[0]),.5*(V[1]+D[1]),.5*(V[2]+D[2])],Z=[.5*(C[0]+D[0]),.5*(C[1]+D[1]),.5*(C[2]+D[2])],Q=[.5*(V[0]+C[0]),.5*(V[1]+C[1]),.5*(V[2]+C[2])],J=[f,P,N,X,[.5*(L[0]+P[0]),.5*(L[1]+P[1]),.5*(L[2]+P[2])],C,k,W,Z,Q],tt=[k,G,j,U,[.5*(O[0]+_[0]),.5*(O[1]+_[1]),.5*(O[2]+_[2])],Y,w,_,F,q],et=[Q,K,V,$,[.5*(T[0]+E[0]),.5*(T[1]+E[1]),.5*(T[2]+E[2])],T,q,B,y,R],it=[q,$,Y,K,[.25*(A[0]+I[0]+S[0]+x[0]),.25*(A[1]+I[1]+S[1]+x[1]),.25*(A[2]+I[2]+S[2]+x[2])],j,Q,Z,W,k],nt=this.normal(k,j,Y,q,$,K,Q),rt=this.normal(q,$,K,Q,Z,W,k),st=this.normal(Q,Z,W,k,j,Y,q),at=this.Epsilon,ot=[.5*(s[0]+a[0]),.5*(s[1]+a[1]),.5*(s[2]+a[2])];if(!o)if(o=Ht(w,M,b,R)<this.res2){let t=St(this.sumdifferential(it[0],it[2],it[5],it[9],it[1],it[3],it[6]));ot=[ot[0]-at*t[0],ot[1]-at*t[1],ot[2]-at*t[2]]}else ot=q;let ht=[.5*(a[0]+r[0]),.5*(a[1]+r[1]),.5*(a[2]+r[2])];if(!h)if(h=Ht(f,p,g,R)<this.res2){let t=St(this.sumdifferential(it[6],it[3],it[1],it[0],it[7],it[8],it[9]));ht=[ht[0]-at*t[0],ht[1]-at*t[1],ht!
 [2]-at*t[2]]}else ht=Q;let lt=[.5*(r[0]+s[0]),.5*(r[1]+s[1]),.5*(r[2]+s[2])];if(!l)if(l=Ht(f,u,v,w)<this.res2){let t=St(this.sumdifferential(it[9],it[8],it[7],it[6],it[5],it[2],it[0]));lt=[lt[0]-at*t[0],lt[1]-at*t[1],lt[2]-at*t[2]]}else lt=k;if(c){let t=Array(4),f=Array(4),u=Array(4);for(let e=0;e<4;++e)t[e]=.5*(d[e]+m[e]),f[e]=.5*(m[e]+c[e]),u[e]=.5*(c[e]+d[e]);let p=this.data.Vertex(ot,nt,t),v=this.data.Vertex(ht,rt,f),x=this.data.Vertex(lt,st,u);this.Render3(J,e,x,v,r,lt,ht,!1,h,l,c,u,f),this.Render3(tt,x,i,p,lt,s,ot,o,!1,l,u,d,t),this.Render3(et,v,p,n,ht,ot,a,o,h,!1,f,t,m),this.Render3(it,p,v,x,ot,ht,lt,!1,!1,!1,t,f,u)}else{let t=this.vertex(ot,nt),c=this.vertex(ht,rt),d=this.vertex(lt,st);this.Render3(J,e,d,c,r,lt,ht,!1,h,l),this.Render3(tt,d,i,t,lt,s,ot,o,!1,l),this.Render3(et,c,t,n,ht,ot,a,o,h,!1),this.Render3(it,t,c,d,ot,ht,lt,!1,!1,!1)}}}Distance(t){let e=t[0],i=t[3],n=t[12],r=t[15],s=Xt(e,n,i,r);s=Math.max(s,Ht(e,t[4],t[8],n)),s=Math.max(s,Ht(t[1],t[5],t[9],t[13])),s=Math.max(s,Ht(i,t[7],t[11],r)),s=Math.max(s,Ht(t[2],t[6],t[10],t[14]));let a=Xt(e,i,n,r);return a=Math.max(a,Ht(e,t[1],t[2],i)),a=Math.max(a,Ht(t[4],t[5],t[6],t[7])),a=Math.max(a,Ht(t[8],t[9],t[10],t[11])),a=Math.max(a,Ht(n,t[13],t[14],r)),[s,a]}Distance3(t){let e=t[0],i=t[4],n=t[6],r=t[9],s=Ut([(e[0]+n[0]+r[0])*(1/3)-i[0],(e[1]+n[1]+r[1])*(1/3)-i[1],(e[2]+n[2]+r[2])*(1/3)-i[2]]);return s=Math.max(s,Ht(e,t[1],t[3],n)),s=Math.max(s,Ht(e,t[2],t[5],r)),Math.max(s,Ht(n,t[7],t[8],r))}differential(t,e,i,n){let r=[3*(e[0]-t[0]),3*(e[1]-t[1]),3*(e[2]-t[2])];return Ut(r)>this.epsilon?r:(r=Ft(t,e,i),Ut(r)>this.epsilon?r:zt(t,e,i,n))}sumdifferential(t,e,i,n,r,s,a){let o=this.differential(t,e,i,n),h=this.differential(t,r,s,a);return[o[0]+h[0],o[1]+h[1],o[2]+h[2]]}normal(t,e,i,n,r,s,a){let o=3*(r[0]-n[0]),h=3*(r[1]-n[1]),l=3*(r[2]-n[2]),c=3*(i[0]-n[0]),d=3*(i[1]-n[1]),m=3*(i[2]-n[2]),f=[h*m-l*d,l*c-o*m,o*d-h*c];if(Ut(f)>this.epsilon)return f;let u=[c,d,m],p=[o,h,l],v=Ft(n,i,e),x=Ft(n,r,s),g=Bt(x,u),w=Bt(p,v);if(f=[g[0]+w[0],g[1]+w[1],g[2]+w[2]],Ut(f)>t!
 his.epsilon)return f;let M=zt(n,i,e,t),b=zt(n,r,s,a);g=Bt(p,M),w=Bt(b,u);let R=Bt(x,v);return f=[g[0]+w[0]+R[0],g[1]+w[1]+R[1],g[2]+w[2]+R[2]],Ut(f)>this.epsilon?f:(g=Bt(b,v),w=Bt(x,M),f=[g[0]+w[0],g[1]+w[1],g[2]+w[2]],Ut(f)>this.epsilon?f:Bt(b,M))}}function xt(t){return 0<=t&&t<=1}class gt{constructor(t,e,i){const n=1e3*Number.EPSILON,r=n*n;if(Math.abs(t)<=n*Math.abs(e)+r*Math.abs(i))Math.abs(e)>n*Math.abs(i)?(this.roots=1,this.t1=-i/e):0==i?(this.roots=1,this.t1=0):this.roots=0;else{let r=.5*e/t,s=e*r;if(Math.abs(s)<=n*Math.abs(i)){let e=-i/t;e>=0?(this.roots=2,this.t2=Math.sqrt(e),this.t1=-this.t2):this.roots=0}else{let t=-2*i/s;if(t>-1){this.roots=2;let e=r*function(t){return t/(Math.sqrt(1+t)+1)}(t),i=-e-2*r;i<=e?(this.t1=i,this.t2=e):(this.t1=e,this.t2=i)}else-1==t?(this.roots=1,this.t1=this.t2=-r):this.roots=0}}}}class wt extends ut{constructor(t,e,i,n,r){if(super(),this.controlpoints=t,this.CenterIndex=e,this.MaterialIndex=i,n&&r)this.Min=n,this.Max=r;else{let t=this.Bounds(this.controlpoints);this.Min=t[0],this.Max=t[1]}}Bounds(t){let e=Array(3),i=Array(3),n=t.length,r=Array(n);for(let h=0;h<3;++h){for(let e=0;e<n;++e)r[e]=t[e][h];let l,c;if(l=c=r[0],4==n){l=Math.min(l,r[3]),c=Math.max(c,r[3]);let t=(s=r[0],a=r[1],o=r[2],[r[3]-s+3*(a-o),2*(s+o)-4*a,a-s]),e=new gt(t[0],t[1],t[2]);if(0!=e.roots&&xt(e.t1)){let t=Ct(r[0],r[1],r[2],r[3],e.t1);l=Math.min(l,t),c=Math.max(c,t)}if(2==e.roots&&xt(e.t2)){let t=Ct(r[0],r[1],r[2],r[3],e.t2);l=Math.min(l,t),c=Math.max(c,t)}}else{let t=r[1];l=Math.min(l,t),c=Math.max(c,t)}e[h]=l,i[h]=c}var s,a,o;return[[e[0],e[1],e[2]],[i[0],i[1],i[2]]]}setMaterialIndex(){this.setMaterial(Z,ye)}processLine(t){let e=t[0],i=t[1];if(!this.offscreen([e,i])){let t=[0,0,1];this.data.indices.push(this.data.vertex(e,t)),this.data.indices.push(this.data.vertex(i,t)),this.append()}}process(t){if(2==t.length)return this.processLine(t);let e=t[0],i=t[1],n=t[2],r=t[3],s=this.normal(Dt(e,i),Ft(e,i,n)),a=this.normal(Dt(n,r),Ft(r,n,i)),o=this.data.vertex(e,s),h=this.data.vertex(r,a);this.Render(t,o,h!
 ),this.data.indices.length>0&&this.append()}append(){Z.append(this.data)}notRendered(){Z.rendered=!1}Render(t,e,i){let n=t[0],r=t[1],s=t[2],a=t[3];if(Ht(n,r,s,a)<this.res2)this.offscreen([n,a])||(this.data.indices.push(e),this.data.indices.push(i));else{if(this.offscreen(t))return;let o=[.5*(n[0]+r[0]),.5*(n[1]+r[1]),.5*(n[2]+r[2])],h=[.5*(r[0]+s[0]),.5*(r[1]+s[1]),.5*(r[2]+s[2])],l=[.5*(s[0]+a[0]),.5*(s[1]+a[1]),.5*(s[2]+a[2])],c=[.5*(o[0]+h[0]),.5*(o[1]+h[1]),.5*(o[2]+h[2])],d=[.5*(h[0]+l[0]),.5*(h[1]+l[1]),.5*(h[2]+l[2])],m=[.5*(c[0]+d[0]),.5*(c[1]+d[1]),.5*(c[2]+d[2])],f=[n,o,c,m],u=[m,d,l,a],p=this.normal(function(t,e,i,n){return[i[0]+n[0]-t[0]-e[0],i[1]+n[1]-t[1]-e[1],i[2]+n[2]-t[2]-e[2]]}(n,r,s,a),function(t,e,i,n){return[3*t[0]-5*e[0]+i[0]+n[0],3*t[1]-5*e[1]+i[1]+n[1],3*t[2]-5*e[2]+i[2]+n[2]]}(n,r,s,a)),v=this.data.vertex(m,p);this.Render(f,e,v),this.Render(u,v,i)}}normal(t,e){let i=Vt(t,t),n=Vt(t,e);return[i*e[0]-n*t[0],i*e[1]-n*t[1],i*e[2]-n*t[2]]}}class Mt extends ut{constructor(t,e,i){super(),this.controlpoint=t,this.width=e,this.CenterIndex=0,this.MaterialIndex=i,this.Min=t,this.Max=t}setMaterialIndex(){this.setMaterial(K,Te)}process(t){this.data.indices.push(this.data.vertex0(this.controlpoint,this.width)),this.append()}append(){K.append(this.data)}notRendered(){K.rendered=!1}}class bt extends ut{constructor(t,e){super(),this.CenterIndex=t,this.MaterialIndex=e,this.controlpoints=window.Positions,this.Normals=window.Normals,this.Colors=window.Colors,this.Indices=window.Indices,this.transparent=c[this.MaterialIndex].diffuse[3]<1,this.Min=this.Bounds(this.controlpoints,Math.min),this.Max=this.Bounds(this.controlpoints,Math.max)}Bounds(t,e){let i=Array(3),n=t.length,r=Array(n);for(let s=0;s<3;++s){for(let e=0;e<n;++e)r[e]=t[e][s];i[s]=pt(r,e)}return[i[0],i[1],i[2]]}setMaterialIndex(){this.transparent?this.setMaterial(tt,Le):this.setMaterial(et,Ie)}process(t){this.data.vertices=new Array(6*t.length),it=this.Colors.length>0?-1-it:1+it;for(let e=0,i=this.Indices.length;e<i;++e){let i=this.Indices[e],n=i[0!
 ],r=t[n[0]],s=t[n[1]],a=t[n[2]],o=!this.offscreen([r,s,a]),h=i.length>1?i[1]:n;if(h&&0!=h.length||(h=n),this.Colors.length>0){let t=i.length>2?i[2]:n;t&&0!=t.length||(t=n);let e=this.Colors[t[0]],l=this.Colors[t[1]],c=this.Colors[t[2]];this.transparent|=e[3]+l[3]+c[3]<3,0==V?(this.data.iVertex(n[0],r,this.Normals[h[0]],o,e),this.data.iVertex(n[1],s,this.Normals[h[1]],o,l),this.data.iVertex(n[2],a,this.Normals[h[2]],o,c)):(this.data.iVertex(n[0],r,this.Normals[h[0]],o,e),this.data.iVertex(n[1],s,this.Normals[h[1]],o,l),this.data.iVertex(n[1],s,this.Normals[h[1]],o,l),this.data.iVertex(n[2],a,this.Normals[h[2]],o,c),this.data.iVertex(n[2],a,this.Normals[h[2]],o,c),this.data.iVertex(n[0],r,this.Normals[h[0]],o,e))}else 0==V?(this.data.iVertex(n[0],r,this.Normals[h[0]],o),this.data.iVertex(n[1],s,this.Normals[h[1]],o),this.data.iVertex(n[2],a,this.Normals[h[2]],o)):(this.data.iVertex(n[0],r,this.Normals[h[0]],o),this.data.iVertex(n[1],s,this.Normals[h[1]],o),this.data.iVertex(n[1],s,this.Normals[h[1]],o),this.data.iVertex(n[2],a,this.Normals[h[2]],o),this.data.iVertex(n[2],a,this.Normals[h[2]],o),this.data.iVertex(n[0],r,this.Normals[h[0]],o))}this.data.nvertices=t.length,this.data.indices.length>0&&this.append()}append(){this.transparent?tt.append(this.data):et.append(this.data)}notRendered(){this.transparent?tt.rendered=!1:et.rendered=!1}}function Rt(){M=-Math.tan(.5*o.angleOfView)*o.maxBound[2],_.x=_.y=0,_.z=.5*(o.minBound[2]+o.maxBound[2]),x=v=o.zoom0,S.zmin=o.minBound[2],S.zmax=o.maxBound[2],P.x=P.y=0,_e(),U=!0,Oe()}function Tt(){mat4.identity(T),Rt(),window.top.asyWebApplication&&window.top.asyWebApplication.setProjection(""),window.parent.asyProjection=!1}let yt=0,At=1,Et=2,It=3,Lt=4;function Nt(e=[]){let i=lt(t,vertex,t.VERTEX_SHADER,e),n=lt(t,fragment,t.FRAGMENT_SHADER,e),r=t.createProgram();return t.attachShader(r,i),t.attachShader(r,n),t.bindAttribLocation(r,yt,"position"),t.bindAttribLocation(r,At,"normal"),t.bindAttribLocation(r,Et,"materialIndex"),t.bindAttribLocation(r,It,"color"),t.bindAttribLocation!
 (r,Lt,"width"),t.linkProgram(r),t.getProgramParameter(r,t.LINK_STATUS)||alert("Could not initialize shaders"),r}class Ot{constructor(t,e,i,n){this.m0=.5*(t+e);let r=.5*(e+i);this.m2=.5*(i+n),this.m3=.5*(this.m0+r),this.m4=.5*(r+this.m2),this.m5=.5*(this.m3+this.m4)}}class _t{constructor(t,e,i,n){this.m0=[.5*(t[0]+e[0]),.5*(t[1]+e[1]),.5*(t[2]+e[2])];let r=.5*(e[0]+i[0]),s=.5*(e[1]+i[1]),a=.5*(e[2]+i[2]);this.m2=[.5*(i[0]+n[0]),.5*(i[1]+n[1]),.5*(i[2]+n[2])],this.m3=[.5*(this.m0[0]+r),.5*(this.m0[1]+s),.5*(this.m0[2]+a)],this.m4=[.5*(r+this.m2[0]),.5*(s+this.m2[1]),.5*(a+this.m2[2])],this.m5=[.5*(this.m3[0]+this.m4[0]),.5*(this.m3[1]+this.m4[1]),.5*(this.m3[2]+this.m4[2])]}}class Pt{constructor(t){this.l003=t[0];let e=t[1],i=t[2],n=t[3],r=t[4],s=t[5];this.r300=t[6];let a=t[7],o=t[8];this.u030=t[9],this.u021=.5*(this.u030+s),this.u120=.5*(this.u030+o);let h=.5*(s+i),l=.5*(o+r),c=.5*(o+a),d=.5*(i+r);this.l012=.5*(i+this.l003);let m=.5*(r+n);this.r210=.5*(a+this.r300),this.l102=.5*(this.l003+e);let f=.5*(e+n);this.r201=.5*(n+this.r300),this.u012=.5*(this.u021+h),this.u210=.5*(this.u120+c),this.l021=.5*(h+this.l012);let u=.5*l+.25*(r+e);this.r120=.5*(c+this.r210);let p=.5*d+.25*(r+a),v=.25*(s+r)+.5*m;this.l201=.5*(this.l102+f),this.r102=.5*(f+this.r201),this.l210=.5*(p+this.l201),this.r012=.5*(p+this.r102),this.l300=.5*(this.l201+this.r102),this.r021=.5*(v+this.r120),this.u201=.5*(this.u210+v),this.r030=.5*(this.u210+this.r120),this.u102=.5*(this.u012+u),this.l120=.5*(this.l021+u),this.l030=.5*(this.u012+this.l021),this.l111=.5*(d+this.l102),this.r111=.5*(m+this.r210),this.u111=.5*(this.u021+l),this.c111=.25*(h+c+f+r)}}function St(t){let e=1/(Math.sqrt(t[0]*t[0]+t[1]*t[1]+t[2]*t[2])||1);return[t[0]*e,t[1]*e,t[2]*e]}function Ut(t){return t[0]*t[0]+t[1]*t[1]+t[2]*t[2]}function Vt(t,e){return t[0]*e[0]+t[1]*e[1]+t[2]*e[2]}function Bt(t,e){return[t[1]*e[2]-t[2]*e[1],t[2]*e[0]-t[0]*e[2],t[0]*e[1]-t[1]*e[0]]}function Ct(t,e,i,n,r){let s=1-r,a=s*s;return a*s*t+r*(3*(a*e+r*s*i)+r*r*n)}function Dt(t,e){return[e[0]-t[0],e[1]-t!
 [1],e[2]-t[2]]}function Ft(t,e,i){return[3*(t[0]+i[0])-6*e[0],3*(t[1]+i[1])-6*e[1],3*(t[2]+i[2])-6*e[2]]}function zt(t,e,i,n){return[n[0]-t[0]+3*(e[0]-i[0]),n[1]-t[1]+3*(e[1]-i[1]),n[2]-t[2]+3*(e[2]-i[2])]}function Ht(t,e,i,n){let r=[1/3*(n[0]-t[0]),1/3*(n[1]-t[1]),1/3*(n[2]-t[2])];return Math.max(Ut([e[0]-r[0]-t[0],e[1]-r[1]-t[1],e[2]-r[2]-t[2]]),Ut([n[0]-r[0]-i[0],n[1]-r[1]-i[1],n[2]-r[2]-i[2]]))}function Xt(t,e,i,n){let r=[e[0]-t[0],e[1]-t[1],e[2]-t[2]],s=[n[0]-i[0],n[1]-i[1],n[2]-i[2]];return Math.max(Ut(Bt(r,St(s))),Ut(Bt(s,St(r))))/9}function Gt(t){return[Math.min(t[0][0],t[1][0],t[2][0],t[3][0],t[4][0],t[5][0],t[6][0],t[7][0]),Math.min(t[0][1],t[1][1],t[2][1],t[3][1],t[4][1],t[5][1],t[6][1],t[7][1]),Math.min(t[0][2],t[1][2],t[2][2],t[3][2],t[4][2],t[5][2],t[6][2],t[7][2])]}function Wt(t){return[Math.max(t[0][0],t[1][0],t[2][0],t[3][0],t[4][0],t[5][0],t[6][0],t[7][0]),Math.max(t[0][1],t[1][1],t[2][1],t[3][1],t[4][1],t[5][1],t[6][1],t[7][1]),Math.max(t[0][2],t[1][2],t[2][2],t[3][2],t[4][2],t[5][2],t[6][2],t[7][2])]}function jt(t){oe||he(),B=!0,C=t.clientX,D=t.clientY}let kt,Yt,$t=!1;function qt(t){return Math.hypot(t[0].pageX-t[1].pageX,t[0].pageY-t[1].pageY)}function Kt(t){t.preventDefault(),oe||he();let e=t.targetTouches;pe=ve=$t=!1,ue||(1!=e.length||B||(Yt=(new Date).getTime(),touchId=e[0].identifier,C=e[0].pageX,D=e[0].pageY),2!=e.length||B||(touchId=e[0].identifier,kt=qt(e),$t=!0))}function Zt(t){B=!1}function Qt(t,e,i,n,r){if(t==i&&e==n)return;let[s,a]=function(t,e){let i=re(t),n=re(e),r=Vt(i,n);return[r>1?0:r<-1?f:Math.acos(r),St(Bt(i,n))]}([t,-e],[i,-n]);mat4.fromRotation(O,2*r*R*s/v,a),mat4.multiply(T,O,T)}function Jt(t,e,i,n){let r=1/v;P.x+=(i-t)*r*s,P.y-=(n-e)*r*a}function te(t,e,i,n){o.orthographic?Jt(t,e,i,n):(_.x+=(i-t)*(S.xmax-S.xmin),_.y-=(n-e)*(S.ymax-S.ymin))}function ee(){var t,e;t=A,e=T,mat4.fromTranslation(O,[_.x,_.y,_.z]),mat4.invert(N,O),mat4.multiply(t,e,N),mat4.multiply(t,O,t),mat4.translate(A,A,[_.x,_.y,0]),mat3.fromMat4(L,A),mat3.invert(I,L),mat4.multiply(E,y,A)}function ie(){let !
 t=Math.sqrt(Number.MAX_VALUE),e=1/t;v<=e&&(v=e),v>=t&&(v=t),(1.5*v<x||v>1.5*x)&&(U=!0,x=v)}function ne(t){let e=o.zoomStep*a*t;const i=Math.log(.1*Number.MAX_VALUE)/Math.log(o.zoomFactor);Math.abs(e)<i&&(v*=o.zoomFactor**e,ie())}function re(t){let e=t[0],i=t[1],n=Math.hypot(e,i);return n>1&&(denom=1/n,e*=denom,i*=denom),[e,i,Math.sqrt(Math.max(1-i*i-e*e,0))]}function se(t,e,i,n){ne(e-n)}function ae(t,e,i,n=1){let r;switch(i){case 1:r=Qt;break;case 2:r=Jt;break;case 3:r=se;break;case 4:r=te;break;default:r=(t,e,i,n)=>{}}r((C-s)/s,(D-a)/a,(t-s)/s,(e-a)/a,n),C=t,D=e,_e(),Oe()}let oe=0;function he(){oe=1,o.canvas.addEventListener("wheel",me,!1)}function le(){let t,e,i;[t,e,i]=function(){let t=Array(3),e=Array(3),i=Array(3),n=_.x,r=_.y,s=.5*(S.zmin+S.zmax);for(let a=0;a<3;++a){let h=0,l=0,c=0,d=4*a;for(let t=0;t<4;++t){let e=4*t,i=T[e],a=T[e+1],m=T[e+2],f=T[e+3],u=o.Transform[d+t];h+=u*(f-n*i-r*a-s*m),c+=u*a,l+=u*(f-n*i-r*a)}t[a]=h,e[a]=c,i[a]=l}return[t,e,i]}();let n=o.orthographic?"  orthographic(":"  perspective(",r="".padStart(n.length),s="currentprojection=\n"+n+"camera=("+t+"),\n"+r+"up=("+e+"),\n"+r+"target=("+i+"),\n"+r+"zoom="+v*o.initialZoom/o.zoom0;return o.orthographic||(s+=",\n"+r+"angle="+2*Math.atan(Math.tan(.5*o.angleOfView)/v)/u),0==g&&0==w||(s+=",\n"+r+"viewportshift=("+g+","+w+")"),o.orthographic||(s+=",\n"+r+"autoadjust=false"),s+=");\n",window.parent.asyProjection=!0,s}function ce(t){if(oe||he(),o.embedded&&oe&&27==t.keyCode)return oe=0,void o.canvas.removeEventListener("wheel",me,!1);let e=[];switch(t.key){case"x":e=[1,0,0];break;case"y":e=[0,1,0];break;case"z":e=[0,0,1];break;case"h":Tt();break;case"m":++V,3==V&&(V=0),2!=V&&(o.embedded||st(),rt(o.ibl)),U=!0,Oe();break;case"+":case"=":case">":v*=o.zoomFactor,de();break;case"-":case"_":case"<":v/=o.zoomFactor,de();break;case"c":window.top.asyWebApplication||prompt("Ctrl+c Enter to copy currentprojection to clipboard; then append to asy file:",le())}e.length>0&&(mat4.rotate(T,T,.1,e),ee(),Oe())}function de(){ie(),_e(),Oe()}function me(t){t.prevent!
 Default(),t.deltaY<0?v*=o.zoomFactor:v/=o.zoomFactor,de()}function fe(t){if(!B)return;let e,i=t.clientX,n=t.clientY;e=t.getModifierState("Control")?2:t.getModifierState("Shift")?3:t.getModifierState("Alt")?4:1,ae(i,n,e)}let ue=!1,pe=!1,ve=!1;function xe(t){if(t.preventDefault(),ue)return;let e=t.targetTouches;if(!$t&&1==e.length&&touchId==e[0].identifier){let t=e[0].pageX,i=e[0].pageY,n=t-C,r=i-D,s=n*n+r*r<=o.shiftHoldDistance*o.shiftHoldDistance;if(s&&!pe&&!ve&&(new Date).getTime()-Yt>o.shiftWaitTime&&(navigator.vibrate&&window.navigator.vibrate(o.vibrateTime),pe=!0),pe)ae(t,i,2);else if(!s){ve=!0,ae(e[0].pageX,e[0].pageY,1,.5)}}if($t&&!pe&&2==e.length&&touchId==e[0].identifier){let t=qt(e),i=t-kt;ue=!0,i*=o.zoomPinchFactor,i>o.zoomPinchCap&&(i=o.zoomPinchCap),i<-o.zoomPinchCap&&(i=-o.zoomPinchCap),ne(i/b),kt=t,pe=ve=ue=!1,_e(),Oe()}}let ge,we,Me,be,Re=[];function Te(){dt(K,ge),K.clear()}function ye(){dt(Z,we),Z.clear()}function Ae(){dt(Q,we),Q.clear()}function Ee(){dt(J,Me),J.clear()}function Ie(){dt(et,be),et.rendered=!1,et.clear()}function Le(){let e=tt.indices;if(V>0)return dt(tt,be,e),void tt.clear();if(e.length>0){!function(t){let e=A[2],i=A[6],n=A[10];Re.length=t.length;for(let r=0;r<t.length;++r){let s=6*r;Re[r]=e*t[s]+i*t[s+1]+n*t[s+2]}}(tt.vertices);let i=e.length/3,n=Array(i).fill().map((t,e)=>e);n.sort((function(t,i){let n=3*t;Ia=e[n],Ib=e[n+1],Ic=e[n+2];let r=3*i;return IA=e[r],IB=e[r+1],IC=e[r+2],Re[Ia]+Re[Ib]+Re[Ic]<Re[IA]+Re[IB]+Re[IC]?-1:1}));let r=Array(e.length);for(let t=0;t<i;++t){let i=3*n[t];r[3*t]=e[i],r[3*t+1]=e[i+1],r[3*t+2]=e[i+2]}t.depthMask(!1),dt(tt,be,r),tt.rendered=!1,t.depthMask(!0)}tt.clear()}function Ne(){Te(),ye(),Ae(),Ee(),Ie(),Le(),requestAnimationFrame(Ne)}function Oe(){o.embedded&&(i.width=o.canvasWidth,i.height=o.canvasHeight,Pe()),t.clearColor(o.background[0],o.background[1],o.background[2],o.background[3]),t.clear(t.COLOR_BUFFER_BIT|t.DEPTH_BUFFER_BIT);for(const t of h)t.render();Ne(),o.embedded&&(n.clearRect(0,0,o.canvasWidth,o.canvasHeight),n.drawImage(i,0,0)),0==V&&!
 (U=!1)}function _e(){!function(t,e,i,n){let r=t/e;g=(i/t+o.viewportShift[0])*v,w=(n/e+o.viewportShift[1])*v;let s=1/v;if(o.orthographic){let t=o.maxBound[0]-o.minBound[0],e=o.maxBound[1]-o.minBound[1];if(t<e*r){let t=.5*e*r*s,i=2*t*g,n=e*s*w;S.xmin=-t-i,S.xmax=t-i,S.ymin=o.minBound[1]*s-n,S.ymax=o.maxBound[1]*s-n}else{let e=.5*t*s/r,i=t*s*g,n=2*e*w;S.xmin=o.minBound[0]*s-i,S.xmax=o.maxBound[0]*s-i,S.ymin=-e-n,S.ymax=e-n}}else{let t=M*s,e=t*r,i=2*e*g,n=2*t*w;S.xmin=-e-i,S.xmax=e-i,S.ymin=-t-n,S.ymax=t-n}}(o.canvasWidth,o.canvasHeight,P.x,P.y),(o.orthographic?mat4.ortho:mat4.frustum)(y,S.xmin,S.xmax,S.ymin,S.ymax,-S.zmax,-S.zmin),ee(),window.top.asyWebApplication&&window.top.asyWebApplication.setProjection(le())}function Pe(){t.viewportWidth=o.canvasWidth,t.viewportHeight=o.canvasHeight,t.viewport(.5*(o.canvas.width-o.canvasWidth),.5*(o.canvas.height-o.canvasHeight),o.canvasWidth,o.canvasHeight),t.scissor(0,0,o.canvas.width,o.canvas.height)}function Se(t,e){t>void 0&&(t=void 0),e>void 0&&(e=void 0),P.x*=t/o.canvasWidth,P.y*=e/o.canvasHeight,o.canvasWidth=t,o.canvasHeight=e,o.embedded&&(o.canvas.width=i.width=o.canvasWidth,o.canvas.height=i.height=o.canvasHeight),b=Math.hypot(o.canvasWidth,o.canvasHeight),s=.5*o.canvas.width,a=.5*o.canvas.height,R=1+8*Math.hypot(o.viewportMargin[0],o.viewportMargin[1])/b,Pe(),_e(),U=!0}function Ue(){if(o.zoom0=o.initialZoom,window.top.asyWebApplication&&""==window.top.asyWebApplication.getProjection()&&(window.parent.asyProjection=!1),o.absolute&&!o.embedded)o.canvasWidth=o.canvasWidth0*window.devicePixelRatio,o.canvasHeight=o.canvasHeight0*window.devicePixelRatio;else{let t=o.canvasWidth0/o.canvasHeight0;o.canvasWidth=Math.max(window.innerWidth-10,10),o.canvasHeight=Math.max(window.innerHeight-10,10),!o.orthographic&&!window.parent.asyProjection&&o.canvasWidth<o.canvasHeight*t&&(o.zoom0*=o.canvasWidth/(o.canvasHeight*t))}o.canvas.width=o.canvasWidth,o.canvas.height=o.canvasHeight;window.innerWidth,window.innerHeight;let t=1/o.zoom0;o.viewportShift[0]*=t,o.viewportShift[1]*=t,Se(o.!
 canvasWidth,o.canvasHeight),Rt()}class Ve{constructor(t,e){if(this.center=t,e){let t=e[0],i=e[1];this.ct=Math.cos(t),this.st=Math.sin(t),this.cp=Math.cos(i),this.sp=Math.sin(i)}}T0(t){return[t[0]+this.center[0],t[1]+this.center[1],t[2]+this.center[2]]}T(t){let e=t[0],i=t[1],n=t[2],r=e*this.ct+n*this.st;return[r*this.cp-i*this.sp+this.center[0],r*this.sp+i*this.cp+this.center[1],-e*this.st+n*this.ct+this.center[2]]}}function Be(t,e,i){let n=[t(e),t([e[0],e[1],i[2]]),t([e[0],i[1],e[2]]),t([e[0],i[1],i[2]]),t([i[0],e[1],e[2]]),t([i[0],e[1],i[2]]),t([i[0],i[1],e[2]]),t(i)];return[Gt(n),Wt(n)]}let Ce=4/3*(Math.sqrt(2)-1);async function De(t){return(await fetch(t)).arrayBuffer()}function Fe(t){return t.getBytes().filter((t,e)=>e%4!=3)}function ze(e,i,n=t.RGB16F){let r=e.width(),s=e.height(),a=t.createTexture();return t.activeTexture(t.TEXTURE0+i),t.bindTexture(t.TEXTURE_2D,a),t.pixelStorei(t.UNPACK_ALIGNMENT,1),t.texParameteri(t.TEXTURE_2D,t.TEXTURE_MIN_FILTER,t.LINEAR),t.texParameteri(t.TEXTURE_2D,t.TEXTURE_MAG_FILTER,t.LINEAR),t.texImage2D(t.TEXTURE_2D,0,n,r,s,0,t.RGB,t.FLOAT,Fe(e)),a}window.webGLStart=function(){o.canvas=document.getElementById("Asymptote"),o.embedded=window.top.document!=document,ht(),t.enable(t.BLEND),t.blendFunc(t.SRC_ALPHA,t.ONE_MINUS_SRC_ALPHA),t.enable(t.DEPTH_TEST),t.enable(t.SCISSOR_TEST),o.canvas.onmousedown=jt,document.onmouseup=Zt,document.onmousemove=fe,o.canvas.onkeydown=ce,o.embedded||he(),o.canvas.addEventListener("touchstart",Kt,!1),o.canvas.addEventListener("touchend",Zt,!1),o.canvas.addEventListener("touchcancel",Zt,!1),o.canvas.addEventListener("touchleave",Zt,!1),o.canvas.addEventListener("touchmove",xe,!1),document.addEventListener("keydown",ce,!1),o.canvasWidth0=o.canvasWidth,o.canvasHeight0=o.canvasHeight,mat4.identity(T),0!=window.innerWidth&&0!=window.innerHeight&&Ue(),window.addEventListener("resize",Ue,!1),o.ibl&&async function(){let e=o.imageURL+o.image+"/";function i(t){return new Promise(e=>setTimeout(e,t))}for(;!Module.EXRLoader;)await i(0);promises=[De(o.imageURL+"re!
 fl.exr")..then(t=>{let e=new Module.EXRLoader(t);j=ze(e,0)}),De(e+"diffuse.exr").then(t=>{let e=new Module.EXRLoader(t);W=ze(e,1)})],refl_promise=[],refl_promise.push(De(e+"refl0.exr"));for(let t=1;t<=8;++t)refl_promise.push(De(e+"refl"+t+"w.exr"));finished_promise=Promise.all(refl_promise).then(e=>{let i=t.createTexture();t.activeTexture(t.TEXTURE0+2),t.pixelStorei(t.UNPACK_ALIGNMENT,1),t.bindTexture(t.TEXTURE_2D,i),t.texParameteri(t.TEXTURE_2D,t.TEXTURE_MAX_LEVEL,e.length-1),t.texParameteri(t.TEXTURE_2D,t.TEXTURE_MIN_FILTER,t.LINEAR_MIPMAP_LINEAR),t.texParameteri(t.TEXTURE_2D,t.TEXTURE_MAG_FILTER,t.LINEAR),t.texParameterf(t.TEXTURE_2D,t.TEXTURE_MIN_LOD,0),t.texParameterf(t.TEXTURE_2D,t.TEXTURE_MAX_LOD,8);for(let i=0;i<e.length;++i){let n=new Module.EXRLoader(e[i]);t.texImage2D(t.TEXTURE_2D,i,t.RGB16F,n.width(),n.height(),0,t.RGB,t.FLOAT,Fe(n))}G=i}),promises.push(finished_promise),await Promise.all(promises)}().then(k).then(Rt),Tt()},window.light=function(t,e){l.push(new nt(t,e))},window.material=function(t,e,i,n,r,s){c.push(new Y(t,e,i,n,r,s))},window.patch=function(t,e,i,n){h.push(new vt(t,e,i,n))},window.curve=function(t,e,i){h.push(new wt(t,e,i))},window.pixel=function(t,e,i){h.push(new Mt(t,e,i))},window.triangles=function(t,e){h.push(new bt(t,e)),window.Positions=F=[],window.Normals=z=[],window.Colors=H=[],window.Indices=X=[]},window.sphere=function(t,e,i,n,r){let s,a,o,l,c,d,m=.524670512339254,f=.595936986722291,u=.954967051233925,p=.0820155480083437,v=.996685028842544,x=.0549670512339254,g=.998880711874577,w=.0405017186586849,M=[[[1,0,0],[1,0,m],[f,0,u],[p,0,v],[1,Ce,0],[1,Ce,m],[f,Ce*f,u],[p,Ce*p,v],[Ce,1,0],[Ce,1,m],[Ce*f,f,u],[Ce*p,p,v],[0,1,0],[0,1,m],[0,f,u],[0,p,v]],[[p,0,v],[p,Ce*p,v],[x,0,g],[Ce*p,p,v],[w,w,1],[.05*Ce,0,1],[0,p,v],[0,x,g],[0,.05*Ce,1],[0,0,1]]],b=new Ve(t,r);function R(t){let e=Array(t.length);for(let i=0;i<t.length;++i){let n=t[i];e[i]=c([s*n[0],a*n[1],o*n[2]])}return e}r?(l=1,d=0,c=b.T.bind(b)):(l=-1,d=-e,c=b.T0.bind(b));let T=Be(c,[-e,-e,d],[e,e,e]),y=T[0],A=T[1];for(let t=-1!
 ;t<=1;t+=2){s=t*e;for(let t=-1;t<=1;t+=2){a=t*e;for(let t=l;t<=1;t+=2){o=t*e;for(let t=0;t<2;++t)h.push(new vt(R(M[t]),i,n,null,y,A))}}}},window.disk=function(t,e,i,n,r){let s=1-2*Ce/3,a=[[1,0,0],[1,-Ce,0],[Ce,-1,0],[0,-1,0],[1,Ce,0],[s,0,0],[0,-s,0],[-Ce,-1,0],[Ce,1,0],[0,s,0],[-s,0,0],[-1,-Ce,0],[0,1,0],[-Ce,1,0],[-1,Ce,0],[-1,0,0]],o=new Ve(t,r),l=Be(o.T.bind(o),[-e,-e,0],[e,e,0]);h.push(new vt(function(t){let i=Array(t.length);for(let n=0;n<t.length;++n){let r=t[n];i[n]=o.T([e*r[0],e*r[1],0])}return i}(a),i,n,null,l[0],l[1]))},window.cylinder=function(t,e,i,n,r,s,a){let o,l,c=[[1,0,0],[1,0,1/3],[1,0,2/3],[1,0,1],[1,Ce,0],[1,Ce,1/3],[1,Ce,2/3],[1,Ce,1],[Ce,1,0],[Ce,1,1/3],[Ce,1,2/3],[Ce,1,1],[0,1,0],[0,1,1/3],[0,1,2/3],[0,1,1]],d=new Ve(t,s);function m(t){let e=Array(t.length);for(let n=0;n<t.length;++n){let r=t[n];e[n]=d.T([o*r[0],l*r[1],i*r[2]])}return e}let f=Be(d.T.bind(d),[-e,-e,0],[e,e,i]),u=f[0],p=f[1];for(let t=-1;t<=1;t+=2){o=t*e;for(let t=-1;t<=1;t+=2)l=t*e,h.push(new vt(m(c),n,r,null,u,p))}if(a){let e=d.T([0,0,i]);h.push(new wt([t,e],n,r,t,e))}},window.tube=function(t,e,i,n,r){let s=function(t,e,i,n,r){class s{constructor(t,e,i){this.p=t,this.r=e,this.t=i,this.s=Bt(i,e)}}let a=Number.EPSILON*Math.max(Ut(t),Ut(e),Ut(i),Ut(n));function o(r){if(1==r){let r=[n[0]-i[0],n[1]-i[1],n[2]-i[2]];return Ut(r)>a?St(r):(r=[2*i[0]-e[0]-n[0],2*i[1]-e[1]-n[1],2*i[2]-e[2]-n[2]],Ut(r)>a?St(r):[n[0]-t[0]+3*(e[0]-i[0]),n[1]-t[1]+3*(e[1]-i[1]),n[2]-t[2]+3*(e[2]-i[2])])}let s=[n[0]-t[0]+3*(e[0]-i[0]),n[1]-t[1]+3*(e[1]-i[1]),n[2]-t[2]+3*(e[2]-i[2])],o=[2*(t[0]+i[0])-4*e[0],2*(t[1]+i[1])-4*e[1],2*(t[2]+i[2])-4*e[2]],h=[e[0]-t[0],e[1]-t[1],e[2]-t[2]],l=r*r,c=[s[0]*l+o[0]*r+h[0],s[1]*l+o[1]*r+h[1],s[2]*l+o[2]*r+h[2]];return Ut(c)>a?St(c):(l=2*r,c=[s[0]*l+o[0],s[1]*l+o[1],s[2]*l+o[2]],Ut(c)>a?St(c):St(s))}let h=Array(r.length),l=[e[0]-t[0],e[1]-t[1],e[2]-t[2]];Ut(l)<a&&(l=[t[0]-2*e[0]+i[0],t[1]-2*e[1]+i[1],t[2]-2*e[2]+i[2]],Ut(l)<a&&(l=[n[0]-t[0]+3*(e[0]-i[0]),n[1]-t[1]+3*(e[1]-i[1]),n[2]-t[2]+3*(e[2]-i[2])])),l=St(l);let c=f!
 unction(t){let e=Bt(t,[0,1,0]),i=Number.EPSILON*Ut(t);return Ut(e)>i?St(e):(e=Bt(t,[0,0,1]),Ut(e)>i?St(e):[1,0,0])}(l);h[0]=new s(t,c,l);for(let a=1;a<r.length;++a){let l=h[a-1],c=r[a],d=1-c,m=d*d,f=m*d,u=3*c;m*=u,d*=u*c;let p=c*c*c,v=[f*t[0]+m*e[0]+d*i[0]+p*n[0],f*t[1]+m*e[1]+d*i[1]+p*n[1],f*t[2]+m*e[2]+d*i[2]+p*n[2]],x=[v[0]-l.p[0],v[1]-l.p[1],v[2]-l.p[2]];if(0!=x[0]||0!=x[1]||0!=x[2]){let t=l.r,e=St(x),i=l.t,n=Vt(e,i),r=[i[0]-2*n*e[0],i[1]-2*n*e[1],i[2]-2*n*e[2]];i=o(c);let d=2*Vt(e,t),m=[t[0]-d*e[0],t[1]-d*e[1],t[2]-d*e[2]],f=St([i[0]-r[0],i[1]-r[1],i[2]-r[2]]),u=2*Vt(f,m);m=[m[0]-u*f[0],m[1]-u*f[1],m[2]-u*f[2]],h[a]=new s(v,St(m),St(i))}else h[a]=h[a-1]}return h}(t[0],t[1],t[2],t[3],[0,1/3,2/3,1]),a=Ce*e,o=[[e,0],[e,a],[a,e],[0,e]];function l(e,r,a,l){let c=Array(16);for(let i=0;i<4;++i){let n=s[i],h=n.r[0],d=n.s[0],m=h*e+d*r,f=h*a+d*l;h=n.r[1],d=n.s[1];let u=h*e+d*r,p=h*a+d*l;h=n.r[2],d=n.s[2];let v=h*e+d*r,x=h*a+d*l,g=t[i],w=g[0];w1=g[1],w2=g[2];for(let t=0;t<4;++t){let e=o[t],n=e[0],r=e[1];c[4*i+t]=[m*n+f*r+w,u*n+p*r+w1,v*n+x*r+w2]}}h.push(new vt(c,i,n))}l(1,0,0,1),l(0,-1,1,0),l(-1,0,0,-1),l(0,1,-1,0),r&&h.push(new wt(t,i,n))},window.Positions=F,window.Normals=z,window.Colors=H,window.Indices=X}();

Modified: trunk/Master/texmf-dist/doc/asymptote/CAD.pdf
===================================================================
(Binary files differ)

Modified: trunk/Master/texmf-dist/doc/asymptote/TeXShopAndAsymptote.pdf
===================================================================
(Binary files differ)

Modified: trunk/Master/texmf-dist/doc/asymptote/asy-latex.pdf
===================================================================
(Binary files differ)

Modified: trunk/Master/texmf-dist/doc/asymptote/asyRefCard.pdf
===================================================================
(Binary files differ)

Modified: trunk/Master/texmf-dist/doc/asymptote/asymptote.pdf
===================================================================
(Binary files differ)

Modified: trunk/Master/texmf-dist/doc/asymptote/examples/AiryDisk.asy
===================================================================
--- trunk/Master/texmf-dist/doc/asymptote/examples/AiryDisk.asy	2025-02-10 15:30:00 UTC (rev 73846)
+++ trunk/Master/texmf-dist/doc/asymptote/examples/AiryDisk.asy	2025-02-10 16:49:00 UTC (rev 73847)
@@ -2,7 +2,7 @@
 import gsl;
 
 size(10cm,15cm,IgnoreAspect);
-currentprojection=orthographic(150,50,1);
+currentprojection=orthographic(dir(70,60));
 
 real f(pair z) {real r=abs(z); return r == 0 ? 1 : (2.0*J(1,r)/r)^2;}
 

Modified: trunk/Master/texmf-dist/doc/asymptote/examples/RiemannSphere.asy
===================================================================
--- trunk/Master/texmf-dist/doc/asymptote/examples/RiemannSphere.asy	2025-02-10 15:30:00 UTC (rev 73846)
+++ trunk/Master/texmf-dist/doc/asymptote/examples/RiemannSphere.asy	2025-02-10 16:49:00 UTC (rev 73847)
@@ -2,7 +2,6 @@
 import solids;
 
 currentlight=White;
-defaultrender.merge=true;
 
 size(10cm,0);
 

Modified: trunk/Master/texmf-dist/doc/asymptote/examples/RiemannSurface.asy
===================================================================
--- trunk/Master/texmf-dist/doc/asymptote/examples/RiemannSurface.asy	2025-02-10 15:30:00 UTC (rev 73846)
+++ trunk/Master/texmf-dist/doc/asymptote/examples/RiemannSurface.asy	2025-02-10 16:49:00 UTC (rev 73847)
@@ -4,7 +4,7 @@
 size(200,300,keepAspect=false);
 //settings.nothin=true;
 
-currentprojection=orthographic(10,10,30);
+currentprojection=orthographic(dir(70,60));
 currentlight=(10,10,5);
 triple f(pair t) {return (exp(t.x)*cos(t.y),exp(t.x)*sin(t.y),t.y);}
 

Modified: trunk/Master/texmf-dist/doc/asymptote/examples/RiemannSurfaceRoot.asy
===================================================================
--- trunk/Master/texmf-dist/doc/asymptote/examples/RiemannSurfaceRoot.asy	2025-02-10 15:30:00 UTC (rev 73846)
+++ trunk/Master/texmf-dist/doc/asymptote/examples/RiemannSurfaceRoot.asy	2025-02-10 16:49:00 UTC (rev 73847)
@@ -6,7 +6,7 @@
 
 size(200,300,keepAspect=false);
 
-currentprojection=orthographic(10,10,30);
+currentprojection=orthographic(dir(60,60));
 currentlight=(10,10,5);
 triple f(pair t) {return (t.x*cos(t.y),t.x*sin(t.y),t.x^(1/n)*sin(t.y/n));}
 

Modified: trunk/Master/texmf-dist/doc/asymptote/examples/arrows3.asy
===================================================================
--- trunk/Master/texmf-dist/doc/asymptote/examples/arrows3.asy	2025-02-10 15:30:00 UTC (rev 73846)
+++ trunk/Master/texmf-dist/doc/asymptote/examples/arrows3.asy	2025-02-10 16:49:00 UTC (rev 73847)
@@ -2,8 +2,6 @@
 
 size(15cm);
 
-defaultrender.merge=true;
-
 currentprojection=perspective(24,14,13);
 currentlight=light(gray(0.5),specularfactor=3,
                    (0.5,-0.5,-0.25),(0.5,0.5,0.25),(0.5,0.5,1),(-0.5,-0.5,-1));

Modified: trunk/Master/texmf-dist/doc/asymptote/examples/axis3.asy
===================================================================
--- trunk/Master/texmf-dist/doc/asymptote/examples/axis3.asy	2025-02-10 15:30:00 UTC (rev 73846)
+++ trunk/Master/texmf-dist/doc/asymptote/examples/axis3.asy	2025-02-10 16:49:00 UTC (rev 73847)
@@ -3,7 +3,7 @@
 size(0,200);
 size3(200,IgnoreAspect);
 
-currentprojection=perspective(5,2,2);
+currentprojection=perspective(dir(75,20));
 
 scale(Linear,Linear,Log);
 

Modified: trunk/Master/texmf-dist/doc/asymptote/examples/clockarray.asy
===================================================================
--- trunk/Master/texmf-dist/doc/asymptote/examples/clockarray.asy	2025-02-10 15:30:00 UTC (rev 73846)
+++ trunk/Master/texmf-dist/doc/asymptote/examples/clockarray.asy	2025-02-10 16:49:00 UTC (rev 73847)
@@ -3,8 +3,6 @@
 real xmargin=1cm;
 real ymargin=xmargin;
 
-size(settings.paperwidth,settings.paperheight);
-
 picture pic;
 real width=settings.paperwidth/nx-xmargin;
 real height=settings.paperheight/ny-ymargin;
@@ -36,4 +34,3 @@
 for(int i=0; i < nx; ++i)
   for(int j=0; j < ny; ++j)
     add(shift(realmult(size,(i,j)))*f);
-

Modified: trunk/Master/texmf-dist/doc/asymptote/examples/cyclohexane.asy
===================================================================
--- trunk/Master/texmf-dist/doc/asymptote/examples/cyclohexane.asy	2025-02-10 15:30:00 UTC (rev 73846)
+++ trunk/Master/texmf-dist/doc/asymptote/examples/cyclohexane.asy	2025-02-10 16:49:00 UTC (rev 73847)
@@ -36,8 +36,6 @@
 
 pen Black=gray(0.4);
 
-defaultrender=render(compression=Zero,merge=true);
-
 draw(shift(c1)*carbon,Black);
 draw(shift(c2)*carbon,Black);
 draw(shift(c3)*carbon,Black);
@@ -45,7 +43,6 @@
 draw(shift(c5)*carbon,Black);
 draw(shift(c6)*carbon,Black);
 
-
 material White=material(diffusepen=gray(0.4),emissivepen=gray(0.6));
 
 draw(shift(h1)*hydrogen,White);
@@ -61,7 +58,6 @@
 draw(shift(h11)*hydrogen,White);
 draw(shift(h12)*hydrogen,White);
 
-
 pen thick=linewidth(10);
 
 draw(c1--c2--c3--c4--c5--c6--cycle,thick);

Modified: trunk/Master/texmf-dist/doc/asymptote/examples/elevation.asy
===================================================================
--- trunk/Master/texmf-dist/doc/asymptote/examples/elevation.asy	2025-02-10 15:30:00 UTC (rev 73846)
+++ trunk/Master/texmf-dist/doc/asymptote/examples/elevation.asy	2025-02-10 16:49:00 UTC (rev 73847)
@@ -6,8 +6,6 @@
 
 size(400,300,IgnoreAspect);
 
-defaultrender.merge=true;
-
 real f(pair z) {return cos(2*pi*z.x)*sin(2*pi*z.y);}
 
 surface s=surface(f,(-1/2,-1/2),(1/2,1/2),50,Spline);

Modified: trunk/Master/texmf-dist/doc/asymptote/examples/extrudedcontour.asy
===================================================================
--- trunk/Master/texmf-dist/doc/asymptote/examples/extrudedcontour.asy	2025-02-10 15:30:00 UTC (rev 73846)
+++ trunk/Master/texmf-dist/doc/asymptote/examples/extrudedcontour.asy	2025-02-10 16:49:00 UTC (rev 73847)
@@ -2,9 +2,7 @@
 import palette;
 import graph3;
 
-defaultrender.merge=true;
-
-currentprojection=orthographic(25,10,10);
+currentprojection=orthographic(dir(60,25));
 size(0,12cm);
 real a=3;
 real b=4;
@@ -22,4 +20,3 @@
 s.colors(palette(s.map(zpart),Rainbow()+opacity(0.5)));
 draw(s);
 axes3("$x$","$y$","$z$",Arrow3);
-

Modified: trunk/Master/texmf-dist/doc/asymptote/examples/filesurface.asy
===================================================================
--- trunk/Master/texmf-dist/doc/asymptote/examples/filesurface.asy	2025-02-10 15:30:00 UTC (rev 73846)
+++ trunk/Master/texmf-dist/doc/asymptote/examples/filesurface.asy	2025-02-10 16:49:00 UTC (rev 73847)
@@ -3,34 +3,21 @@
 
 size3(200,IgnoreAspect);
 
+currentprojection=perspective(dir(68,225));
+
 file in=input("filesurface.dat").line();
 real[] x=in;
 real[] y=in;
 real[][] z=in;
 
-surface s=surface(z,x,y,linear,linear);
-real[] level=uniform(min(z)*(1-sqrtEpsilon),max(z)*(1+sqrtEpsilon),4);
+surface s=surface(z,x,y);
+real[] level=uniform(min(z)*(1-sqrtEpsilon),max(z)*(1+sqrtEpsilon),256);
 
 s.colors(palette(s.map(new real(triple v) {return find(level >= v.z);}),
                  Rainbow()));
 
-draw(s,meshpen=thick(),render(merge=true));
+draw(s,meshpen=thick(),render(tessellate=true));
 
-triple m=currentpicture.userMin();
-triple M=currentpicture.userMax();
-triple target=0.5*(m+M);
-
 xaxis3("$x$",Bounds,InTicks);
 yaxis3("$y$",Bounds,InTicks(Step=1,step=0.1));
 zaxis3("$z$",Bounds,InTicks);
-
-/*
-  picture palette;
-  size3(palette,1cm);
-  draw(palette,unitcube,red);
-  frame F=palette.fit3();
-  add(F,(M.x,m.y,m.z));
-*/
-
-currentprojection=perspective(camera=target+realmult(dir(68,225),M-m),
-                              target=target);

Modified: trunk/Master/texmf-dist/doc/asymptote/examples/fillcontour.asy
===================================================================
--- trunk/Master/texmf-dist/doc/asymptote/examples/fillcontour.asy	2025-02-10 15:30:00 UTC (rev 73846)
+++ trunk/Master/texmf-dist/doc/asymptote/examples/fillcontour.asy	2025-02-10 16:49:00 UTC (rev 73847)
@@ -21,9 +21,6 @@
 
 bounds range=image(f,Automatic,a,b,3N,Palette,n);
 
-real[] Cvals=uniform(range.min,range.max,Divs);
-draw(contour(f,a,b,Cvals,N,operator --),Tickpen+squarecap+beveljoin);
-
 // Major contours
 real[] Cvals=uniform(range.min,range.max,Divs);
 draw(contour(f,a,b,Cvals,N,operator --),Tickpen+squarecap+beveljoin);

Modified: trunk/Master/texmf-dist/doc/asymptote/examples/gamma3.asy
===================================================================
--- trunk/Master/texmf-dist/doc/asymptote/examples/gamma3.asy	2025-02-10 15:30:00 UTC (rev 73846)
+++ trunk/Master/texmf-dist/doc/asymptote/examples/gamma3.asy	2025-02-10 16:49:00 UTC (rev 73847)
@@ -2,7 +2,7 @@
 import palette;
 
 size(12cm,IgnoreAspect);
-currentprojection=orthographic(1,-2,1);
+currentprojection=orthographic(dir(80,290));
 
 real X=4.5;
 real M=abs(gamma((X,0)));
@@ -22,7 +22,7 @@
 }
 
 s.colors(palette(s.map(Arg),Wheel()));
-draw(s,render(compression=Low,merge=true));
+draw(s,render(tessellate=false));
 
 real xmin=point((-1,-1,-1)).x;
 real xmax=point((1,1,1)).x;

Modified: trunk/Master/texmf-dist/doc/asymptote/examples/intro.asy
===================================================================
--- trunk/Master/texmf-dist/doc/asymptote/examples/intro.asy	2025-02-10 15:30:00 UTC (rev 73846)
+++ trunk/Master/texmf-dist/doc/asymptote/examples/intro.asy	2025-02-10 16:49:00 UTC (rev 73847)
@@ -1,7 +1,7 @@
+settings.tex="pdflatex";
+
 orientation=Landscape;
 
-settings.tex="pdflatex";
-
 import slide;
 import three;
 import animate;
@@ -10,14 +10,15 @@
 
 usepackage("mflogo");
 
+viewportsize=pagewidth-2pagemargin;
+
 usersetting();
 
-viewportsize=pagewidth-2pagemargin;
-
-// To generate bibliographic references:
+// Commands to generate optional bibtex citations:
 // asy -k intro
-// bibtex intro_ 
+// bibtex intro_
 // asy -k intro
+
 bibliographystyle("alpha");
 
 itempen=fontsize(22pt);
@@ -30,7 +31,7 @@
 "Department of Mathematical and Statistical Sciences\\
           University of Alberta\\
 %and Instituto Nacional de Matem\'atica Pura e Aplicada (IMPA)
-\medskip\Green{Collaborators: Orest Shardt, Michail Vidiassov}",
+\smallskip\Green{Collaborators: Orest Shardt, Michail Vidiassov}",
 "June 30, 2010",
 "https://asymptote.sourceforge.io/intro.pdf");
 
@@ -196,6 +197,7 @@
 add(output, currentpicture.fit(), (+0.5inch, 0), E);
 restore();
 
+erase(); // Suppress implicit shipout of currentpicture.
 shipout(output);
 "));
 
@@ -350,7 +352,7 @@
 title("Hobby's 2D Control Point Algorithm");
 item("Having prescribed outgoing and incoming path directions $e^{i\theta}$
 at node~$z_0$ and $e^{i\phi}$ at node $z_1$ relative to the
-vector $z_1-z_0$, the control points are determined as:");  
+vector $z_1-z_0$, the control points are determined as:");
 
 equations("u&=&z_0+e^{i\theta}(z_1-z_0)f(\theta,-\phi),\nonumber\\
 v&=&z_1-e^{i\phi}(z_1-z_0)f(-\phi,\theta),");
@@ -390,7 +392,7 @@
 item("Determine directions by applying Hobby's algorithm in the plane containing $z_{k-1}$, $z_k$, $z_{k+1}$.");
 
 // Reformulate Hobby's equations in terms of the angle $\psi_k=$
-item("The only ambiguity that can arise is the overall sign of the angles, which relates to viewing each 2D plane from opposing normal directions."); 
+item("The only ambiguity that can arise is the overall sign of the angles, which relates to viewing each 2D plane from opposing normal directions.");
 
 item("A reference vector based on the mean unit normal of successive segments can be used to resolve such ambiguities \cite{Bowman07,Bowman09}");
 
@@ -436,66 +438,16 @@
 asyinclude("../examples/sinc",25cm);
 
 title("Curved 3D Arrows");
-asyinclude("../examples/arrows3",20cm);
+asyinclude("../examples/arrows3",16cm);
 
 title("Slide Presentations");
 item("Asymptote has a module for preparing slides.");
-item("It even supports embedded high-resolution PDF movies.");
 
 code('
 title("Slide Presentations");
 item("Asymptote has a module for preparing slides.");
-item("It even supports embedded high-resolution PDF movies.");
 ');
-remark("\quad\ldots");
 
-import graph;
-
-pen p=linewidth(1);
-pen dotpen=linewidth(5);
-
-pair wheelpoint(real t) {return (t+cos(t),-sin(t));}
-
-guide wheel(guide g=nullpath, real a, real b, int n)
-{
-  real width=(b-a)/n;
-  for(int i=0; i <= n; ++i) {
-    real t=a+width*i;
-    g=g--wheelpoint(t);
-  }
-  return g;
-}
-
-real t1=0; 
-real t2=t1+2*pi;
-
-picture base;
-draw(base,circle((0,0),1),p);
-draw(base,wheel(t1,t2,100),p+linetype("0 2"));
-yequals(base,Label("$y=-1$",1.0),-1,extend=true,p+linetype("4 4"));
-xaxis(base,Label("$x$",align=3SW),0,p);
-yaxis(base,"$y$",0,1.3,p);
-pair z1=wheelpoint(t1);
-pair z2=wheelpoint(t2);
-dot(base,z1,dotpen);
-dot(base,z2,dotpen);
-
-animation a;
-
-int n=25;
-real dt=(t2-t1)/n;
-for(int i=0; i <= n; ++i) {
-  picture pic;
-  size(pic,24cm);
-  real t=t1+dt*i;
-  add(pic,base);
-  draw(pic,circle((t,0),1),p+red);
-  dot(pic,wheelpoint(t),dotpen);
-  a.add(pic);
-}
-
-display(a.pdf(delay=150,"controls"));
-
 title("Automatic Sizing");
 item("Figures can be specified in user coordinates, then
     automatically scaled to the desired final size.");
@@ -584,6 +536,7 @@
 frame f;
 label(f, \"$E=mc^2$\", p);
 draw(f, box(min(f),max(f)));
+erase(); // Suppress implicit shipout of currentpicture.
 shipout(f);
 "));
 
@@ -681,7 +634,7 @@
     number of arguments:");
 code("
 int sum(... int[] nums) {
-  int total=0; 
+  int total=0;
   for(int i=0; i < nums.length; ++i)
     total += nums[i];
   return total;

Modified: trunk/Master/texmf-dist/doc/asymptote/examples/pdb.asy
===================================================================
--- trunk/Master/texmf-dist/doc/asymptote/examples/pdb.asy	2025-02-10 15:30:00 UTC (rev 73846)
+++ trunk/Master/texmf-dist/doc/asymptote/examples/pdb.asy	2025-02-10 16:49:00 UTC (rev 73847)
@@ -7,8 +7,9 @@
 currentlight=White;
 //currentlight=nolight;
 
-defaultrender.merge=true;  // Fast low-quality rendering
-//defaultrender.merge=false; // Slow high-quality rendering
+//defaultrender.merge=true;  // Fast low-quality PRC rendering
+//defaultrender.merge=false; // Slow high-quality PRC rendering
+
 bool pixel=false; // Set to true to draw dots as pixels.
 real width=6;
 

Modified: trunk/Master/texmf-dist/doc/asymptote/examples/projectelevation.asy
===================================================================
--- trunk/Master/texmf-dist/doc/asymptote/examples/projectelevation.asy	2025-02-10 15:30:00 UTC (rev 73846)
+++ trunk/Master/texmf-dist/doc/asymptote/examples/projectelevation.asy	2025-02-10 16:49:00 UTC (rev 73847)
@@ -2,9 +2,10 @@
 import grid3;
 import palette;
 
-currentprojection=orthographic(0.8,1,2);
 size(400,300,IgnoreAspect);
 
+currentprojection=orthographic(dir(50,50));
+
 real f(pair z) {return cos(2*pi*z.x)*sin(2*pi*z.y);}
 
 surface s=surface(f,(-1/2,-1/2),(1/2,1/2),50,Spline);
@@ -12,6 +13,6 @@
 surface S=planeproject(unitsquare3)*s;
 S.colors(palette(s.map(zpart),Rainbow()));
 draw(S,nolight);
-draw(s,lightgray+opacity(0.7));
+draw(s,lightgray+opacity(0.7),render(tessellate=false));
 
 grid3(XYZgrid);

Modified: trunk/Master/texmf-dist/doc/asymptote/examples/slidedemo.asy
===================================================================
--- trunk/Master/texmf-dist/doc/asymptote/examples/slidedemo.asy	2025-02-10 15:30:00 UTC (rev 73846)
+++ trunk/Master/texmf-dist/doc/asymptote/examples/slidedemo.asy	2025-02-10 16:49:00 UTC (rev 73847)
@@ -1,3 +1,5 @@
+settings.tex="pdflatex";
+
 // Slide demo.
 // Command-line options to enable stepping and/or reverse video:
 // asy [-u stepping=true] [-u reverse=true] [-u itemstep=true] slidedemo

Modified: trunk/Master/texmf-dist/doc/asymptote/examples/slope.asy
===================================================================
--- trunk/Master/texmf-dist/doc/asymptote/examples/slope.asy	2025-02-10 15:30:00 UTC (rev 73846)
+++ trunk/Master/texmf-dist/doc/asymptote/examples/slope.asy	2025-02-10 16:49:00 UTC (rev 73847)
@@ -37,7 +37,7 @@
 
 for(int i=0; i < n-1; ++i) {
   real dt=(b-a)*lambda^(n-i);
-  Solution S=integrate(Y0,L,F,a,b,dt,dynamic=false,0.0002,0.0004,ERK3BS,verbose=false);
+  Solution S=integrate(Y0,G,a,b,dt,dynamic=false,0.0002,0.0004,RK3BS,verbose=false);
   real maxnorm=0;
 
   Solution E=integrate(Y0,G,a,b,1e-2*dt,dynamic=false,0.0002,0.0004,RK5);

Modified: trunk/Master/texmf-dist/doc/asymptote/examples/smoothelevation.asy
===================================================================
--- trunk/Master/texmf-dist/doc/asymptote/examples/smoothelevation.asy	2025-02-10 15:30:00 UTC (rev 73846)
+++ trunk/Master/texmf-dist/doc/asymptote/examples/smoothelevation.asy	2025-02-10 16:49:00 UTC (rev 73847)
@@ -6,7 +6,7 @@
 
 if(settings.render <= 0) settings.prc=false;
 
-currentprojection=orthographic(1,2,13);
+currentprojection=orthographic(dir(40,60));
 
 size(400,300,IgnoreAspect);
 
@@ -15,7 +15,7 @@
 surface s=surface(f,(-1/2,-1/2),(1/2,1/2),20,Spline);
 s.colors(palette(s.map(zpart),Rainbow()));
 
-draw(s);
+draw(s,render(tessellate=false));
 
 scale(true);
 

Modified: trunk/Master/texmf-dist/doc/asymptote/examples/soccerball.asy
===================================================================
--- trunk/Master/texmf-dist/doc/asymptote/examples/soccerball.asy	2025-02-10 15:30:00 UTC (rev 73846)
+++ trunk/Master/texmf-dist/doc/asymptote/examples/soccerball.asy	2025-02-10 16:49:00 UTC (rev 73847)
@@ -3,8 +3,6 @@
 currentlight.background=palegreen;
 settings.digits=15;
 
-defaultrender=render(compression=Zero,merge=true);
-
 real c=(1+sqrt(5))/2;
 
 triple[] z={(c,1,0),(-c,1,0),(-c,-1,0),(c,-1,0)};

Modified: trunk/Master/texmf-dist/doc/asymptote/examples/splitpatch.asy
===================================================================
--- trunk/Master/texmf-dist/doc/asymptote/examples/splitpatch.asy	2025-02-10 15:30:00 UTC (rev 73846)
+++ trunk/Master/texmf-dist/doc/asymptote/examples/splitpatch.asy	2025-02-10 16:49:00 UTC (rev 73847)
@@ -80,8 +80,6 @@
 
 split S=split(B,A);
 
-defaultrender.merge=true;
-
 for(int i=0; i < S.S[0].s.length; ++i)
   draw(surface(S.S[0].s[i]),Pen(i));
 

Modified: trunk/Master/texmf-dist/doc/asymptote/examples/teapot.asy
===================================================================
--- trunk/Master/texmf-dist/doc/asymptote/examples/teapot.asy	2025-02-10 15:30:00 UTC (rev 73846)
+++ trunk/Master/texmf-dist/doc/asymptote/examples/teapot.asy	2025-02-10 16:49:00 UTC (rev 73847)
@@ -202,13 +202,14 @@
   }
 };
 
-surface regularize(triple[][] P, real fraction=0.02)
+
+surface regularize(triple[][] P, real fraction=0.002)
 {
   triple[][][] B=hsplit(P,fraction);
   triple[][] T=B[0];
-  surface s=surface(T[0][0]..controls T[0][1] and T[0][2]..
-                    T[0][3]..controls T[1][3] and T[2][3]..
-                    T[3][3]..controls T[3][2] and T[3][1]..cycle);
+  surface s=surface(T[0][0]..controls T[3][1] and T[3][2]..
+                    T[3][3]..controls T[2][3] and T[1][3]..
+                            T[0][3]..controls T[0][2] and T[0][1]..cycle);
   s.append(surface(patch(B[1])));
   return s;
 }
@@ -216,6 +217,7 @@
 surface S=surface(Q);
 for(triple[][] q : Q0)
   S.append(regularize(q));
+// S.append(surface(patch(q)));
 
 pen color;
 real metallic;

Modified: trunk/Master/texmf-dist/doc/asymptote/examples/truncatedIcosahedron.asy
===================================================================
--- trunk/Master/texmf-dist/doc/asymptote/examples/truncatedIcosahedron.asy	2025-02-10 15:30:00 UTC (rev 73846)
+++ trunk/Master/texmf-dist/doc/asymptote/examples/truncatedIcosahedron.asy	2025-02-10 16:49:00 UTC (rev 73847)
@@ -2,8 +2,6 @@
 
 size(200);
 
-defaultrender.merge=true;
-
 real c=(1+sqrt(5))/2;
 
 triple[] z={(c,1,0),(-c,1,0),(-c,-1,0),(c,-1,0)};
@@ -64,6 +62,3 @@
   draw(surface(reverse(operator--(...fiveout)--cycle)^^
                operator--(...fivein)--cycle,planar=true),cyan);
 }
-
-
-

Modified: trunk/Master/texmf-dist/doc/asymptote/examples/twistedtubes.asy
===================================================================
--- trunk/Master/texmf-dist/doc/asymptote/examples/twistedtubes.asy	2025-02-10 15:30:00 UTC (rev 73846)
+++ trunk/Master/texmf-dist/doc/asymptote/examples/twistedtubes.asy	2025-02-10 16:49:00 UTC (rev 73847)
@@ -22,8 +22,6 @@
 s3.colors(palette(s3.map(f),Rainbow));
 s4.colors(palette(s4.map(f),Rainbow));
 
-defaultrender.merge=true;
-
 draw(s1);
 draw(s2);
 draw(s3);

Modified: trunk/Master/texmf-dist/doc/asymptote/examples/venn.asy
===================================================================
--- trunk/Master/texmf-dist/doc/asymptote/examples/venn.asy	2025-02-10 15:30:00 UTC (rev 73846)
+++ trunk/Master/texmf-dist/doc/asymptote/examples/venn.asy	2025-02-10 16:49:00 UTC (rev 73847)
@@ -31,6 +31,6 @@
 draw(Label("$A\cap B$",0),conj(z)--z0,Arrow,BigMargin);
 draw(Label("$A\cup B$",0),z--z0,Arrow,BigMargin);
 draw(z--z1,Arrow,Margin(0,m));
-draw(z--z2,Arrow,Margin(0,m));
+draw(KEY="34.5",z--z2,Arrow,Margin(0,m));
 
 shipout(bbox(0.25cm));

Modified: trunk/Master/texmf-dist/doc/info/asy-faq.info
===================================================================
--- trunk/Master/texmf-dist/doc/info/asy-faq.info	2025-02-10 15:30:00 UTC (rev 73846)
+++ trunk/Master/texmf-dist/doc/info/asy-faq.info	2025-02-10 16:49:00 UTC (rev 73847)
@@ -10,7 +10,7 @@
 File: asy-faq.info, Node: Top, Next: Question 1.1, Up: (dir)
 
             ASYMPTOTE FREQUENTLY ASKED QUESTIONS
-                            2024-03-08
+                            2025-02-09
                           
 This is the list of Frequently Asked Questions about Asymptote (asy).
 

Modified: trunk/Master/texmf-dist/doc/info/asymptote.info
===================================================================
--- trunk/Master/texmf-dist/doc/info/asymptote.info	2025-02-10 15:30:00 UTC (rev 73846)
+++ trunk/Master/texmf-dist/doc/info/asymptote.info	2025-02-10 16:49:00 UTC (rev 73847)
@@ -1,11 +1,11 @@
-This is asymptote.info, produced by makeinfo version 7.0.2 from
+This is asymptote.info, produced by makeinfo version 7.1 from
 asymptote.texi.
 
-This file documents ‘Asymptote’, version 2.88.
+This file documents ‘Asymptote’, version 2.98.
 
    <https://asymptote.sourceforge.io>
 
-   Copyright © 2004-24 Andy Hammerlindl, John Bowman, and Tom Prince.
+   Copyright © 2004-25 Andy Hammerlindl, John Bowman, and Tom Prince.
 
      Permission is granted to copy, distribute and/or modify this
      document under the terms of the GNU Lesser General Public License
@@ -17,16 +17,16 @@
 END-INFO-DIR-ENTRY
 
 
-File: asymptote.info,  Node: Top,  Next: Description,  Prev: (dir),  Up: (dir)
+File: asymptote.info,  Node: Top,  Next: Description,  Up: (dir)
 
 Asymptote
 *********
 
-This file documents ‘Asymptote’, version 2.88.
+This file documents ‘Asymptote’, version 2.98.
 
    <https://asymptote.sourceforge.io>
 
-   Copyright © 2004-24 Andy Hammerlindl, John Bowman, and Tom Prince.
+   Copyright © 2004-25 Andy Hammerlindl, John Bowman, and Tom Prince.
 
      Permission is granted to copy, distribute and/or modify this
      document under the terms of the GNU Lesser General Public License
@@ -53,7 +53,7 @@
 * Credits::                     Contributions and acknowledgments
 * Index::                       General index
 
- — The Detailed Node Listing —
+ -- The Detailed Node Listing --
 
 Installation
 
@@ -65,6 +65,7 @@
 * Compiling from UNIX source::  Building ‘Asymptote’ from scratch
 * Editing modes::               Convenient ‘emacs’ and ‘vim’ modes
 * Git::                         Getting the latest development source
+* Building the documentation::  Building the documentation
 * Uninstall::                   Goodbye, ‘Asymptote’!
 
 Tutorial
@@ -89,12 +90,13 @@
 * Pens::                        Colors, line types, line widths, font sizes
 * Transforms::                  Affine transforms
 * Frames and pictures::         Canvases for immediate and deferred drawing
+* Deferred drawing::            Witholding drawing until all data is available
 * Files::                       Reading and writing your data
 * Variable initializers::       Initialize your variables
 * Structures::                  Organize your data
 * Operators::                   Arithmetic and logical operators
 * Implicit scaling::            Avoiding those ugly *s
-* Functions::                   Traditional and high-order functions
+* Functions::                   Traditional and higher-order functions
 * Arrays::                      Dynamic vectors
 * Casts::                       Implicit and explicit casts
 * Import::                      Importing external ‘Asymptote’ modules
@@ -125,7 +127,8 @@
 
 * plain::                       Default ‘Asymptote’ base file
 * simplex::                     Linear programming: simplex method
-* math::                        Extend ‘Asymptote’’s math capabilities
+* simplex2::                    Two-variable simplex method
+* math::                        Extend ‘Asymptote’'s math capabilities
 * interpolate::                 Interpolation routines
 * geometry::                    Geometry routines
 * trembling::                   Wavy lines
@@ -181,9 +184,9 @@
 document consistency, yielding the same high-quality level of
 typesetting that ‘LaTeX’ provides for scientific text.  By default it
 produces ‘PostScript’ output, but it can also generate ‘OpenGL’, ‘PDF’,
-‘SVG’, ‘WebGL’, ‘V3D’, and ‘PRC’ vector graphics, along with any format
-that the ‘ImageMagick’ package can produce.  You can even try it out in
-your Web browser without installing it, using the ‘Asymptote Web
+‘SVG’, ‘WebGL’, ‘V3D’, and legacy ‘PRC’ vector graphics, along with any
+format that the ‘ImageMagick’ package can produce.  You can even try it
+out in your Web browser without installing it, using the ‘Asymptote Web
 Application’
 
    <http://asymptote.ualberta.ca>
@@ -280,6 +283,7 @@
 * Compiling from UNIX source::  Building ‘Asymptote’ from scratch
 * Editing modes::               Convenient ‘emacs’ and ‘vim’ modes
 * Git::                         Getting the latest development source
+* Building the documentation::  Building the documentation
 * Uninstall::                   Goodbye, ‘Asymptote’!
 
 After following the instructions for your specific distribution, please
@@ -291,7 +295,7 @@
      <https://sourceforge.net/p/asymptote/discussion/409349>
 
 
-File: asymptote.info,  Node: UNIX binary distributions,  Next: MacOS X binary distributions,  Prev: Installation,  Up: Installation
+File: asymptote.info,  Node: UNIX binary distributions,  Next: MacOS X binary distributions,  Up: Installation
 
 2.1 UNIX binary distributions
 =============================
@@ -312,7 +316,7 @@
 To install the latest version of ‘Asymptote’ on a Debian-based
 distribution (e.g. Ubuntu, Mepis, Linspire) follow the instructions for
 compiling from ‘UNIX’ source (*note Compiling from UNIX source::).
-Alternatively, Debian users can install one of Hubert Chan’s prebuilt
+Alternatively, Debian users can install one of Hubert Chan's prebuilt
 ‘Asymptote’ binaries from
      <http://ftp.debian.org/debian/pool/main/a/asymptote>
 
@@ -358,7 +362,7 @@
 <https://www.imagemagick.org/script/binary-releases.php>
 
 is required to support output formats other than HTML, PDF, SVG, and PNG
-(*note convert::).  The ‘Python 3’ interpreter from
+(*note magick::).  The ‘Python 3’ interpreter from
 <https://www.python.org> is only required if you wish to try out the
 graphical user interface (*note GUI::).
 
@@ -483,7 +487,7 @@
      by ‘:’ under UNIX and ‘;’ under ‘MSDOS’);
   3. The directory specified by the environment variable
      ‘ASYMPTOTE_HOME’; if this variable is not set, the directory ‘.asy’
-     in the user’s home directory (‘%USERPROFILE%\.asy’ under ‘MSDOS’)
+     in the user's home directory (‘%USERPROFILE%\.asy’ under ‘MSDOS’)
      is used;
   4. The ‘Asymptote’ system directory (by default,
      ‘/usr/local/share/asymptote’ under ‘UNIX’ and ‘C:\Program
@@ -559,7 +563,7 @@
 spectrum).  The ‘GSL’ library is only required if you require the
 special functions that it supports.
 
-   If you don’t want to install ‘Asymptote’ system wide, just make sure
+   If you don't want to install ‘Asymptote’ system wide, just make sure
 the compiled binary ‘asy’ and GUI script ‘xasy’ are in your path and set
 the configuration variable ‘dir’ to point to the directory ‘base’ (in
 the top level directory of the ‘Asymptote’ source code).
@@ -606,7 +610,7 @@
 augroup END
 filetype plugin on
 
-   If any of these directories or files don’t exist, just create them.
+   If any of these directories or files don't exist, just create them.
 To set ‘vim’ up to run the current asymptote script using ‘:make’ just
 add to ‘~/.vim/ftplugin/asy.vim’:
 setlocal makeprg=asy\ %
@@ -618,7 +622,7 @@
 ‘~/.local/share/org.kde.syntax-highlighting/syntax/’.
 
 
-File: asymptote.info,  Node: Git,  Next: Uninstall,  Prev: Editing modes,  Up: Installation
+File: asymptote.info,  Node: Git,  Next: Building the documentation,  Prev: Editing modes,  Up: Installation
 
 2.8 Git
 =======
@@ -633,18 +637,34 @@
 make all
 make install
 
-To compile without optimization, use the command ‘make CFLAGS=-g’.  On
-‘Ubuntu’ systems, you may need to first install the required
-dependencies:
+To compile without optimization On ‘Ubuntu’ systems, you may need to
+first install the required dependencies:
 apt-get build-dep asymptote
 
 
-File: asymptote.info,  Node: Uninstall,  Prev: Git,  Up: Installation
+File: asymptote.info,  Node: Building the documentation,  Next: Uninstall,  Prev: Git,  Up: Installation
 
-2.9 Uninstall
-=============
+2.9 Building the documentation
+==============================
 
-To uninstall a ‘Linux x86_64’ binary distribution, use the commands
+Here are instructions for building the documentation:
+cd doc
+make  # for both the PDF version doc/asymptote.pdf and the HTML version
+cd png
+make  # for the HTML version only: doc/png/index.html
+   Note that the ‘HTML’ version cannot be built without executing ‘make’
+from ‘doc’ folder first.
+
+   The ‘asy’ executable is required for compiling the diagrams in the
+documentation.
+
+
+File: asymptote.info,  Node: Uninstall,  Prev: Building the documentation,  Up: Installation
+
+2.10 Uninstall
+==============
+
+To uninstall a ‘Linux x86_64’ binary distribution
 tar -zxvf asymptote-x.xx.x86_64.tgz | xargs --replace=% rm /%
 texhash
 
@@ -678,7 +698,7 @@
    <https://www.artofproblemsolving.com/wiki/?title=Asymptote_(Vector_Graphics_Language)>
 
 
-File: asymptote.info,  Node: Drawing in batch mode,  Next: Drawing in interactive mode,  Prev: Tutorial,  Up: Tutorial
+File: asymptote.info,  Node: Drawing in batch mode,  Next: Drawing in interactive mode,  Up: Tutorial
 
 3.1 Drawing in batch mode
 =========================
@@ -711,12 +731,13 @@
 
 Another method is _interactive mode_, where ‘Asymptote’ reads individual
 commands as they are entered by the user.  To try this out, enter
-‘Asymptote’’s interactive mode by clicking on the ‘Asymptote’ icon or
+‘Asymptote’'s interactive mode by clicking on the ‘Asymptote’ icon or
 typing the command ‘asy’.  Then type
 draw((0,0)--(100,100));
-followed by ‘Enter’, to obtain the above image.  At this point you can
-type further ‘draw’ commands, which will be added to the displayed
-figure, ‘erase’ to clear the canvas,
+followed by ‘Enter’, to obtain the above image.
+
+   At this point you can type further ‘draw’ commands, which will be
+added to the displayed figure, ‘erase’ to clear the canvas,
 input test;
 to execute all of the commands contained in the file ‘test.asy’, or
 ‘quit’ to exit interactive mode.  You can use the arrow keys in
@@ -871,7 +892,7 @@
 4 Drawing commands
 ******************
 
-All of ‘Asymptote’’s graphical capabilities are based on four primitive
+All of ‘Asymptote’'s graphical capabilities are based on four primitive
 commands.  The three ‘PostScript’ drawing commands ‘draw’, ‘fill’, and
 ‘clip’ add objects to a picture in the order in which they are executed,
 with the most recently drawn object appearing on top.  The labeling
@@ -907,7 +928,7 @@
 * label::                       Label a point on a picture
 
 
-File: asymptote.info,  Node: draw,  Next: fill,  Prev: Drawing commands,  Up: Drawing commands
+File: asymptote.info,  Node: draw,  Next: fill,  Up: Drawing commands
 
 4.1 draw
 ========
@@ -925,8 +946,8 @@
 order.  The argument ‘legend’ is a Label to use in constructing an
 optional legend entry.
 
-   Bars are useful for indicating dimensions.  The possible values of
-‘bar’ are ‘None’, ‘BeginBar’, ‘EndBar’ (or equivalently ‘Bar’), and
+   Bars ‘bar’ are useful for indicating dimensions.  The possible values
+of ‘bar’ are ‘None’, ‘BeginBar’, ‘EndBar’ (or equivalently ‘Bar’), and
 ‘Bars’ (which draws a bar at both ends of the path).  Each of these bar
 specifiers (except for ‘None’) will accept an optional real argument
 that denotes the length of the bar in ‘PostScript’ coordinates.  The
@@ -935,38 +956,72 @@
    The possible values of ‘arrow’ are ‘None’, ‘Blank’ (which draws no
 arrows or path), ‘BeginArrow’, ‘MidArrow’, ‘EndArrow’ (or equivalently
 ‘Arrow’), and ‘Arrows’ (which draws an arrow at both ends of the path).
-All of the arrow specifiers except for ‘None’ and ‘Blank’ may be given
-the optional arguments arrowhead ‘arrowhead’ (one of the predefined
-arrowhead styles ‘DefaultHead’, ‘SimpleHead’, ‘HookHead’, ‘TeXHead’),
-real ‘size’ (arrowhead size in ‘PostScript’ coordinates), real ‘angle’
-(arrowhead angle in degrees), filltype ‘filltype’ (one of ‘FillDraw’,
-‘Fill’, ‘NoFill’, ‘UnFill’, ‘Draw’) and (except for ‘MidArrow’ and
-‘Arrows’) a real ‘position’ (in the sense of ‘point(path p, real t)’)
-along the path where the tip of the arrow should be placed.  The default
-arrowhead size when drawn with a pen ‘p’ is ‘arrowsize(p)’.  There are
-also arrow versions with slightly modified default values of ‘size’ and
-‘angle’ suitable for curved arrows: ‘BeginArcArrow’, ‘EndArcArrow’ (or
-equivalently ‘ArcArrow’), ‘MidArcArrow’, and ‘ArcArrows’.
 
-   Margins can be used to shrink the visible portion of a path by
-‘labelmargin(p)’ to avoid overlap with other drawn objects.  Typical
-values of ‘margin’ are ‘NoMargin’, ‘BeginMargin’, ‘EndMargin’ (or
-equivalently ‘Margin’), and ‘Margins’ (which leaves a margin at both
-ends of the path).  One may use ‘Margin(real begin, real end=begin)’ to
-specify the size of the beginning and ending margin, respectively, in
-multiples of the units ‘labelmargin(p)’ used for aligning labels.
-Alternatively, ‘BeginPenMargin’, ‘EndPenMargin’ (or equivalently
-‘PenMargin’), ‘PenMargins’, ‘PenMargin(real begin, real end=begin)’
-specify a margin in units of the pen line width, taking account of the
-pen line width when drawing the path or arrow.  For example, use
-‘DotMargin’, an abbreviation for
-‘PenMargin(-0.5*dotfactor,0.5*dotfactor)’, to draw from the usual
-beginning point just up to the boundary of an end dot of width
-‘dotfactor*linewidth(p)’.  The qualifiers ‘BeginDotMargin’,
-‘EndDotMargin’, and ‘DotMargins’ work similarly.  The qualifier
-‘TrueMargin(real begin, real end=begin)’ allows one to specify a margin
-directly in ‘PostScript’ units, independent of the pen line width.
+   There are also arrow versions with slightly modified default values
+of ‘size’ and ‘angle’ suitable for curved arrows: ‘BeginArcArrow’,
+‘EndArcArrow’ (or equivalently ‘ArcArrow’), ‘MidArcArrow’, and
+‘ArcArrows’.
 
+   For example:
+draw((0,0)--(1,1),arrow=Arrows);
+
+   All of the arrow specifiers except for ‘None’ and ‘Blank’ may be
+given optional arguments, for example:
+draw((0,0)--(1,1),arrow=Arrow(
+     arrowhead=HookHead,size=3mm,angle=20,filltype=Draw,position=0.9));
+
+   The function ‘Arrow’ has the signature
+arrowbar Arrow(arrowhead arrowhead=DefaultHead,
+               real size=0, real angle=arrowangle,
+               filltype filltype=null, position position=EndPoint)
+Calling ‘Arrow()’ returns ‘Arrow’, which is an ‘arrowbar’ object.  The
+parameters are:
+
+   • ‘arrowhead’ can be one of the predefined arrowhead styles
+     ‘DefaultHead’, ‘SimpleHead’, ‘HookHead’, ‘TeXHead’.
+   • real ‘size’ is the arrowhead size in ‘PostScript’ coordinates.
+
+     The default arrowhead size when drawn with a pen ‘p’ is
+     ‘arrowsize(p)’.
+   • real ‘angle’ is the arrowhead angle in degrees.
+
+   • filltype ‘filltype’ (*note filltype::),
+   • (except for ‘MidArrow’ and ‘Arrows’) real ‘position’ (in the sense
+     of ‘point(path p, real t)’) along the path where the tip of the
+     arrow should be placed.
+
+   Margins ‘margin’ can be used to shrink the visible portion of a path
+by ‘labelmargin(p)’ to avoid overlap with other drawn objects.
+
+   Typical values of ‘margin’ are:
+‘NoMargin’
+‘BeginMargin’
+‘EndMargin’
+     (equivalently ‘Margin’)
+‘Margins’
+     leaves a margin at both ends of the path.
+‘Margin(real begin, real end=begin)’
+     specify the size of the beginning and ending margin, respectively,
+     in multiples of the units ‘labelmargin(p)’ used for aligning
+     labels.
+‘BeginPenMargin’
+‘EndPenMargin’
+     (equivalently ‘PenMargin’)
+‘PenMargins’
+‘PenMargin(real begin, real end=begin)’
+     specify a margin in units of the pen line width, taking account of
+     the pen line width when drawing the path or arrow.
+‘DotMargin’
+     an abbreviation for ‘PenMargin(-0.5*dotfactor,0.5*dotfactor)’, used
+     to draw from the usual beginning point just up to the boundary of
+     an end dot of width ‘dotfactor*linewidth(p)’.
+‘BeginDotMargin’
+‘DotMargins’
+     work similarly.
+‘TrueMargin(real begin, real end=begin)’
+     specify a margin directly in ‘PostScript’ units, independent of the
+     pen line width.
+
    The use of arrows, bars, and margins is illustrated by the examples
 ‘Pythagoras.asy’ and ‘sqrtx01.asy’.
 
@@ -1099,9 +1154,9 @@
 In the second form, the elements of ‘z’ are taken to be successive nodes
 of path ‘g’.  The pens in ‘p’ must belong to the same color space.
 Illustrations of Gouraud shading are provided in the example file
-‘Gouraud.asy’.  The edge flags used in Gouraud shading are documented
-here:
-     <https://www.adobe.com/content/dam/acom/en/devnet/postscript/pdfs/TN5600.SmoothShading.pdf>
+‘Gouraud.asy’.  The edge flags used in Gouraud shading are documented on
+pages 270-274 of the PostScript Language Reference (3rd edition):
+     <https://www.adobe.com/jp/print/postscript/pdfs/PLRM.pdf>
 
    Tensor product shading using clipping path ‘g’, fill rule ‘fillrule’
 on patches bounded by the n cyclic paths of length 4 in path array ‘b’,
@@ -1170,9 +1225,16 @@
    Draw Label ‘L’ on picture ‘pic’ using pen ‘p’.  If ‘align’ is
 ‘NoAlign’, the label will be centered at user coordinate ‘position’;
 otherwise it will be aligned in the direction of ‘align’ and displaced
-from ‘position’ by the ‘PostScript’ offset ‘align*labelmargin(p)’.  The
-constant ‘Align’ can be used to align the bottom-left corner of the
-label at ‘position’.  The Label ‘L’ can either be a string or the
+from ‘position’ by the ‘PostScript’ offset ‘align*labelmargin(p)’.
+
+   Here, ‘real labelmargin(pen p=currentpen)’ is a quantity used to
+align labels.  In the code below,
+label("abcdefg",(0,0),align=up,basealign);
+the baseline of the label will be exactly ‘labelmargin(currentpen)’
+‘PostScript’ units above the center.
+
+   The constant ‘Align’ can be used to align the bottom-left corner of
+the label at ‘position’.  The Label ‘L’ can either be a string or the
 structure obtained by calling one of the functions
 Label Label(string s="", pair position, align align=NoAlign,
             pen p=nullpen, embed embed=Rotate, filltype filltype=NoFill);
@@ -1249,9 +1311,11 @@
 layer();
 
    The ‘string baseline(string s, string template="\strut")’ function
-can be used to enlarge the bounding box of labels to match a given
+can be used to enlarge the bounding box of a label to match a given
 template, so that their baselines will be typeset on a horizontal line.
-See ‘Pythagoras.asy’ for an example.
+See ‘Pythagoras.asy’ for an example.  Alternatively, the pen ‘basealign’
+may be used to force labels to respect the TeX baseline (*note
+basealign::).
 
    One can prevent labels from overwriting one another with the
 ‘overwrite’ pen attribute (*note overwrite::).
@@ -1260,7 +1324,7 @@
 frames to be treated in a uniform manner.  A group of objects may be
 packed together into single frame with the routine
 frame pack(pair align=2S ... object inset[]);
-To draw or fill a box (or ellipse or other path) around a Label and
+To draw or fill a box (or ellipse or other path) around a ‘Label’ and
 return the bounding object, use one of the routines
 object draw(picture pic=currentpicture, Label L, envelope e,
             real xmargin=0, real ymargin=xmargin, pen p=currentpen,
@@ -1269,7 +1333,7 @@
             real xmargin=0, real ymargin=xmargin, pen p=currentpen,
             filltype filltype=NoFill, bool above=true);
 Here ‘envelope’ is a boundary-drawing routine such as ‘box’, ‘roundbox’,
-or ‘ellipse’ defined in ‘plain_boxes.asy’ (*note envelope::).
+or ‘ellipse’ defined in ‘plain_boxes.asy’.
 
    The function ‘path[] texpath(Label L)’ returns the path array that
 TeX would fill to draw the Label ‘L’.
@@ -1347,7 +1411,7 @@
 
    However, it is usually more convenient to just use the ‘..’ operator,
 which tells ‘Asymptote’ to choose its own control points using the
-algorithms described in Donald Knuth’s monograph, The MetaFontbook,
+algorithms described in Donald Knuth's monograph, The MetaFontbook,
 Chapter 14.  The user can still customize the guide (or path) by
 specifying direction, tension, and curl values.
 
@@ -1354,7 +1418,7 @@
    The higher the tension, the straighter the curve is, and the more it
 approximates a straight line.  One can change the spline tension from
 its default value of 1 to any real value greater than or equal to 0.75
-(cf.  John D. Hobby, Discrete and Computational Geometry 1, 1986):
+(see John D. Hobby, Discrete and Computational Geometry 1, 1986):
 draw((100,0)..tension 2 ..(100,100)..(0,100));
 draw((100,0)..tension 3 and 2 ..(100,100)..(0,100));
 draw((100,0)..tension atleast 2 ..(100,100)..(0,100));
@@ -1398,16 +1462,18 @@
 * Pens::                        Colors, line types, line widths, font sizes
 * Transforms::                  Affine transforms
 * Frames and pictures::         Canvases for immediate and deferred drawing
+* Deferred drawing::            Witholding drawing until all data is available
 * Files::                       Reading and writing your data
 * Variable initializers::       Initialize your variables
 * Structures::                  Organize your data
 * Operators::                   Arithmetic and logical operators
 * Implicit scaling::            Avoiding those ugly *s
-* Functions::                   Traditional and high-order functions
+* Functions::                   Traditional and higher-order functions
 * Arrays::                      Dynamic vectors
 * Casts::                       Implicit and explicit casts
 * Import::                      Importing external ‘Asymptote’ modules
 * Static::                      Where to allocate your variable?
+* Autounravel::                 Adding associated libraries to structures
 
 Here is a short introductory example to the ‘Asymptote’ programming
 language that highlights the similarity of its control structures with
@@ -1446,7 +1512,7 @@
 languages.
 
 
-File: asymptote.info,  Node: Data types,  Next: Paths and guides,  Prev: Programming,  Up: Programming
+File: asymptote.info,  Node: Data types,  Next: Paths and guides,  Up: Programming
 
 6.1 Data types
 ==============
@@ -1665,7 +1731,7 @@
      Strings delimited by single quotes (‘'’) have the same mappings as
      character strings in ANSI ‘C’:
 
-        • \’ maps to ’
+        • \' maps to '
         • \" maps to "
         • \?  maps to ?
         • \\ maps to backslash
@@ -1738,7 +1804,7 @@
           returns a string containing ‘n’ formatted according to the
           C-style format string ‘s’ using locale ‘locale’ (or the
           current locale if an empty string is specified), following the
-          behaviour of the C function ‘fprintf’), except that only one
+          behavior of the C function ‘fprintf’), except that only one
           data field is allowed.
 
      ‘string format(string s=defaultformat, bool forcemath=false, string s=defaultseparator, real x, string locale="")’
@@ -1745,7 +1811,7 @@
           returns a string containing ‘x’ formatted according to the
           C-style format string ‘s’ using locale ‘locale’ (or the
           current locale if an empty string is specified), following the
-          behaviour of the C function ‘fprintf’), except that only one
+          behavior of the C function ‘fprintf’), except that only one
           data field is allowed, trailing zeros are removed by default
           (unless ‘#’ is specified), and if ‘s’ specifies math mode or
           ‘forcemath=true’, TeX is used to typeset scientific notation
@@ -1788,7 +1854,7 @@
           seconds(time("%b %d %r %z %Y"),"%b %d %r %z %Y");
           seconds(time("%b %d %r %Z %Y"),"%b %d %r "+time("%Z")+" %Y");
           1+(seconds()-seconds("Jan 1","%b %d"))/(24*60*60);
-          The last example returns today’s ordinal date, measured from
+          The last example returns today's ordinal date, measured from
           the beginning of the year.
 
      ‘string time(int seconds, string format="%a %b %d %T %Z %Y")’
@@ -1830,8 +1896,15 @@
      ‘void beep()’
           produces a beep on the console;
 
-   As in C/C++, complicated types may be abbreviated with ‘typedef’ (see
-the example in *note Functions::).
+   As in C/C++, complicated types may be abbreviated with ‘typedef’ or
+‘using’.  For instance, the line
+using multipath = path[];
+   will make ‘multipath’ a type equivalent ‘path[]’, as will the
+equivalent line
+typedef path[] multipath;
+   For the most part such type aliasing is a convenience.  However, it
+is required when declaring a function whose return type is a function
+(see the example in *note Functions::).
 
 
 File: asymptote.info,  Node: Paths and guides,  Next: Pens,  Prev: Data types,  Up: Programming
@@ -2088,7 +2161,7 @@
           returns the portions of path ‘p’ before and after the ‘n’th
           intersection of ‘p’ with path ‘knife’ as a structure ‘slice’
           (if no intersection exist is found, the entire path is
-          considered to be ‘before’ the intersection):
+          considered to be 'before' the intersection):
           struct slice {
             path before,after;
           }
@@ -2106,7 +2179,7 @@
      ‘path buildcycle(... path[] p);’
           This returns the path surrounding a region bounded by a list
           of two or more consecutively intersecting paths, following the
-          behaviour of the ‘MetaPost buildcycle’ command.
+          behavior of the ‘MetaPost buildcycle’ command.
 
      ‘pair min(path p);’
           returns the pair (left,bottom) for the path bounding box of
@@ -2139,8 +2212,9 @@
           otherwise.
 
      ‘pair inside(path p, pen fillrule=currentpen);’
-          returns an arbitrary point strictly inside a cyclic path ‘p’
-          according to the fill rule ‘fillrule’ (*note fillrule::).
+          returns an arbitrary point strictly inside a nondegenerate
+          cyclic path ‘p’ according to the fill rule ‘fillrule’ (*note
+          fillrule::).
 
      ‘path[] strokepath(path g, pen p=currentpen);’
           returns the path array that ‘PostScript’ would fill in drawing
@@ -2340,7 +2414,7 @@
      definitions of some colors (e.g. ‘Green’) actually disagree.
 
      ‘Asymptote’ also comes with a ‘asycolors.sty’ ‘LaTeX’ package that
-     defines to ‘LaTeX’ CMYK versions of ‘Asymptote’’s predefined
+     defines to ‘LaTeX’ CMYK versions of ‘Asymptote’'s predefined
      colors, so that they can be used directly within ‘LaTeX’ strings.
      Normally, such colors are passed to ‘LaTeX’ via a pen argument;
      however, to change the color of only a portion of a string, say for
@@ -2442,12 +2516,65 @@
      pen nobasealign=basealign(0);
      pen basealign=basealign(1);
 
-     The default setting, ‘nobasealign’,which may be changed with
+     The default setting, ‘nobasealign’, which may be changed with
      ‘defaultpen(pen)’, causes the label alignment routines to use the
      full label bounding box for alignment.  In contrast, ‘basealign’
      requests that the TeX baseline be respected.  The base align
      setting of a pen is returned by ‘int basealign(pen p=currentpen)’.
 
+     For example, in the following image, the baselines of green \pi and
+     \gamma are aligned, while the bottom border of red -\pi and -\gamma
+     are aligned.
+     import fontsize;
+     import three;
+     
+     settings.autobillboard=false;
+     settings.embed=false;
+     currentprojection=orthographic(Z);
+     
+     defaultpen(fontsize(100pt));
+     
+     dot(O);
+     
+     label("acg",O,align=N,basealign);
+     label("ace",O,align=N,red);
+     label("acg",O,align=S,basealign);
+     label("ace",O,align=S,red);
+     label("acg",O,align=E,basealign);
+     label("ace",O,align=E,red);
+     label("acg",O,align=W,basealign);
+     label("ace",O,align=W,red);
+     
+     picture pic;
+     dot(pic,(labelmargin(),0,0),blue);
+     dot(pic,(-labelmargin(),0,0),blue);
+     dot(pic,(0,labelmargin(),0),blue);
+     dot(pic,(0,-labelmargin(),0),blue);
+     add(pic,O);
+     
+     dot((0,0));
+     
+     label("acg",(0,0),align=N,basealign);
+     label("ace",(0,0),align=N,red);
+     label("acg",(0,0),align=S,basealign);
+     label("ace",(0,0),align=S,red);
+     label("acg",(0,0),align=E,basealign);
+     label("ace",(0,0),align=E,red);
+     label("acg",(0,0),align=W,basealign);
+     label("ace",(0,0),align=W,red);
+     
+     picture pic;
+     dot(pic,(labelmargin(),0),blue);
+     dot(pic,(-labelmargin(),0),blue);
+     dot(pic,(0,labelmargin()),blue);
+     dot(pic,(0,-labelmargin()),blue);
+     add(pic,(0,0));
+
+                             [./basealign]
+
+     Another method for aligning baselines is provided by the ‘baseline’
+     function (*note baseline::).
+
    • The font size is specified in TeX points (1 pt = 1/72.27 inches)
      with the function ‘pen fontsize(real size, real
      lineskip=1.2*size)’.  The default font size, 12pt, may be changed
@@ -2514,16 +2641,16 @@
      pen opacity(real opacity=1, string blend="Compatible");
      The opacity can be varied from ‘0’ (fully transparent) to the
      default value of ‘1’ (opaque), and ‘blend’ specifies one of the
-     following foreground–background blending operations:
+     following foreground-background blending operations:
      "Compatible","Normal","Multiply","Screen","Overlay","SoftLight",
      "HardLight","ColorDodge","ColorBurn","Darken","Lighten","Difference",
      "Exclusion","Hue","Saturation","Color","Luminosity",
-     as described in
-     <https://www.adobe.com/content/dam/acom/en/devnet/pdf/pdfs/PDF32000_2008.pdf>.
+     as described in Tables 136 and 137 of
+     <https://opensource.adobe.com/dc-acrobat-sdk-docs/standards/pdfstandards/pdf/PDF32000_2008.pdf>.
      Since ‘PostScript’ does not support transparency, this feature is
      only effective with the ‘-f pdf’ output format option; other
      formats can be produced from the resulting PDF file with the
-     ‘ImageMagick’ ‘convert’ program.  Labels are always drawn with an
+     ‘ImageMagick’ ‘magick’ program.  Labels are always drawn with an
      ‘opacity’ of 1.  A simple example of transparent filling is
      provided in the example file ‘transparency.asy’.
 
@@ -2621,7 +2748,7 @@
 
      ‘Allow’
           Allow labels to overwrite one another.  This is the default
-          behaviour (unless overridden with ‘defaultpen(pen)’.
+          behavior (unless overridden with ‘defaultpen(pen)’.
 
      ‘Suppress’
           Suppress, with a warning, each label that would overwrite
@@ -2685,7 +2812,7 @@
 ‘transform scale(real x, real y);’
      scale by ‘x’ in the x direction and by ‘y’ in the y direction;
 ‘transform slant(real s);’
-     maps ‘(x,y)’ –> ‘(x+s*y,y)’;
+     maps ‘(x,y)’ -> ‘(x+s*y,y)’;
 ‘transform rotate(real angle, pair z=(0,0));’
      rotates by ‘angle’ in degrees about ‘z’;
 ‘transform reflect(pair a, pair b);’
@@ -2700,7 +2827,7 @@
 test if ‘t’ is an isometry (preserves distance).
 
 
-File: asymptote.info,  Node: Frames and pictures,  Next: Files,  Prev: Transforms,  Up: Programming
+File: asymptote.info,  Node: Frames and pictures,  Next: Deferred drawing,  Prev: Transforms,  Up: Programming
 
 6.5 Frames and pictures
 =======================
@@ -2708,14 +2835,13 @@
 ‘frame’
      Frames are canvases for drawing in ‘PostScript’ coordinates.  While
      working with frames directly is occasionally necessary for
-     constructing deferred drawing routines, pictures are usually more
-     convenient to work with.  The implicit initializer for frames is
-     ‘newframe’.  The function ‘bool empty(frame f)’ returns ‘true’ only
-     if the frame ‘f’ is empty.  A frame may be erased with the
-     ‘erase(frame)’ routine.  The functions ‘pair min(frame)’ and ‘pair
-     max(frame)’ return the (left,bottom) and (right,top) coordinates of
-     the frame bounding box, respectively.  The contents of frame ‘src’
-     may be appended to frame ‘dest’ with the command
+     constructing deferred drawing routines The implicit initializer for
+     frames is ‘newframe’.  The function ‘bool empty(frame f)’ returns
+     ‘true’ only if the frame ‘f’ is empty.  A frame may be erased with
+     the ‘erase(frame)’ routine.  The functions ‘pair min(frame)’ and
+     ‘pair max(frame)’ return the (left,bottom) and (right,top)
+     coordinates of the frame bounding box, respectively.  The contents
+     of frame ‘src’ may be appended to frame ‘dest’ with the command
      void add(frame dest, frame src);
      or prepended with
      void prepend(frame dest, frame src);
@@ -2724,19 +2850,6 @@
      label::), is returned by
      frame align(frame f, pair align);
 
-     To draw or fill a box or ellipse around a label or frame and return
-     the boundary as a path, use one of the predefined ‘envelope’
-     routines
-     path box(frame f, Label L="", real xmargin=0,
-              real ymargin=xmargin, pen p=currentpen,
-              filltype filltype=NoFill, bool above=true);
-     path roundbox(frame f, Label L="", real xmargin=0,
-                   real ymargin=xmargin, pen p=currentpen,
-                   filltype filltype=NoFill, bool above=true);
-     path ellipse(frame f, Label L="", real xmargin=0,
-                  real ymargin=xmargin, pen p=currentpen,
-                  filltype filltype=NoFill, bool above=true);
-
 ‘picture’
      Pictures are high-level structures (*note Structures::) defined in
      the module ‘plain’ that provide canvases for drawing in user
@@ -2802,11 +2915,12 @@
      ‘defaultfilename’ is an empty string, the prefix ‘outprefix()’ will
      be used.
 
-     A ‘shipout()’ command is added implicitly at file exit.  The
-     default page orientation is ‘Portrait’; this may be modified by
-     changing the variable ‘orientation’.  To output in landscape mode,
-     simply set the variable ‘orientation=Landscape’ or issue the
-     command
+     A ‘shipout()’ command is added implicitly at file exit.  Explicit
+     ‘shipout()’ commands to the same file as the final implicit shipout
+     are ignored.  The default page orientation is ‘Portrait’; this may
+     be modified by changing the variable ‘orientation’.  To output in
+     landscape mode, simply set the variable ‘orientation=Landscape’ or
+     issue the command
      shipout(Landscape);
 
      To rotate the page by -90 degrees, use the orientation ‘Seascape’.
@@ -2928,9 +3042,9 @@
      optional background filling or clipping, and ‘above’ specifies
      whether to add ‘src’ above or below existing objects.
 
-     There are also routines to add a picture or frame ‘src’ specified
-     in postscript coordinates to another picture ‘dest’ (or
-     ‘currentpicture’) about the user coordinate ‘position’:
+     There are also routines to add a fixed-size picture or frame ‘src’
+     to another picture ‘dest’ (or ‘currentpicture’) about the user
+     coordinate ‘position’:
      void add(picture src, pair position, bool group=true,
               filltype filltype=NoFill, bool above=true);
      void add(picture dest, picture src, pair position,
@@ -3027,9 +3141,86 @@
      that can be used for importing ‘LaTeX’ packages.
 
 
-File: asymptote.info,  Node: Files,  Next: Variable initializers,  Prev: Frames and pictures,  Up: Programming
+File: asymptote.info,  Node: Deferred drawing,  Next: Files,  Prev: Frames and pictures,  Up: Programming
 
-6.6 Files
+6.6 Deferred drawing
+====================
+
+It is sometimes desirable to have elements of a fixed absolute size,
+independent of the picture scaling from user to ‘PostScript’
+coordinates.  For example, normally one would want the size of a dot
+created with ‘dot’, the size of the arrowheads created with ‘arrow’
+(*note arrows::), and labels to be drawn independent of the scaling.
+
+   However, because of ‘Asymptote’'s automatic scaling feature (*note
+Figure size::), the translation between user coordinate and ‘PostScript’
+coordinate is not determined until shipout time:
+size(1cm);
+dot((0,0));
+dot((1,1));
+shipout("x"); // at this point, 1 unit coordinate = 1cm
+dot((2,2));
+shipout("y"); // at this point, 1 unit coordinate = 0.5cm
+It is therefore necessary to defer the drawing of these elements until
+shipout time.
+
+   For example, a frame can be added at a specified user coordinate of a
+picture with the deferred drawing routine ‘add(picture
+dest=currentpicture, frame src, pair position)’:
+frame f;
+fill(f,circle((0,0),1.5pt));
+add(f,position=(1,1),align=(0,0));
+
+   A deferred drawing routine is an object of type ‘drawer’, which is a
+function with signature ‘void(frame f, transform t)’.  For example, if
+the drawing routine
+void d(frame f, transform t){
+  fill(f,shift(3cm,0)*circle(t*(1,1),2pt));
+}
+is added to ‘currentpicture’ with
+currentpicture.add(d);
+a filled circle of radius 2pt will be drawn on currentpicture centered
+3cm to the right of user coordinate ‘(1,1)’.  The parameter ‘t’ is the
+affine transformation from user coordinates to ‘PostScript’ coordinates.
+
+   Even though the actual drawing is deferred, you still need to specify
+to the ‘Asymptote’ scaling routines that ultimately a fixed-size circle
+of radius 2pt will be drawn 3cm to the right of user-coordinate (1,1),
+by adding a frame about (1,1) that extends beyond (1,1) from
+‘(3cm-2pt,-2pt)+min(currentpen)’ to ‘(3cm+2pt,2pt)+max(currentpen)’,
+where we have even accounted for the pen linewidth.  The following
+example will then produce a PDF file 10 cm wide:
+
+settings.outformat="pdf";
+size(10cm);
+dot((0,0));
+dot((1,1),red);
+add(new void(frame f, transform t) {
+  fill(f,shift(3cm,0)*circle(t*(1,1),2pt));
+});
+pair trueMin=(3cm-2pt,-2pt)+min(currentpen);
+pair trueMax=(3cm+2pt,2pt)+max(currentpen);
+currentpicture.addPoint((1,1),trueMin);
+currentpicture.addPoint((1,1),trueMax);
+Here we specified the minimum and maximum user and truesize (fixed)
+coordinates of the drawer with the ‘picture’ routine
+void addPoint(pair user, pair truesize);
+Alternatively, one can use
+void addBox(pair userMin, pair userMax, pair trueMin=0, pair trueMax=0) {
+to specify a bounding box with bottom-left corner ‘t*(1,1)+trueMin’ and
+top-right corner ‘t*(1,1)+trueMax’, where ‘t’ is the transformation that
+transforms from user coordinates to ‘PostScript’ coordinates.
+
+   For more details about deferred drawing, see "Asymptote: A vector
+graphics language," John C. Bowman and Andy Hammerlindl, TUGBOAT: The
+Communications of the TeX Users Group, 29:2, 288-294 (2008),
+
+<https://www.math.ualberta.ca/~bowman/publications/asyTUG.pdf>.
+
+
+File: asymptote.info,  Node: Files,  Next: Variable initializers,  Prev: Deferred drawing,  Up: Programming
+
+6.7 Files
 =========
 
 ‘Asymptote’ can read and write text files (including comma-separated
@@ -3037,7 +3228,7 @@
 files.
 
    An input file can be opened with
-input(string name="", bool check=true, string comment="#", string mode="");
+input(string name=""
    reading is then done by assignment:
 file fin=input("test.txt");
 real a=fin;
@@ -3103,12 +3294,12 @@
 some simple examples of data output:
 file fout=output("test.txt");
 write(fout,1);                  // Writes "1"
-write(fout);                    // Writes a new line
+write(fout, endl);              // Writes a new line
 write(fout,"List: ",1,2,3);     // Writes "List: 1     2     3"
 
    A file may be opened with ‘mode="xdr"’, to read or write double
 precision (64-bit) reals and single precision (32-bit) integers in Sun
-Microsystem’s XDR (External Data Representation) portable binary format
+Microsystem's XDR (External Data Representation) portable binary format
 (available on all ‘UNIX’ platforms).  Alternatively, a file may also be
 opened with ‘mode="binary"’ to read or write double precision reals and
 single precision integers in the native (nonportable) machine binary
@@ -3188,7 +3379,7 @@
 this operation is restricted to the current directory.  The functions
 int convert(string args="", string file="", string format="");
 int animate(string args="", string file="", string format="");
-call the ‘ImageMagick’ commands ‘convert’ and ‘animate’, respectively,
+call the ‘ImageMagick’ commands ‘magick’ and ‘animate’, respectively,
 with the arguments ‘args’ and the file name constructed from the strings
 ‘file’ and ‘format’.
 
@@ -3195,11 +3386,11 @@
 
 File: asymptote.info,  Node: Variable initializers,  Next: Structures,  Prev: Files,  Up: Programming
 
-6.7 Variable initializers
+6.8 Variable initializers
 =========================
 
-A variable can be assigned a value when it is declared, as in ‘int x=3;’
-where the variable ‘x’ is assigned the value ‘3’.  As well as literal
+A variable can be assigned a value when it is declared ‘int x=3;’ where
+the variable ‘x’ is assigned the value ‘3’.  As well as literal
 constants such as ‘3’, arbitary expressions can be used as initializers,
 as in ‘real x=2*sin(pi/2);’.
 
@@ -3267,7 +3458,7 @@
 
 File: asymptote.info,  Node: Structures,  Next: Operators,  Prev: Variable initializers,  Up: Programming
 
-6.8 Structures
+6.9 Structures
 ==============
 
 Users may also define their own data types as structures, along with
@@ -3313,7 +3504,7 @@
 definition of a structure ‘T’, a variable of type ‘T’ is initialized to
 a new instance (‘new T’) by default.  During the definition of the
 structure, however, variables of type ‘T’ are initialized to ‘null’ by
-default.  This special behaviour is to avoid infinite recursion of
+default.  This special behavior is to avoid infinite recursion of
 creating new instances in code such as
 struct tree {
   int value;
@@ -3366,59 +3557,14 @@
 joe.firstname="Joe";
 joe.lastname="Jones";
 Creating a new Person is a chore; it takes three lines to create a new
-instance and to initialize its fields (that’s still considerably less
+instance and to initialize its fields (that's still considerably less
 effort than creating a new person in real life, though).
 
-   We can reduce the work by defining a constructor function
-‘Person(string,string)’:
+   We can reduce the work by defining ‘operator init’:
 struct Person {
   string firstname;
   string lastname;
 
-  static Person Person(string firstname, string lastname) {
-    Person p=new Person;
-    p.firstname=firstname;
-    p.lastname=lastname;
-    return p;
-  }
-}
-
-Person joe=Person.Person("Joe", "Jones");
-
-   While it is now easier than before to create a new instance, we still
-have to refer to the constructor by the qualified name ‘Person.Person’.
-If we add the line
-from Person unravel Person;
-immediately after the structure definition, then the constructor can be
-used without qualification: ‘Person joe=Person("Joe", "Jones");’.
-
-   The constructor is now easy to use, but it is quite a hassle to
-define.  If you write a lot of constructors, you will find that you are
-repeating a lot of code in each of them.  Fortunately, your friendly
-neighbourhood Asymptote developers have devised a way to automate much
-of the process.
-
-   If, in the body of a structure, Asymptote encounters the definition
-of a function of the form ‘void operator init(ARGS)’, it implicitly
-defines a constructor function of the arguments ‘ARGS’ that uses the
-‘void operator init’ function to initialize a new instance of the
-structure.  That is, it essentially defines the following constructor
-(assuming the structure is called ‘Foo’):
-
-     static Foo Foo(ARGS) {
-       Foo instance=new Foo;
-       instance.operator init(ARGS);
-       return instance;
-     }
-
-   This constructor is also implicitly copied to the enclosing scope
-after the end of the structure definition, so that it can used
-subsequently without qualifying it by the structure name.  Our ‘Person’
-example can thus be implemented as:
-struct Person {
-  string firstname;
-  string lastname;
-
   void operator init(string firstname, string lastname) {
     this.firstname=firstname;
     this.lastname=lastname;
@@ -3433,26 +3579,14 @@
 type of the ‘operator init’ must be ‘void’ while in the second, it must
 be the (non-‘void’) type of the variable.
 
-   The function ‘cputime()’ returns a structure ‘cputime’ with
-cumulative CPU times broken down into the fields ‘parent.user’,
-‘parent.system’, ‘child.user’, and ‘child.system’, along with the
-cumulative wall clock time in ‘parent.clock’, all measured in seconds.
-For convenience, the incremental fields ‘change.user’, ‘change.system’,
-and ‘change.clock’ indicate the change in the corresponding fields since
-the last call to ‘cputime()’.  The function
-void write(file file=stdout, string s="", cputime c,
-           string format=cputimeformat, suffix suffix=none);
-displays the incremental user cputime followed by “u”, the incremental
-system cputime followed by “s”, the total user cputime followed by “U”,
-and the total system cputime followed by “S”.
-
    Much like in C++, casting (*note Casts::) provides for an elegant
-implementation of structure inheritance, including virtual functions:
+implementation of structure inheritance, including a virtual function
+‘v’:
 struct parent {
   real x;
   void operator init(int x) {this.x=x;}
-  void virtual(int) {write(0);}
-  void f() {virtual(1);}
+  void v(int) {write(0);}
+  void f() {v(1);}
 }
 
 void write(parent p) {write(p.x);}
@@ -3461,8 +3595,8 @@
   parent parent;
   real y=3;
   void operator init(int x) {parent.operator init(x);}
-  void virtual(int x) {write(x);}
-  parent.virtual=virtual;
+  void v(int x) {write(x);}
+  parent.v=v;
   void f()=parent.f;
 }
 
@@ -3485,8 +3619,8 @@
 
 File: asymptote.info,  Node: Operators,  Next: Implicit scaling,  Prev: Structures,  Up: Programming
 
-6.9 Operators
-=============
+6.10 Operators
+==============
 
 * Menu:
 
@@ -3495,10 +3629,10 @@
 * User-defined operators::      Overloading operators
 
 
-File: asymptote.info,  Node: Arithmetic & logical,  Next: Self & prefix operators,  Prev: Operators,  Up: Operators
+File: asymptote.info,  Node: Arithmetic & logical,  Next: Self & prefix operators,  Up: Operators
 
-6.9.1 Arithmetic & logical operators
-------------------------------------
+6.10.1 Arithmetic & logical operators
+-------------------------------------
 
 ‘Asymptote’ uses the standard binary arithmetic operators.  However,
 when one integer is divided by another, both arguments are converted to
@@ -3571,8 +3705,8 @@
 
 File: asymptote.info,  Node: Self & prefix operators,  Next: User-defined operators,  Prev: Arithmetic & logical,  Up: Operators
 
-6.9.2 Self & prefix operators
------------------------------
+6.10.2 Self & prefix operators
+------------------------------
 
 As in C, each of the arithmetic operators ‘+’, ‘-’, ‘*’, ‘/’, ‘#’, ‘%’,
 and ‘^’ can be used as a self operator.  The prefix operators ‘++’
@@ -3596,8 +3730,8 @@
 
 File: asymptote.info,  Node: User-defined operators,  Prev: Self & prefix operators,  Up: Operators
 
-6.9.3 User-defined operators
-----------------------------
+6.10.3 User-defined operators
+-----------------------------
 
 The following symbols may be used with ‘operator’ to define or redefine
 operators on structures and built-in types:
@@ -3627,10 +3761,12 @@
 guide g=(0,0){up}..{SW}(100,100){NE}..{curl 3}(50,50)..(10,10);
 write("g=",g);
 
+   *Note Autounravel::, for an example overloading the ‘+’ operator.
+
 
 File: asymptote.info,  Node: Implicit scaling,  Next: Functions,  Prev: Operators,  Up: Programming
 
-6.10 Implicit scaling
+6.11 Implicit scaling
 =====================
 
 If a numeric literal is in front of certain types of expressions, then
@@ -3667,7 +3803,7 @@
 
 File: asymptote.info,  Node: Functions,  Next: Arrays,  Prev: Implicit scaling,  Up: Programming
 
-6.11 Functions
+6.12 Functions
 ==============
 
 * Menu:
@@ -3710,14 +3846,17 @@
      int c();
      c=a;                // Valid: only one possible assignment.
 
-  4. Anonymous (so-called "high-order") functions are also allowed:
-     typedef int intop(int);
+  4. "Higher-order" functions, in other words functions that return
+     functions, are allowed.  The return type must be given a
+     signature-free alias with ‘using’ or ‘typedef’:
+     using intop = int(int);
+     // typedef int intop(int); // Equivalent to previous line
      intop adder(int m)
      {
        return new int(int n) {return m+n;};
      }
      intop addby7=adder(7);
-     write(addby7(1));   // Writes 8.
+     write(addby7(1));       // Writes 8.
 
   5. One may redefine a function ‘f’, even for calls to ‘f’ in
      previously declared functions, by assigning another (anonymous or
@@ -3770,9 +3909,9 @@
 ‘libsigsegv’ (e.g. 2.4 or later) is installed at configuration time).
 
 
-File: asymptote.info,  Node: Default arguments,  Next: Named arguments,  Prev: Functions,  Up: Functions
+File: asymptote.info,  Node: Default arguments,  Next: Named arguments,  Up: Functions
 
-6.11.1 Default arguments
+6.12.1 Default arguments
 ------------------------
 
 ‘Asymptote’ supports a more flexible mechanism for default function
@@ -3791,7 +3930,7 @@
 
 File: asymptote.info,  Node: Named arguments,  Next: Rest arguments,  Prev: Default arguments,  Up: Functions
 
-6.11.2 Named arguments
+6.12.2 Named arguments
 ----------------------
 
 It is sometimes difficult to remember the order in which arguments
@@ -3825,7 +3964,7 @@
 write(f(4,3));
 and outputs 43.
 
-   Parameters can be specified as “keyword-only” by putting ‘keyword’
+   Parameters can be specified as "keyword-only" by putting ‘keyword’
 immediately before the parameter name, as in ‘int f(int keyword x)’ or
 ‘int f(int keyword x=77)’.  This forces the caller of the function to
 use a named argument to give a value for this parameter.  That is,
@@ -3853,7 +3992,7 @@
 
 File: asymptote.info,  Node: Rest arguments,  Next: Mathematical functions,  Prev: Named arguments,  Up: Functions
 
-6.11.3 Rest arguments
+6.12.3 Rest arguments
 ---------------------
 
 Rest arguments allow one to write functions that take a variable number
@@ -3941,7 +4080,7 @@
 
 File: asymptote.info,  Node: Mathematical functions,  Prev: Rest arguments,  Up: Functions
 
-6.11.4 Mathematical functions
+6.12.4 Mathematical functions
 -----------------------------
 
 ‘Asymptote’ has built-in versions of the standard ‘libm’ mathematical
@@ -3977,7 +4116,8 @@
 (equivalent to ‘fabs(real)’), an ‘abs(pair)’ function (equivalent to
 ‘length(pair)’).
 
-   Random numbers can be seeded with ‘srand(int)’ and generated with the
+   Random numbers can be seeded with ‘srand(int)’ (for example, with
+‘srand(round((cputime().parent.clock%1)*1e9))’) and generated with the
 ‘int rand()’ function, which returns a random integer between 0 and the
 integer ‘randMax’.  The ‘unitrand()’ function returns a random number
 uniformly distributed in the interval [0,1].  A Gaussian random number
@@ -4024,10 +4164,47 @@
      returns the integral of ‘f’ from ‘a’ to ‘b’ using adaptive Simpson
      integration.
 
+     Internally, ‘operator init’ implicitly defines a constructor
+     function ‘Person(string,string)’ as follows, where ARGS is ‘string
+     firstname, string lastname’ in this case:
+          struct Person {
+            string firstname;
+            string lastname;
+
+            static Person Person(ARGS) {
+              Person p=new Person;
+              p.operator init(ARGS);
+              return p;
+            }
+          }
+     which then can be used as:
+     Person joe=Person.Person("Joe", "Jones");
+
+     The following is also implicitly generated in the enclosing scope,
+     after the end of the structure definition.
+     from Person unravel Person;
+     It allows us to use the constructor without qualification,
+     otherwise we would have to refer to the constructor by the
+     qualified name ‘Person.Person’.
+
+‘cputime cputime()’
+     returns a structure ‘cputime’ with cumulative CPU times broken down
+     into the fields ‘parent.user’, ‘parent.system’, ‘child.user’, and
+     ‘child.system’, along with the cumulative wall clock time in
+     ‘parent.clock’, all measured in seconds.  For convenience, the
+     incremental fields ‘change.user’, ‘change.system’, and
+     ‘change.clock’ indicate the change in the corresponding fields
+     since the last call to ‘cputime()’.  The function
+     void write(file file=stdout, string s="", cputime c,
+                string format=cputimeformat, suffix suffix=none);
+     displays the incremental user cputime followed by "u", the
+     incremental system cputime followed by "s", the total user cputime
+     followed by "U", and the total system cputime followed by "S".
+
 
 File: asymptote.info,  Node: Arrays,  Next: Casts,  Prev: Functions,  Up: Programming
 
-6.12 Arrays
+6.13 Arrays
 ===========
 
 * Menu:
@@ -4192,13 +4369,13 @@
 
 ‘int search(T[] a, T key)’
      For built-in ordered types ‘T’, searches a sorted array ‘a’ of ‘n’
-     elements for k, returning the index ‘i’ if ‘a[i] <= key < a[i+1]’,
-     ‘-1’ if ‘key’ is less than all elements of ‘a’, or ‘n-1’ if ‘key’
-     is greater than or equal to the last element of ‘a’;
+     elements for ‘key’, returning the index ‘i’ if ‘a[i] <= key <
+     a[i+1]’, ‘-1’ if ‘key’ is less than all elements of ‘a’, or ‘n-1’
+     if ‘key’ is greater than or equal to the last element of ‘a’;
 
 ‘int search(T[] a, T key, bool less(T i, T j))’
-     searches an array ‘a’ sorted in ascending order such that element
-     ‘i’ precedes element ‘j’ if ‘less(i,j)’ is true;
+     searches an array ‘a’ for ‘key’ sorted in ascending order such that
+     element ‘i’ precedes element ‘j’ if ‘less(i,j)’ is true;
 
 ‘T[] copy(T[] a)’
      returns a deep copy of the array ‘a’;
@@ -4442,9 +4619,9 @@
 ‘write(file,T[][][])’, respectively.
 
 
-File: asymptote.info,  Node: Slices,  Prev: Arrays,  Up: Arrays
+File: asymptote.info,  Node: Slices,  Up: Arrays
 
-6.12.1 Slices
+6.13.1 Slices
 -------------
 
 Asymptote allows a section of an array to be addressed as a slice using
@@ -4528,7 +4705,7 @@
 
 File: asymptote.info,  Node: Casts,  Next: Import,  Prev: Arrays,  Up: Programming
 
-6.13 Casts
+6.14 Casts
 ==========
 
 ‘Asymptote’ implicitly casts ‘int’ to ‘real’, ‘int’ to ‘pair’, ‘real’ to
@@ -4595,7 +4772,7 @@
 
 File: asymptote.info,  Node: Import,  Next: Static,  Prev: Casts,  Up: Programming
 
-6.14 Import
+6.15 Import
 ===========
 
 While ‘Asymptote’ provides many features by default, some applications
@@ -4653,7 +4830,7 @@
 usually know all of the internal types and variables of a module, which
 can also change as the module writer adds or changes features of the
 module.  As such, it is prudent to add ‘import’ commands at the start of
-an ‘Asymptote’ file, so that imported names won’t shadow locally defined
+an ‘Asymptote’ file, so that imported names won't shadow locally defined
 functions.  Still, imported names may shadow other imported names,
 depending on the order in which they were imported, and imported
 functions may cause overloading resolution problems if they have the
@@ -4743,16 +4920,16 @@
 
 File: asymptote.info,  Node: Templated imports,  Up: Import
 
-6.14.1 Templated imports
+6.15.1 Templated imports
 ------------------------
 
 *Warning:* This feature is experimental: it has known issues and its
 behavior may change in the future.
 
-   In Asymptote, it is possible to create modules that must have one or
-more types specified when they are imported.  The first executable line
-of any such module must be of the form ‘typedef import(<types>)’, where
-‘<types>’ is a list of required type parameters.  For instance,
+   In Asymptote types are specified when they are imported.  The first
+executable line of any such module must be of the form ‘typedef
+import(<types>)’, where ‘<types>’ is a list of required type parameters.
+For instance,
 typedef import(T, S, Number);
 could be the first line of a module that requires three type parameters.
 The remaining code in the module can then use ‘T’, ‘S’, and ‘Number’ as
@@ -4764,10 +4941,9 @@
 access templatedModule(T=string, S=int[], Number=real)
     as templatedModule_string_int_real;
 Note that this is actually an _access_ command rather than an _import_
-command, so the names of types, functions, etc.  would have to be stated
-as e.g.  ‘templatedModule_string_int_real.Wrapper_Number’ rather than
-just ‘Wrapper_Number’ (where ‘Wrapper_Number’ is a type defined in
-‘templatedModule.asy’).
+command, so a type, function, or variable ‘A’ defined in
+‘templatedModule.asy’ would need to be accessed qualified as
+‘templatedModule_string_int_real.A’.
 
    Alternatively, the module could be imported via a command like
 from templatedModule(T=string, S=int[], Number=real) access
@@ -4777,18 +4953,17 @@
 ‘Wrapper_real’ and would also allow the use of any ‘operator ==’
 overloads defined in the module.
 
-   For more information, see the examples in
-<https://github.com/vectorgraphics/asymptote/tree/647b6c5732ec94a48f0f0b2446f02c86888fe7e7/tests/template>.
+   Further examples can be found in the ‘tests/template’ subdirectory of
+the ‘Asymptote’ source directory.
 
-   Issues: Certain standard features of almost any type (such as ‘==’,
-‘new’, and the ability to call static methods on the type) may only be
-available for type arguments that are builtin or defined in the ‘plain’
-module.
+   Issues: Certain expected operators (such as ‘operator ==’) may only
+be available for type arguments that are builtin or defined in module
+‘plain’.
 
 
-File: asymptote.info,  Node: Static,  Prev: Import,  Up: Programming
+File: asymptote.info,  Node: Static,  Next: Autounravel,  Prev: Import,  Up: Programming
 
-6.15 Static
+6.16 Static
 ===========
 
 Static qualifiers allocate the memory address of a variable in a higher
@@ -4897,6 +5072,98 @@
 the variable actually possesses.
 
 
+File: asymptote.info,  Node: Autounravel,  Prev: Static,  Up: Programming
+
+6.17 Autounravel
+================
+
+The ‘autounravel’ modifier can be used to automatically unravel a field.
+This is useful when building an associated library of functions that
+operate on a structure.  For instance, consider a simple implementation
+of the ‘rational’ structure defined in ‘rational.asy’:
+
+struct rational {
+  int p=0, q=1;
+  void operator init(int p, int q) {
+    this.p=p;
+    this.q=q;
+  }
+}
+rational operator +(rational a, rational b) {
+  return rational(a.p*b.q+b.p*a.q, a.q*b.q);
+}
+
+   To allow ‘rational’ to be used as a type parameter for a templated
+import that adds instances of ‘rational’, we should move ‘operator +’
+into the body of the ‘rational’ structure and add the ‘autounravel’
+modifier:
+
+struct rational {
+  int p=0, q=1;
+  void operator init(int p, int q) {
+    this.p=p;
+    this.q=q;
+  }
+  autounravel rational operator +(rational a, rational b) {
+    return rational(a.p*b.q+b.p*a.q, a.q*b.q);
+  }
+}
+
+   This is almost equivalent to the previous code, but now the ‘+’
+operator will be accessible wherever the ‘rational’ structure is.
+
+   *Currently, types cannot be autounraveled.*  Users who encounter a
+case where this might be useful can submit a feature request at
+<https://github.com/vectorgraphics/asymptote/issues>.
+
+* Menu:
+
+* When fields are autounraveled::
+* Where autounravel is legal::
+
+
+File: asymptote.info,  Node: When fields are autounraveled,  Next: Where autounravel is legal,  Up: Autounravel
+
+6.17.1 When fields are autounraveled
+------------------------------------
+
+If a ‘struct’ contains fields (including functions) that are declared
+with ‘autounravel’, these fields will be unraveled from the ‘struct’ at:
+
+   • the end of the ‘struct’ definition;
+   • a ‘typedef import’ statement, if the ‘struct’ is the argument for
+     one of the type parameters;
+   • an ‘unravel’ or ‘access’ statement that unravels the ‘struct’ from
+     a module or outer ‘struct’ (for instance, ‘from rational access
+     rational;’ would make the ‘+’ operator available from the ‘struct’
+     ‘rational’ defined in ‘rational.asy’);
+
+   • A ‘typedef’ statement like ‘typedef rational.rational rat;’ that
+     renames a ‘struct’.
+
+
+File: asymptote.info,  Node: Where autounravel is legal,  Prev: When fields are autounraveled,  Up: Autounravel
+
+6.17.2 Where ‘autounravel’ is legal
+-----------------------------------
+
+The ‘autounravel’ modifier implies ‘static’ and can be used in many of
+the same places as ‘static’.  However, specifying ‘autounravel’ at the
+top level of a module (i.e., outside of any structure or function) is an
+error, whereas ‘static’ gives only a warning.  (1)  In front of a
+‘struct’ definition or ‘typedef’ statement, ‘autounravel’ is forbidden
+because types cannot be autounraveled.  While ‘static static’ results in
+an error, ‘static autounravel’ and ‘autounravel static’ are both legal
+and have exactly the same effect as ‘autounravel’ alone.
+
+   ---------- Footnotes ----------
+
+   (1) If top-level ‘autounravel’ were allowed, a user might incorrectly
+assume that the field would be unraveled whenever the module is
+‘access’ed.  The ‘static’ modifier is allowed at the top level because,
+while it does nothing, it does not mislead the user.
+
+
 File: asymptote.info,  Node: LaTeX usage,  Next: Base modules,  Prev: Programming,  Up: Top
 
 7 ‘LaTeX’ usage
@@ -5098,7 +5365,8 @@
 
 * plain::                       Default ‘Asymptote’ base file
 * simplex::                     Linear programming: simplex method
-* math::                        Extend ‘Asymptote’’s math capabilities
+* simplex2::                    Two-variable simplex method
+* math::                        Extend ‘Asymptote’'s math capabilities
 * interpolate::                 Interpolation routines
 * geometry::                    Geometry routines
 * trembling::                   Wavy lines
@@ -5137,13 +5405,13 @@
 * ode::                         Ordinary differential equations
 
 
-File: asymptote.info,  Node: plain,  Next: simplex,  Prev: Base modules,  Up: Base modules
+File: asymptote.info,  Node: plain,  Next: simplex,  Up: Base modules
 
 8.1 ‘plain’
 ===========
 
-This is the default ‘Asymptote’ base file, which defines key parts of
-the drawing language (such as the ‘picture’ structure).
+This is the default ‘Asymptote’ base file drawing language (such as the
+‘picture’ structure).
 
    By default, an implicit ‘private import plain;’ occurs before
 translating a file and before the first command given in interactive
@@ -5154,25 +5422,34 @@
 this feature.
 
 
-File: asymptote.info,  Node: simplex,  Next: math,  Prev: plain,  Up: Base modules
+File: asymptote.info,  Node: simplex,  Next: simplex2,  Prev: plain,  Up: Base modules
 
 8.2 ‘simplex’
 =============
 
-This module solves the two-variable linear programming problem using the
-simplex method.  It is used by the module ‘plain’ for automatic sizing
-of pictures.
+This module solves the general linear programming problem using the
+simplex method.
 
 
-File: asymptote.info,  Node: math,  Next: interpolate,  Prev: simplex,  Up: Base modules
+File: asymptote.info,  Node: simplex2,  Next: math,  Prev: simplex,  Up: Base modules
 
-8.3 ‘math’
+8.3 ‘simplex2’
+==============
+
+This module solves a special case of the two-variable linear programming
+problem used by the module ‘plain’ for automatic sizing of pictures
+(*note deferred drawing::).
+
+
+File: asymptote.info,  Node: math,  Next: interpolate,  Prev: simplex2,  Up: Base modules
+
+8.4 ‘math’
 ==========
 
-This module extends ‘Asymptote’’s mathematical capabilities with useful
+This module extends ‘Asymptote’'s mathematical capabilities with useful
 functions such as
 
-‘void drawline(picture pic=currentpicture, pair P, pair Q, pen p=currentpen);’
+‘void drawline(picture pic=currentpicture’
      draw the visible portion of the (infinite) line going through ‘P’
      and ‘Q’, without altering the size of picture ‘pic’, using pen ‘p’.
 
@@ -5235,7 +5512,7 @@
 
 File: asymptote.info,  Node: interpolate,  Next: geometry,  Prev: math,  Up: Base modules
 
-8.4 ‘interpolate’
+8.5 ‘interpolate’
 =================
 
 This module implements Lagrange, Hermite, and standard cubic spline
@@ -5245,7 +5522,7 @@
 
 File: asymptote.info,  Node: geometry,  Next: trembling,  Prev: interpolate,  Up: Base modules
 
-8.5 ‘geometry’
+8.6 ‘geometry’
 ==============
 
 This module, written by Philippe Ivaldi, provides an extensive set of
@@ -5260,7 +5537,7 @@
 
 File: asymptote.info,  Node: trembling,  Next: stats,  Prev: geometry,  Up: Base modules
 
-8.6 ‘trembling’
+8.7 ‘trembling’
 ===============
 
 This module, written by Philippe Ivaldi and illustrated in the example
@@ -5269,7 +5546,7 @@
 
 File: asymptote.info,  Node: stats,  Next: patterns,  Prev: trembling,  Up: Base modules
 
-8.7 ‘stats’
+8.8 ‘stats’
 ===========
 
 This module implements a Gaussian random number generator and a
@@ -5279,7 +5556,7 @@
 
 File: asymptote.info,  Node: patterns,  Next: markers,  Prev: stats,  Up: Base modules
 
-8.8 ‘patterns’
+8.9 ‘patterns’
 ==============
 
 This module implements ‘PostScript’ tiling patterns and includes several
@@ -5288,8 +5565,8 @@
 
 File: asymptote.info,  Node: markers,  Next: map,  Prev: patterns,  Up: Base modules
 
-8.9 ‘markers’
-=============
+8.10 ‘markers’
+==============
 
 This module implements specialized routines for marking paths and
 angles.  The principal mark routine provided by this module is
@@ -5334,18 +5611,16 @@
 
 File: asymptote.info,  Node: map,  Next: tree,  Prev: markers,  Up: Base modules
 
-8.10 ‘map’
+8.11 ‘map’
 ==========
 
 This module creates a struct parameterized by the types specified in
 strings ‘key’ and ‘value’, mapping keys to values with a specified
 default:
-import map;
+from map(Key=string, Value=int) access map;
 
-mapTemplate(name="map",key="string",value="int",default="-1");
+map M=map(Default=-1);
 
-map M;
-
 M.add("z",2);
 M.add("a",3);
 M.add("d",4);
@@ -5355,7 +5630,7 @@
 
 File: asymptote.info,  Node: tree,  Next: binarytree,  Prev: map,  Up: Base modules
 
-8.11 ‘tree’
+8.12 ‘tree’
 ===========
 
 This module implements an example of a dynamic binary search tree.
@@ -5363,7 +5638,7 @@
 
 File: asymptote.info,  Node: binarytree,  Next: drawtree,  Prev: tree,  Up: Base modules
 
-8.12 ‘binarytree’
+8.13 ‘binarytree’
 =================
 
 This module can be used to draw an arbitrary binary tree and includes an
@@ -5388,7 +5663,7 @@
 
 File: asymptote.info,  Node: drawtree,  Next: syzygy,  Prev: binarytree,  Up: Base modules
 
-8.13 ‘drawtree’
+8.14 ‘drawtree’
 ===============
 
 This is a simple tree drawing module used by the example ‘treetest.asy’.
@@ -5396,7 +5671,7 @@
 
 File: asymptote.info,  Node: syzygy,  Next: feynman,  Prev: drawtree,  Up: Base modules
 
-8.14 ‘syzygy’
+8.15 ‘syzygy’
 =============
 
 This module automates the drawing of braids, relations, and syzygies,
@@ -5406,7 +5681,7 @@
 
 File: asymptote.info,  Node: feynman,  Next: roundedpath,  Prev: syzygy,  Up: Base modules
 
-8.15 ‘feynman’
+8.16 ‘feynman’
 ==============
 
 This module, contributed by Martin Wiebusch, is useful for drawing
@@ -5416,7 +5691,7 @@
 
 File: asymptote.info,  Node: roundedpath,  Next: animation,  Prev: feynman,  Up: Base modules
 
-8.16 ‘roundedpath’
+8.17 ‘roundedpath’
 ==================
 
 This module, contributed by Stefan Knorr, is useful for rounding the
@@ -5426,13 +5701,13 @@
 
 File: asymptote.info,  Node: animation,  Next: embed,  Prev: roundedpath,  Up: Base modules
 
-8.17 ‘animation’
+8.18 ‘animation’
 ================
 
 This module allows one to generate animations, as illustrated by the
 files ‘wheel.asy’, ‘wavepacket.asy’, and ‘cube.asy’ in the ‘animations’
 subdirectory of the examples directory.  These animations use the
-‘ImageMagick’ ‘convert’ program to merge multiple images into a GIF or
+‘ImageMagick’ ‘magick’ program to merge multiple images into a GIF or
 MPEG movie.
 
    The related ‘animate’ module, derived from the ‘animation’ module,
@@ -5458,7 +5733,7 @@
 
 File: asymptote.info,  Node: embed,  Next: slide,  Prev: animation,  Up: Base modules
 
-8.18 ‘embed’
+8.19 ‘embed’
 ============
 
 This module provides an interface to the ‘LaTeX’ package (included with
@@ -5483,7 +5758,7 @@
 
 File: asymptote.info,  Node: slide,  Next: MetaPost,  Prev: embed,  Up: Base modules
 
-8.19 ‘slide’
+8.20 ‘slide’
 ============
 
 This module provides a simple yet high-quality facility for making
@@ -5494,7 +5769,7 @@
 
 File: asymptote.info,  Node: MetaPost,  Next: babel,  Prev: slide,  Up: Base modules
 
-8.20 ‘MetaPost’
+8.21 ‘MetaPost’
 ===============
 
 This module provides some useful routines to help ‘MetaPost’ users
@@ -5512,7 +5787,7 @@
 
 File: asymptote.info,  Node: babel,  Next: labelpath,  Prev: MetaPost,  Up: Base modules
 
-8.21 ‘babel’
+8.22 ‘babel’
 ============
 
 This module implements the ‘LaTeX’ ‘babel’ package in ‘Asymptote’.  For
@@ -5523,7 +5798,7 @@
 
 File: asymptote.info,  Node: labelpath,  Next: labelpath3,  Prev: babel,  Up: Base modules
 
-8.22 ‘labelpath’
+8.23 ‘labelpath’
 ================
 
 This module uses the ‘PSTricks’ ‘pstextpath’ macro to fit labels along a
@@ -5541,7 +5816,7 @@
 
 File: asymptote.info,  Node: labelpath3,  Next: annotate,  Prev: labelpath,  Up: Base modules
 
-8.23 ‘labelpath3’
+8.24 ‘labelpath3’
 =================
 
 This module, contributed by Jens Schwaiger, implements a 3D version of
@@ -5551,7 +5826,7 @@
 
 File: asymptote.info,  Node: annotate,  Next: CAD,  Prev: labelpath3,  Up: Base modules
 
-8.24 ‘annotate’
+8.25 ‘annotate’
 ===============
 
 This module supports PDF annotations for viewing with ‘Adobe Reader’,
@@ -5565,7 +5840,7 @@
 
 File: asymptote.info,  Node: CAD,  Next: graph,  Prev: annotate,  Up: Base modules
 
-8.25 ‘CAD’
+8.26 ‘CAD’
 ==========
 
 This module, contributed by Mark Henning, provides basic pen definitions
@@ -5575,7 +5850,7 @@
 
 File: asymptote.info,  Node: graph,  Next: palette,  Prev: CAD,  Up: Base modules
 
-8.26 ‘graph’
+8.27 ‘graph’
 ============
 
 This module implements two-dimensional linear and logarithmic graphs,
@@ -6065,7 +6340,7 @@
                    bool above=true);
      In the right-hand graph, the unit n-sided regular polygon
      ‘polygon(int n)’ and the unit n-point cyclic cross ‘cross(int n,
-     bool round=true, real r=0)’ (where ‘r’ is an optional “inner”
+     bool round=true, real r=0)’ (where ‘r’ is an optional "inner"
      radius) are used to build a custom marker frame.  Here
      ‘markuniform(bool centered=false, int n, bool rotated=false)’ adds
      this frame at ‘n’ uniformly spaced points along the arclength of
@@ -6654,7 +6929,7 @@
                             [./vectorfield]
 
   15. The following scientific graphs, which illustrate many features of
-     ‘Asymptote’’s graphics routines, were generated from the examples
+     ‘Asymptote’'s graphics routines, were generated from the examples
      ‘diatom.asy’ and ‘westnile.asy’, using the comma-separated data in
      ‘diatom.csv’ and ‘westnile.csv’.
 
@@ -6666,7 +6941,7 @@
 
 File: asymptote.info,  Node: palette,  Next: three,  Prev: graph,  Up: Base modules
 
-8.27 ‘palette’
+8.28 ‘palette’
 ==============
 
 ‘Asymptote’ can also generate color density images and palettes.  The
@@ -6879,7 +7154,7 @@
 
 File: asymptote.info,  Node: three,  Next: obj,  Prev: palette,  Up: Base modules
 
-8.28 ‘three’
+8.29 ‘three’
 ============
 
 This module fully extends the notion of guides and paths in ‘Asymptote’
@@ -6887,10 +7162,10 @@
 surface.  Guides in three dimensions are specified with the same syntax
 as in two dimensions except that triples ‘(x,y,z)’ are used in place of
 pairs ‘(x,y)’ for the nodes and direction specifiers.  This
-generalization of John Hobby’s spline algorithm is shape-invariant under
+generalization of John Hobby's spline algorithm is shape-invariant under
 three-dimensional rotation, scaling, and shifting, and reduces in the
 planar case to the two-dimensional algorithm used in ‘Asymptote’,
-‘MetaPost’, and ‘MetaFont’ [cf. J. C. Bowman, Proceedings in Applied
+‘MetaPost’, and ‘MetaFont’ [see J. C. Bowman, Proceedings in Applied
 Mathematics and Mechanics, 7:1, 2010021-2010022 (2007)].
 
    For example, a unit circle in the XY plane may be filled and drawn
@@ -6974,12 +7249,25 @@
 
 light nolight;
    The ‘currentlight.background’ (or ‘background’ member of the
-specified ‘light’) can be used to set the background colour for 2D (or
+specified ‘light’) can be used to set the background color for 2D (or
 3D) images.  The default background is white for ‘HTML’ images and
 transparent for all other formats.  One can request a completely
 transparent background for 3D ‘WebGL’ images with
 ‘currentlight.background=black+opacity(0.0);’
 
+   ‘render’
+
+   A function ‘render()’ may be assigned to the optional ‘render’
+parameter allows one to pass specialized rendering options to the
+surface drawing routines, via arguments such as:
+  bool tessellate;   // use tessellated mesh to store straight patches
+  real margin;       // shrink amount for rendered OpenGL viewport, in bp.
+  bool partnames;    // assign part name indices to compound objects
+  bool defaultnames; // assign default names to unnamed objects
+  interaction interaction; // billboard interaction mode
+   along with the rendering parameters for the legacy PRC format
+described in ‘three.asy’.
+
    Asymptote also supports image-based lighting with the setting
 ‘settings.ibl=true’.  This uses pre-rendered EXR images from the
 directory specified by ‘-imageDir’ (which defaults to ‘ibl’) or, for
@@ -6998,9 +7286,9 @@
    The examples ‘elevation.asy’ and ‘sphericalharmonic.asy’ illustrate
 how to draw a surface with patch-dependent colors.  The examples
 ‘vertexshading.asy’ and ‘smoothelevation.asy’ illustrate
-vertex-dependent colors, which are supported by ‘Asymptote’’s native
+vertex-dependent colors, which are supported by ‘Asymptote’'s native
 ‘OpenGL’/‘WebGL’ renderers and the two-dimensional vector output format
-(‘settings.render=0’).  Since the PRC output format does not currently
+(‘settings.render=0’).  Since the legacy PRC output format does not
 support vertex shading of Bezier surfaces, PRC patches are shaded with
 the mean of the four vertex colors.
 
@@ -7022,7 +7310,7 @@
 surface surface(path p, triple plane(pair)=XYplane);
 and then filled:
 draw(surface((0,0)--E+2N--2E--E+N..0.2E..cycle),red);
-Planar Bezier surfaces patches are constructed using Orest Shardt’s
+Planar Bezier surfaces patches are constructed using Orest Shardt's
 ‘bezulate’ routine, which decomposes (possibly nonsimply connected)
 regions bounded (according to the ‘zerowinding’ fill rule) by simple
 cyclic paths (intersecting only at the endpoints) into subregions
@@ -7155,18 +7443,18 @@
      batch mode (‘-noV’) rendering in an iconified window; this can be
      enabled with the setting ‘iconify=true’.
 
-  4. Embed the 3D PRC format in a PDF file and view the resulting PDF
-     file with version ‘9.0’ or later of ‘Adobe Reader’.  This requires
-     ‘settings.outformat="pdf"’ and ‘settings.prc=true’, which can be
-     specified by the command-line options ‘-f pdf’ and ‘-f prc’, put in
-     the ‘Asymptote’ configuration file (*note configuration file::), or
-     specified in the script before module ‘three’ (or ‘graph3’) is
-     imported.  The ‘media9’ LaTeX package is also required (*note
-     embed::).  The example ‘100d.asy’ illustrates how one can generate
-     a list of predefined views (see ‘100d.views’).  A stationary
-     preview image with a resolution of ‘n’ pixels per ‘bp’ can be
-     embedded with the setting ‘render=n’; this allows the file to be
-     viewed with other ‘PDF’ viewers.  Alternatively, the file
+  4. Embed the 3D legacy PRC format in a PDF file and view the resulting
+     PDF file with version ‘9.0’ or later of ‘Adobe Reader’.  This
+     requires ‘settings.outformat="pdf"’ and ‘settings.prc=true’, which
+     can be specified by the command-line options ‘-f pdf’ and ‘-f prc’,
+     put in the ‘Asymptote’ configuration file (*note configuration
+     file::), or specified in the script before module ‘three’ (or
+     ‘graph3’) is imported.  The ‘media9’ LaTeX package is also required
+     (*note embed::).  The example ‘100d.asy’ illustrates how one can
+     generate a list of predefined views (see ‘100d.views’).  A
+     stationary preview image with a resolution of ‘n’ pixels per ‘bp’
+     can be embedded with the setting ‘render=n’; this allows the file
+     to be viewed with other ‘PDF’ viewers.  Alternatively, the file
      ‘externalprc.tex’ illustrates how the resulting PRC and rendered
      image files can be extracted and processed in a separate ‘LaTeX’
      file.  However, see *note LaTeX usage:: for an easier way to embed
@@ -7283,7 +7571,7 @@
 
 ‘orthographic(triple camera, triple up=Z, triple target=O,
              real zoom=1, pair viewportshift=0, bool showtarget=true,
-             bool center=false)’
+             bool center=true)’
      This projects from three to two dimensions using the view as seen
      at a point infinitely far away in the direction ‘unit(camera)’,
      orienting the camera so that, if possible, the vector ‘up’ points
@@ -7294,7 +7582,7 @@
 
 ‘orthographic(real x, real y, real z, triple up=Z, triple target=O,
              real zoom=1, pair viewportshift=0, bool showtarget=true,
-             bool center=false)’
+             bool center=true)’
      This is equivalent to
      orthographic((x,y,z),up,target,zoom,viewportshift,showtarget,center)
 
@@ -7589,7 +7877,7 @@
 
 File: asymptote.info,  Node: obj,  Next: graph3,  Prev: three,  Up: Base modules
 
-8.29 ‘obj’
+8.30 ‘obj’
 ==========
 
 This module allows one to construct surfaces from simple obj files, as
@@ -7598,7 +7886,7 @@
 
 File: asymptote.info,  Node: graph3,  Next: grid3,  Prev: obj,  Up: Base modules
 
-8.30 ‘graph3’
+8.31 ‘graph3’
 =============
 
 This module implements three-dimensional versions of the functions in
@@ -7605,7 +7893,9 @@
 ‘graph.asy’.  To draw an x axis in three dimensions, use the routine
 void xaxis3(picture pic=currentpicture, Label L="", axis axis=YZZero,
             real xmin=-infinity, real xmax=infinity, pen p=currentpen,
-            ticks3 ticks=NoTicks3, arrowbar3 arrow=None, bool above=false);
+            ticks3 ticks=NoTicks3, arrowbar3 arrow=None,
+            margin3 margin=NoMargin3, bool above=false,
+            projection P=currentprojection);
 Analogous routines ‘yaxis’ and ‘zaxis’ can be used to draw y and z axes
 in three dimensions.  There is also a routine for drawing all three
 axis:
@@ -7614,7 +7904,8 @@
            bool extend=false,
            triple min=(-infinity,-infinity,-infinity),
            triple max=(infinity,infinity,infinity),
-           pen p=currentpen, arrowbar3 arrow=None);
+           pen p=currentpen, arrowbar3 arrow=None,
+           margin3 margin=NoMargin3, projection P=currentprojection);
 
 The predefined three-dimensional axis types are
 axis YZEquals(real y, real z, triple align=O, bool extend=false);
@@ -7667,7 +7958,7 @@
 size(0,200);
 size3(200,IgnoreAspect);
 
-currentprojection=perspective(5,2,2);
+currentprojection=perspective(dir(75,20));
 
 scale(Linear,Linear,Log);
 
@@ -7774,7 +8065,7 @@
 
 File: asymptote.info,  Node: grid3,  Next: solids,  Prev: graph3,  Up: Base modules
 
-8.31 ‘grid3’
+8.32 ‘grid3’
 ============
 
 This module, contributed by Philippe Ivaldi, can be used for drawing 3D
@@ -7804,7 +8095,7 @@
 
 File: asymptote.info,  Node: solids,  Next: tube,  Prev: grid3,  Up: Base modules
 
-8.32 ‘solids’
+8.33 ‘solids’
 =============
 
 This solid geometry module defines a structure ‘revolution’ that can be
@@ -7839,7 +8130,7 @@
 
 File: asymptote.info,  Node: tube,  Next: flowchart,  Prev: solids,  Up: Base modules
 
-8.33 ‘tube’
+8.34 ‘tube’
 ===========
 
 This module extends the ‘tube’ surfaces constructed in
@@ -7880,7 +8171,7 @@
 of the relative time.
 
    The casting of ‘path’ to ‘coloredpath’ allows the use of a ‘path’
-instead of a ‘coloredpath’; in this case the shading behaviour is the
+instead of a ‘coloredpath’; in this case the shading behavior is the
 default shading behavior for a surface.
 
    An example of ‘tube’ is provided in the file ‘trefoilknot.asy’.
@@ -7890,7 +8181,7 @@
 
 File: asymptote.info,  Node: flowchart,  Next: contour,  Prev: tube,  Up: Base modules
 
-8.34 ‘flowchart’
+8.35 ‘flowchart’
 ================
 
 This module provides routines for drawing flowcharts.  The primary
@@ -8006,7 +8297,7 @@
 
 File: asymptote.info,  Node: contour,  Next: contour3,  Prev: flowchart,  Up: Base modules
 
-8.35 ‘contour’
+8.36 ‘contour’
 ==============
 
 This module draws contour lines.  To construct contours corresponding to
@@ -8104,9 +8395,6 @@
 
 bounds range=image(f,Automatic,a,b,3N,Palette,n);
 
-real[] Cvals=uniform(range.min,range.max,Divs);
-draw(contour(f,a,b,Cvals,N,operator --),Tickpen+squarecap+beveljoin);
-
 // Major contours
 real[] Cvals=uniform(range.min,range.max,Divs);
 draw(contour(f,a,b,Cvals,N,operator --),Tickpen+squarecap+beveljoin);
@@ -8221,7 +8509,7 @@
 
    The example ‘Gouraudcontour.asy’ illustrates how to produce color
 density images over such irregular triangular meshes.  ‘Asymptote’ uses
-a robust version of Paul Bourke’s Delaunay triangulation algorithm based
+a robust version of Paul Bourke's Delaunay triangulation algorithm based
 on the public-domain exact arithmetic predicates written by Jonathan
 Shewchuk.
 
@@ -8228,7 +8516,7 @@
 
 File: asymptote.info,  Node: contour3,  Next: smoothcontour3,  Prev: contour,  Up: Base modules
 
-8.36 ‘contour3’
+8.37 ‘contour3’
 ===============
 
 This module draws surfaces described as the null space of real-valued
@@ -8238,7 +8526,7 @@
 
 File: asymptote.info,  Node: smoothcontour3,  Next: slopefield,  Prev: contour3,  Up: Base modules
 
-8.37 ‘smoothcontour3’
+8.38 ‘smoothcontour3’
 =====================
 
 This module, written by Charles Staats, draws implicitly defined
@@ -8264,17 +8552,17 @@
                         int keyword maxdepth=8,
                         bool usetriangles=true);
 The optional parameter ‘overlapedges’ attempts to compensate for an
-artifact that can cause the renderer to “see through” the boundary
+artifact that can cause the renderer to "see through" the boundary
 between patches.  Although it defaults to ‘false’, it should usually be
 set to ‘true’.  The example ‘genustwo.asy’ illustrates the use of this
 function.  Additional examples, together with a more in-depth
-explanation of the module’s usage and pitfalls, are available at
+explanation of the module's usage and pitfalls, are available at
 <https://github.com/charlesstaats/smoothcontour3>.
 
 
 File: asymptote.info,  Node: slopefield,  Next: ode,  Prev: smoothcontour3,  Up: Base modules
 
-8.38 ‘slopefield’
+8.39 ‘slopefield’
 =================
 
 To draw a slope field for the differential equation dy/dx=f(x,y) (or
@@ -8314,7 +8602,7 @@
 
 File: asymptote.info,  Node: ode,  Prev: slopefield,  Up: Base modules
 
-8.39 ‘ode’
+8.40 ‘ode’
 ==========
 
 The ‘ode’ module, illustrated in the example ‘odetest.asy’, implements a
@@ -8360,7 +8648,7 @@
 -compact               Conserve memory at the expense of speed false
 -compress              Compress images in PDF output [true]
 -convertOptions str    []
--d,-debug              Enable debugging messages [false]
+-d,-debug              Enable debugging messages and traceback false
 -devicepixelratio n    Ratio of physical to logical pixels [1]
 -digits n              Default output file precision [7]
 -divisor n             Garbage collect using purge(divisor=n) [2]
@@ -8456,7 +8744,7 @@
 -webgl2                Use webgl2 if available [false]
 -where                 Show where listed variables are declared [false]
 -wsl                   Run asy under the Windows Subsystem for Linux [false]
--xasy                  Interactive mode for xasy [false]
+-xasy                  Interactive mode for xasy false
 -zoomPinchCap limit    WebGL maximum zoom pinch [100]
 -zoomPinchFactor n     WebGL zoom pinch sensitivity [10]
 -zoomfactor factor     Zoom step factor [1.05]
@@ -8485,7 +8773,7 @@
 environment variable ‘ASYMPTOTE_CONFIG’ or ‘-config’ option).
 ‘Asymptote’ will look for this file in its usual search path (*note
 Search paths::).  Typically the configuration file is placed in the
-‘.asy’ directory in the user’s home directory (‘%USERPROFILE%\.asy’
+‘.asy’ directory in the user's home directory (‘%USERPROFILE%\.asy’
 under ‘MSDOS’).  Configuration variables are accessed using the long
 form of the option names:
 import settings;
@@ -8521,16 +8809,14 @@
 the default setting ‘settings.dvisvgmOptions="--optimize"’.
 
    ‘Asymptote’ can also produce any output format supported by the
-‘ImageMagick’ ‘convert’ program (version 6.3.5 or later recommended; an
-‘Invalid Parameter’ error message indicates that the ‘MSDOS’ utility
-‘convert’ is being used instead of the one that comes with
-‘ImageMagick’).  The optional setting ‘-render n’ requests an output
-resolution of ‘n’ pixels per ‘bp’.  Antialiasing is controlled by the
-parameter ‘antialias’, which by default specifies a sampling width of 2
-pixels.  To give other options to ‘convert’, use the ‘convertOptions’
-setting or call convert manually.  This example emulates how ‘Asymptote’
-produces antialiased ‘tiff’ output at one pixel per ‘bp’:
-asy -o - venn | convert -alpha Off -density 144x144 -geometry 50%x eps:- venn.tiff
+‘ImageMagick’ ‘magick’ program (version 7 or later.  The optional
+setting ‘-render n’ requests an output resolution of ‘n’ pixels per
+‘bp’.  Antialiasing is controlled by the parameter ‘antialias’, which by
+default specifies a sampling width of 2 pixels.  To give other options
+to ‘magick’, use the ‘convertOptions’ setting or call ‘magick convert’
+manually.  This example emulates how ‘Asymptote’ produces antialiased
+‘tiff’ output at one pixel per ‘bp’:
+asy -o - venn | magick convert -alpha Off -density 144x144 -geometry 50%x eps:- venn.tiff
 
    If the option ‘-nosafe’ is given, ‘Asymptote’ runs in unsafe mode.
 This enables the ‘int system(string s)’ and ‘int system(string[] s)’
@@ -8642,7 +8928,7 @@
      also accepted unless there exists a top-level variable named ‘q’).
      A history of the most recent 1000 (this number can be changed with
      the ‘historylines’ configuration variable) previous commands will
-     be retained in the file ‘.asy/history’ in the user’s home directory
+     be retained in the file ‘.asy/history’ in the user's home directory
      (unless the command-line option ‘-localhistory’ was specified, in
      which case the history will be stored in the file ‘.asy_history’ in
      the current directory).
@@ -8684,7 +8970,7 @@
 modified figure can then be saved as a normal ‘Asymptote’ file.
 
 
-File: asymptote.info,  Node: GUI installation,  Next: GUI usage,  Prev: GUI,  Up: GUI
+File: asymptote.info,  Node: GUI installation,  Next: GUI usage,  Up: GUI
 
 11.1 GUI installation
 =====================
@@ -8703,6 +8989,10 @@
 
    <https://sourceforge.net/projects/tumagcc/files/rsvg-convert-2.40.20.7z>
 
+   Ensure that ‘rsvg-convert’ is available in ‘PATH’, or specify the
+location of ‘rsvg-convert’ in ‘rsvgConverterPath’ option within ‘xasy’'s
+settings.
+
    Deconstruction of a picture into its components is fastest when using
 the ‘LaTeX’ TeX engine.  The default setting ‘dvisvgmMultipleFiles=true’
 speeds up deconstruction under PDF TeX engines.
@@ -8732,14 +9022,13 @@
 elements will be individually deconstructed (*note add::).
 
 
-File: asymptote.info,  Node: Command-Line Interface,  Next: PostScript to Asymptote,  Prev: GUI,  Up: Top
+File: asymptote.info,  Node: Command-Line Interface,  Next: Language server protocol,  Prev: GUI,  Up: Top
 
 12 Command-Line Interface
 *************************
 
 ‘Asymptote’ code may be sent to the <http://asymptote.ualberta.ca>
-server directly from the command line, specifying any options directly
-in the URL:
+server directly from the command line
 
    • SVG output:
 
@@ -8822,7 +9111,7 @@
      M-x lsp
 
 
-File: asymptote.info,  Node: PostScript to Asymptote,  Next: Help,  Prev: Command-Line Interface,  Up: Top
+File: asymptote.info,  Node: PostScript to Asymptote,  Next: Help,  Prev: Language server protocol,  Up: Top
 
 14 ‘PostScript’ to ‘Asymptote’
 ******************************
@@ -8831,13 +9120,14 @@
 available from <https://sourceforge.net/projects/pstoedit/>) includes an
 ‘Asymptote’ backend.  Unlike virtually all other ‘pstoedit’ backends,
 this driver includes native clipping, even-odd fill rule, ‘PostScript’
-subpath, and full image support.  Here is an example: ‘asy -V
-/usr/local/share/doc/asymptote/examples/venn.asy’
+subpath, and full image support.  Here is an example:
+
+‘asy -V /usr/local/share/doc/asymptote/examples/venn.asy’
 pstoedit -f asy venn.eps test.asy
 asy -V test
 
-If the line widths aren’t quite correct, try giving ‘pstoedit’ the
-‘-dis’ option.  If the fonts aren’t typeset correctly, try giving
+If the line widths aren't quite correct, try giving ‘pstoedit’ the
+‘-dis’ option.  If the fonts aren't typeset correctly, try giving
 ‘pstoedit’ the ‘-dt’ option.
 
 
@@ -8961,7 +9251,7 @@
 include Orest Shardt, Jesse Frohlich, Michail Vidiassov, Charles Staats,
 Philippe Ivaldi, Olivier Guibé, Radoslav Marinov, Jeff Samuelson, Chris
 Savage, Jacques Pienaar, Mark Henning, Steve Melenchuk, Martin Wiebusch,
-Stefan Knorr, Supakorn “Jamie” Rassameemasmuang, Jacob Skitsko, Joseph
+Stefan Knorr, Supakorn "Jamie" Rassameemasmuang, Jacob Skitsko, Joseph
 Chaumont, and Oliver Cheng.  Pedram Emami developed the ‘Asymptote Web
 Application’ hosted at <http://asymptote.ualberta.ca>:
 
@@ -8976,11 +9266,48 @@
  [index ]
 * Menu:
 
+* -:                                     Arithmetic & logical.
+                                                             (line   14)
+* --:                                    Paths.              (line   16)
+* -- <1>:                                Self & prefix operators.
+                                                             (line    6)
+* ---:                                   Bezier curves.      (line   84)
+* -=:                                    Self & prefix operators.
+                                                             (line    6)
+* -c:                                    Options.            (line  222)
+* -l:                                    Options.            (line  241)
+* -u:                                    Options.            (line  232)
+* -V:                                    Configuring.        (line    6)
+* -V <1>:                                Drawing in batch mode.
+                                                             (line   16)
+* ::                                     Arithmetic & logical.
+                                                             (line   61)
+* :::                                    Bezier curves.      (line   70)
 * !:                                     Arithmetic & logical.
                                                              (line   57)
 * !=:                                    Structures.         (line   62)
 * != <1>:                                Arithmetic & logical.
                                                              (line   37)
+* ?:                                     Arithmetic & logical.
+                                                             (line   61)
+* ..:                                    Paths.              (line   16)
+* .asy:                                  Search paths.       (line   12)
+* *:                                     Pens.               (line   15)
+* * <1>:                                 Arithmetic & logical.
+                                                             (line   16)
+* **:                                    Arithmetic & logical.
+                                                             (line   31)
+* *=:                                    Self & prefix operators.
+                                                             (line    6)
+* /:                                     Arithmetic & logical.
+                                                             (line   18)
+* /=:                                    Self & prefix operators.
+                                                             (line    6)
+* &:                                     Bezier curves.      (line   84)
+* & <1>:                                 Arithmetic & logical.
+                                                             (line   49)
+* &&:                                    Arithmetic & logical.
+                                                             (line   47)
 * #:                                     Arithmetic & logical.
                                                              (line   20)
 * %:                                     Arithmetic & logical.
@@ -8988,17 +9315,12 @@
 * % <1>:                                 Interactive mode.   (line   16)
 * %=:                                    Self & prefix operators.
                                                              (line    6)
-* &:                                     Bezier curves.      (line   84)
-* & <1>:                                 Arithmetic & logical.
-                                                             (line   49)
-* &&:                                    Arithmetic & logical.
-                                                             (line   47)
-* *:                                     Pens.               (line   15)
-* * <1>:                                 Arithmetic & logical.
-                                                             (line   16)
-* **:                                    Arithmetic & logical.
-                                                             (line   31)
-* *=:                                    Self & prefix operators.
+* ^:                                     Arithmetic & logical.
+                                                             (line   29)
+* ^ <1>:                                 Arithmetic & logical.
+                                                             (line   55)
+* ^^:                                    Paths.              (line   23)
+* ^=:                                    Self & prefix operators.
                                                              (line    6)
 * +:                                     Pens.               (line   15)
 * + <1>:                                 Arithmetic & logical.
@@ -9007,33 +9329,6 @@
                                                              (line    6)
 * +=:                                    Self & prefix operators.
                                                              (line    6)
-* -:                                     Arithmetic & logical.
-                                                             (line   14)
-* --:                                    Paths.              (line   16)
-* -- <1>:                                Self & prefix operators.
-                                                             (line    6)
-* ---:                                   Bezier curves.      (line   84)
-* -=:                                    Self & prefix operators.
-                                                             (line    6)
-* -c:                                    Options.            (line  224)
-* -l:                                    Options.            (line  243)
-* -u:                                    Options.            (line  234)
-* -V:                                    Configuring.        (line    6)
-* -V <1>:                                Drawing in batch mode.
-                                                             (line   16)
-* ..:                                    Paths.              (line   16)
-* .asy:                                  Search paths.       (line   12)
-* /:                                     Arithmetic & logical.
-                                                             (line   18)
-* /=:                                    Self & prefix operators.
-                                                             (line    6)
-* 2D graphs:                             graph.              (line    6)
-* 3D graphs:                             graph3.             (line    6)
-* 3D grids:                              grid3.              (line    6)
-* 3D PostScript:                         three.              (line  665)
-* ::                                     Arithmetic & logical.
-                                                             (line   61)
-* :::                                    Bezier curves.      (line   70)
 * <:                                     Arithmetic & logical.
                                                              (line   39)
 * <=:                                    Arithmetic & logical.
@@ -9045,19 +9340,14 @@
                                                              (line   45)
 * >=:                                    Arithmetic & logical.
                                                              (line   43)
-* ?:                                     Arithmetic & logical.
-                                                             (line   61)
-* ^:                                     Arithmetic & logical.
-                                                             (line   29)
-* ^ <1>:                                 Arithmetic & logical.
-                                                             (line   55)
-* ^=:                                    Self & prefix operators.
-                                                             (line    6)
-* ^^:                                    Paths.              (line   23)
 * |:                                     Arithmetic & logical.
                                                              (line   53)
 * ||:                                    Arithmetic & logical.
                                                              (line   51)
+* 2D graphs:                             graph.              (line    6)
+* 3D graphs:                             graph3.             (line    6)
+* 3D grids:                              grid3.              (line    6)
+* 3D PostScript:                         three.              (line  678)
 * a4:                                    Configuring.        (line   63)
 * abort:                                 Data types.         (line  364)
 * abs:                                   Data types.         (line   65)
@@ -9067,10 +9357,10 @@
 * abs2:                                  Data types.         (line   65)
 * abs2 <1>:                              Data types.         (line  144)
 * absolute:                              Configuring.        (line   38)
-* absolute <1>:                          three.              (line  241)
+* absolute <1>:                          three.              (line  254)
 * accel:                                 Paths and guides.   (line  126)
 * accel <1>:                             Paths and guides.   (line  132)
-* accel <2>:                             three.              (line  566)
+* accel <2>:                             three.              (line  579)
 * access:                                Import.             (line    6)
 * access <1>:                            Import.             (line   45)
 * acknowledgments:                       Credits.            (line    6)
@@ -9081,24 +9371,24 @@
 * acosh:                                 Mathematical functions.
                                                              (line    6)
 * add:                                   Frames and pictures.
-                                                             (line  217)
+                                                             (line  204)
 * add <1>:                               Frames and pictures.
-                                                             (line  231)
-* add <2>:                               three.              (line  342)
-* addViews:                              three.              (line  459)
+                                                             (line  218)
+* add <2>:                               three.              (line  355)
+* addViews:                              three.              (line  472)
 * adjust:                                Pens.               (line  123)
 * Ai:                                    Mathematical functions.
-                                                             (line   48)
+                                                             (line   49)
+* Ai_deriv:                              Mathematical functions.
+                                                             (line   49)
 * Airy:                                  Mathematical functions.
-                                                             (line   48)
-* Ai_deriv:                              Mathematical functions.
-                                                             (line   48)
+                                                             (line   49)
 * alias:                                 Structures.         (line   62)
 * alias <1>:                             Arrays.             (line  183)
-* Align:                                 label.              (line   12)
-* aligndir:                              Options.            (line  216)
+* Align:                                 label.              (line   20)
+* aligndir:                              Options.            (line  214)
 * all:                                   Arrays.             (line  350)
-* Allow:                                 Pens.               (line  363)
+* Allow:                                 Pens.               (line  416)
 * and:                                   Bezier curves.      (line   56)
 * AND:                                   Arithmetic & logical.
                                                              (line   68)
@@ -9109,39 +9399,41 @@
 * animation:                             animation.          (line    6)
 * animation <1>:                         animation.          (line    6)
 * annotate:                              annotate.           (line    6)
-* antialias:                             three.              (line  261)
+* antialias:                             three.              (line  274)
 * antialias <1>:                         Options.            (line  188)
 * append:                                Files.              (line   38)
 * append <1>:                            Arrays.             (line   39)
 * arc:                                   Paths and guides.   (line   24)
 * Arc:                                   Paths and guides.   (line   37)
-* arc <1>:                               three.              (line  353)
-* ArcArrow:                              draw.               (line   26)
-* ArcArrow3:                             three.              (line  632)
-* ArcArrows:                             draw.               (line   26)
-* ArcArrows3:                            three.              (line  632)
+* arc <1>:                               three.              (line  366)
+* ArcArrow:                              draw.               (line   30)
+* ArcArrow3:                             three.              (line  645)
+* ArcArrows:                             draw.               (line   30)
+* ArcArrows3:                            three.              (line  645)
 * arclength:                             Paths and guides.   (line  153)
-* arclength <1>:                         three.              (line  566)
+* arclength <1>:                         three.              (line  579)
 * arcpoint:                              Paths and guides.   (line  163)
 * arctime:                               Paths and guides.   (line  157)
-* arctime <1>:                           three.              (line  566)
+* arctime <1>:                           three.              (line  579)
 * arguments:                             Default arguments.  (line    6)
 * arithmetic operators:                  Arithmetic & logical.
                                                              (line    6)
 * array:                                 Data types.         (line  284)
 * array <1>:                             Arrays.             (line  112)
-* array iteration:                       Programming.        (line   52)
+* array iteration:                       Programming.        (line   54)
 * arrays:                                Arrays.             (line    6)
 * arrow:                                 Drawing commands.   (line   34)
 * Arrow:                                 draw.               (line   26)
-* arrow <1>:                             label.              (line   70)
+* arrow <1>:                             label.              (line   77)
 * arrow keys:                            Drawing in interactive mode.
                                                              (line   11)
 * arrow keys <1>:                        GUI usage.          (line    6)
-* Arrow3:                                three.              (line  632)
+* Arrow3:                                three.              (line  645)
+* arrowbar:                              draw.               (line   26)
+* arrowhead:                             draw.               (line   50)
 * arrows:                                draw.               (line   26)
 * Arrows:                                draw.               (line   26)
-* Arrows3:                               three.              (line  632)
+* Arrows3:                               three.              (line  645)
 * as:                                    Import.             (line   67)
 * ascii:                                 Data types.         (line  309)
 * ascii <1>:                             Data types.         (line  309)
@@ -9152,9 +9444,9 @@
 * asinh:                                 Mathematical functions.
                                                              (line    6)
 * Aspect:                                Frames and pictures.
-                                                             (line   59)
+                                                             (line   45)
 * assert:                                Data types.         (line  369)
-* assignment:                            Programming.        (line   26)
+* assignment:                            Programming.        (line   28)
 * asy:                                   Data types.         (line  359)
 * asy <1>:                               Import.             (line  106)
 * asy-mode:                              Editing modes.      (line    6)
@@ -9162,9 +9454,9 @@
 * asygl:                                 Configuring.        (line   69)
 * asyinclude:                            LaTeX usage.        (line   42)
 * Asymptote Web Application:             Description.        (line    6)
+* ASYMPTOTE_CONFIG:                      Options.            (line  159)
 * asymptote.sty:                         LaTeX usage.        (line    6)
 * asymptote.xml:                         Editing modes.      (line   48)
-* ASYMPTOTE_CONFIG:                      Options.            (line  159)
 * atan:                                  Mathematical functions.
                                                              (line    6)
 * aTan:                                  Mathematical functions.
@@ -9175,69 +9467,70 @@
                                                              (line    6)
 * atleast:                               Bezier curves.      (line   56)
 * attach:                                Frames and pictures.
-                                                             (line  276)
+                                                             (line  263)
 * attach <1>:                            LaTeX usage.        (line   47)
 * attach <2>:                            graph.              (line  407)
-* autoadjust:                            three.              (line  428)
+* autoadjust:                            three.              (line  441)
 * autoimport:                            Options.            (line  155)
 * automatic scaling:                     graph.              (line  711)
 * automatic scaling <1>:                 graph.              (line  711)
+* autounravel:                           Autounravel.        (line    6)
 * axialshade:                            fill.               (line   43)
 * axis:                                  graph.              (line  925)
 * axis <1>:                              graph.              (line 1007)
-* axis <2>:                              graph3.             (line   66)
-* axis <3>:                              graph3.             (line   82)
+* axis <2>:                              graph3.             (line   69)
+* axis <3>:                              graph3.             (line   85)
 * azimuth:                               Data types.         (line  154)
 * babel:                                 babel.              (line    6)
 * background:                            three.              (line   76)
 * background <1>:                        three.              (line   97)
 * background color:                      Frames and pictures.
-                                                             (line  180)
-* BackView:                              three.              (line  452)
+                                                             (line  167)
+* BackView:                              three.              (line  465)
 * Bar:                                   draw.               (line   19)
-* Bar3:                                  three.              (line  632)
+* Bar3:                                  three.              (line  645)
 * Bars:                                  draw.               (line   19)
-* Bars3:                                 three.              (line  632)
+* Bars3:                                 three.              (line  645)
 * barsize:                               draw.               (line   19)
 * base modules:                          Base modules.       (line    6)
 * basealign:                             Pens.               (line  181)
-* baseline:                              label.              (line   90)
+* baseline:                              label.              (line   97)
 * batch mode:                            Drawing in batch mode.
                                                              (line    6)
 * beep:                                  Data types.         (line  382)
-* BeginArcArrow:                         draw.               (line   26)
-* BeginArcArrow3:                        three.              (line  632)
+* BeginArcArrow:                         draw.               (line   30)
+* BeginArcArrow3:                        three.              (line  645)
 * BeginArrow:                            draw.               (line   26)
-* BeginArrow3:                           three.              (line  632)
+* BeginArrow3:                           three.              (line  645)
 * BeginBar:                              draw.               (line   19)
-* BeginBar3:                             three.              (line  632)
-* BeginDotMargin:                        draw.               (line   42)
-* BeginDotMargin3:                       three.              (line  648)
-* BeginMargin:                           draw.               (line   42)
-* BeginMargin3:                          three.              (line  648)
-* BeginPenMargin:                        draw.               (line   42)
-* BeginPenMargin2:                       three.              (line  648)
-* BeginPenMargin3:                       three.              (line  648)
-* BeginPoint:                            label.              (line   55)
+* BeginBar3:                             three.              (line  645)
+* BeginDotMargin:                        draw.               (line   87)
+* BeginDotMargin3:                       three.              (line  661)
+* BeginMargin:                           draw.               (line   68)
+* BeginMargin3:                          three.              (line  661)
+* BeginPenMargin:                        draw.               (line   76)
+* BeginPenMargin2:                       three.              (line  661)
+* BeginPenMargin3:                       three.              (line  661)
+* BeginPoint:                            label.              (line   62)
 * Bessel:                                Mathematical functions.
-                                                             (line   48)
+                                                             (line   49)
 * bevel:                                 flowchart.          (line   72)
 * beveljoin:                             Pens.               (line  149)
 * Bezier curves:                         Bezier curves.      (line    6)
-* Bezier patch:                          three.              (line  128)
-* Bezier triangle:                       three.              (line  128)
-* bezulate:                              three.              (line  146)
+* Bezier patch:                          three.              (line  141)
+* Bezier triangle:                       three.              (line  141)
+* bezulate:                              three.              (line  159)
 * Bi:                                    Mathematical functions.
-                                                             (line   48)
-* Billboard:                             three.              (line  536)
+                                                             (line   49)
+* Bi_deriv:                              Mathematical functions.
+                                                             (line   49)
+* Billboard:                             three.              (line  549)
 * binary:                                Files.              (line   80)
 * binary format:                         Files.              (line   80)
 * binary operators:                      Arithmetic & logical.
                                                              (line    6)
 * binarytree:                            binarytree.         (line    6)
-* Bi_deriv:                              Mathematical functions.
-                                                             (line   48)
-* black stripes:                         three.              (line  261)
+* black stripes:                         three.              (line  274)
 * Blank:                                 draw.               (line   26)
 * block.bottom:                          flowchart.          (line   19)
 * block.bottomleft:                      flowchart.          (line   19)
@@ -9256,23 +9549,21 @@
                                                              (line    6)
 * Bottom:                                graph.              (line  133)
 * BottomTop:                             graph.              (line  139)
-* BottomView:                            three.              (line  452)
+* BottomView:                            three.              (line  465)
 * bounding box:                          Frames and pictures.
-                                                             (line  180)
+                                                             (line  167)
 * bounds:                                palette.            (line   43)
-* Bounds:                                graph3.             (line   21)
+* Bounds:                                graph3.             (line   24)
 * box:                                   Frames and pictures.
-                                                             (line   25)
-* box <1>:                               Frames and pictures.
-                                                             (line  130)
-* box <2>:                               three.              (line  375)
-* box <3>:                               three.              (line  377)
+                                                             (line  117)
+* box <1>:                               three.              (line  388)
+* box <2>:                               three.              (line  390)
 * bp:                                    Drawing in batch mode.
                                                              (line   23)
 * brace:                                 Paths and guides.   (line   51)
-* break:                                 Programming.        (line   48)
+* break:                                 Programming.        (line   50)
 * breakpoints:                           Debugger.           (line   21)
-* brick:                                 Pens.               (line  285)
+* brick:                                 Pens.               (line  338)
 * broken axis:                           graph.              (line  822)
 * bug reports:                           Help.               (line   19)
 * buildcycle:                            Paths and guides.   (line  270)
@@ -9282,9 +9573,7 @@
 * BWRainbow2:                            palette.            (line   18)
 * C string:                              Data types.         (line  217)
 * CAD:                                   CAD.                (line    6)
-* calculateTransform:                    Frames and pictures.
-                                                             (line  118)
-* camera:                                three.              (line  422)
+* camera:                                three.              (line  435)
 * casts:                                 Casts.              (line    6)
 * cbrt:                                  Mathematical functions.
                                                              (line    6)
@@ -9291,20 +9580,20 @@
 * cd:                                    Files.              (line   26)
 * ceil:                                  Mathematical functions.
                                                              (line   26)
-* Center:                                label.              (line   60)
-* center:                                three.              (line  405)
-* checker:                               Pens.               (line  285)
-* Chinese:                               Pens.               (line  244)
+* Center:                                label.              (line   67)
+* center:                                three.              (line  418)
+* checker:                               Pens.               (line  338)
+* Chinese:                               Pens.               (line  297)
 * choose:                                Mathematical functions.
                                                              (line   39)
 * Ci:                                    Mathematical functions.
-                                                             (line   48)
+                                                             (line   49)
 * circle:                                Paths and guides.   (line   10)
 * Circle:                                Paths and guides.   (line   18)
-* circle <1>:                            three.              (line  349)
+* circle <1>:                            three.              (line  362)
 * circle <2>:                            flowchart.          (line   61)
 * circlebarframe:                        markers.            (line   18)
-* CJK:                                   Pens.               (line  244)
+* CJK:                                   Pens.               (line  297)
 * clamped:                               graph.              (line   36)
 * clang:                                 Compiling from UNIX source.
                                                              (line   48)
@@ -9318,7 +9607,7 @@
 * cmyk:                                  Pens.               (line   38)
 * colatitude:                            Data types.         (line  159)
 * color:                                 Pens.               (line   23)
-* color <1>:                             graph3.             (line  133)
+* color <1>:                             graph3.             (line  136)
 * coloredNodes:                          tube.               (line   25)
 * coloredpath:                           tube.               (line   18)
 * coloredSegments:                       tube.               (line   25)
@@ -9336,7 +9625,7 @@
                                                              (line    6)
 * complement:                            Arrays.             (line  149)
 * concat:                                Arrays.             (line  179)
-* conditional:                           Programming.        (line   26)
+* conditional:                           Programming.        (line   28)
 * conditional <1>:                       Arithmetic & logical.
                                                              (line   61)
 * config:                                Configuring.        (line   69)
@@ -9347,17 +9636,14 @@
 * conj:                                  Data types.         (line   62)
 * constructors:                          Structures.         (line   91)
 * context:                               Options.            (line  188)
-* continue:                              Programming.        (line   48)
+* continue:                              Programming.        (line   50)
 * continue <1>:                          Debugger.           (line   31)
 * contour:                               contour.            (line    6)
 * contour3:                              contour3.           (line    6)
 * controls:                              Bezier curves.      (line   45)
 * controls <1>:                          three.              (line    6)
-* controlSpecifier:                      Paths and guides.   (line  396)
-* convert:                               Configuring.        (line   69)
-* convert <1>:                           Files.              (line  159)
-* convert <2>:                           animation.          (line    6)
-* convert <3>:                           Options.            (line  188)
+* controlSpecifier:                      Paths and guides.   (line  397)
+* convert:                               Files.              (line  159)
 * convertOptions:                        Options.            (line  174)
 * Coons shading:                         fill.               (line   78)
 * copy:                                  Arrays.             (line  176)
@@ -9367,7 +9653,8 @@
                                                              (line   20)
 * cosh:                                  Mathematical functions.
                                                              (line    6)
-* cputime:                               Structures.         (line  169)
+* cputime:                               Mathematical functions.
+                                                             (line  110)
 * crop:                                  graph.              (line  640)
 * cropping graphs:                       graph.              (line  640)
 * cross:                                 Data types.         (line  106)
@@ -9374,7 +9661,7 @@
 * cross <1>:                             Data types.         (line  197)
 * cross <2>:                             graph.              (line  481)
 * crossframe:                            markers.            (line   22)
-* crosshatch:                            Pens.               (line  302)
+* crosshatch:                            Pens.               (line  355)
 * csv:                                   Arrays.             (line  382)
 * CTZ:                                   Arithmetic & logical.
                                                              (line   68)
@@ -9381,10 +9668,10 @@
 * cubicroots:                            Arrays.             (line  339)
 * curl:                                  Bezier curves.      (line   66)
 * curl <1>:                              three.              (line    6)
-* curlSpecifier:                         Paths and guides.   (line  408)
+* curlSpecifier:                         Paths and guides.   (line  409)
 * currentlight:                          three.              (line   76)
 * currentpen:                            Pens.               (line    6)
-* currentprojection:                     three.              (line  449)
+* currentprojection:                     three.              (line  462)
 * curve:                                 slopefield.         (line   20)
 * custom axis types:                     graph.              (line  142)
 * custom mark routine:                   graph.              (line  578)
@@ -9394,10 +9681,10 @@
 * cycle <1>:                             Paths.              (line   16)
 * cycle <2>:                             three.              (line    6)
 * cyclic:                                Paths and guides.   (line   85)
-* cyclic <1>:                            Paths and guides.   (line  376)
+* cyclic <1>:                            Paths and guides.   (line  377)
 * cyclic <2>:                            Arrays.             (line   39)
-* cyclic <3>:                            three.              (line  566)
-* Cyrillic:                              Pens.               (line  238)
+* cyclic <3>:                            three.              (line  579)
+* Cyrillic:                              Pens.               (line  291)
 * dashdotted:                            Pens.               (line  102)
 * dashed:                                Pens.               (line  102)
 * data types:                            Data types.         (line    6)
@@ -9405,21 +9692,22 @@
 * Debian:                                UNIX binary distributions.
                                                              (line   19)
 * debugger:                              Debugger.           (line    6)
-* declaration:                           Programming.        (line   26)
+* declaration:                           Programming.        (line   28)
 * deconstruct:                           GUI usage.          (line    6)
 * default arguments:                     Default arguments.  (line    6)
 * defaultformat:                         graph.              (line  176)
-* DefaultHead:                           draw.               (line   26)
-* DefaultHead3:                          three.              (line  632)
+* DefaultHead:                           draw.               (line   50)
+* DefaultHead3:                          three.              (line  645)
 * defaultpen:                            Pens.               (line   49)
 * defaultpen <1>:                        Pens.               (line  122)
 * defaultpen <2>:                        Pens.               (line  127)
 * defaultpen <3>:                        Pens.               (line  139)
-* defaultpen <4>:                        Pens.               (line  192)
-* defaultpen <5>:                        Pens.               (line  363)
-* defaultpen <6>:                        Pens.               (line  387)
+* defaultpen <4>:                        Pens.               (line  245)
+* defaultpen <5>:                        Pens.               (line  416)
+* defaultpen <6>:                        Pens.               (line  440)
 * defaultrender:                         three.              (line   46)
-* deferred drawing:                      simplex.            (line    6)
+* deferred drawing:                      Deferred drawing.   (line    6)
+* deferred drawing <1>:                  simplex2.           (line    6)
 * degrees:                               Data types.         (line   78)
 * degrees <1>:                           Mathematical functions.
                                                              (line   17)
@@ -9428,7 +9716,7 @@
 * delete:                                Files.              (line  154)
 * delete <1>:                            Arrays.             (line   39)
 * description:                           Description.        (line    6)
-* devicepixelratio:                      three.              (line  184)
+* devicepixelratio:                      three.              (line  197)
 * diagonal:                              Arrays.             (line  324)
 * diamond:                               flowchart.          (line   54)
 * diffuse:                               three.              (line   76)
@@ -9438,34 +9726,34 @@
 * dir <1>:                               Data types.         (line   90)
 * dir <2>:                               Data types.         (line  181)
 * dir <3>:                               Paths and guides.   (line  109)
-* dir <4>:                               three.              (line  566)
+* dir <4>:                               three.              (line  579)
 * direction specifier:                   Bezier curves.      (line    6)
 * directory:                             Files.              (line   26)
-* dirSpecifier:                          Paths and guides.   (line  390)
+* dirSpecifier:                          Paths and guides.   (line  391)
 * dirtime:                               Paths and guides.   (line  166)
 * display:                               Configuring.        (line   15)
-* do:                                    Programming.        (line   48)
+* do:                                    Programming.        (line   50)
 * DOSendl:                               Files.              (line   65)
 * DOSnewl:                               Files.              (line   65)
-* dot:                                   draw.               (line   83)
+* dot:                                   draw.               (line  117)
 * dot <1>:                               Data types.         (line  103)
 * dot <2>:                               Data types.         (line  194)
 * dot <3>:                               Arrays.             (line  279)
 * dot <4>:                               Arrays.             (line  282)
-* DotMargin:                             draw.               (line   42)
-* DotMargin3:                            three.              (line  648)
-* DotMargins:                            draw.               (line   42)
-* DotMargins3:                           three.              (line  648)
+* DotMargin:                             draw.               (line   83)
+* DotMargin3:                            three.              (line  661)
+* DotMargins:                            draw.               (line   89)
+* DotMargins3:                           three.              (line  661)
 * dotted:                                Pens.               (line  102)
-* double deferred drawing:               three.              (line  327)
+* double deferred drawing:               three.              (line  340)
 * double precision:                      Files.              (line   80)
 * draw:                                  Drawing commands.   (line   34)
 * draw <1>:                              draw.               (line    6)
-* Draw:                                  draw.               (line   26)
-* draw <2>:                              draw.               (line  113)
-* Draw <1>:                              Frames and pictures.
-                                                             (line  160)
-* draw <3>:                              three.              (line  154)
+* draw <2>:                              draw.               (line  147)
+* Draw:                                  Frames and pictures.
+                                                             (line  147)
+* draw <3>:                              three.              (line  167)
+* drawer:                                Deferred drawing.   (line   31)
 * drawing commands:                      Drawing commands.   (line    6)
 * drawline:                              math.               (line    9)
 * drawtree:                              drawtree.           (line    6)
@@ -9473,49 +9761,46 @@
 * dvipsOptions:                          Options.            (line  174)
 * dvisvgm:                               Configuring.        (line   69)
 * dvisvgm <1>:                           Options.            (line  193)
-* dvisvgmMultipleFiles:                  GUI installation.   (line   20)
+* dvisvgmMultipleFiles:                  GUI installation.   (line   24)
 * dvisvgmOptions:                        Options.            (line  174)
 * E:                                     Labels.             (line   18)
 * E <1>:                                 Mathematical functions.
-                                                             (line   48)
+                                                             (line   49)
 * Editing modes:                         Editing modes.      (line    6)
 * Ei:                                    Mathematical functions.
-                                                             (line   48)
+                                                             (line   49)
 * ellipse:                               Paths and guides.   (line   45)
-* ellipse <1>:                           Frames and pictures.
-                                                             (line   25)
 * elliptic functions:                    Mathematical functions.
-                                                             (line   48)
-* else:                                  Programming.        (line   26)
+                                                             (line   49)
+* else:                                  Programming.        (line   28)
 * emacs:                                 Editing modes.      (line    6)
 * embed:                                 embed.              (line    6)
-* Embedded:                              three.              (line  536)
+* Embedded:                              three.              (line  549)
 * emissivepen:                           three.              (line   66)
 * empty:                                 Frames and pictures.
                                                              (line    7)
-* EndArcArrow:                           draw.               (line   26)
-* EndArcArrow3:                          three.              (line  632)
+* EndArcArrow:                           draw.               (line   30)
+* EndArcArrow3:                          three.              (line  645)
 * EndArrow:                              draw.               (line   26)
-* EndArrow3:                             three.              (line  632)
+* EndArrow3:                             three.              (line  645)
 * EndBar:                                draw.               (line   19)
-* EndBar3:                               three.              (line  632)
-* EndDotMargin:                          draw.               (line   42)
-* EndDotMargin3:                         three.              (line  648)
+* EndBar3:                               three.              (line  645)
+* EndDotMargin:                          draw.               (line   89)
+* EndDotMargin3:                         three.              (line  661)
 * endl:                                  Files.              (line   65)
-* EndMargin:                             draw.               (line   42)
-* EndMargin3:                            three.              (line  648)
-* EndPenMargin:                          draw.               (line   42)
-* EndPenMargin2:                         three.              (line  648)
-* EndPenMargin3:                         three.              (line  648)
-* EndPoint:                              label.              (line   55)
-* envelope:                              Frames and pictures.
-                                                             (line   25)
+* EndMargin:                             draw.               (line   69)
+* EndMargin3:                            three.              (line  661)
+* EndPenMargin:                          draw.               (line   78)
+* EndPenMargin2:                         three.              (line  661)
+* EndPenMargin3:                         three.              (line  661)
+* EndPoint:                              label.              (line   62)
+* envelope:                              label.              (line  111)
 * environment variables:                 Configuring.        (line   90)
 * eof:                                   Files.              (line   97)
 * eof <1>:                               Arrays.             (line  364)
 * eol:                                   Files.              (line   97)
 * eol <1>:                               Arrays.             (line  364)
-* EPS:                                   label.              (line   78)
+* EPS:                                   label.              (line   85)
 * EPS <1>:                               Options.            (line  188)
 * erase:                                 Drawing in interactive mode.
                                                              (line   11)
@@ -9523,7 +9808,7 @@
 * erase <2>:                             Frames and pictures.
                                                              (line    7)
 * erase <3>:                             Frames and pictures.
-                                                             (line  284)
+                                                             (line  271)
 * erf:                                   Mathematical functions.
                                                              (line    6)
 * erfc:                                  Mathematical functions.
@@ -9548,17 +9833,17 @@
 * expm1:                                 Mathematical functions.
                                                              (line    6)
 * exponential integral:                  Mathematical functions.
-                                                             (line   48)
+                                                             (line   49)
 * extendcap:                             Pens.               (line  139)
 * extension:                             Paths and guides.   (line  246)
 * extension <1>:                         MetaPost.           (line   10)
 * external:                              embed.              (line   11)
-* extrude:                               three.              (line  560)
+* extrude:                               three.              (line  573)
 * F:                                     Mathematical functions.
-                                                             (line   48)
+                                                             (line   49)
 * fabs:                                  Mathematical functions.
                                                              (line    6)
-* face:                                  three.              (line  672)
+* face:                                  three.              (line  685)
 * factorial:                             Mathematical functions.
                                                              (line   39)
 * Fedora:                                UNIX binary distributions.
@@ -9571,27 +9856,25 @@
                                                              (line   62)
 * file:                                  Files.              (line    6)
 * file <1>:                              Debugger.           (line   44)
-* Fill:                                  draw.               (line   26)
-* fill:                                  draw.               (line  118)
+* fill:                                  draw.               (line  152)
 * fill <1>:                              fill.               (line    6)
 * fill <2>:                              fill.               (line   17)
-* Fill <1>:                              Frames and pictures.
-                                                             (line  146)
-* FillDraw:                              draw.               (line   26)
+* Fill:                                  Frames and pictures.
+                                                             (line  133)
 * filldraw:                              fill.               (line   11)
-* FillDraw <1>:                          Frames and pictures.
-                                                             (line  136)
+* FillDraw:                              Frames and pictures.
+                                                             (line  123)
 * filloutside:                           fill.               (line   27)
 * fillrule:                              Pens.               (line  164)
+* filltype:                              Frames and pictures.
+                                                             (line  122)
 * find:                                  Data types.         (line  242)
 * find <1>:                              Arrays.             (line  158)
 * findall:                               Arrays.             (line  163)
 * firstcut:                              Paths and guides.   (line  262)
-* fit:                                   Frames and pictures.
-                                                             (line  113)
-* fit3:                                  three.              (line  340)
+* fit3:                                  three.              (line  353)
 * fixedscaling:                          Frames and pictures.
-                                                             (line   81)
+                                                             (line   67)
 * floor:                                 Mathematical functions.
                                                              (line   26)
 * flowchart:                             flowchart.          (line    6)
@@ -9599,13 +9882,13 @@
 * flush <1>:                             Files.              (line   97)
 * fmod:                                  Mathematical functions.
                                                              (line    6)
-* font:                                  Pens.               (line  206)
-* font <1>:                              Pens.               (line  206)
-* font <2>:                              Pens.               (line  235)
-* font encoding:                         Pens.               (line  235)
-* fontcommand:                           Pens.               (line  219)
-* fontsize:                              Pens.               (line  192)
-* for:                                   Programming.        (line   26)
+* font:                                  Pens.               (line  259)
+* font <1>:                              Pens.               (line  259)
+* font <2>:                              Pens.               (line  288)
+* font encoding:                         Pens.               (line  288)
+* fontcommand:                           Pens.               (line  272)
+* fontsize:                              Pens.               (line  245)
+* for:                                   Programming.        (line   28)
 * format:                                Data types.         (line  290)
 * format <1>:                            Options.            (line  188)
 * forum:                                 Help.               (line    6)
@@ -9613,8 +9896,8 @@
                                                              (line    7)
 * freshnel0:                             three.              (line   66)
 * from:                                  Import.             (line   16)
-* FrontView:                             three.              (line  452)
-* function declarations:                 Functions.          (line   79)
+* FrontView:                             three.              (line  465)
+* function declarations:                 Functions.          (line   82)
 * Function shading:                      fill.               (line  100)
 * function shading:                      fill.               (line  100)
 * functions:                             Functions.          (line    6)
@@ -9635,16 +9918,16 @@
 * git:                                   Git.                (line    6)
 * globalwrite:                           Files.              (line   40)
 * globalwrite <1>:                       Files.              (line  154)
-* glOptions:                             three.              (line  261)
+* glOptions:                             three.              (line  274)
 * glOptions <1>:                         Options.            (line  174)
 * GNU Scientific Library:                Mathematical functions.
-                                                             (line   48)
+                                                             (line   49)
 * gouraudshade:                          fill.               (line   63)
 * Gradient:                              palette.            (line   25)
 * gradient shading:                      fill.               (line   32)
 * graph:                                 graph.              (line    6)
 * graph3:                                graph3.             (line    6)
-* graphic:                               label.              (line   78)
+* graphic:                               label.              (line   85)
 * graphic <1>:                           Options.            (line  193)
 * graphical user interface:              GUI.                (line    6)
 * graphwithderiv:                        graph.              (line  671)
@@ -9651,7 +9934,7 @@
 * gray:                                  Pens.               (line   25)
 * grayscale:                             Pens.               (line   25)
 * Grayscale:                             palette.            (line    9)
-* grid:                                  Pens.               (line  285)
+* grid:                                  Pens.               (line  338)
 * grid <1>:                              graph.              (line  767)
 * grid3:                                 grid3.              (line    6)
 * gs:                                    Configuring.        (line   15)
@@ -9658,14 +9941,14 @@
 * GSL:                                   Compiling from UNIX source.
                                                              (line   62)
 * gsl:                                   Mathematical functions.
-                                                             (line   48)
+                                                             (line   49)
 * gsOptions:                             Options.            (line  174)
 * GUI:                                   GUI.                (line    6)
 * GUI installation:                      GUI installation.   (line    6)
 * GUI usage:                             GUI usage.          (line    6)
-* guide:                                 Paths and guides.   (line  314)
+* guide:                                 Paths and guides.   (line  315)
 * guide3:                                three.              (line    6)
-* hatch:                                 Pens.               (line  302)
+* hatch:                                 Pens.               (line  355)
 * Headlamp:                              three.              (line   76)
 * height:                                LaTeX usage.        (line   47)
 * help:                                  Interactive mode.   (line   42)
@@ -9677,16 +9960,16 @@
 * hex <1>:                               Pens.               (line   64)
 * hexadecimal:                           Data types.         (line  306)
 * hexadecimal <1>:                       Pens.               (line   62)
-* hidden surface removal:                three.              (line  672)
+* hidden surface removal:                three.              (line  685)
 * histogram:                             Mathematical functions.
                                                              (line   39)
 * history:                               Files.              (line  147)
 * history <1>:                           Interactive mode.   (line   54)
 * historylines:                          Interactive mode.   (line   58)
-* HookHead:                              draw.               (line   26)
-* HookHead3:                             three.              (line  632)
+* HookHead:                              draw.               (line   50)
+* HookHead3:                             three.              (line  645)
 * Horizontal:                            flowchart.          (line   77)
-* HTML5:                                 three.              (line  233)
+* HTML5:                                 three.              (line  246)
 * htmlviewer:                            Configuring.        (line   15)
 * htmlviewer <1>:                        Configuring.        (line   38)
 * htmlviewerOptions:                     Options.            (line  174)
@@ -9694,20 +9977,22 @@
 * hypot:                                 Mathematical functions.
                                                              (line    6)
 * I:                                     Mathematical functions.
-                                                             (line   48)
-* ibl:                                   three.              (line  104)
-* iconify:                               three.              (line  261)
+                                                             (line   49)
+* i_scaled:                              Mathematical functions.
+                                                             (line   49)
+* ibl:                                   three.              (line  117)
+* iconify:                               three.              (line  274)
 * identity:                              Transforms.         (line   24)
 * identity <1>:                          Mathematical functions.
                                                              (line    6)
 * identity <2>:                          Arrays.             (line  321)
-* identity4:                             three.              (line  504)
-* if:                                    Programming.        (line   26)
+* identity4:                             three.              (line  517)
+* if:                                    Programming.        (line   28)
 * IgnoreAspect:                          Frames and pictures.
-                                                             (line   63)
+                                                             (line   49)
 * image:                                 palette.            (line   33)
 * image <1>:                             palette.            (line   61)
-* image-based lighting:                  three.              (line  104)
+* image-based lighting:                  three.              (line  117)
 * ImageMagick:                           Configuring.        (line   69)
 * ImageMagick <1>:                       animation.          (line    6)
 * ImageMagick <2>:                       Options.            (line  188)
@@ -9717,30 +10002,30 @@
 * implicit scaling:                      Implicit scaling.   (line    6)
 * implicitsurface:                       smoothcontour3.     (line   16)
 * import:                                Import.             (line   45)
-* importv3d:                             three.              (line  318)
+* importv3d:                             three.              (line  331)
 * inches:                                Figure size.        (line   18)
 * incircle:                              Data types.         (line  120)
 * include:                               Import.             (line  131)
-* including images:                      label.              (line   78)
+* including images:                      label.              (line   85)
 * increasing:                            math.               (line   55)
 * inf:                                   Data types.         (line   35)
-* inheritance:                           Structures.         (line  182)
+* inheritance:                           Structures.         (line  124)
 * initialized:                           Arrays.             (line   39)
 * initializers:                          Variable initializers.
                                                              (line    6)
 * inline:                                LaTeX usage.        (line   47)
-* InOutTicks:                            graph3.             (line   35)
+* InOutTicks:                            graph3.             (line   38)
 * input:                                 Files.              (line   10)
 * input <1>:                             Files.              (line   12)
 * input <2>:                             Interactive mode.   (line   45)
 * input <3>:                             Interactive mode.   (line   49)
-* input encoding:                        Pens.               (line  235)
+* input encoding:                        Pens.               (line  288)
 * insert:                                Data types.         (line  253)
 * insert <1>:                            Arrays.             (line   39)
 * inside:                                Paths and guides.   (line  294)
 * inside <1>:                            Paths and guides.   (line  299)
 * inside <2>:                            Paths and guides.   (line  305)
-* insphere:                              three.              (line  595)
+* insphere:                              three.              (line  608)
 * inst:                                  Debugger.           (line   35)
 * installation:                          Installation.       (line    6)
 * int:                                   Data types.         (line   30)
@@ -9747,9 +10032,9 @@
 * integer division:                      Arithmetic & logical.
                                                              (line   20)
 * integral:                              Mathematical functions.
-                                                             (line   82)
+                                                             (line   83)
 * integrate:                             Mathematical functions.
-                                                             (line   82)
+                                                             (line   83)
 * interactive mode:                      Drawing in interactive mode.
                                                              (line    6)
 * interactive mode <1>:                  Interactive mode.   (line    6)
@@ -9759,68 +10044,67 @@
 * interpolate:                           interpolate.        (line    6)
 * intersect:                             Paths and guides.   (line  195)
 * intersect <1>:                         math.               (line   13)
-* intersect <2>:                         three.              (line  566)
+* intersect <2>:                         three.              (line  579)
 * intersectionpoint:                     Paths and guides.   (line  238)
 * intersectionpoint <1>:                 math.               (line   17)
-* intersectionpoint <2>:                 three.              (line  566)
+* intersectionpoint <2>:                 three.              (line  579)
 * intersectionpoints:                    Paths and guides.   (line  242)
-* intersectionpoints <1>:                three.              (line  566)
-* intersectionpoints <2>:                three.              (line  579)
+* intersectionpoints <1>:                three.              (line  579)
+* intersectionpoints <2>:                three.              (line  592)
 * intersections:                         Paths and guides.   (line  206)
 * intersections <1>:                     Paths and guides.   (line  213)
-* intersections <2>:                     three.              (line  566)
-* intersections <3>:                     three.              (line  572)
-* InTicks:                               graph3.             (line   35)
+* intersections <2>:                     three.              (line  579)
+* intersections <3>:                     three.              (line  585)
+* InTicks:                               graph3.             (line   38)
 * intMax:                                Data types.         (line   30)
 * intMin:                                Data types.         (line   30)
 * inverse:                               Transforms.         (line   16)
 * inverse <1>:                           Arrays.             (line  327)
-* invert:                                three.              (line  494)
+* invert:                                three.              (line  507)
 * invisible:                             Pens.               (line   43)
 * isnan:                                 Data types.         (line   35)
-* i_scaled:                              Mathematical functions.
-                                                             (line   48)
 * J:                                     Mathematical functions.
                                                              (line    6)
 * J <1>:                                 Mathematical functions.
-                                                             (line   48)
-* Japanese:                              Pens.               (line  244)
+                                                             (line   49)
+* Japanese:                              Pens.               (line  297)
 * K:                                     Mathematical functions.
-                                                             (line   48)
+                                                             (line   49)
+* k_scaled:                              Mathematical functions.
+                                                             (line   49)
 * Kate:                                  Editing modes.      (line   48)
 * KDE editor:                            Editing modes.      (line   48)
 * keepAspect:                            Frames and pictures.
-                                                             (line   59)
+                                                             (line   45)
 * keepAspect <1>:                        Frames and pictures.
-                                                             (line   63)
+                                                             (line   49)
 * keepAspect <2>:                        LaTeX usage.        (line   47)
-* keyboard bindings::                    three.              (line  211)
+* keyboard bindings::                    three.              (line  224)
 * keys:                                  Arrays.             (line   39)
 * keyword:                               Named arguments.    (line   37)
 * keyword-only:                          Named arguments.    (line   37)
 * keywords:                              Named arguments.    (line    6)
-* Korean:                                Pens.               (line  244)
-* k_scaled:                              Mathematical functions.
-                                                             (line   48)
+* Korean:                                Pens.               (line  297)
 * label:                                 Labels.             (line    6)
-* Label:                                 draw.               (line  101)
+* Label:                                 draw.               (line  135)
 * label <1>:                             label.              (line    6)
-* Label <1>:                             label.              (line   14)
+* Label <1>:                             label.              (line   21)
 * Label <2>:                             graph.              (line  331)
-* label <2>:                             three.              (line  530)
+* label <2>:                             three.              (line  543)
+* labelmargin:                           label.              (line    6)
 * labelpath:                             labelpath.          (line    6)
 * labelpath3:                            labelpath3.         (line    6)
 * labelx:                                graph.              (line  331)
 * labely:                                graph.              (line  331)
 * Landscape:                             Frames and pictures.
-                                                             (line  103)
-* language context:                      Pens.               (line  235)
+                                                             (line   91)
+* language context:                      Pens.               (line  288)
 * language server protocol:              Language server protocol.
                                                              (line    6)
 * lastcut:                               Paths and guides.   (line  266)
 * lasy-mode:                             Editing modes.      (line    6)
 * latex:                                 Options.            (line  188)
-* LaTeX NFSS fonts:                      Pens.               (line  206)
+* LaTeX NFSS fonts:                      Pens.               (line  259)
 * LaTeX usage:                           LaTeX usage.        (line    6)
 * latexmk:                               LaTeX usage.        (line   30)
 * latitude:                              Data types.         (line  164)
@@ -9830,22 +10114,22 @@
 * leastsquares <1>:                      graph.              (line  948)
 * Left:                                  graph.              (line  270)
 * LeftRight:                             graph.              (line  276)
-* LeftSide:                              label.              (line   60)
+* LeftSide:                              label.              (line   67)
 * LeftTicks:                             graph.              (line  161)
 * LeftTicks <1>:                         graph.              (line  234)
-* LeftView:                              three.              (line  452)
+* LeftView:                              three.              (line  465)
 * legend:                                Drawing commands.   (line   34)
-* legend <1>:                            draw.               (line   65)
+* legend <1>:                            draw.               (line   99)
 * legend <2>:                            graph.              (line  425)
 * Legendre:                              Mathematical functions.
-                                                             (line   48)
+                                                             (line   49)
 * length:                                Data types.         (line   65)
 * length <1>:                            Data types.         (line  144)
 * length <2>:                            Data types.         (line  239)
 * length <3>:                            Paths and guides.   (line   76)
-* length <4>:                            Paths and guides.   (line  373)
+* length <4>:                            Paths and guides.   (line  374)
 * length <5>:                            Arrays.             (line   39)
-* length <6>:                            three.              (line  566)
+* length <6>:                            three.              (line  579)
 * letter:                                Configuring.        (line   63)
 * lexorder:                              math.               (line   63)
 * lexorder <1>:                          math.               (line   66)
@@ -9852,7 +10136,7 @@
 * libcurl:                               Import.             (line   94)
 * libm routines:                         Mathematical functions.
                                                              (line    6)
-* libsigsegv:                            Functions.          (line  100)
+* libsigsegv:                            Functions.          (line  103)
 * libsigsegv <1>:                        Help.               (line   27)
 * light:                                 three.              (line   76)
 * limits:                                graph.              (line  640)
@@ -9863,7 +10147,7 @@
 * Linear:                                graph.              (line  711)
 * linecap:                               Pens.               (line  139)
 * linejoin:                              Pens.               (line  149)
-* lineskip:                              Pens.               (line  192)
+* lineskip:                              Pens.               (line  245)
 * linetype:                              Pens.               (line  123)
 * linewidth:                             Pens.               (line  127)
 * locale:                                Data types.         (line  316)
@@ -9882,7 +10166,7 @@
 * longdashdotted:                        Pens.               (line  102)
 * longdashed:                            Pens.               (line  102)
 * longitude:                             Data types.         (line  169)
-* loop:                                  Programming.        (line   26)
+* loop:                                  Programming.        (line   28)
 * LSP:                                   Language server protocol.
                                                              (line    6)
 * lualatex:                              Options.            (line  188)
@@ -9891,17 +10175,20 @@
                                                              (line    6)
 * MacOS X configuration:                 Compiling from UNIX source.
                                                              (line   48)
-* makepen:                               Pens.               (line  338)
+* magick:                                Configuring.        (line   69)
+* magick <1>:                            Files.              (line  159)
+* magick <2>:                            animation.          (line    6)
+* magick <3>:                            Options.            (line  188)
+* makepen:                               Pens.               (line  391)
 * map:                                   Arrays.             (line  135)
 * map <1>:                               Arrays.             (line  140)
 * map <2>:                               map.                (line    6)
-* Margin:                                draw.               (line   42)
-* Margin <1>:                            draw.               (line   42)
-* Margin3:                               three.              (line  648)
-* Margin3 <1>:                           three.              (line  648)
-* Margins:                               draw.               (line   42)
-* margins:                               three.              (line  333)
-* Margins3:                              three.              (line  648)
+* Margin:                                draw.               (line   69)
+* Margin3:                               three.              (line  661)
+* Margin3 <1>:                           three.              (line  661)
+* Margins:                               draw.               (line   70)
+* margins:                               three.              (line  346)
+* Margins3:                              three.              (line  661)
 * mark:                                  graph.              (line  481)
 * markangle:                             markers.            (line   35)
 * marker:                                graph.              (line  481)
@@ -9918,12 +10205,12 @@
                                                              (line    7)
 * max <2>:                               Arrays.             (line  230)
 * max <3>:                               Arrays.             (line  240)
-* max <4>:                               three.              (line  566)
+* max <4>:                               three.              (line  579)
 * maxbound:                              Data types.         (line  134)
 * maxbound <1>:                          Data types.         (line  205)
-* maxtile:                               three.              (line  261)
+* maxtile:                               three.              (line  274)
 * maxtimes:                              Paths and guides.   (line  233)
-* maxviewport:                           three.              (line  261)
+* maxviewport:                           three.              (line  274)
 * metallic:                              three.              (line   66)
 * MetaPost:                              MetaPost.           (line    6)
 * MetaPost ... :                         Bezier curves.      (line   70)
@@ -9932,11 +10219,11 @@
 * MetaPost pickup:                       Pens.               (line    6)
 * MetaPost whatever:                     MetaPost.           (line   10)
 * Microsoft Windows:                     Microsoft Windows.  (line    6)
-* MidArcArrow:                           draw.               (line   26)
-* MidArcArrow3:                          three.              (line  632)
+* MidArcArrow:                           draw.               (line   30)
+* MidArcArrow3:                          three.              (line  645)
 * MidArrow:                              draw.               (line   26)
-* MidArrow3:                             three.              (line  632)
-* MidPoint:                              label.              (line   55)
+* MidArrow3:                             three.              (line  645)
+* MidPoint:                              label.              (line   62)
 * midpoint:                              Paths and guides.   (line  180)
 * min:                                   Paths and guides.   (line  275)
 * min <1>:                               Frames and pictures.
@@ -9943,25 +10230,25 @@
                                                              (line    7)
 * min <2>:                               Arrays.             (line  225)
 * min <3>:                               Arrays.             (line  235)
-* min <4>:                               three.              (line  566)
+* min <4>:                               three.              (line  579)
 * minbound:                              Data types.         (line  131)
 * minbound <1>:                          Data types.         (line  202)
-* minipage:                              label.              (line  116)
+* minipage:                              label.              (line  125)
 * mintimes:                              Paths and guides.   (line  228)
 * miterjoin:                             Pens.               (line  149)
 * miterlimit:                            Pens.               (line  159)
 * mktemp:                                Files.              (line   48)
 * mm:                                    Figure size.        (line   18)
-* mobile browser:                        three.              (line  233)
+* mobile browser:                        three.              (line  246)
 * mode:                                  Files.              (line   80)
 * mode <1>:                              Files.              (line   93)
 * monotonic:                             graph.              (line   36)
 * mouse:                                 GUI.                (line    6)
-* mouse bindings:                        three.              (line  192)
+* mouse bindings:                        three.              (line  205)
 * mouse wheel:                           GUI usage.          (line    6)
-* Move:                                  Pens.               (line  375)
-* MoveQuiet:                             Pens.               (line  381)
-* multisample:                           three.              (line  184)
+* Move:                                  Pens.               (line  428)
+* MoveQuiet:                             Pens.               (line  434)
+* multisample:                           three.              (line  197)
 * N:                                     Labels.             (line   18)
 * name:                                  Files.              (line   93)
 * named arguments:                       Named arguments.    (line    6)
@@ -9975,86 +10262,85 @@
 * newl:                                  Files.              (line   65)
 * newpage:                               Drawing commands.   (line   27)
 * newton:                                Mathematical functions.
-                                                             (line   66)
+                                                             (line   67)
 * newton <1>:                            Mathematical functions.
-                                                             (line   73)
+                                                             (line   74)
 * next:                                  Debugger.           (line   41)
 * nobasealign:                           Pens.               (line  181)
-* NoFill:                                draw.               (line   26)
-* NoFill <1>:                            Frames and pictures.
-                                                             (line  154)
+* NoFill:                                Frames and pictures.
+                                                             (line  141)
 * noglobalread:                          Files.              (line   26)
 * noglobalread <1>:                      Files.              (line   40)
 * nolight:                               three.              (line   76)
-* NoMargin:                              draw.               (line   42)
-* NoMargin3:                             three.              (line  648)
+* NoMargin:                              draw.               (line   67)
+* NoMargin3:                             three.              (line  661)
 * None:                                  draw.               (line   19)
 * None <1>:                              draw.               (line   26)
 * none:                                  Files.              (line   65)
-* normal:                                three.              (line  552)
-* nosafe:                                Options.            (line  211)
+* normal:                                three.              (line  565)
+* nosafe:                                Options.            (line  209)
 * NOT:                                   Arithmetic & logical.
                                                              (line   68)
 * notaknot:                              graph.              (line   36)
 * NoTicks:                               graph.              (line  161)
-* NoTicks3:                              graph3.             (line   35)
+* NoTicks3:                              graph3.             (line   38)
 * null:                                  Structures.         (line    6)
-* nullpen:                               label.              (line   14)
+* nullpen:                               label.              (line   21)
 * nullpen <1>:                           Frames and pictures.
-                                                             (line  140)
+                                                             (line  127)
 * nullpen <2>:                           Frames and pictures.
-                                                             (line  149)
-* NURBS:                                 three.              (line  432)
-* O:                                     three.              (line  345)
+                                                             (line  136)
+* O:                                     three.              (line  358)
 * obj:                                   obj.                (line    6)
-* oblique:                               three.              (line  388)
-* obliqueX:                              three.              (line  395)
-* obliqueY:                              three.              (line  401)
-* obliqueZ:                              three.              (line  388)
+* object:                                label.              (line  111)
+* oblique:                               three.              (line  401)
+* obliqueX:                              three.              (line  408)
+* obliqueY:                              three.              (line  414)
+* obliqueZ:                              three.              (line  401)
 * ode:                                   ode.                (line    6)
 * offset:                                Pens.               (line  123)
-* offset <1>:                            Options.            (line  216)
+* offset <1>:                            Options.            (line  214)
 * OmitTick:                              graph.              (line  224)
 * OmitTickInterval:                      graph.              (line  224)
 * OmitTickIntervals:                     graph.              (line  224)
-* opacity:                               Pens.               (line  254)
+* opacity:                               Pens.               (line  307)
 * opacity <1>:                           three.              (line   66)
 * open:                                  Files.              (line   12)
-* OpenGL:                                three.              (line  184)
+* OpenGL:                                three.              (line  197)
 * operator:                              User-defined operators.
                                                              (line    6)
-* operator +(...string[] a).:            Data types.         (line  284)
 * operator --:                           graph.              (line   30)
 * operator ..:                           graph.              (line   33)
+* operator +(...string[] a).:            Data types.         (line  284)
 * operator answer:                       Interactive mode.   (line   35)
 * operator cast:                         Casts.              (line   38)
 * operator ecast:                        Casts.              (line   65)
 * operator init:                         Variable initializers.
                                                              (line    6)
-* operator init <1>:                     Structures.         (line  134)
+* operator init <1>:                     Structures.         (line  105)
 * operators:                             Operators.          (line    6)
 * options:                               Options.            (line    6)
 * OR:                                    Arithmetic & logical.
                                                              (line   68)
 * orient:                                Data types.         (line  108)
-* orient <1>:                            three.              (line  583)
+* orient <1>:                            three.              (line  596)
 * orientation:                           Frames and pictures.
-                                                             (line  103)
-* orthographic:                          three.              (line  405)
-* outformat:                             three.              (line  184)
+                                                             (line   91)
+* orthographic:                          three.              (line  418)
+* outformat:                             three.              (line  197)
 * outprefix:                             Frames and pictures.
-                                                             (line   91)
+                                                             (line   77)
 * output:                                Files.              (line   38)
 * output <1>:                            Options.            (line  188)
-* OutTicks:                              graph3.             (line   35)
-* overloading functions:                 Functions.          (line   55)
-* overwrite:                             Pens.               (line  360)
+* OutTicks:                              graph3.             (line   38)
+* overloading functions:                 Functions.          (line   58)
+* overwrite:                             Pens.               (line  413)
 * P:                                     Mathematical functions.
-                                                             (line   48)
-* pack:                                  label.              (line  100)
+                                                             (line   49)
+* pack:                                  label.              (line  109)
 * packing:                               Rest arguments.     (line   30)
 * pad:                                   Frames and pictures.
-                                                             (line  186)
+                                                             (line  173)
 * pair:                                  Figure size.        (line    6)
 * pair <1>:                              Data types.         (line   46)
 * pairs:                                 Arrays.             (line  245)
@@ -10062,20 +10348,20 @@
 * papertype:                             Configuring.        (line   63)
 * paperwidth:                            Configuring.        (line   63)
 * parallelogram:                         flowchart.          (line   47)
-* parametric surface:                    graph3.             (line   99)
+* parametric surface:                    graph3.             (line  102)
 * parametrized curve:                    graph.              (line  640)
 * partialsum:                            math.               (line   49)
 * partialsum <1>:                        math.               (line   52)
-* patch-dependent colors:                three.              (line  119)
+* patch-dependent colors:                three.              (line  132)
 * path:                                  Paths.              (line    6)
 * path <1>:                              Paths and guides.   (line    7)
 * path <2>:                              three.              (line   42)
 * path <3>:                              flowchart.          (line   77)
 * path markers:                          graph.              (line  481)
+* path[]:                                Paths.              (line   23)
 * path3:                                 three.              (line    6)
 * path3 <1>:                             three.              (line   42)
-* path[]:                                Paths.              (line   23)
-* patterns:                              Pens.               (line  271)
+* patterns:                              Pens.               (line  324)
 * patterns <1>:                          patterns.           (line    6)
 * PBR:                                   three.              (line   74)
 * PDF:                                   Options.            (line  188)
@@ -10084,54 +10370,62 @@
 * pdfviewer:                             Configuring.        (line   15)
 * pdfviewerOptions:                      Options.            (line  174)
 * pen:                                   Pens.               (line    6)
-* PenMargin:                             draw.               (line   42)
-* PenMargin2:                            three.              (line  648)
-* PenMargin3:                            three.              (line  648)
-* PenMargins:                            draw.               (line   42)
-* PenMargins2:                           three.              (line  648)
-* PenMargins3:                           three.              (line  648)
+* PenMargin:                             draw.               (line   78)
+* PenMargin2:                            three.              (line  661)
+* PenMargin3:                            three.              (line  661)
+* PenMargins:                            draw.               (line   79)
+* PenMargins2:                           three.              (line  661)
+* PenMargins3:                           three.              (line  661)
 * periodic:                              graph.              (line   36)
 * perl:                                  LaTeX usage.        (line   30)
 * perpendicular:                         geometry.           (line    6)
-* perspective:                           three.              (line  432)
+* perspective:                           three.              (line  445)
 * physically based rendering:            three.              (line   74)
 * picture:                               Frames and pictures.
-                                                             (line   39)
+                                                             (line   25)
 * picture alignment:                     Frames and pictures.
-                                                             (line  231)
+                                                             (line  218)
+* picture.add:                           Deferred drawing.   (line   31)
+* picture.addPoint:                      Deferred drawing.   (line   51)
+* picture.calculateTransform:            Frames and pictures.
+                                                             (line  105)
+* picture.fit:                           Frames and pictures.
+                                                             (line  100)
+* picture.scale:                         Frames and pictures.
+                                                             (line  110)
 * piecewisestraight:                     Paths and guides.   (line   92)
-* pixel:                                 three.              (line  655)
+* pixel:                                 three.              (line  668)
 * Pl:                                    Mathematical functions.
-                                                             (line   48)
+                                                             (line   49)
 * plain:                                 plain.              (line    6)
-* planar:                                three.              (line  128)
-* plane:                                 three.              (line  371)
-* planeproject:                          three.              (line  549)
+* planar:                                three.              (line  141)
+* plane:                                 three.              (line  384)
+* planeproject:                          three.              (line  562)
 * point:                                 Paths and guides.   (line   95)
-* point <1>:                             Paths and guides.   (line  379)
-* point <2>:                             three.              (line  566)
+* point <1>:                             Paths and guides.   (line  380)
+* point <2>:                             three.              (line  579)
 * polar:                                 Data types.         (line  149)
 * polargraph:                            graph.              (line   89)
 * polygon:                               graph.              (line  481)
 * pop:                                   Arrays.             (line   39)
 * Portrait:                              Frames and pictures.
-                                                             (line  103)
+                                                             (line   91)
 * position:                              three.              (line   76)
-* position <1>:                          three.              (line  184)
+* position <1>:                          three.              (line  197)
 * postcontrol:                           Paths and guides.   (line  146)
-* postcontrol <1>:                       three.              (line  566)
+* postcontrol <1>:                       three.              (line  579)
 * postfix operators:                     Self & prefix operators.
                                                              (line   19)
 * postscript:                            Frames and pictures.
-                                                             (line  297)
-* PostScript fonts:                      Pens.               (line  222)
+                                                             (line  284)
+* PostScript fonts:                      Pens.               (line  275)
 * PostScript subpath:                    Paths.              (line   23)
 * pow10:                                 Mathematical functions.
                                                              (line    6)
-* prc:                                   three.              (line  279)
+* prc:                                   three.              (line  292)
 * precision:                             Files.              (line   97)
 * precontrol:                            Paths and guides.   (line  139)
-* precontrol <1>:                        three.              (line  566)
+* precontrol <1>:                        three.              (line  579)
 * prefix operators:                      Self & prefix operators.
                                                              (line    6)
 * private:                               Structures.         (line    6)
@@ -10157,13 +10451,13 @@
                                                              (line    6)
 * radialshade:                           fill.               (line   52)
 * RadialShade:                           Frames and pictures.
-                                                             (line  172)
+                                                             (line  159)
 * RadialShadeDraw:                       Frames and pictures.
-                                                             (line  176)
+                                                             (line  163)
 * radians:                               Mathematical functions.
                                                              (line   17)
 * radius:                                Paths and guides.   (line  135)
-* radius <1>:                            three.              (line  566)
+* radius <1>:                            three.              (line  579)
 * Rainbow:                               palette.            (line   12)
 * rand:                                  Mathematical functions.
                                                              (line   39)
@@ -10181,11 +10475,11 @@
 * realmult:                              Data types.         (line  100)
 * realschur:                             Arrays.             (line  271)
 * rectangle:                             flowchart.          (line   34)
-* recursion:                             Functions.          (line  100)
+* recursion:                             Functions.          (line  103)
 * reference:                             Description.        (line   92)
 * reflect:                               Transforms.         (line   42)
-* Relative:                              label.              (line   50)
-* Relative <1>:                          label.              (line   60)
+* Relative:                              label.              (line   57)
+* Relative <1>:                          label.              (line   67)
 * relpoint:                              Paths and guides.   (line  176)
 * reltime:                               Paths and guides.   (line  172)
 * remainder:                             Mathematical functions.
@@ -10192,20 +10486,20 @@
                                                              (line    6)
 * rename:                                Files.              (line  156)
 * render:                                three.              (line   46)
-* render <1>:                            three.              (line  184)
+* render <1>:                            three.              (line  197)
 * render <2>:                            Options.            (line  188)
 * replace:                               Data types.         (line  270)
-* resetdefaultpen:                       Pens.               (line  387)
+* resetdefaultpen:                       Pens.               (line  440)
 * rest arguments:                        Rest arguments.     (line    6)
 * restore:                               Frames and pictures.
-                                                             (line  291)
+                                                             (line  278)
 * restricted:                            Structures.         (line    6)
 * return:                                Debugger.           (line   47)
 * reverse:                               Data types.         (line  266)
 * reverse <1>:                           Paths and guides.   (line  183)
-* reverse <2>:                           Paths and guides.   (line  382)
+* reverse <2>:                           Paths and guides.   (line  383)
 * reverse <3>:                           Arrays.             (line  145)
-* reverse <4>:                           three.              (line  566)
+* reverse <4>:                           three.              (line  579)
 * rewind:                                Files.              (line   97)
 * rfind:                                 Data types.         (line  247)
 * rgb:                                   Pens.               (line   30)
@@ -10212,15 +10506,15 @@
 * rgb <1>:                               Pens.               (line   34)
 * rgb <2>:                               Pens.               (line   62)
 * Riemann zeta function:                 Mathematical functions.
-                                                             (line   48)
+                                                             (line   49)
 * Right:                                 graph.              (line  273)
-* RightSide:                             label.              (line   60)
+* RightSide:                             label.              (line   67)
 * RightTicks:                            graph.              (line  161)
 * RightTicks <1>:                        graph.              (line  234)
-* RightView:                             three.              (line  452)
-* Rotate:                                label.              (line   36)
-* rotate:                                three.              (line  520)
-* Rotate(pair z):                        label.              (line   39)
+* RightView:                             three.              (line  465)
+* Rotate:                                label.              (line   43)
+* rotate:                                three.              (line  533)
+* Rotate(pair z):                        label.              (line   46)
 * round:                                 Mathematical functions.
                                                              (line   26)
 * roundcap:                              Pens.               (line  139)
@@ -10230,20 +10524,20 @@
 * RPM:                                   UNIX binary distributions.
                                                              (line    6)
 * runtime imports:                       Import.             (line  102)
-* Russian:                               Pens.               (line  238)
+* Russian:                               Pens.               (line  291)
 * S:                                     Labels.             (line   18)
-* safe:                                  Options.            (line  211)
+* safe:                                  Options.            (line  209)
 * save:                                  Frames and pictures.
-                                                             (line  288)
+                                                             (line  275)
 * saveline:                              Files.              (line  139)
-* Scale:                                 label.              (line   45)
+* Scale:                                 label.              (line   52)
 * scale:                                 Pens.               (line  123)
 * scale <1>:                             Transforms.         (line   34)
 * scale <2>:                             Transforms.         (line   36)
 * scale <3>:                             graph.              (line  711)
 * Scale <1>:                             graph.              (line  728)
-* scale <4>:                             three.              (line  519)
-* scale3:                                three.              (line  517)
+* scale <4>:                             three.              (line  532)
+* scale3:                                three.              (line  530)
 * scaled graph:                          graph.              (line  691)
 * schur:                                 Arrays.             (line  271)
 * schur <1>:                             Arrays.             (line  275)
@@ -10253,7 +10547,7 @@
 * search <1>:                            Arrays.             (line  172)
 * search paths:                          Search paths.       (line    6)
 * Seascape:                              Frames and pictures.
-                                                             (line  110)
+                                                             (line   97)
 * secondary axis:                        graph.              (line  854)
 * secondaryX:                            graph.              (line  854)
 * secondaryY:                            graph.              (line  854)
@@ -10270,24 +10564,25 @@
 * sgn:                                   Mathematical functions.
                                                              (line   26)
 * shading:                               fill.               (line   32)
-* Shift:                                 label.              (line   33)
+* Shift:                                 label.              (line   40)
 * shift:                                 Transforms.         (line   26)
 * shift <1>:                             Transforms.         (line   28)
 * shift <2>:                             Transforms.         (line   46)
-* shift <3>:                             three.              (line  509)
+* shift <3>:                             three.              (line  522)
 * shiftless:                             Transforms.         (line   46)
 * shininess:                             three.              (line   66)
 * shipout:                               Frames and pictures.
-                                                             (line   91)
-* showtarget:                            three.              (line  405)
+                                                             (line   77)
+* showtarget:                            three.              (line  418)
 * Si:                                    Mathematical functions.
-                                                             (line   48)
+                                                             (line   49)
 * signedint:                             Files.              (line   80)
 * signedint <1>:                         Files.              (line   93)
-* SimpleHead:                            draw.               (line   26)
+* SimpleHead:                            draw.               (line   50)
 * simplex:                               simplex.            (line    6)
+* simplex2:                              simplex2.           (line    6)
 * simpson:                               Mathematical functions.
-                                                             (line   82)
+                                                             (line   83)
 * sin:                                   Mathematical functions.
                                                              (line    6)
 * Sin:                                   Mathematical functions.
@@ -10299,20 +10594,20 @@
 * singlereal <1>:                        Files.              (line   93)
 * sinh:                                  Mathematical functions.
                                                              (line    6)
-* SixViews:                              three.              (line  467)
-* SixViewsFR:                            three.              (line  467)
-* SixViewsUS:                            three.              (line  467)
+* SixViews:                              three.              (line  480)
+* SixViewsFR:                            three.              (line  480)
+* SixViewsUS:                            three.              (line  480)
 * size:                                  Figure size.        (line    6)
 * size <1>:                              Paths and guides.   (line   81)
-* size <2>:                              Paths and guides.   (line  370)
+* size <2>:                              Paths and guides.   (line  371)
 * size <3>:                              Frames and pictures.
-                                                             (line   48)
+                                                             (line   34)
 * size <4>:                              Frames and pictures.
-                                                             (line   74)
-* size <5>:                              three.              (line  566)
+                                                             (line   60)
+* size <5>:                              three.              (line  579)
 * size <6>:                              Options.            (line  188)
-* size3:                                 three.              (line  330)
-* Slant:                                 label.              (line   42)
+* size3:                                 three.              (line  343)
+* Slant:                                 label.              (line   49)
 * slant:                                 Transforms.         (line   38)
 * sleep:                                 Data types.         (line  376)
 * slice:                                 Paths and guides.   (line  251)
@@ -10324,7 +10619,7 @@
 * slopefield:                            slopefield.         (line    6)
 * smoothcontour3:                        smoothcontour3.     (line    6)
 * sncndn:                                Mathematical functions.
-                                                             (line   48)
+                                                             (line   49)
 * solid:                                 Pens.               (line  102)
 * solids:                                solids.             (line    6)
 * solve:                                 Arrays.             (line  299)
@@ -10336,7 +10631,7 @@
 * specularfactor:                        three.              (line   76)
 * specularpen:                           three.              (line   66)
 * Spline:                                graph.              (line   33)
-* Spline <1>:                            graph3.             (line   99)
+* Spline <1>:                            graph3.             (line  102)
 * split:                                 Data types.         (line  279)
 * sqrt:                                  Mathematical functions.
                                                              (line    6)
@@ -10343,8 +10638,8 @@
 * squarecap:                             Pens.               (line  139)
 * srand:                                 Mathematical functions.
                                                              (line   39)
-* stack overflow:                        Functions.          (line  100)
-* stack overflow <1>:                    Functions.          (line  100)
+* stack overflow:                        Functions.          (line  103)
+* stack overflow <1>:                    Functions.          (line  103)
 * stack overflow <2>:                    Help.               (line   27)
 * static:                                Static.             (line    6)
 * stats:                                 stats.              (line    6)
@@ -10355,7 +10650,7 @@
 * stop:                                  Debugger.           (line   10)
 * straight:                              Paths and guides.   (line   88)
 * Straight:                              graph.              (line   30)
-* straight <1>:                          three.              (line  566)
+* straight <1>:                          three.              (line  579)
 * strftime:                              Data types.         (line  321)
 * strftime <1>:                          Data types.         (line  346)
 * string:                                Data types.         (line  208)
@@ -10362,28 +10657,28 @@
 * string <1>:                            Data types.         (line  312)
 * stroke:                                fill.               (line   36)
 * stroke <1>:                            clip.               (line    6)
-* strokepath:                            Paths and guides.   (line  309)
+* strokepath:                            Paths and guides.   (line  310)
 * strptime:                              Data types.         (line  330)
 * struct:                                Structures.         (line    6)
 * structures:                            Structures.         (line    6)
 * subpath:                               Paths and guides.   (line  186)
-* subpath <1>:                           three.              (line  566)
+* subpath <1>:                           three.              (line  579)
 * subpictures:                           Frames and pictures.
-                                                             (line  113)
+                                                             (line  100)
 * substr:                                Data types.         (line  262)
 * sum:                                   Arrays.             (line  220)
 * superpath:                             Paths.              (line   23)
-* Suppress:                              Pens.               (line  367)
-* SuppressQuiet:                         Pens.               (line  371)
+* Suppress:                              Pens.               (line  420)
+* SuppressQuiet:                         Pens.               (line  424)
 * surface:                               three.              (line   46)
-* surface <1>:                           three.              (line  104)
-* surface <2>:                           three.              (line  128)
-* surface <3>:                           three.              (line  142)
-* surface <4>:                           graph3.             (line   99)
-* surface <5>:                           graph3.             (line  128)
+* surface <1>:                           three.              (line  117)
+* surface <2>:                           three.              (line  141)
+* surface <3>:                           three.              (line  155)
+* surface <4>:                           graph3.             (line  102)
+* surface <5>:                           graph3.             (line  131)
 * SVG:                                   Options.            (line  193)
 * system:                                Data types.         (line  354)
-* system <1>:                            Options.            (line  211)
+* system <1>:                            Options.            (line  209)
 * syzygy:                                syzygy.             (line    6)
 * tab:                                   Files.              (line   65)
 * tab completion:                        Drawing in interactive mode.
@@ -10394,46 +10689,46 @@
                                                              (line   20)
 * tanh:                                  Mathematical functions.
                                                              (line    6)
-* target:                                three.              (line  405)
+* target:                                three.              (line  418)
 * tell:                                  Files.              (line   97)
 * template:                              Templated imports.  (line    6)
 * tension:                               Bezier curves.      (line   56)
 * tension <1>:                           three.              (line    6)
-* tensionSpecifier:                      Paths and guides.   (line  402)
+* tensionSpecifier:                      Paths and guides.   (line  403)
 * tensor product shading:                fill.               (line   78)
 * tensorshade:                           fill.               (line   78)
-* tessellation:                          three.              (line  154)
+* tessellation:                          three.              (line  167)
 * tex:                                   Frames and pictures.
-                                                             (line  305)
+                                                             (line  292)
 * tex <1>:                               Options.            (line  188)
-* TeX fonts:                             Pens.               (line  213)
+* TeX fonts:                             Pens.               (line  266)
 * TeX string:                            Data types.         (line  208)
 * texcommand:                            Configuring.        (line   69)
-* TeXHead:                               draw.               (line   26)
-* TeXHead3:                              three.              (line  632)
+* TeXHead:                               draw.               (line   50)
+* TeXHead3:                              three.              (line  645)
 * texpath:                               Configuring.        (line   69)
-* texpath <1>:                           label.              (line  113)
+* texpath <1>:                           label.              (line  122)
 * texpreamble:                           Frames and pictures.
-                                                             (line  314)
+                                                             (line  301)
 * texreset:                              Frames and pictures.
-                                                             (line  318)
+                                                             (line  305)
 * textbook graph:                        graph.              (line  361)
 * tgz:                                   UNIX binary distributions.
                                                              (line    6)
-* thick:                                 three.              (line  166)
-* thin:                                  three.              (line  166)
+* thick:                                 three.              (line  179)
+* thin:                                  three.              (line  179)
 * this:                                  Structures.         (line    6)
 * three:                                 three.              (line    6)
-* ThreeViews:                            three.              (line  467)
-* ThreeViewsFR:                          three.              (line  467)
-* ThreeViewsUS:                          three.              (line  467)
+* ThreeViews:                            three.              (line  480)
+* ThreeViewsFR:                          three.              (line  480)
+* ThreeViewsUS:                          three.              (line  480)
 * tick:                                  graph.              (line  331)
 * ticks:                                 graph.              (line  161)
 * Ticks:                                 graph.              (line  161)
 * Ticks <1>:                             graph.              (line  234)
 * tildeframe:                            markers.            (line   24)
-* tile:                                  Pens.               (line  285)
-* tilings:                               Pens.               (line  271)
+* tile:                                  Pens.               (line  338)
+* tilings:                               Pens.               (line  324)
 * time:                                  Data types.         (line  321)
 * time <1>:                              Data types.         (line  346)
 * time <2>:                              math.               (line   26)
@@ -10441,13 +10736,13 @@
 * times:                                 Paths and guides.   (line  220)
 * times <1>:                             Paths and guides.   (line  224)
 * Top:                                   graph.              (line  136)
-* TopView:                               three.              (line  452)
+* TopView:                               three.              (line  465)
 * trace:                                 Debugger.           (line   50)
 * trailingzero:                          graph.              (line  176)
 * transform:                             Transforms.         (line    6)
-* transform <1>:                         three.              (line  541)
-* transform3:                            three.              (line  504)
-* transparency:                          Pens.               (line  254)
+* transform <1>:                         three.              (line  554)
+* transform3:                            three.              (line  517)
+* transparency:                          Pens.               (line  307)
 * transparent:                           three.              (line   97)
 * transpose:                             Arrays.             (line  212)
 * transpose <1>:                         Arrays.             (line  215)
@@ -10454,28 +10749,27 @@
 * tree:                                  tree.               (line    6)
 * trembling:                             trembling.          (line    6)
 * triangle:                              geometry.           (line    6)
-* triangles:                             three.              (line  154)
-* triangulate:                           contour.            (line  192)
+* triangles:                             three.              (line  167)
+* triangulate:                           contour.            (line  189)
 * tridiagonal:                           Arrays.             (line  286)
 * trigonometric integrals:               Mathematical functions.
-                                                             (line   48)
+                                                             (line   49)
 * triple:                                Data types.         (line  137)
-* TrueMargin:                            draw.               (line   42)
-* TrueMargin3:                           three.              (line  648)
-* tube:                                  three.              (line  166)
+* TrueMargin:                            draw.               (line   90)
+* TrueMargin3:                           three.              (line  661)
+* tube:                                  three.              (line  179)
 * tube <1>:                              tube.               (line    6)
 * tutorial:                              Tutorial.           (line    6)
-* type1cm:                               Pens.               (line  192)
+* type1cm:                               Pens.               (line  245)
 * typedef:                               Data types.         (line  385)
-* typedef <1>:                           Functions.          (line   46)
+* typedef <1>:                           Functions.          (line   48)
 * U3D:                                   embed.              (line   22)
 * undefined:                             Paths and guides.   (line  283)
-* UnFill:                                draw.               (line   26)
 * unfill:                                fill.               (line  110)
+* UnFill:                                Frames and pictures.
+                                                             (line  152)
 * UnFill <1>:                            Frames and pictures.
-                                                             (line  165)
-* UnFill <2>:                            Frames and pictures.
-                                                             (line  168)
+                                                             (line  155)
 * uniform:                               Arrays.             (line  154)
 * uninstall:                             Uninstall.          (line    6)
 * unique:                                math.               (line   59)
@@ -10482,33 +10776,35 @@
 * unit:                                  Data types.         (line   83)
 * unit <1>:                              Data types.         (line  174)
 * unitbox:                               Paths.              (line   44)
-* unitbox <1>:                           three.              (line  377)
+* unitbox <1>:                           three.              (line  390)
 * unitcircle:                            Paths.              (line   17)
 * unitcircle <1>:                        Paths.              (line   17)
-* unitcircle <2>:                        three.              (line  345)
+* unitcircle <2>:                        three.              (line  358)
 * unitrand:                              Mathematical functions.
                                                              (line   39)
 * unitsize:                              Figure size.        (line   39)
 * unitsize <1>:                          Frames and pictures.
-                                                             (line   69)
+                                                             (line   55)
 * UNIX binary distributions:             UNIX binary distributions.
                                                              (line    6)
 * unpacking:                             Rest arguments.     (line   39)
 * unravel:                               Import.             (line   29)
-* up:                                    three.              (line  405)
+* up:                                    three.              (line  418)
 * update:                                Files.              (line   38)
 * UpsideDown:                            Frames and pictures.
-                                                             (line  103)
+                                                             (line   91)
 * UpsideDown <1>:                        Frames and pictures.
-                                                             (line  111)
+                                                             (line   98)
 * URL:                                   Import.             (line   94)
 * usepackage:                            Frames and pictures.
-                                                             (line  321)
+                                                             (line  308)
 * user coordinates:                      Figure size.        (line   39)
 * user-defined operators:                User-defined operators.
                                                              (line    6)
+* using:                                 Data types.         (line  385)
+* using <1>:                             Functions.          (line   48)
 * usleep:                                Data types.         (line  379)
-* v3d:                                   three.              (line  300)
+* v3d:                                   three.              (line  313)
 * value:                                 math.               (line   34)
 * value <1>:                             math.               (line   37)
 * var:                                   Variable initializers.
@@ -10517,27 +10813,28 @@
                                                              (line    6)
 * vectorfield:                           graph.              (line 1023)
 * vectorfield <1>:                       graph.              (line 1062)
-* vectorfield3:                          graph3.             (line  167)
+* vectorfield3:                          graph3.             (line  170)
 * vectorization:                         Arrays.             (line  343)
 * verbatim:                              Frames and pictures.
-                                                             (line  297)
-* vertex-dependent colors:               three.              (line  119)
+                                                             (line  284)
+* vertex-dependent colors:               three.              (line  132)
 * Vertical:                              flowchart.          (line   77)
 * Viewport:                              three.              (line   76)
 * viewportheight:                        LaTeX usage.        (line   47)
-* viewportmargin:                        three.              (line  333)
-* viewportsize:                          three.              (line  333)
+* viewportmargin:                        three.              (line  346)
+* viewportsize:                          three.              (line  346)
 * viewportwidth:                         LaTeX usage.        (line   47)
-* views:                                 three.              (line  279)
+* views:                                 three.              (line  292)
 * vim:                                   Editing modes.      (line   32)
-* virtual functions:                     Structures.         (line  182)
+* virtual functions:                     Structures.         (line  124)
 * void:                                  Data types.         (line   10)
 * W:                                     Labels.             (line   18)
-* WebGL:                                 three.              (line  233)
+* warn:                                  Configuring.        (line   79)
+* WebGL:                                 three.              (line  246)
 * whatever:                              Paths and guides.   (line  246)
 * Wheel:                                 palette.            (line   22)
 * wheel mouse:                           GUI.                (line    6)
-* while:                                 Programming.        (line   48)
+* while:                                 Programming.        (line   50)
 * White:                                 three.              (line   76)
 * white-space string delimiter mode:     Arrays.             (line  374)
 * width:                                 LaTeX usage.        (line   47)
@@ -10545,7 +10842,7 @@
 * word:                                  Arrays.             (line  374)
 * write:                                 Files.              (line   57)
 * write <1>:                             Arrays.             (line  413)
-* X:                                     three.              (line  345)
+* X:                                     three.              (line  358)
 * xasy:                                  GUI.                (line    6)
 * xaxis3:                                graph3.             (line    7)
 * xdr:                                   Files.              (line   80)
@@ -10558,20 +10855,20 @@
 * xpart:                                 Data types.         (line   94)
 * xpart <1>:                             Data types.         (line  185)
 * xscale:                                Transforms.         (line   30)
-* xscale3:                               three.              (line  511)
+* xscale3:                               three.              (line  524)
 * xtick:                                 graph.              (line  331)
-* XY:                                    three.              (line  526)
-* XY <1>:                                three.              (line  541)
-* XYEquals:                              graph3.             (line   21)
-* XYZero:                                graph3.             (line   21)
-* XZEquals:                              graph3.             (line   21)
+* XY:                                    three.              (line  539)
+* XY <1>:                                three.              (line  554)
+* XYEquals:                              graph3.             (line   24)
+* XYZero:                                graph3.             (line   24)
+* XZEquals:                              graph3.             (line   24)
 * XZero:                                 graph.              (line  261)
-* XZZero:                                graph3.             (line   21)
+* XZZero:                                graph3.             (line   24)
 * Y:                                     Mathematical functions.
                                                              (line    6)
 * Y <1>:                                 Mathematical functions.
-                                                             (line   48)
-* Y <2>:                                 three.              (line  345)
+                                                             (line   49)
+* Y <2>:                                 three.              (line  358)
 * yaxis3:                                graph3.             (line    7)
 * YEquals:                               graph.              (line  129)
 * yequals:                               graph.              (line  279)
@@ -10579,186 +10876,195 @@
 * ypart:                                 Data types.         (line   97)
 * ypart <1>:                             Data types.         (line  188)
 * yscale:                                Transforms.         (line   32)
-* yscale3:                               three.              (line  513)
+* yscale3:                               three.              (line  526)
 * ytick:                                 graph.              (line  331)
-* YX:                                    three.              (line  541)
-* YZ:                                    three.              (line  541)
-* YZEquals:                              graph3.             (line   21)
+* YX:                                    three.              (line  554)
+* YZ:                                    three.              (line  554)
+* YZEquals:                              graph3.             (line   24)
 * YZero:                                 graph.              (line  124)
-* YZZero:                                graph3.             (line   21)
-* Z:                                     three.              (line  345)
+* YZZero:                                graph3.             (line   24)
+* Z:                                     three.              (line  358)
 * zaxis3:                                graph3.             (line    7)
-* zeroTransform:                         Transforms.         (line   44)
-* zerowinding:                           Pens.               (line  164)
 * zero_Ai:                               Mathematical functions.
-                                                             (line   48)
+                                                             (line   49)
 * zero_Ai_deriv:                         Mathematical functions.
-                                                             (line   48)
+                                                             (line   49)
 * zero_Bi:                               Mathematical functions.
-                                                             (line   48)
+                                                             (line   49)
 * zero_Bi_deriv:                         Mathematical functions.
-                                                             (line   48)
+                                                             (line   49)
 * zero_J:                                Mathematical functions.
-                                                             (line   48)
+                                                             (line   49)
+* zeroTransform:                         Transforms.         (line   44)
+* zerowinding:                           Pens.               (line  164)
 * zeta:                                  Mathematical functions.
-                                                             (line   48)
+                                                             (line   49)
 * zpart:                                 Data types.         (line  191)
-* zscale3:                               three.              (line  515)
-* ZX:                                    three.              (line  541)
-* ZX <1>:                                three.              (line  541)
-* ZY:                                    three.              (line  541)
+* zscale3:                               three.              (line  528)
+* ZX:                                    three.              (line  554)
+* ZX <1>:                                three.              (line  554)
+* ZY:                                    three.              (line  554)
 
 
 
 Tag Table:
-Node: Top575
-Node: Description7476
-Node: Installation11883
-Node: UNIX binary distributions12969
-Node: MacOS X binary distributions14146
-Node: Microsoft Windows14758
-Node: Configuring15999
-Node: Search paths20514
-Node: Compiling from UNIX source21608
-Node: Editing modes24913
-Node: Git27493
-Node: Uninstall28016
-Node: Tutorial28370
-Node: Drawing in batch mode29241
-Node: Drawing in interactive mode30165
-Node: Figure size31235
-Node: Labels32922
-Node: Paths33814
-Ref: unitcircle34454
-Node: Drawing commands36447
-Node: draw38317
-Ref: arrows39583
-Node: fill45454
-Ref: gradient shading46536
-Node: clip51382
-Node: label52159
-Ref: Label52807
-Node: Bezier curves58904
-Node: Programming62874
-Ref: array iteration64655
-Node: Data types64822
-Ref: format76484
-Node: Paths and guides81156
-Ref: circle81418
-Ref: extension91770
-Node: Pens98944
-Ref: fillrule107085
-Ref: basealign108043
-Ref: transparency111833
-Ref: makepen115557
-Ref: overwrite116463
-Node: Transforms117723
-Node: Frames and pictures119820
-Ref: envelope121038
-Ref: size122155
-Ref: unitsize123222
-Ref: shipout124351
-Ref: filltype126737
-Ref: add130366
-Ref: add about131364
-Ref: tex134482
-Node: Files135393
-Ref: cd136486
-Ref: scroll141634
-Node: Variable initializers144744
-Node: Structures147625
-Node: Operators155476
-Node: Arithmetic & logical155790
-Node: Self & prefix operators158344
-Node: User-defined operators159202
-Node: Implicit scaling160139
-Node: Functions160702
-Ref: stack overflow163847
-Node: Default arguments164133
-Node: Named arguments164905
-Node: Rest arguments167559
-Node: Mathematical functions170716
-Node: Arrays175877
-Ref: sort183975
-Ref: tridiagonal187533
-Ref: solve188848
-Node: Slices193168
-Node: Casts197188
-Node: Import199602
-Node: Templated imports205246
-Node: Static207337
-Node: LaTeX usage210295
-Node: Base modules216896
-Node: plain219403
-Node: simplex220109
-Node: math220390
-Node: interpolate223323
-Node: geometry223614
-Node: trembling224310
-Node: stats224587
-Node: patterns224858
-Node: markers225101
-Node: map226999
-Node: tree227435
-Node: binarytree227619
-Node: drawtree228294
-Node: syzygy228503
-Node: feynman228785
-Node: roundedpath229071
-Node: animation229361
-Ref: animate229810
-Node: embed230986
-Node: slide231996
-Node: MetaPost232339
-Node: babel233115
-Node: labelpath233363
-Node: labelpath3234227
-Node: annotate234554
-Node: CAD235044
-Node: graph235362
-Ref: ticks242978
-Ref: pathmarkers257166
-Ref: marker257640
-Ref: markuniform258010
-Ref: errorbars259917
-Ref: automatic scaling265094
-Node: palette276916
-Ref: images277038
-Ref: image281502
-Ref: logimage282023
-Ref: penimage283133
-Ref: penfunctionimage283396
-Node: three284172
-Ref: PostScript3D316568
-Node: obj318362
-Node: graph3318623
-Ref: GaussianSurface324494
-Node: grid3325672
-Node: solids326508
-Node: tube327532
-Node: flowchart329916
-Node: contour334635
-Node: contour3341237
-Node: smoothcontour3341561
-Node: slopefield343334
-Node: ode344879
-Node: Options345148
-Ref: configuration file353586
-Ref: settings353586
-Ref: texengines354936
-Ref: convert354936
-Node: Interactive mode358492
-Ref: history360721
-Node: GUI362094
-Node: GUI installation362664
-Node: GUI usage363660
-Node: Command-Line Interface364727
-Node: Language server protocol366215
-Node: PostScript to Asymptote367696
-Node: Help368526
-Node: Debugger370256
-Node: Credits372104
-Node: Index373365
+Node: Top573
+Node: Description7656
+Node: Installation12070
+Node: UNIX binary distributions13215
+Node: MacOS X binary distributions14369
+Node: Microsoft Windows14981
+Node: Configuring16221
+Node: Search paths20736
+Node: Compiling from UNIX source21828
+Node: Editing modes25131
+Node: Git27709
+Node: Building the documentation28209
+Node: Uninstall28775
+Node: Tutorial29136
+Node: Drawing in batch mode30007
+Node: Drawing in interactive mode30914
+Node: Figure size31985
+Node: Labels33672
+Node: Paths34564
+Ref: unitcircle35204
+Node: Drawing commands37197
+Node: draw39065
+Ref: arrows40316
+Node: fill46622
+Ref: gradient shading47704
+Node: clip52579
+Node: label53356
+Ref: Label54270
+Ref: baseline58184
+Ref: envelope58920
+Node: Bezier curves60472
+Node: Programming64439
+Ref: array iteration66375
+Node: Data types66542
+Ref: format78180
+Node: Paths and guides83170
+Ref: circle83432
+Ref: extension93784
+Node: Pens100977
+Ref: fillrule109116
+Ref: basealign110074
+Ref: transparency115439
+Ref: makepen119200
+Ref: overwrite120106
+Node: Transforms121365
+Node: Frames and pictures123460
+Ref: size125074
+Ref: unitsize126141
+Ref: shipout127270
+Ref: filltype129756
+Ref: add133385
+Ref: add about134358
+Ref: tex137476
+Ref: deferred drawing138387
+Node: Deferred drawing138387
+Node: Files141678
+Ref: cd142713
+Ref: scroll147859
+Node: Variable initializers150968
+Node: Structures153842
+Node: Operators159156
+Node: Arithmetic & logical159472
+Node: Self & prefix operators162010
+Node: User-defined operators162870
+Node: Implicit scaling163883
+Node: Functions164446
+Ref: stack overflow167781
+Node: Default arguments168067
+Node: Named arguments168821
+Node: Rest arguments171471
+Node: Mathematical functions174628
+Node: Arrays181563
+Ref: sort189683
+Ref: tridiagonal193241
+Ref: solve194556
+Node: Slices198876
+Node: Casts202881
+Node: Import205295
+Node: Templated imports210937
+Node: Static212773
+Node: Autounravel215751
+Node: When fields are autounraveled217206
+Node: Where autounravel is legal218119
+Ref: Where autounravel is legal-Footnote-1218949
+Node: LaTeX usage219224
+Node: Base modules225825
+Node: plain228390
+Node: simplex229043
+Node: simplex2229251
+Node: math229549
+Node: interpolate232445
+Node: geometry232736
+Node: trembling233432
+Node: stats233709
+Node: patterns233980
+Node: markers234223
+Node: map236123
+Node: tree236543
+Node: binarytree236727
+Node: drawtree237402
+Node: syzygy237611
+Node: feynman237893
+Node: roundedpath238179
+Node: animation238469
+Ref: animate238917
+Node: embed240093
+Node: slide241103
+Node: MetaPost241446
+Node: babel242222
+Node: labelpath242470
+Node: labelpath3243334
+Node: annotate243661
+Node: CAD244151
+Node: graph244469
+Ref: ticks252085
+Ref: pathmarkers266273
+Ref: marker266747
+Ref: markuniform267113
+Ref: errorbars269020
+Ref: automatic scaling274197
+Node: palette286017
+Ref: images286139
+Ref: image290603
+Ref: logimage291124
+Ref: penimage292234
+Ref: penfunctionimage292497
+Node: three293273
+Ref: PostScript3D326302
+Node: obj328096
+Node: graph3328357
+Ref: GaussianSurface334384
+Node: grid3335562
+Node: solids336398
+Node: tube337422
+Node: flowchart339805
+Node: contour344524
+Node: contour3351005
+Node: smoothcontour3351329
+Node: slopefield353096
+Node: ode354641
+Node: Options354910
+Ref: configuration file363358
+Ref: settings363358
+Ref: texengines364706
+Ref: magick364706
+Node: Interactive mode368101
+Ref: history370330
+Node: GUI371701
+Node: GUI installation372271
+Node: GUI usage373428
+Node: Command-Line Interface374495
+Node: Language server protocol375939
+Node: PostScript to Asymptote377420
+Node: Help378249
+Node: Debugger379979
+Node: Credits381827
+Node: Index383084
 
 End Tag Table
 

Modified: trunk/Master/texmf-dist/doc/man/man1/asy.1
===================================================================
--- trunk/Master/texmf-dist/doc/man/man1/asy.1	2025-02-10 15:30:00 UTC (rev 73846)
+++ trunk/Master/texmf-dist/doc/man/man1/asy.1	2025-02-10 16:49:00 UTC (rev 73847)
@@ -109,7 +109,7 @@
 -convertOptions str    []
 .TP
 .B \-d,\-debug            
-Enable debugging messages [false].
+Enable debugging messages and traceback false.
 .TP
 .B \-devicepixelratio n  
 Ratio of physical to logical pixels [1].
@@ -374,7 +374,7 @@
 Run asy under the Windows Subsystem for Linux [false].
 .TP
 .B \-xasy                
-Interactive mode for xasy [false].
+Interactive mode for xasy false.
 .TP
 .B \-zoomPinchCap limit  
 WebGL maximum zoom pinch [100].

Modified: trunk/Master/texmf-dist/doc/man/man1/asy.man1.pdf
===================================================================
(Binary files differ)

Modified: trunk/Master/texmf-dist/doc/man/man1/xasy.man1.pdf
===================================================================
(Binary files differ)

Modified: trunk/Master/tlpkg/asymptote64/asy.exe
===================================================================
(Binary files differ)

Modified: trunk/Master/tlpkg/bin/tl-update-asy
===================================================================
--- trunk/Master/tlpkg/bin/tl-update-asy	2025-02-10 15:30:00 UTC (rev 73846)
+++ trunk/Master/tlpkg/bin/tl-update-asy	2025-02-10 16:49:00 UTC (rev 73847)
@@ -116,7 +116,7 @@
     $xist/asymptote/ $xist/tex/*/asymptote"
 
   svn status $ci | sed -n 's/^\?//p'
-  svn add `!!`
+b  svn add `!!`
 
   cd /tmp/ainst
   xmf=/home/texlive/karl/Master/texmf-dist



More information about the tex-live-commits mailing list.